35 #ifndef _BLAZE_MATH_SIMD_STOREA_H_
36 #define _BLAZE_MATH_SIMD_STOREA_H_
79 storea( T1* address,
const SIMDi8<T2>& value ) noexcept
84 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
86 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
88 *address = (~value).value;
106 template<
typename T1
109 storea( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
115 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
116 #elif BLAZE_SSE2_MODE
117 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
119 *address = (~value).value;
145 template<
typename T1
148 storea( T1* address,
const SIMDi16<T2>& value ) noexcept
153 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
154 #elif BLAZE_SSE2_MODE
155 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
157 *address = (~value).value;
175 template<
typename T1
178 storea( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
184 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
185 #elif BLAZE_SSE2_MODE
186 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
188 *address = (~value).value;
214 template<
typename T1
217 storea( T1* address,
const SIMDi32<T2>& value ) noexcept
222 _mm512_store_epi32( address, (~value).value );
223 #elif BLAZE_AVX2_MODE
224 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
225 #elif BLAZE_SSE2_MODE
226 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
228 *address = (~value).value;
246 template<
typename T1
249 storea( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
255 _mm512_store_epi32( address, (~value).value );
256 #elif BLAZE_AVX2_MODE
257 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
258 #elif BLAZE_SSE2_MODE
259 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
261 *address = (~value).value;
287 template<
typename T1
290 storea( T1* address,
const SIMDi64<T2>& value ) noexcept
295 _mm512_store_epi64( address, (~value).value );
296 #elif BLAZE_AVX2_MODE
297 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
298 #elif BLAZE_SSE2_MODE
299 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
301 *address = (~value).value;
319 template<
typename T1
322 storea( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
328 _mm512_store_epi64( address, (~value).value );
329 #elif BLAZE_AVX2_MODE
330 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
331 #elif BLAZE_SSE2_MODE
332 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
334 *address = (~value).value;
360 template<
typename T >
366 _mm512_store_ps( address, (~value).
eval().value );
368 _mm256_store_ps( address, (~value).
eval().value );
370 _mm_store_ps( address, (~value).
eval().value );
372 *address = (~value).
eval().value;
396 _mm512_store_ps( reinterpret_cast<float*>( address ), value.value );
398 _mm256_store_ps( reinterpret_cast<float*>( address ), value.value );
400 _mm_store_ps( reinterpret_cast<float*>( address ), value.value );
402 *address = value.value;
428 template<
typename T >
434 _mm512_store_pd( address, (~value).
eval().value );
436 _mm256_store_pd( address, (~value).
eval().value );
437 #elif BLAZE_SSE2_MODE
438 _mm_store_pd( address, (~value).
eval().value );
440 *address = (~value).
eval().value;
464 _mm512_store_pd( reinterpret_cast<double*>( address ), value.value );
466 _mm256_store_pd( reinterpret_cast<double*>( address ), value.value );
467 #elif BLAZE_SSE2_MODE
468 _mm_store_pd( reinterpret_cast<double*>( address ), value.value );
470 *address = value.value;
BLAZE_ALWAYS_INLINE EnableIf_< And< IsIntegral< T1 >, HasSize< T1, 1UL > > > storea(T1 *address, const SIMDi8< T2 > &value) noexcept
Aligned store of a vector of 1-byte integral values.
Definition: Storea.h:79
Header file for the IsIntegral type trait.
Header file for the And class template.
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 run time assertion macros.
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
BLAZE_ALWAYS_INLINE bool checkAlignment(const T *address)
Checks the alignment of the given address.
Definition: AlignmentCheck.h:68
Header file for the alignment check function.
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.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101