22 #ifndef _BLAZE_MATH_INTRINSICS_REDUCTION_H_
23 #define _BLAZE_MATH_INTRINSICS_REDUCTION_H_
52 const sse_int16_t b( _mm256_hadd_epi16( a.value, a.value ) );
53 const sse_int16_t c( _mm256_hadd_epi16( b.value, b.value ) );
54 const sse_int16_t d( _mm256_hadd_epi16( c.value, c.value ) );
55 const sse_int16_t e( _mm256_hadd_epi16( d.value, d.value ) );
57 #elif BLAZE_SSSE3_MODE
58 const sse_int16_t b( _mm_hadd_epi16( a.value, a.value ) );
59 const sse_int16_t c( _mm_hadd_epi16( b.value, b.value ) );
60 const sse_int16_t d( _mm_hadd_epi16( c.value, c.value ) );
63 return a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7];
81 return _mm512_reduce_add_epi32( a.value );
83 const sse_int32_t b( _mm256_hadd_epi32( a.value, a.value ) );
84 const sse_int32_t c( _mm256_hadd_epi32( b.value, b.value ) );
85 const sse_int32_t d( _mm256_hadd_epi32( c.value, c.value ) );
87 #elif BLAZE_SSSE3_MODE
88 const sse_int32_t b( _mm_hadd_epi32( a.value, a.value ) );
89 const sse_int32_t c( _mm_hadd_epi32( b.value, b.value ) );
92 return a[0] + a[1] + a[2] + a[3];
110 return _mm512_reduce_add_ps( a.value );
112 const sse_float_t b( _mm256_hadd_ps( a.value, a.value ) );
113 const sse_float_t c( _mm256_hadd_ps( b.value, b.value ) );
114 const sse_float_t d( _mm256_hadd_ps( c.value, c.value ) );
116 #elif BLAZE_SSE3_MODE
117 const sse_float_t b( _mm_hadd_ps( a.value, a.value ) );
118 const sse_float_t c( _mm_hadd_ps( b.value, b.value ) );
121 return a[0] + a[1] + a[2] + a[3];
139 return _mm512_reduce_add_pd( a.value );
141 const sse_double_t b( _mm256_hadd_pd( a.value, a.value ) );
142 const sse_double_t c( _mm256_hadd_pd( b.value, b.value ) );
144 #elif BLAZE_SSE3_MODE
145 const sse_double_t b( _mm_hadd_pd( a.value, a.value ) );
147 #elif BLAZE_SSE2_MODE
166 return complex<float>( a[0] + a[1] + a[2] + a[3] );
168 return complex<float>( a[0] + a[1] );
186 return complex<double>( a[0] + a[1] );
187 #elif BLAZE_SSE2_MODE