35 #ifndef _BLAZE_MATH_INTRINSICS_MULTIPLICATION_H_
36 #define _BLAZE_MATH_INTRINSICS_MULTIPLICATION_H_
65 inline sse_int16_t
operator*(
const sse_int16_t& a,
const sse_int16_t& b )
67 return _mm256_mullo_epi16( a.value, b.value );
70 inline sse_int16_t
operator*(
const sse_int16_t& a,
const sse_int16_t& b )
72 return _mm_mullo_epi16( a.value, b.value );
88 inline sse_int32_t
operator*(
const sse_int32_t& a,
const sse_int32_t& b )
90 return _mm512_mullo_epi32( a.value, b.value );
93 inline sse_int32_t
operator*(
const sse_int32_t& a,
const sse_int32_t& b )
95 return _mm256_mullo_epi32( a.value, b.value );
98 inline sse_int32_t
operator*(
const sse_int32_t& a,
const sse_int32_t& b )
100 return _mm_mullo_epi32( a.value, b.value );
116 inline sse_float_t
operator*(
const sse_float_t& a,
const sse_float_t& b )
118 return _mm512_mul_ps( a.value, b.value );
121 inline sse_float_t
operator*(
const sse_float_t& a,
const sse_float_t& b )
123 return _mm256_mul_ps( a.value, b.value );
126 inline sse_float_t
operator*(
const sse_float_t& a,
const sse_float_t& b )
128 return _mm_mul_ps( a.value, b.value );
144 inline sse_double_t
operator*(
const sse_double_t& a,
const sse_double_t& b )
146 return _mm512_mul_pd( a.value, b.value );
149 inline sse_double_t
operator*(
const sse_double_t& a,
const sse_double_t& b )
151 return _mm256_mul_pd( a.value, b.value );
153 #elif BLAZE_SSE2_MODE
154 inline sse_double_t
operator*(
const sse_double_t& a,
const sse_double_t& b )
156 return _mm_mul_pd( a.value, b.value );
172 inline sse_cfloat_t
operator*(
const sse_cfloat_t& a,
const sse_cfloat_t& b )
176 x = _mm256_shuffle_ps( a.value, a.value, 0xA0A0 );
177 z = _mm256_mul_ps( x, b.value );
178 x = _mm256_shuffle_ps( a.value, a.value, 0xF5F5 );
179 y = _mm256_shuffle_ps( b.value, b.value, 0xB1B1 );
180 y = _mm256_mul_ps( x, y );
181 return _mm256_addsub_ps( z, y );
183 #elif BLAZE_SSE3_MODE
184 inline sse_cfloat_t
operator*(
const sse_cfloat_t& a,
const sse_cfloat_t& b )
188 x = _mm_shuffle_ps( a.value, a.value, 0xA0 );
189 z = _mm_mul_ps( x, b.value );
190 x = _mm_shuffle_ps( a.value, a.value, 0xF5 );
191 y = _mm_shuffle_ps( b.value, b.value, 0xB1 );
192 y = _mm_mul_ps( x, y );
193 return _mm_addsub_ps( z, y );
209 inline sse_cdouble_t
operator*(
const sse_cdouble_t& a,
const sse_cdouble_t& b )
213 x = _mm256_shuffle_pd( a.value, a.value, 0 );
214 z = _mm256_mul_pd( x, b.value );
215 x = _mm256_shuffle_pd( a.value, a.value, 15 );
216 y = _mm256_shuffle_pd( b.value, b.value, 5 );
217 y = _mm256_mul_pd( x, y );
218 return _mm256_addsub_pd( z, y );
220 #elif BLAZE_SSE3_MODE
221 inline sse_cdouble_t
operator*(
const sse_cdouble_t& a,
const sse_cdouble_t& b )
225 x = _mm_shuffle_pd( a.value, a.value, 0 );
226 z = _mm_mul_pd( x, b.value );
227 x = _mm_shuffle_pd( a.value, a.value, 3 );
228 y = _mm_shuffle_pd( b.value, b.value, 1 );
229 y = _mm_mul_pd( x, y );
230 return _mm_addsub_pd( z, y );
const DMatDMatMultExpr< T1, T2 > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:4329
Header file for the basic intrinsic types.
System settings for the SSE mode.