35 #ifndef _BLAZE_MATH_SIMD_STOREU_H_ 36 #define _BLAZE_MATH_SIMD_STOREU_H_ 76 storeu( T1* address,
const SIMDi8<T2>& value ) noexcept
78 #if BLAZE_AVX512BW_MODE 79 _mm512_storeu_si512( address, (~value).value );
81 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
83 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
85 *address = (~value).value;
102 template<
typename T1
105 storeu( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
109 #if BLAZE_AVX512BW_MODE 110 _mm512_storeu_si512( address, (~value).value );
111 #elif BLAZE_AVX2_MODE 112 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
113 #elif BLAZE_SSE2_MODE 114 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
116 *address = (~value).value;
141 template<
typename T1
144 storeu( T1* address,
const SIMDi16<T2>& value ) noexcept
146 #if BLAZE_AVX512BW_MODE 147 _mm512_storeu_si512( address, (~value).value );
148 #elif BLAZE_AVX2_MODE 149 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
150 #elif BLAZE_SSE2_MODE 151 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
153 *address = (~value).value;
170 template<
typename T1
173 storeu( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
177 #if BLAZE_AVX512BW_MODE 178 _mm512_storeu_si512( address, (~value).value );
179 #elif BLAZE_AVX2_MODE 180 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
181 #elif BLAZE_SSE2_MODE 182 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
184 *address = (~value).value;
209 template<
typename T1
212 storeu( T1* address,
const SIMDi32<T2>& value ) noexcept
214 #if BLAZE_AVX512F_MODE 215 _mm512_mask_storeu_epi32( address, 0xFFFF, (~value).value );
217 _mm512_packstorelo_epi32( address , (~value).value );
218 _mm512_packstorehi_epi32( address+16UL, (~value).value );
219 #elif BLAZE_AVX2_MODE 220 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
221 #elif BLAZE_SSE2_MODE 222 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
224 *address = (~value).value;
241 template<
typename T1
244 storeu( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
248 #if BLAZE_AVX512F_MODE 249 _mm512_mask_storeu_epi32( address, 0xFFFF, (~value).value );
251 _mm512_packstorelo_epi32( address , (~value).value );
252 _mm512_packstorehi_epi32( address+8UL, (~value).value );
253 #elif BLAZE_AVX2_MODE 254 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
255 #elif BLAZE_SSE2_MODE 256 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
258 *address = (~value).value;
283 template<
typename T1
286 storeu( T1* address,
const SIMDi64<T2>& value ) noexcept
288 #if BLAZE_AVX512F_MODE 289 _mm512_mask_storeu_epi64( address, 0xFF, (~value).value );
291 _mm512_packstorelo_epi64( address , (~value).value );
292 _mm512_packstorehi_epi64( address+8UL, (~value).value );
293 #elif BLAZE_AVX2_MODE 294 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
295 #elif BLAZE_SSE2_MODE 296 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
298 *address = (~value).value;
315 template<
typename T1
318 storeu( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
322 #if BLAZE_AVX512F_MODE 323 _mm512_mask_storeu_epi64( address, 0xFF, (~value).value );
325 _mm512_packstorelo_epi64( address , (~value).value );
326 _mm512_packstorehi_epi64( address+4UL, (~value).value );
327 #elif BLAZE_AVX2_MODE 328 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
329 #elif BLAZE_SSE2_MODE 330 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
332 *address = (~value).value;
357 template<
typename T >
360 #if BLAZE_AVX512F_MODE 361 _mm512_storeu_ps( address, (~value).value );
364 _mm512_packstorelo_ps( address , tmp.value );
365 _mm512_packstorehi_ps( address+16UL, tmp.value );
367 _mm256_storeu_ps( address, (~value).
eval().value );
369 _mm_storeu_ps( address, (~value).
eval().value );
371 *address = (~value).
eval().value;
392 #if BLAZE_AVX512F_MODE 393 _mm512_storeu_ps( address, (~value).value );
395 _mm512_packstorelo_ps( reinterpret_cast<float*>( address ), value.value );
396 _mm512_packstorehi_ps( reinterpret_cast<float*>( address+8UL ), value.value );
398 _mm256_storeu_ps( reinterpret_cast<float*>( address ), value.value );
400 _mm_storeu_ps( reinterpret_cast<float*>( address ), value.value );
402 *address = value.value;
427 template<
typename T >
430 #if BLAZE_AVX512F_MODE 431 _mm512_storeu_pd( address, (~value).value );
434 _mm512_packstorelo_pd( address , tmp.value );
435 _mm512_packstorehi_pd( address+8UL, tmp.value );
437 _mm256_storeu_pd( address, (~value).
eval().value );
438 #elif BLAZE_SSE2_MODE 439 _mm_storeu_pd( address, (~value).
eval().value );
441 *address = (~value).
eval().value;
462 #if BLAZE_AVX512F_MODE 463 _mm512_storeu_pd( address, (~value).value );
465 _mm512_packstorelo_pd( reinterpret_cast<double*>( address ), value.value );
466 _mm512_packstorehi_pd( reinterpret_cast<double*>( address+4UL ), value.value );
468 _mm256_storeu_pd( reinterpret_cast<double*>( address ), value.value );
469 #elif BLAZE_SSE2_MODE 470 _mm_storeu_pd( reinterpret_cast<double*>( address ), value.value );
472 *address = value.value;
Compile time size check.This class offers the possibility to test the size of a type at compile time...
Definition: HasSize.h:75
Header file for the IsIntegral type trait.
Header file for the And class template.
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:794
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.
BLAZE_ALWAYS_INLINE EnableIf_< And< IsIntegral< T1 >, HasSize< T1, 1UL > > > storeu(T1 *address, const SIMDi8< T2 > &value) noexcept
Unaligned store of a vector of 1-byte integral values.
Definition: Storeu.h:76
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.