65 DECLARE_AVX_SIMD_CONST (
float,
kOne);
68 static forcedinline
__m256 JUCE_VECTOR_CALLTYPE vconst (
const float* a)
noexcept {
return load (a); }
71 static forcedinline
__m256 JUCE_VECTOR_CALLTYPE load (
const float* a)
noexcept {
return _mm256_load_ps (a); }
72 static forcedinline
void JUCE_VECTOR_CALLTYPE store (
__m256 value,
float* dest)
noexcept {
_mm256_store_ps (dest, value); }
80 static forcedinline
__m256 JUCE_VECTOR_CALLTYPE bit_not (
__m256 a)
noexcept {
return bit_notand (a, vconst (
kAllBitsSet)); }
100 return add (a, mul (b, c));
104 static forcedinline
__m256 JUCE_VECTOR_CALLTYPE oddevensum (
__m256 a)
noexcept
111 static forcedinline
__m256 JUCE_VECTOR_CALLTYPE cmplxmul (
__m256 a,
__m256 b)
noexcept
118 static forcedinline
float JUCE_VECTOR_CALLTYPE sum (
__m256 a)
noexcept
145 DECLARE_AVX_SIMD_CONST (
double,
kOne);
148 static forcedinline
__m256d JUCE_VECTOR_CALLTYPE vconst (
const double* a)
noexcept {
return load (a); }
151 static forcedinline
__m256d JUCE_VECTOR_CALLTYPE load (
const double* a)
noexcept {
return _mm256_load_pd (a); }
152 static forcedinline
void JUCE_VECTOR_CALLTYPE store (
__m256d value,
double* dest)
noexcept {
_mm256_store_pd (dest, value); }
160 static forcedinline
__m256d JUCE_VECTOR_CALLTYPE bit_not (
__m256d a)
noexcept {
return bit_notand (a, vconst (
kAllBitsSet)); }
170 static forcedinline
__m256d JUCE_VECTOR_CALLTYPE dupodd (
__m256d a)
noexcept {
return _mm256_shuffle_pd (a, a, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)); }
171 static forcedinline
__m256d JUCE_VECTOR_CALLTYPE swapevenodd (
__m256d a)
noexcept {
return _mm256_shuffle_pd (a, a, (1 << 0) | (0 << 1) | (1 << 2) | (0 << 3)); }
185 static forcedinline
double JUCE_VECTOR_CALLTYPE sum (
__m256d a)
noexcept
226 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
229 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
232 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
235 static forcedinline
int8_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
240 for (
int i = 0; i < 3; ++i)
252 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
302 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
305 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
308 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
311 static forcedinline
uint8_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
316 for (
int i = 0; i < 3; ++i)
328 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
378 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
380 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
384 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
387 static forcedinline
int16_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
396 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
436 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
438 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
442 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
445 static forcedinline
uint16_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
455 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
493 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
495 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
499 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
502 static forcedinline
int32_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
510 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
549 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
551 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
555 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
558 static forcedinline
uint32_t JUCE_VECTOR_CALLTYPE sum (
__m256i a)
noexcept
566 constexpr int mask = (2 << 0) | (3 << 2) | (0 << 4) | (1 << 6);
598 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE min (
__m256i a,
__m256i b)
noexcept {
__m256i lt = greaterThan (b, a);
return bit_or (bit_and (
lt, a), bit_andnot (
lt, b)); }
599 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE max (
__m256i a,
__m256i b)
noexcept {
__m256i gt = greaterThan (a, b);
return bit_or (bit_and (
gt, a), bit_andnot (
gt, b)); }
602 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
604 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
610 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }
639 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE min (
__m256i a,
__m256i b)
noexcept {
__m256i lt = greaterThan (b, a);
return bit_or (bit_and (
lt, a), bit_andnot (
lt, b)); }
640 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE max (
__m256i a,
__m256i b)
noexcept {
__m256i gt = greaterThan (a, b);
return bit_or (bit_and (
gt, a), bit_andnot (
gt, b)); }
643 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE greaterThanOrEqual (
__m256i a,
__m256i b)
noexcept {
return bit_or (greaterThan (a, b), equal (a,b)); }
645 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE notEqual (
__m256i a,
__m256i b)
noexcept {
return bit_not (equal (a, b)); }
651 static forcedinline
__m256i JUCE_VECTOR_CALLTYPE truncate (
__m256i a)
noexcept {
return a; }