22 #ifndef _BLAZE_MATH_INTRINSICS_REDUCTION_H_
23 #define _BLAZE_MATH_INTRINSICS_REDUCTION_H_
52 const sse_int16_t b( _mm_hadd_epi16( a.value, a.value ) );
53 const sse_int16_t c( _mm_hadd_epi16( b.value, b.value ) );
54 const sse_int16_t d( _mm_hadd_epi16( c.value, c.value ) );
57 return a.values[0] + a.values[1] + a.values[2] + a.values[3] +
58 a.values[4] + a.values[5] + a.values[6] + a.values[7];
76 return _mm512_reduce_add_epi32( a.value );
77 #elif BLAZE_SSSE3_MODE
78 const sse_int32_t b( _mm_hadd_epi32( a.value, a.value ) );
79 const sse_int32_t c( _mm_hadd_epi32( b.value, b.value ) );
82 return a.values[0] + a.values[1] + a.values[2] + a.values[3];
100 return _mm512_reduce_add_ps( a.value );
102 const sse_float_t b( _mm256_hadd_ps( a.value, a.value ) );
103 const sse_float_t c( _mm256_hadd_ps( b.value, b.value ) );
104 const sse_float_t d( _mm256_hadd_ps( c.value, c.value ) );
106 #elif BLAZE_SSE3_MODE
107 const sse_float_t b( _mm_hadd_ps( a.value, a.value ) );
108 const sse_float_t c( _mm_hadd_ps( b.value, b.value ) );
111 return a.values[0] + a.values[1] + a.values[2] + a.values[3];
129 return _mm512_reduce_add_pd( a.value );
131 const sse_double_t b( _mm256_hadd_pd( a.value, a.value ) );
132 const sse_double_t c( _mm256_hadd_pd( b.value, b.value ) );
134 #elif BLAZE_SSE3_MODE
135 const sse_double_t b( _mm_hadd_pd( a.value, a.value ) );
137 #elif BLAZE_SSE2_MODE
138 return a.values[0] + a.values[1];