LMMS
Loading...
Searching...
No Matches
juce_sse_SIMDNativeOps.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28namespace dsp
29{
30
31#ifndef DOXYGEN
32
33JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wignored-attributes")
34
35#ifdef _MSC_VER
36 #define DECLARE_SSE_SIMD_CONST(type, name) \
37 static __declspec(align(16)) const type name [16 / sizeof (type)]
38
39 #define DEFINE_SSE_SIMD_CONST(type, class_type, name) \
40 __declspec(align(16)) const type SIMDNativeOps<class_type>:: name [16 / sizeof (type)]
41
42#else
43 #define DECLARE_SSE_SIMD_CONST(type, name) \
44 static const type name [16 / sizeof (type)] __attribute__((aligned(16)))
45
46 #define DEFINE_SSE_SIMD_CONST(type, class_type, name) \
47 const type SIMDNativeOps<class_type>:: name [16 / sizeof (type)] __attribute__((aligned(16)))
48
49#endif
50
51template <typename type>
52struct SIMDNativeOps;
53
54//==============================================================================
59template <>
60struct SIMDNativeOps<float>
61{
62 //==============================================================================
63 using vSIMDType = __m128;
64
65 //==============================================================================
69
70 //==============================================================================
71 static forcedinline __m128 JUCE_VECTOR_CALLTYPE expand (float s) noexcept { return _mm_load1_ps (&s); }
72 static forcedinline __m128 JUCE_VECTOR_CALLTYPE load (const float* a) noexcept { return _mm_load_ps (a); }
73 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128 value, float* dest) noexcept { _mm_store_ps (dest, value); }
74 static forcedinline __m128 JUCE_VECTOR_CALLTYPE add (__m128 a, __m128 b) noexcept { return _mm_add_ps (a, b); }
75 static forcedinline __m128 JUCE_VECTOR_CALLTYPE sub (__m128 a, __m128 b) noexcept { return _mm_sub_ps (a, b); }
76 static forcedinline __m128 JUCE_VECTOR_CALLTYPE mul (__m128 a, __m128 b) noexcept { return _mm_mul_ps (a, b); }
77 static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_and (__m128 a, __m128 b) noexcept { return _mm_and_ps (a, b); }
78 static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_or (__m128 a, __m128 b) noexcept { return _mm_or_ps (a, b); }
79 static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_xor (__m128 a, __m128 b) noexcept { return _mm_xor_ps (a, b); }
80 static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_notand (__m128 a, __m128 b) noexcept { return _mm_andnot_ps (a, b); }
81 static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_not (__m128 a) noexcept { return bit_notand (a, _mm_loadu_ps ((float*) kAllBitsSet)); }
82 static forcedinline __m128 JUCE_VECTOR_CALLTYPE min (__m128 a, __m128 b) noexcept { return _mm_min_ps (a, b); }
83 static forcedinline __m128 JUCE_VECTOR_CALLTYPE max (__m128 a, __m128 b) noexcept { return _mm_max_ps (a, b); }
84 static forcedinline __m128 JUCE_VECTOR_CALLTYPE equal (__m128 a, __m128 b) noexcept { return _mm_cmpeq_ps (a, b); }
85 static forcedinline __m128 JUCE_VECTOR_CALLTYPE notEqual (__m128 a, __m128 b) noexcept { return _mm_cmpneq_ps (a, b); }
86 static forcedinline __m128 JUCE_VECTOR_CALLTYPE greaterThan (__m128 a, __m128 b) noexcept { return _mm_cmpgt_ps (a, b); }
87 static forcedinline __m128 JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128 a, __m128 b) noexcept { return _mm_cmpge_ps (a, b); }
88 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128 a, __m128 b ) noexcept { return (_mm_movemask_ps (equal (a, b)) == 0xf); }
89 static forcedinline __m128 JUCE_VECTOR_CALLTYPE multiplyAdd (__m128 a, __m128 b, __m128 c) noexcept { return _mm_add_ps (a, _mm_mul_ps (b, c)); }
90 static forcedinline __m128 JUCE_VECTOR_CALLTYPE dupeven (__m128 a) noexcept { return _mm_shuffle_ps (a, a, _MM_SHUFFLE (2, 2, 0, 0)); }
91 static forcedinline __m128 JUCE_VECTOR_CALLTYPE dupodd (__m128 a) noexcept { return _mm_shuffle_ps (a, a, _MM_SHUFFLE (3, 3, 1, 1)); }
92 static forcedinline __m128 JUCE_VECTOR_CALLTYPE swapevenodd (__m128 a) noexcept { return _mm_shuffle_ps (a, a, _MM_SHUFFLE (2, 3, 0, 1)); }
93 static forcedinline __m128 JUCE_VECTOR_CALLTYPE oddevensum (__m128 a) noexcept { return _mm_add_ps (_mm_shuffle_ps (a, a, _MM_SHUFFLE (1, 0, 3, 2)), a); }
94 static forcedinline float JUCE_VECTOR_CALLTYPE get (__m128 v, size_t i) noexcept { return SIMDFallbackOps<float, __m128>::get (v, i); }
95 static forcedinline __m128 JUCE_VECTOR_CALLTYPE set (__m128 v, size_t i, float s) noexcept { return SIMDFallbackOps<float, __m128>::set (v, i, s); }
96 static forcedinline __m128 JUCE_VECTOR_CALLTYPE truncate (__m128 a) noexcept { return _mm_cvtepi32_ps (_mm_cvttps_epi32 (a)); }
97
98 //==============================================================================
99 static forcedinline __m128 JUCE_VECTOR_CALLTYPE cmplxmul (__m128 a, __m128 b) noexcept
100 {
101 __m128 rr_ir = mul (a, dupeven (b));
102 __m128 ii_ri = mul (swapevenodd (a), dupodd (b));
103 return add (rr_ir, bit_xor (ii_ri, _mm_loadu_ps ((float*) kEvenHighBit)));
104 }
105
106 static forcedinline float JUCE_VECTOR_CALLTYPE sum (__m128 a) noexcept
107 {
108 #if defined(__SSE4__)
109 const auto retval = _mm_dp_ps (a, _mm_loadu_ps (kOne), 0xff);
110 #elif defined(__SSE3__)
111 const auto shuffled = _mm_movehdup_ps (a);
112 const auto sums = _mm_add_ps (a, shuffled);
113 const auto retval = _mm_add_ss (sums, _mm_movehl_ps (shuffled, sums));
114 #else
115 auto retval = _mm_add_ps (_mm_shuffle_ps (a, a, 0x4e), a);
116 retval = _mm_add_ps (retval, _mm_shuffle_ps (retval, retval, 0xb1));
117 #endif
118 return _mm_cvtss_f32 (retval);
119 }
120};
121
122//==============================================================================
127template <>
128struct SIMDNativeOps<double>
129{
130 //==============================================================================
131 using vSIMDType = __m128d;
132
133 //==============================================================================
134 DECLARE_SSE_SIMD_CONST (int64_t, kAllBitsSet);
135 DECLARE_SSE_SIMD_CONST (int64_t, kEvenHighBit);
137
138 //==============================================================================
139 static forcedinline __m128d JUCE_VECTOR_CALLTYPE vconst (const double* a) noexcept { return load (a); }
140 static forcedinline __m128d JUCE_VECTOR_CALLTYPE vconst (const int64_t* a) noexcept { return _mm_castsi128_pd (_mm_load_si128 (reinterpret_cast<const __m128i*> (a))); }
141 static forcedinline __m128d JUCE_VECTOR_CALLTYPE expand (double s) noexcept { return _mm_load1_pd (&s); }
142 static forcedinline __m128d JUCE_VECTOR_CALLTYPE load (const double* a) noexcept { return _mm_load_pd (a); }
143 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128d value, double* dest) noexcept { _mm_store_pd (dest, value); }
144 static forcedinline __m128d JUCE_VECTOR_CALLTYPE add (__m128d a, __m128d b) noexcept { return _mm_add_pd (a, b); }
145 static forcedinline __m128d JUCE_VECTOR_CALLTYPE sub (__m128d a, __m128d b) noexcept { return _mm_sub_pd (a, b); }
146 static forcedinline __m128d JUCE_VECTOR_CALLTYPE mul (__m128d a, __m128d b) noexcept { return _mm_mul_pd (a, b); }
147 static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_and (__m128d a, __m128d b) noexcept { return _mm_and_pd (a, b); }
148 static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_or (__m128d a, __m128d b) noexcept { return _mm_or_pd (a, b); }
149 static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_xor (__m128d a, __m128d b) noexcept { return _mm_xor_pd (a, b); }
150 static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_notand (__m128d a, __m128d b) noexcept { return _mm_andnot_pd (a, b); }
151 static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_not (__m128d a) noexcept { return bit_notand (a, vconst (kAllBitsSet)); }
152 static forcedinline __m128d JUCE_VECTOR_CALLTYPE min (__m128d a, __m128d b) noexcept { return _mm_min_pd (a, b); }
153 static forcedinline __m128d JUCE_VECTOR_CALLTYPE max (__m128d a, __m128d b) noexcept { return _mm_max_pd (a, b); }
154 static forcedinline __m128d JUCE_VECTOR_CALLTYPE equal (__m128d a, __m128d b) noexcept { return _mm_cmpeq_pd (a, b); }
155 static forcedinline __m128d JUCE_VECTOR_CALLTYPE notEqual (__m128d a, __m128d b) noexcept { return _mm_cmpneq_pd (a, b); }
156 static forcedinline __m128d JUCE_VECTOR_CALLTYPE greaterThan (__m128d a, __m128d b) noexcept { return _mm_cmpgt_pd (a, b); }
157 static forcedinline __m128d JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128d a, __m128d b) noexcept { return _mm_cmpge_pd (a, b); }
158 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128d a, __m128d b ) noexcept { return (_mm_movemask_pd (equal (a, b)) == 0x3); }
159 static forcedinline __m128d JUCE_VECTOR_CALLTYPE multiplyAdd (__m128d a, __m128d b, __m128d c) noexcept { return _mm_add_pd (a, _mm_mul_pd (b, c)); }
160 static forcedinline __m128d JUCE_VECTOR_CALLTYPE dupeven (__m128d a) noexcept { return _mm_shuffle_pd (a, a, _MM_SHUFFLE2 (0, 0)); }
161 static forcedinline __m128d JUCE_VECTOR_CALLTYPE dupodd (__m128d a) noexcept { return _mm_shuffle_pd (a, a, _MM_SHUFFLE2 (1, 1)); }
162 static forcedinline __m128d JUCE_VECTOR_CALLTYPE swapevenodd (__m128d a) noexcept { return _mm_shuffle_pd (a, a, _MM_SHUFFLE2 (0, 1)); }
163 static forcedinline __m128d JUCE_VECTOR_CALLTYPE oddevensum (__m128d a) noexcept { return a; }
164 static forcedinline double JUCE_VECTOR_CALLTYPE get (__m128d v, size_t i) noexcept { return SIMDFallbackOps<double, __m128d>::get (v, i); }
165 static forcedinline __m128d JUCE_VECTOR_CALLTYPE set (__m128d v, size_t i, double s) noexcept { return SIMDFallbackOps<double, __m128d>::set (v, i, s); }
166 static forcedinline __m128d JUCE_VECTOR_CALLTYPE truncate (__m128d a) noexcept { return _mm_cvtepi32_pd (_mm_cvttpd_epi32 (a)); }
167
168 //==============================================================================
169 static forcedinline __m128d JUCE_VECTOR_CALLTYPE cmplxmul (__m128d a, __m128d b) noexcept
170 {
171 __m128d rr_ir = mul (a, dupeven (b));
172 __m128d ii_ri = mul (swapevenodd (a), dupodd (b));
173 return add (rr_ir, bit_xor (ii_ri, vconst (kEvenHighBit)));
174 }
175
176 static forcedinline double JUCE_VECTOR_CALLTYPE sum (__m128d a) noexcept
177 {
178 #if defined(__SSE4__)
179 __m128d retval = _mm_dp_pd (a, vconst (kOne), 0xff);
180 #elif defined(__SSE3__)
181 __m128d retval = _mm_hadd_pd (a, a);
182 #else
183 __m128d retval = _mm_add_pd (_mm_shuffle_pd (a, a, 0x01), a);
184 #endif
185 return _mm_cvtsd_f64 (retval);
186 }
187};
188
189//==============================================================================
194template <>
195struct SIMDNativeOps<int8_t>
196{
197 //==============================================================================
198 using vSIMDType = __m128i;
199
200 //==============================================================================
202
203 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const int8_t* a) noexcept { return load (a); }
204 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const int8_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
205 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, int8_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
206 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (int8_t s) noexcept { return _mm_set1_epi8 (s); }
207 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi8 (a, b); }
208 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi8 (a, b); }
209 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
210 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
211 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
212 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
213 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
214 #if defined(__SSE4__)
215 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { return _mm_min_epi8 (a, b); }
216 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { return _mm_max_epi8 (a, b); }
217 #else
218 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { __m128i lt = greaterThan (b, a); return bit_or (bit_and (lt, a), bit_andnot (lt, b)); }
219 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { __m128i gt = greaterThan (a, b); return bit_or (bit_and (gt, a), bit_andnot (gt, b)); }
220 #endif
221 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi8 (a, b); }
222 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi8 (a, b); }
223 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
224 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
225 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
226 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
227 static forcedinline int8_t JUCE_VECTOR_CALLTYPE get (__m128i v, size_t i) noexcept { return SIMDFallbackOps<int8_t, __m128i>::get (v, i); }
228 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, int8_t s) noexcept { return SIMDFallbackOps<int8_t, __m128i>::set (v, i, s); }
229 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
230
231 //==============================================================================
232 static forcedinline int8_t JUCE_VECTOR_CALLTYPE sum (__m128i a) noexcept
233 {
234 #ifdef __SSSE3__
235 __m128i lo = _mm_unpacklo_epi8 (a, _mm_setzero_si128());
236 __m128i hi = _mm_unpackhi_epi8 (a, _mm_setzero_si128());
237
238 for (int i = 0; i < 3; ++i)
239 {
240 lo = _mm_hadd_epi16 (lo, lo);
241 hi = _mm_hadd_epi16 (hi, hi);
242 }
243
244 return static_cast<int8_t> ((_mm_cvtsi128_si32 (lo) & 0xff) + (_mm_cvtsi128_si32 (hi) & 0xff));
245 #else
247 #endif
248 }
249
250 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b)
251 {
252 // unpack and multiply
253 __m128i even = _mm_mullo_epi16 (a, b);
254 __m128i odd = _mm_mullo_epi16 (_mm_srli_epi16 (a, 8), _mm_srli_epi16 (b, 8));
255
256 return _mm_or_si128 (_mm_slli_epi16 (odd, 8),
257 _mm_srli_epi16 (_mm_slli_epi16 (even, 8), 8));
258 }
259};
260
261//==============================================================================
266template <>
267struct SIMDNativeOps<uint8_t>
268{
269 //==============================================================================
270 using vSIMDType = __m128i;
271
272 //==============================================================================
275
276 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const uint8_t* a) noexcept { return load (a); }
277 static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign (__m128i a) noexcept { return _mm_xor_si128 (a, vconst (kHighBit)); }
278 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const uint8_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
279 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, uint8_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
280 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (uint8_t s) noexcept { return _mm_set1_epi8 ((int8_t) s); }
281 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi8 (a, b); }
282 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi8 (a, b); }
283 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
284 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
285 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
286 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
287 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
288 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { return _mm_min_epu8 (a, b); }
289 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { return _mm_max_epu8 (a, b); }
290 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi8 (a, b); }
291 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi8 (ssign (a), ssign (b)); }
292 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
293 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
294 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
295 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
297 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, uint8_t s) noexcept { return SIMDFallbackOps<uint8_t, __m128i>::set (v, i, s); }
298 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
299
300 //==============================================================================
302 {
303 #ifdef __SSSE3__
304 __m128i lo = _mm_unpacklo_epi8 (a, _mm_setzero_si128());
305 __m128i hi = _mm_unpackhi_epi8 (a, _mm_setzero_si128());
306
307 for (int i = 0; i < 3; ++i)
308 {
309 lo = _mm_hadd_epi16 (lo, lo);
310 hi = _mm_hadd_epi16 (hi, hi);
311 }
312
313 return static_cast<uint8_t> ((static_cast<uint32_t> (_mm_cvtsi128_si32 (lo)) & 0xffu)
314 + (static_cast<uint32_t> (_mm_cvtsi128_si32 (hi)) & 0xffu));
315 #else
317 #endif
318 }
319
320 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b)
321 {
322 // unpack and multiply
323 __m128i even = _mm_mullo_epi16 (a, b);
324 __m128i odd = _mm_mullo_epi16 (_mm_srli_epi16 (a, 8), _mm_srli_epi16 (b, 8));
325
326 return _mm_or_si128 (_mm_slli_epi16 (odd, 8),
327 _mm_srli_epi16 (_mm_slli_epi16 (even, 8), 8));
328 }
329};
330
331//==============================================================================
336template <>
337struct SIMDNativeOps<int16_t>
338{
339 //==============================================================================
340 using vSIMDType = __m128i;
341
342 //==============================================================================
344
345 //==============================================================================
346 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const int16_t* a) noexcept { return load (a); }
347 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const int16_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
348 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, int16_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
349 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (int16_t s) noexcept { return _mm_set1_epi16 (s); }
350 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi16 (a, b); }
351 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi16 (a, b); }
352 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept { return _mm_mullo_epi16 (a, b); }
353 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
354 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
355 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
356 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
357 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
358 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { return _mm_min_epi16 (a, b); }
359 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { return _mm_max_epi16 (a, b); }
360 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi16 (a, b); }
361 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi16 (a, b); }
362 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
363 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
364 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
365 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
367 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, int16_t s) noexcept { return SIMDFallbackOps<int16_t, __m128i>::set (v, i, s); }
368 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
369
370 //==============================================================================
372 {
373 #ifdef __SSSE3__
374 __m128i tmp = _mm_hadd_epi16 (a, a);
375 tmp = _mm_hadd_epi16 (tmp, tmp);
376 tmp = _mm_hadd_epi16 (tmp, tmp);
377
378 return static_cast<int16_t> (_mm_cvtsi128_si32 (tmp) & 0xffff);
379 #else
381 #endif
382 }
383};
384
385//==============================================================================
390template <>
391struct SIMDNativeOps<uint16_t>
392{
393 //==============================================================================
394 using vSIMDType = __m128i;
395
396 //==============================================================================
399
400 //==============================================================================
401 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const uint16_t* a) noexcept { return load (a); }
402 static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign (__m128i a) noexcept { return _mm_xor_si128 (a, vconst (kHighBit)); }
403 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const uint16_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
404 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, uint16_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
405 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (uint16_t s) noexcept { return _mm_set1_epi16 ((int16_t) s); }
406 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi16 (a, b); }
407 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi16 (a, b); }
408 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept { return _mm_mullo_epi16 (a, b); }
409 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
410 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
411 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
412 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
413 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
414 #if defined(__SSE4__)
415 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { return _mm_min_epu16 (a, b); }
416 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { return _mm_max_epu16 (a, b); }
417 #else
418 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { __m128i lt = greaterThan (b, a); return bit_or (bit_and (lt, a), bit_andnot (lt, b)); }
419 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { __m128i gt = greaterThan (a, b); return bit_or (bit_and (gt, a), bit_andnot (gt, b)); }
420 #endif
421 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi16 (a, b); }
422 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi16 (ssign (a), ssign (b)); }
423 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
424 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
425 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
426 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
428 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, uint16_t s) noexcept { return SIMDFallbackOps<uint16_t, __m128i>::set (v, i, s); }
429 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
430
431 //==============================================================================
433 {
434 #ifdef __SSSE3__
435 __m128i tmp = _mm_hadd_epi16 (a, a);
436 tmp = _mm_hadd_epi16 (tmp, tmp);
437 tmp = _mm_hadd_epi16 (tmp, tmp);
438
439 return static_cast<uint16_t> (static_cast<uint32_t> (_mm_cvtsi128_si32 (tmp)) & 0xffffu);
440 #else
442 #endif
443 }
444};
445
446//==============================================================================
451template <>
452struct SIMDNativeOps<int32_t>
453{
454 //==============================================================================
455 using vSIMDType = __m128i;
456
457 //==============================================================================
459
460 //==============================================================================
461 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const int32_t* a) noexcept { return load (a); }
462 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const int32_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
463 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, int32_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
464 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (int32_t s) noexcept { return _mm_set1_epi32 (s); }
465 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi32 (a, b); }
466 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi32 (a, b); }
467 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
468 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
469 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
470 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
471 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
472 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi32 (a, b); }
473 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi32 (a, b); }
474 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
475 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
476 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
477 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
479 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, int32_t s) noexcept { return SIMDFallbackOps<int32_t, __m128i>::set (v, i, s); }
480 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
481
482 //==============================================================================
484 {
485 #ifdef __SSSE3__
486 __m128i tmp = _mm_hadd_epi32 (a, a);
487 return _mm_cvtsi128_si32 (_mm_hadd_epi32 (tmp, tmp));
488 #else
490 #endif
491 }
492
493 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept
494 {
495 #if defined(__SSE4_1__)
496 return _mm_mullo_epi32 (a, b);
497 #else
498 __m128i even = _mm_mul_epu32 (a,b);
499 __m128i odd = _mm_mul_epu32 (_mm_srli_si128 (a,4), _mm_srli_si128 (b,4));
500 return _mm_unpacklo_epi32 (_mm_shuffle_epi32(even, _MM_SHUFFLE (0,0,2,0)),
501 _mm_shuffle_epi32(odd, _MM_SHUFFLE (0,0,2,0)));
502 #endif
503 }
504
505 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept
506 {
507 #if defined(__SSE4_1__)
508 return _mm_min_epi32 (a, b);
509 #else
510 __m128i lt = greaterThan (b, a);
511 return bit_or (bit_and (lt, a), bit_andnot (lt, b));
512 #endif
513 }
514
515 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept
516 {
517 #if defined(__SSE4_1__)
518 return _mm_max_epi32 (a, b);
519 #else
520 __m128i gt = greaterThan (a, b);
521 return bit_or (bit_and (gt, a), bit_andnot (gt, b));
522 #endif
523 }
524};
525
526//==============================================================================
531template <>
532struct SIMDNativeOps<uint32_t>
533{
534 //==============================================================================
535 using vSIMDType = __m128i;
536
537 //==============================================================================
540
541 //==============================================================================
542 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const uint32_t* a) noexcept { return load (a); }
543 static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign (__m128i a) noexcept { return _mm_xor_si128 (a, vconst (kHighBit)); }
544 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const uint32_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
545 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, uint32_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
546 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (uint32_t s) noexcept { return _mm_set1_epi32 ((int32_t) s); }
547 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi32 (a, b); }
548 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi32 (a, b); }
549 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
550 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
551 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
552 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
553 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
554 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept { return _mm_cmpeq_epi32 (a, b); }
555 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept { return _mm_cmpgt_epi32 (ssign (a), ssign (b)); }
556 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
557 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
558 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
559 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
561 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, uint32_t s) noexcept { return SIMDFallbackOps<uint32_t, __m128i>::set (v, i, s); }
562 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
563
564 //==============================================================================
566 {
567 #ifdef __SSSE3__
568 __m128i tmp = _mm_hadd_epi32 (a, a);
569 return static_cast<uint32_t> (_mm_cvtsi128_si32 (_mm_hadd_epi32 (tmp, tmp)));
570 #else
572 #endif
573 }
574
575 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept
576 {
577 #if defined(__SSE4_1__)
578 return _mm_mullo_epi32 (a, b);
579 #else
580 __m128i even = _mm_mul_epu32 (a,b);
581 __m128i odd = _mm_mul_epu32 (_mm_srli_si128 (a,4), _mm_srli_si128 (b,4));
582 return _mm_unpacklo_epi32 (_mm_shuffle_epi32(even, _MM_SHUFFLE (0,0,2,0)),
583 _mm_shuffle_epi32(odd, _MM_SHUFFLE (0,0,2,0)));
584 #endif
585 }
586
587 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept
588 {
589 #if defined(__SSE4_1__)
590 return _mm_min_epi32 (a, b);
591 #else
592 __m128i lt = greaterThan (b, a);
593 return bit_or (bit_and (lt, a), bit_andnot (lt, b));
594 #endif
595 }
596
597 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept
598 {
599 #if defined(__SSE4_1__)
600 return _mm_max_epi32 (a, b);
601 #else
602 __m128i gt = greaterThan (a, b);
603 return bit_or (bit_and (gt, a), bit_andnot (gt, b));
604 #endif
605 }
606};
607
608//==============================================================================
613template <>
614struct SIMDNativeOps<int64_t>
615{
616 //==============================================================================
617 using vSIMDType = __m128i;
618
619 //==============================================================================
620 DECLARE_SSE_SIMD_CONST (int64_t, kAllBitsSet);
621
622 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const int64_t* a) noexcept { return load (a); }
623 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (int64_t s) noexcept { return _mm_set1_epi64x (s); }
624 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const int64_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
625 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, int64_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
626 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi64 (a, b); }
627 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi64 (a, b); }
628 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
629 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
630 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
631 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
632 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
633 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { __m128i lt = greaterThan (b, a); return bit_or (bit_and (lt, a), bit_andnot (lt, b)); }
634 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { __m128i gt = greaterThan (a, b); return bit_or (bit_and (gt, a), bit_andnot (gt, b)); }
635 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
636 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
637 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
638 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
639 static forcedinline int64_t JUCE_VECTOR_CALLTYPE get (__m128i v, size_t i) noexcept { return SIMDFallbackOps<int64_t, __m128i>::get (v, i); }
640 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, int64_t s) noexcept { return SIMDFallbackOps<int64_t, __m128i>::set (v, i, s); }
641 static forcedinline int64_t JUCE_VECTOR_CALLTYPE sum (__m128i a) noexcept { return SIMDFallbackOps<int64_t, __m128i>::sum (a); }
642 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept { return SIMDFallbackOps<int64_t, __m128i>::mul (a, b); }
643 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
644
645 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept
646 {
647 #if defined(__SSE4_1__)
648 return _mm_cmpeq_epi64 (a, b);
649 #else
650 __m128i bitmask = _mm_cmpeq_epi32 (a, b);
651 bitmask = _mm_and_si128 (bitmask, _mm_shuffle_epi32 (bitmask, _MM_SHUFFLE (2, 3, 0, 1)));
652 return _mm_shuffle_epi32 (bitmask, _MM_SHUFFLE (2, 2, 0, 0));
653 #endif
654 }
655
656 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept
657 {
658 #if defined(__SSE4_2__)
659 return _mm_cmpgt_epi64 (a, b);
660 #else
662 #endif
663 }
664};
665
666//==============================================================================
671template <>
672struct SIMDNativeOps<uint64_t>
673{
674 //==============================================================================
675 using vSIMDType = __m128i;
676
677 //==============================================================================
678 DECLARE_SSE_SIMD_CONST (uint64_t, kAllBitsSet);
679 DECLARE_SSE_SIMD_CONST (uint64_t, kHighBit);
680
681 static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst (const uint64_t* a) noexcept { return load (a); }
682 static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand (uint64_t s) noexcept { return _mm_set1_epi64x ((int64_t) s); }
683 static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign (__m128i a) noexcept { return _mm_xor_si128 (a, vconst (kHighBit)); }
684 static forcedinline __m128i JUCE_VECTOR_CALLTYPE load (const uint64_t* a) noexcept { return _mm_load_si128 (reinterpret_cast<const __m128i*> (a)); }
685 static forcedinline void JUCE_VECTOR_CALLTYPE store (__m128i v, uint64_t* p) noexcept { _mm_store_si128 (reinterpret_cast<__m128i*> (p), v); }
686 static forcedinline __m128i JUCE_VECTOR_CALLTYPE add (__m128i a, __m128i b) noexcept { return _mm_add_epi64 (a, b); }
687 static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub (__m128i a, __m128i b) noexcept { return _mm_sub_epi64 (a, b); }
688 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and (__m128i a, __m128i b) noexcept { return _mm_and_si128 (a, b); }
689 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or (__m128i a, __m128i b) noexcept { return _mm_or_si128 (a, b); }
690 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor (__m128i a, __m128i b) noexcept { return _mm_xor_si128 (a, b); }
691 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot (__m128i a, __m128i b) noexcept { return _mm_andnot_si128 (a, b); }
692 static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not (__m128i a) noexcept { return _mm_andnot_si128 (a, vconst (kAllBitsSet)); }
693 static forcedinline __m128i JUCE_VECTOR_CALLTYPE min (__m128i a, __m128i b) noexcept { __m128i lt = greaterThan (b, a); return bit_or (bit_and (lt, a), bit_andnot (lt, b)); }
694 static forcedinline __m128i JUCE_VECTOR_CALLTYPE max (__m128i a, __m128i b) noexcept { __m128i gt = greaterThan (a, b); return bit_or (bit_and (gt, a), bit_andnot (gt, b)); }
695 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (__m128i a, __m128i b) noexcept { return bit_or (greaterThan (a, b), equal (a,b)); }
696 static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd (__m128i a, __m128i b, __m128i c) noexcept { return add (a, mul (b, c)); }
697 static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual (__m128i a, __m128i b) noexcept { return bit_not (equal (a, b)); }
698 static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual (__m128i a, __m128i b) noexcept { return (_mm_movemask_epi8 (equal (a, b)) == 0xffff); }
699 static forcedinline uint64_t JUCE_VECTOR_CALLTYPE get (__m128i v, size_t i) noexcept { return SIMDFallbackOps<uint64_t, __m128i>::get (v, i); }
700 static forcedinline __m128i JUCE_VECTOR_CALLTYPE set (__m128i v, size_t i, uint64_t s) noexcept { return SIMDFallbackOps<uint64_t, __m128i>::set (v, i, s); }
701 static forcedinline uint64_t JUCE_VECTOR_CALLTYPE sum (__m128i a) noexcept { return SIMDFallbackOps<uint64_t, __m128i>::sum (a); }
702 static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul (__m128i a, __m128i b) noexcept { return SIMDFallbackOps<uint64_t, __m128i>::mul (a, b); }
703 static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate (__m128i a) noexcept { return a; }
704
705 static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal (__m128i a, __m128i b) noexcept
706 {
707 #if defined(__SSE4_1__)
708 return _mm_cmpeq_epi64 (a, b);
709 #else
710 __m128i bitmask = _mm_cmpeq_epi32 (a, b);
711 bitmask = _mm_and_si128 (bitmask, _mm_shuffle_epi32 (bitmask, _MM_SHUFFLE (2, 3, 0, 1)));
712 return _mm_shuffle_epi32 (bitmask, _MM_SHUFFLE (2, 2, 0, 0));
713 #endif
714 }
715
716 static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan (__m128i a, __m128i b) noexcept
717 {
718 #if defined(__SSE4_2__)
719 return _mm_cmpgt_epi64 (ssign (a), ssign (b));
720 #else
722 #endif
723 }
724};
725
726#endif
727
729
730} // namespace dsp
731} // namespace juce
uint8_t a
Definition Spc_Cpu.h:141
unsigned v[N_MAX]
Definition inflate.c:1584
register unsigned i
Definition inflate.c:1575
int retval
Definition inflate.c:947
unsigned s
Definition inflate.c:1555
static PuglViewHint int value
Definition pugl.h:1708
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define forcedinline
#define JUCE_VECTOR_CALLTYPE
Definition juce_dsp.h:100
unsigned short uint16_t
Definition mid.cpp:99
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
short int16_t
Definition mid.cpp:96
unsigned char uint8_t
Definition mid.cpp:98
signed char int8_t
Definition mid.cpp:95
Definition juce_AudioBlock.h:29
Definition carla_juce.cpp:31
#define min(x, y)
Definition os.h:74
#define max(x, y)
Definition os.h:78
static forcedinline vSIMDType set(vSIMDType v, size_t i, ScalarType s) noexcept
Definition juce_fallback_SIMDNativeOps.h:93
static forcedinline vSIMDType greaterThan(vSIMDType a, vSIMDType b) noexcept
Definition juce_fallback_SIMDNativeOps.h:84
static forcedinline ScalarType sum(vSIMDType av) noexcept
Definition juce_fallback_SIMDNativeOps.h:111
static forcedinline vSIMDType mul(vSIMDType a, vSIMDType b) noexcept
Definition juce_fallback_SIMDNativeOps.h:74
static forcedinline ScalarType get(vSIMDType v, size_t i) noexcept
Definition juce_fallback_SIMDNativeOps.h:87
static forcedinline __m128d JUCE_VECTOR_CALLTYPE min(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:152
static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_or(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:148
static forcedinline __m256d JUCE_VECTOR_CALLTYPE bit_notand(__m256d a, __m256d b) noexcept
Definition juce_avx_SIMDNativeOps.h:161
static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_notand(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:150
static forcedinline __m128d JUCE_VECTOR_CALLTYPE set(__m128d v, size_t i, double s) noexcept
Definition juce_sse_SIMDNativeOps.h:165
static forcedinline __m256d JUCE_VECTOR_CALLTYPE vconst(const double *a) noexcept
Definition juce_avx_SIMDNativeOps.h:150
DECLARE_SSE_SIMD_CONST(int64_t, kAllBitsSet)
static forcedinline __m256d JUCE_VECTOR_CALLTYPE load(const double *a) noexcept
Definition juce_avx_SIMDNativeOps.h:153
static forcedinline __m256d JUCE_VECTOR_CALLTYPE dupodd(__m256d a) noexcept
Definition juce_avx_SIMDNativeOps.h:172
static forcedinline __m128d JUCE_VECTOR_CALLTYPE notEqual(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:155
static forcedinline __m128d JUCE_VECTOR_CALLTYPE truncate(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:166
static forcedinline __m256d JUCE_VECTOR_CALLTYPE bit_xor(__m256d a, __m256d b) noexcept
Definition juce_avx_SIMDNativeOps.h:160
static forcedinline __m128d JUCE_VECTOR_CALLTYPE multiplyAdd(__m128d a, __m128d b, __m128d c) noexcept
Definition juce_sse_SIMDNativeOps.h:159
static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_not(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:151
__m256d vSIMDType
Definition juce_avx_SIMDNativeOps.h:142
static forcedinline __m128d JUCE_VECTOR_CALLTYPE add(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:144
static forcedinline __m128d JUCE_VECTOR_CALLTYPE dupodd(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:161
static forcedinline __m128d JUCE_VECTOR_CALLTYPE cmplxmul(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:169
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:158
static forcedinline __m256d JUCE_VECTOR_CALLTYPE dupeven(__m256d a) noexcept
Definition juce_avx_SIMDNativeOps.h:171
static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_and(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:147
static forcedinline __m128d JUCE_VECTOR_CALLTYPE oddevensum(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:163
DECLARE_SSE_SIMD_CONST(int64_t, kEvenHighBit)
static forcedinline __m128d JUCE_VECTOR_CALLTYPE vconst(const int64_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:140
static forcedinline double JUCE_VECTOR_CALLTYPE get(__m128d v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:164
static forcedinline __m256d JUCE_VECTOR_CALLTYPE add(__m256d a, __m256d b) noexcept
Definition juce_avx_SIMDNativeOps.h:155
static forcedinline __m128d JUCE_VECTOR_CALLTYPE mul(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:146
static forcedinline __m128d JUCE_VECTOR_CALLTYPE sub(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:145
static forcedinline __m128d JUCE_VECTOR_CALLTYPE dupeven(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:160
static forcedinline __m128d JUCE_VECTOR_CALLTYPE max(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:153
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128d value, double *dest) noexcept
Definition juce_sse_SIMDNativeOps.h:143
static forcedinline __m256d JUCE_VECTOR_CALLTYPE swapevenodd(__m256d a) noexcept
Definition juce_avx_SIMDNativeOps.h:173
static forcedinline __m256d JUCE_VECTOR_CALLTYPE mul(__m256d a, __m256d b) noexcept
Definition juce_avx_SIMDNativeOps.h:157
static forcedinline __m128d JUCE_VECTOR_CALLTYPE greaterThan(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:156
static forcedinline __m128d JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:157
static forcedinline __m128d JUCE_VECTOR_CALLTYPE expand(double s) noexcept
Definition juce_sse_SIMDNativeOps.h:141
static forcedinline __m256d JUCE_VECTOR_CALLTYPE equal(__m256d a, __m256d b) noexcept
Definition juce_avx_SIMDNativeOps.h:165
static forcedinline __m128d JUCE_VECTOR_CALLTYPE equal(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:154
static forcedinline __m128d JUCE_VECTOR_CALLTYPE vconst(const double *a) noexcept
Definition juce_sse_SIMDNativeOps.h:139
static forcedinline __m128d JUCE_VECTOR_CALLTYPE load(const double *a) noexcept
Definition juce_sse_SIMDNativeOps.h:142
static forcedinline double JUCE_VECTOR_CALLTYPE sum(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:176
static forcedinline __m128d JUCE_VECTOR_CALLTYPE bit_xor(__m128d a, __m128d b) noexcept
Definition juce_sse_SIMDNativeOps.h:149
static forcedinline __m128d JUCE_VECTOR_CALLTYPE swapevenodd(__m128d a) noexcept
Definition juce_sse_SIMDNativeOps.h:162
static forcedinline __m128 JUCE_VECTOR_CALLTYPE min(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:82
static forcedinline float JUCE_VECTOR_CALLTYPE get(__m128 v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:94
static forcedinline __m128 JUCE_VECTOR_CALLTYPE load(const float *a) noexcept
Definition juce_sse_SIMDNativeOps.h:72
static forcedinline __m128 JUCE_VECTOR_CALLTYPE add(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:74
static forcedinline __m256 JUCE_VECTOR_CALLTYPE swapevenodd(__m256 a) noexcept
Definition juce_avx_SIMDNativeOps.h:92
static forcedinline __m128 JUCE_VECTOR_CALLTYPE max(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:83
static forcedinline __m256 JUCE_VECTOR_CALLTYPE equal(__m256 a, __m256 b) noexcept
Definition juce_avx_SIMDNativeOps.h:85
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:88
static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_notand(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:80
static forcedinline __m256 JUCE_VECTOR_CALLTYPE dupeven(__m256 a) noexcept
Definition juce_avx_SIMDNativeOps.h:90
static forcedinline __m128 JUCE_VECTOR_CALLTYPE cmplxmul(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:99
static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_not(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:81
static forcedinline float JUCE_VECTOR_CALLTYPE sum(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:106
__m256 vSIMDType
Definition juce_avx_SIMDNativeOps.h:62
static forcedinline __m128 JUCE_VECTOR_CALLTYPE expand(float s) noexcept
Definition juce_sse_SIMDNativeOps.h:71
static forcedinline __m128 JUCE_VECTOR_CALLTYPE notEqual(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:85
static forcedinline __m128 JUCE_VECTOR_CALLTYPE dupeven(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:90
static forcedinline __m128 JUCE_VECTOR_CALLTYPE sub(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:75
static forcedinline __m128 JUCE_VECTOR_CALLTYPE greaterThan(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:86
static forcedinline __m256 JUCE_VECTOR_CALLTYPE mul(__m256 a, __m256 b) noexcept
Definition juce_avx_SIMDNativeOps.h:77
static forcedinline __m128 JUCE_VECTOR_CALLTYPE set(__m128 v, size_t i, float s) noexcept
Definition juce_sse_SIMDNativeOps.h:95
static forcedinline __m256 JUCE_VECTOR_CALLTYPE add(__m256 a, __m256 b) noexcept
Definition juce_avx_SIMDNativeOps.h:75
static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_or(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:78
static forcedinline __m128 JUCE_VECTOR_CALLTYPE oddevensum(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:93
static forcedinline __m128 JUCE_VECTOR_CALLTYPE equal(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:84
static forcedinline __m128 JUCE_VECTOR_CALLTYPE mul(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:76
static forcedinline __m128 JUCE_VECTOR_CALLTYPE dupodd(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:91
DECLARE_SSE_SIMD_CONST(int32_t, kAllBitsSet)
static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_xor(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:79
static forcedinline __m128 JUCE_VECTOR_CALLTYPE truncate(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:96
static forcedinline __m128 JUCE_VECTOR_CALLTYPE bit_and(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:77
static forcedinline __m256 JUCE_VECTOR_CALLTYPE bit_xor(__m256 a, __m256 b) noexcept
Definition juce_avx_SIMDNativeOps.h:80
static forcedinline __m128 JUCE_VECTOR_CALLTYPE swapevenodd(__m128 a) noexcept
Definition juce_sse_SIMDNativeOps.h:92
static forcedinline __m128 JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128 a, __m128 b) noexcept
Definition juce_sse_SIMDNativeOps.h:87
static forcedinline __m128 JUCE_VECTOR_CALLTYPE multiplyAdd(__m128 a, __m128 b, __m128 c) noexcept
Definition juce_sse_SIMDNativeOps.h:89
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128 value, float *dest) noexcept
Definition juce_sse_SIMDNativeOps.h:73
static forcedinline __m256 JUCE_VECTOR_CALLTYPE dupodd(__m256 a) noexcept
Definition juce_avx_SIMDNativeOps.h:91
static forcedinline __m256 JUCE_VECTOR_CALLTYPE bit_notand(__m256 a, __m256 b) noexcept
Definition juce_avx_SIMDNativeOps.h:81
DECLARE_SSE_SIMD_CONST(int32_t, kEvenHighBit)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:353
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:372
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:358
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const int16_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:346
static forcedinline int16_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:371
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, int16_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:348
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:362
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, int16_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:367
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:352
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:361
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:359
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:351
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:359
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const int16_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:347
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:368
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:370
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:354
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:357
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:360
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:364
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:355
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const int16_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:366
static forcedinline int16_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:366
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:368
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(int16_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:349
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:378
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:363
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:379
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:375
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:356
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:365
DECLARE_SSE_SIMD_CONST(int16_t, kAllBitsSet)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:350
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:493
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const int32_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:461
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:486
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:472
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:505
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:476
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, int32_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:479
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:489
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, int32_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:463
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:494
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const int32_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:462
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:474
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:468
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:471
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:480
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:465
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:470
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:475
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:467
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:485
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:515
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(int32_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:464
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:474
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:483
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:493
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:487
static forcedinline int32_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:478
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const int32_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:481
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:490
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:466
static forcedinline int32_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:483
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:477
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:469
DECLARE_SSE_SIMD_CONST(int32_t, kAllBitsSet)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:473
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:603
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:626
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const int64_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:591
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:634
static forcedinline int64_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:641
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(int64_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:623
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:628
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:636
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:632
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:642
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:599
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:595
DECLARE_SSE_SIMD_CONST(int64_t, kAllBitsSet)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, int64_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:640
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const int64_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:624
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:602
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:611
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:627
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:638
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:629
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:596
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, int64_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:625
static forcedinline int64_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:639
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:637
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:631
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:585
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:645
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:643
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:633
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:630
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:598
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:656
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:593
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:635
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const int64_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:622
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:213
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:222
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:218
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:220
static forcedinline int8_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:227
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:211
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, int8_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:228
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:207
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:225
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:209
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:210
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:221
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(int8_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:206
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b)
Definition juce_avx_SIMDNativeOps.h:263
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:208
static forcedinline int8_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:232
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:223
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const int8_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:215
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b)
Definition juce_sse_SIMDNativeOps.h:250
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:219
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:226
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:217
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:222
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:223
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:209
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:227
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:212
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const int8_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:204
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, int8_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:205
DECLARE_SSE_SIMD_CONST(int8_t, kAllBitsSet)
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:226
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const int8_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:203
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:219
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:224
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:229
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(uint16_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:405
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:428
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:426
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:429
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:430
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:406
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, uint16_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:404
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:423
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:436
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:408
static forcedinline uint16_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:427
DECLARE_SSE_SIMD_CONST(uint16_t, kHighBit)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, uint16_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:428
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:421
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:415
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:407
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:424
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:411
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:409
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:429
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:437
static forcedinline uint16_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:432
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:410
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:419
static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:402
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:418
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:425
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:422
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:412
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:426
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const uint16_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:403
static forcedinline __m256i JUCE_VECTOR_CALLTYPE ssign(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:422
DECLARE_SSE_SIMD_CONST(uint16_t, kAllBitsSet)
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:432
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:413
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const uint16_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:424
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const uint16_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:401
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:433
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:554
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:553
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:558
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:543
DECLARE_SSE_SIMD_CONST(uint32_t, kHighBit)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:562
static forcedinline __m256i JUCE_VECTOR_CALLTYPE ssign(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:535
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, uint32_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:561
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:539
static forcedinline uint32_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:565
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:542
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:552
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const uint32_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:537
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:556
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:545
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:597
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:555
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:550
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:551
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:547
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:575
static forcedinline uint32_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:560
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const uint32_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:544
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:557
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:541
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:546
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(uint32_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:546
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const uint32_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:542
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:548
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:587
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:549
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:559
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:550
static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:543
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:549
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:528
DECLARE_SSE_SIMD_CONST(uint32_t, kAllBitsSet)
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, uint32_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:545
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:698
static forcedinline uint64_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:701
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:688
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:690
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:702
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:652
static forcedinline uint64_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:699
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:686
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:687
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, uint64_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:700
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const uint64_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:681
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:703
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:637
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:696
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, uint64_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:685
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:697
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:624
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(uint64_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:682
DECLARE_SSE_SIMD_CONST(uint64_t, kAllBitsSet)
DECLARE_SSE_SIMD_CONST(uint64_t, kHighBit)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:694
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:689
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:644
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_andnot(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:639
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:643
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:692
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:705
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const uint64_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:631
static forcedinline __m256i JUCE_VECTOR_CALLTYPE ssign(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:633
static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:683
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_and(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:636
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:691
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:693
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:716
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:640
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const uint64_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:684
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:634
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:695
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_andnot(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:286
DECLARE_SSE_SIMD_CONST(uint8_t, kAllBitsSet)
static forcedinline __m128i JUCE_VECTOR_CALLTYPE truncate(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:298
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_not(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:287
static forcedinline __m128i JUCE_VECTOR_CALLTYPE mul(__m128i a, __m128i b)
Definition juce_sse_SIMDNativeOps.h:320
static forcedinline __m128i JUCE_VECTOR_CALLTYPE add(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:281
static forcedinline __m128i JUCE_VECTOR_CALLTYPE expand(uint8_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:280
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_or(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:284
static forcedinline bool JUCE_VECTOR_CALLTYPE allEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:295
static forcedinline __m256i JUCE_VECTOR_CALLTYPE add(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:293
static forcedinline __m256i JUCE_VECTOR_CALLTYPE ssign(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:289
static forcedinline __m128i JUCE_VECTOR_CALLTYPE equal(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:290
DECLARE_SSE_SIMD_CONST(uint8_t, kHighBit)
static forcedinline void JUCE_VECTOR_CALLTYPE store(__m128i v, uint8_t *p) noexcept
Definition juce_sse_SIMDNativeOps.h:279
__m256i vSIMDType
Definition juce_avx_SIMDNativeOps.h:283
static forcedinline __m128i JUCE_VECTOR_CALLTYPE sub(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:282
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_not(__m256i a) noexcept
Definition juce_avx_SIMDNativeOps.h:299
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThanOrEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:292
static forcedinline __m256i JUCE_VECTOR_CALLTYPE mul(__m256i a, __m256i b)
Definition juce_avx_SIMDNativeOps.h:339
static forcedinline __m128i JUCE_VECTOR_CALLTYPE min(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:288
static forcedinline __m256i JUCE_VECTOR_CALLTYPE equal(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:302
static forcedinline uint8_t JUCE_VECTOR_CALLTYPE get(__m128i v, size_t i) noexcept
Definition juce_sse_SIMDNativeOps.h:296
static forcedinline __m128i JUCE_VECTOR_CALLTYPE set(__m128i v, size_t i, uint8_t s) noexcept
Definition juce_sse_SIMDNativeOps.h:297
static forcedinline __m128i JUCE_VECTOR_CALLTYPE vconst(const uint8_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:276
static forcedinline __m128i JUCE_VECTOR_CALLTYPE load(const uint8_t *a) noexcept
Definition juce_sse_SIMDNativeOps.h:278
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_xor(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:285
static forcedinline __m256i JUCE_VECTOR_CALLTYPE load(const uint8_t *p) noexcept
Definition juce_avx_SIMDNativeOps.h:291
static forcedinline __m256i JUCE_VECTOR_CALLTYPE bit_or(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:296
static forcedinline __m128i JUCE_VECTOR_CALLTYPE max(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:289
static forcedinline __m128i JUCE_VECTOR_CALLTYPE notEqual(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:294
static forcedinline __m256i JUCE_VECTOR_CALLTYPE greaterThan(__m256i a, __m256i b) noexcept
Definition juce_avx_SIMDNativeOps.h:303
static forcedinline __m128i JUCE_VECTOR_CALLTYPE multiplyAdd(__m128i a, __m128i b, __m128i c) noexcept
Definition juce_sse_SIMDNativeOps.h:293
static forcedinline uint8_t JUCE_VECTOR_CALLTYPE sum(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:301
static forcedinline __m128i JUCE_VECTOR_CALLTYPE bit_and(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:283
static forcedinline __m128i JUCE_VECTOR_CALLTYPE ssign(__m128i a) noexcept
Definition juce_sse_SIMDNativeOps.h:277
static forcedinline __m128i JUCE_VECTOR_CALLTYPE greaterThan(__m128i a, __m128i b) noexcept
Definition juce_sse_SIMDNativeOps.h:291
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
b
Definition crypt.c:628