35 #ifndef _BLAZE_MATH_SIMD_STOREU_H_ 36 #define _BLAZE_MATH_SIMD_STOREU_H_ 75 storeu( T1* address,
const SIMDi8<T2>& value ) noexcept
77 #if BLAZE_AVX512BW_MODE 78 _mm512_storeu_si512( address, (~value).value );
80 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
82 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
84 *address = (~value).value;
101 template<
typename T1
104 storeu( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
108 #if BLAZE_AVX512BW_MODE 109 _mm512_storeu_si512( address, (~value).value );
110 #elif BLAZE_AVX2_MODE 111 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
112 #elif BLAZE_SSE2_MODE 113 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
115 *address = (~value).value;
140 template<
typename T1
143 storeu( T1* address,
const SIMDi16<T2>& value ) noexcept
145 #if BLAZE_AVX512BW_MODE 146 _mm512_storeu_si512( address, (~value).value );
147 #elif BLAZE_AVX2_MODE 148 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
149 #elif BLAZE_SSE2_MODE 150 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
152 *address = (~value).value;
169 template<
typename T1
172 storeu( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
176 #if BLAZE_AVX512BW_MODE 177 _mm512_storeu_si512( address, (~value).value );
178 #elif BLAZE_AVX2_MODE 179 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
180 #elif BLAZE_SSE2_MODE 181 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
183 *address = (~value).value;
208 template<
typename T1
211 storeu( T1* address,
const SIMDi32<T2>& value ) noexcept
213 #if BLAZE_AVX512F_MODE 214 _mm512_mask_storeu_epi32( address, 0xFFFF, (~value).value );
216 _mm512_packstorelo_epi32( address , (~value).value );
217 _mm512_packstorehi_epi32( address+16UL, (~value).value );
218 #elif BLAZE_AVX2_MODE 219 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
220 #elif BLAZE_SSE2_MODE 221 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
223 *address = (~value).value;
240 template<
typename T1
243 storeu( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
247 #if BLAZE_AVX512F_MODE 248 _mm512_mask_storeu_epi32( address, 0xFFFF, (~value).value );
250 _mm512_packstorelo_epi32( address , (~value).value );
251 _mm512_packstorehi_epi32( address+8UL, (~value).value );
252 #elif BLAZE_AVX2_MODE 253 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
254 #elif BLAZE_SSE2_MODE 255 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
257 *address = (~value).value;
282 template<
typename T1
285 storeu( T1* address,
const SIMDi64<T2>& value ) noexcept
287 #if BLAZE_AVX512F_MODE 288 _mm512_mask_storeu_epi64( address, 0xFF, (~value).value );
290 _mm512_packstorelo_epi64( address , (~value).value );
291 _mm512_packstorehi_epi64( address+8UL, (~value).value );
292 #elif BLAZE_AVX2_MODE 293 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
294 #elif BLAZE_SSE2_MODE 295 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
297 *address = (~value).value;
314 template<
typename T1
317 storeu( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
321 #if BLAZE_AVX512F_MODE 322 _mm512_mask_storeu_epi64( address, 0xFF, (~value).value );
324 _mm512_packstorelo_epi64( address , (~value).value );
325 _mm512_packstorehi_epi64( address+4UL, (~value).value );
326 #elif BLAZE_AVX2_MODE 327 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
328 #elif BLAZE_SSE2_MODE 329 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
331 *address = (~value).value;
356 template<
typename T >
359 #if BLAZE_AVX512F_MODE 360 _mm512_storeu_ps( address, (~value).value );
363 _mm512_packstorelo_ps( address , tmp.value );
364 _mm512_packstorehi_ps( address+16UL, tmp.value );
366 _mm256_storeu_ps( address, (~value).
eval().value );
368 _mm_storeu_ps( address, (~value).
eval().value );
370 *address = (~value).
eval().value;
391 #if BLAZE_AVX512F_MODE 392 _mm512_storeu_ps( address, (~value).value );
394 _mm512_packstorelo_ps( reinterpret_cast<float*>( address ), value.value );
395 _mm512_packstorehi_ps( reinterpret_cast<float*>( address+8UL ), value.value );
397 _mm256_storeu_ps( reinterpret_cast<float*>( address ), value.value );
399 _mm_storeu_ps( reinterpret_cast<float*>( address ), value.value );
401 *address = value.value;
426 template<
typename T >
429 #if BLAZE_AVX512F_MODE 430 _mm512_storeu_pd( address, (~value).value );
433 _mm512_packstorelo_pd( address , tmp.value );
434 _mm512_packstorehi_pd( address+8UL, tmp.value );
436 _mm256_storeu_pd( address, (~value).
eval().value );
437 #elif BLAZE_SSE2_MODE 438 _mm_storeu_pd( address, (~value).
eval().value );
440 *address = (~value).
eval().value;
461 #if BLAZE_AVX512F_MODE 462 _mm512_storeu_pd( address, (~value).value );
464 _mm512_packstorelo_pd( reinterpret_cast<double*>( address ), value.value );
465 _mm512_packstorehi_pd( reinterpret_cast<double*>( address+4UL ), value.value );
467 _mm256_storeu_pd( reinterpret_cast<double*>( address ), value.value );
468 #elif BLAZE_SSE2_MODE 469 _mm_storeu_pd( reinterpret_cast<double*>( address ), value.value );
471 *address = value.value;
Header file for the IsIntegral type trait.
BLAZE_ALWAYS_INLINE EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< T1, 1UL > > storeu(T1 *address, const SIMDi8< T2 > &value) noexcept
Unaligned store of a vector of 1-byte integral values.
Definition: Storeu.h:75
SIMD type for 64-bit double precision floating point data values.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
decltype(auto) eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:786
Header file for the EnableIf class template.
Header file for the basic SIMD types.
Header file for the HasSize type trait.
SIMD type for 32-bit single precision complex values.
SIMD type for 32-bit single precision floating point data values.
SIMD type for 64-bit double precision complex values.
System settings for the SSE mode.
Header file for the complex data type.
#define BLAZE_STATIC_ASSERT(expr)
Compile time assertion macro.In case of an invalid compile time expression, a compilation error is cr...
Definition: StaticAssert.h:112
System settings for the inline keywords.