35 #ifndef _BLAZE_MATH_SIMD_STOREA_H_ 36 #define _BLAZE_MATH_SIMD_STOREA_H_ 78 storea( T1* address,
const SIMDi8<T2>& value ) noexcept
82 #if BLAZE_AVX512BW_MODE 83 _mm512_store_si512( address, (~value).value );
85 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
87 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
89 *address = (~value).value;
107 template<
typename T1
110 storea( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
115 #if BLAZE_AVX512BW_MODE 116 _mm512_store_si512( address, (~value).value );
117 #elif BLAZE_AVX2_MODE 118 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
119 #elif BLAZE_SSE2_MODE 120 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
122 *address = (~value).value;
148 template<
typename T1
151 storea( T1* address,
const SIMDi16<T2>& value ) noexcept
155 #if BLAZE_AVX512BW_MODE 156 _mm512_store_si512( address, (~value).value );
157 #elif BLAZE_AVX2_MODE 158 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
159 #elif BLAZE_SSE2_MODE 160 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
162 *address = (~value).value;
180 template<
typename T1
183 storea( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
188 #if BLAZE_AVX512BW_MODE 189 _mm512_store_si512( address, (~value).value );
190 #elif BLAZE_AVX2_MODE 191 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
192 #elif BLAZE_SSE2_MODE 193 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
195 *address = (~value).value;
221 template<
typename T1
224 storea( T1* address,
const SIMDi32<T2>& value ) noexcept
228 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 229 _mm512_store_epi32( address, (~value).value );
230 #elif BLAZE_AVX2_MODE 231 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
232 #elif BLAZE_SSE2_MODE 233 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
235 *address = (~value).value;
253 template<
typename T1
256 storea( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
261 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 262 _mm512_store_epi32( address, (~value).value );
263 #elif BLAZE_AVX2_MODE 264 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
265 #elif BLAZE_SSE2_MODE 266 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
268 *address = (~value).value;
294 template<
typename T1
297 storea( T1* address,
const SIMDi64<T2>& value ) noexcept
301 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 302 _mm512_store_epi64( address, (~value).value );
303 #elif BLAZE_AVX2_MODE 304 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
305 #elif BLAZE_SSE2_MODE 306 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
308 *address = (~value).value;
326 template<
typename T1
329 storea( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
334 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 335 _mm512_store_epi64( address, (~value).value );
336 #elif BLAZE_AVX2_MODE 337 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
338 #elif BLAZE_SSE2_MODE 339 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
341 *address = (~value).value;
367 template<
typename T >
372 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 373 _mm512_store_ps( address, (~value).
eval().value );
375 _mm256_store_ps( address, (~value).
eval().value );
377 _mm_store_ps( address, (~value).
eval().value );
379 *address = (~value).
eval().value;
402 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 403 _mm512_store_ps( reinterpret_cast<float*>( address ), value.value );
405 _mm256_store_ps( reinterpret_cast<float*>( address ), value.value );
407 _mm_store_ps( reinterpret_cast<float*>( address ), value.value );
409 *address = value.value;
435 template<
typename T >
440 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 441 _mm512_store_pd( address, (~value).
eval().value );
443 _mm256_store_pd( address, (~value).
eval().value );
444 #elif BLAZE_SSE2_MODE 445 _mm_store_pd( address, (~value).
eval().value );
447 *address = (~value).
eval().value;
470 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 471 _mm512_store_pd( reinterpret_cast<double*>( address ), value.value );
473 _mm256_store_pd( reinterpret_cast<double*>( address ), value.value );
474 #elif BLAZE_SSE2_MODE 475 _mm_store_pd( reinterpret_cast<double*>( address ), value.value );
477 *address = value.value;
Header file for the IsIntegral type trait.
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
BLAZE_ALWAYS_INLINE EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< T1, 1UL > > storea(T1 *address, const SIMDi8< T2 > &value) noexcept
Aligned store of a vector of 1-byte integral values.
Definition: Storea.h:78
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 run time assertion macros.
Header file for the HasSize type trait.
SIMD type for 32-bit single precision complex values.
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