35 #ifndef _BLAZE_MATH_SIMD_STOREU_H_
36 #define _BLAZE_MATH_SIMD_STOREU_H_
76 storeu( T1* address,
const SIMDi8<T2>& value ) noexcept
79 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
81 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
83 *address = (~value).value;
100 template<
typename T1
103 storeu( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
108 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
109 #elif BLAZE_SSE2_MODE
110 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
112 *address = (~value).value;
137 template<
typename T1
140 storeu( T1* address,
const SIMDi16<T2>& value ) noexcept
143 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
144 #elif BLAZE_SSE2_MODE
145 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
147 *address = (~value).value;
164 template<
typename T1
167 storeu( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
172 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
173 #elif BLAZE_SSE2_MODE
174 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
176 *address = (~value).value;
201 template<
typename T1
204 storeu( T1* address,
const SIMDi32<T2>& value ) noexcept
207 _mm512_packstorelo_epi32( address , (~value).value );
208 _mm512_packstorehi_epi32( address+16UL, (~value).value );
209 #elif BLAZE_AVX2_MODE
210 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
211 #elif BLAZE_SSE2_MODE
212 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
214 *address = (~value).value;
231 template<
typename T1
234 storeu( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
239 _mm512_packstorelo_epi32( address , (~value).value );
240 _mm512_packstorehi_epi32( address+8UL, (~value).value );
241 #elif BLAZE_AVX2_MODE
242 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
243 #elif BLAZE_SSE2_MODE
244 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
246 *address = (~value).value;
271 template<
typename T1
274 storeu( T1* address,
const SIMDi64<T2>& value ) noexcept
277 _mm512_packstorelo_epi64( address , (~value).value );
278 _mm512_packstorehi_epi64( address+8UL, (~value).value );
279 #elif BLAZE_AVX2_MODE
280 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
281 #elif BLAZE_SSE2_MODE
282 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
284 *address = (~value).value;
301 template<
typename T1
304 storeu( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
309 _mm512_packstorelo_epi64( address , (~value).value );
310 _mm512_packstorehi_epi64( address+4UL, (~value).value );
311 #elif BLAZE_AVX2_MODE
312 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
313 #elif BLAZE_SSE2_MODE
314 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
316 *address = (~value).value;
341 template<
typename T >
346 _mm512_packstorelo_ps( address , tmp );
347 _mm512_packstorehi_ps( address+16UL, tmp );
349 _mm256_storeu_ps( address, (~value).
eval().value );
351 _mm_storeu_ps( address, (~value).
eval().value );
353 *address = (~value).
eval().value;
375 _mm512_packstorelo_ps( reinterpret_cast<float*>( address ), value.value );
376 _mm512_packstorehi_ps( reinterpret_cast<float*>( address+8UL ), value.value );
378 _mm256_storeu_ps( reinterpret_cast<float*>( address ), value.value );
380 _mm_storeu_ps( reinterpret_cast<float*>( address ), value.value );
382 *address = value.value;
407 template<
typename T >
412 _mm512_packstorelo_pd( address , tmp );
413 _mm512_packstorehi_pd( address+8UL, tmp );
415 _mm256_storeu_pd( address, (~value).
eval().value );
416 #elif BLAZE_SSE2_MODE
417 _mm_storeu_pd( address, (~value).
eval().value );
419 *address = (~value).
eval().value;
441 _mm512_packstorelo_pd( reinterpret_cast<double*>( address ), value.value );
442 _mm512_packstorehi_pd( reinterpret_cast<double*>( address+4UL ), value.value );
444 _mm256_storeu_pd( reinterpret_cast<double*>( address ), value.value );
445 #elif BLAZE_SSE2_MODE
446 _mm_storeu_pd( reinterpret_cast<double*>( address ), value.value );
448 *address = value.value;
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:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
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.
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:705
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.