35 #ifndef _BLAZE_MATH_SIMD_STOREA_H_ 36 #define _BLAZE_MATH_SIMD_STOREA_H_ 79 storea( T1* address,
const SIMDi8<T2>& value ) noexcept
83 #if BLAZE_AVX512BW_MODE 84 _mm512_store_si512( address, (~value).value );
86 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
88 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
90 *address = (~value).value;
108 template<
typename T1
111 storea( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
116 #if BLAZE_AVX512BW_MODE 117 _mm512_store_si512( address, (~value).value );
118 #elif BLAZE_AVX2_MODE 119 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
120 #elif BLAZE_SSE2_MODE 121 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
123 *address = (~value).value;
149 template<
typename T1
152 storea( T1* address,
const SIMDi16<T2>& value ) noexcept
156 #if BLAZE_AVX512BW_MODE 157 _mm512_store_si512( address, (~value).value );
158 #elif BLAZE_AVX2_MODE 159 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
160 #elif BLAZE_SSE2_MODE 161 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
163 *address = (~value).value;
181 template<
typename T1
184 storea( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
189 #if BLAZE_AVX512BW_MODE 190 _mm512_store_si512( address, (~value).value );
191 #elif BLAZE_AVX2_MODE 192 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
193 #elif BLAZE_SSE2_MODE 194 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
196 *address = (~value).value;
222 template<
typename T1
225 storea( T1* address,
const SIMDi32<T2>& value ) noexcept
229 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 230 _mm512_store_epi32( address, (~value).value );
231 #elif BLAZE_AVX2_MODE 232 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
233 #elif BLAZE_SSE2_MODE 234 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
236 *address = (~value).value;
254 template<
typename T1
257 storea( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
262 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 263 _mm512_store_epi32( address, (~value).value );
264 #elif BLAZE_AVX2_MODE 265 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
266 #elif BLAZE_SSE2_MODE 267 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
269 *address = (~value).value;
295 template<
typename T1
298 storea( T1* address,
const SIMDi64<T2>& value ) noexcept
302 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 303 _mm512_store_epi64( address, (~value).value );
304 #elif BLAZE_AVX2_MODE 305 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
306 #elif BLAZE_SSE2_MODE 307 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
309 *address = (~value).value;
327 template<
typename T1
330 storea( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
335 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 336 _mm512_store_epi64( address, (~value).value );
337 #elif BLAZE_AVX2_MODE 338 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
339 #elif BLAZE_SSE2_MODE 340 _mm_store_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
342 *address = (~value).value;
368 template<
typename T >
373 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 374 _mm512_store_ps( address, (~value).
eval().value );
376 _mm256_store_ps( address, (~value).
eval().value );
378 _mm_store_ps( address, (~value).
eval().value );
380 *address = (~value).
eval().value;
403 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 404 _mm512_store_ps( reinterpret_cast<float*>( address ), value.value );
406 _mm256_store_ps( reinterpret_cast<float*>( address ), value.value );
408 _mm_store_ps( reinterpret_cast<float*>( address ), value.value );
410 *address = value.value;
436 template<
typename T >
441 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 442 _mm512_store_pd( address, (~value).
eval().value );
444 _mm256_store_pd( address, (~value).
eval().value );
445 #elif BLAZE_SSE2_MODE 446 _mm_store_pd( address, (~value).
eval().value );
448 *address = (~value).
eval().value;
471 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 472 _mm512_store_pd( reinterpret_cast<double*>( address ), value.value );
474 _mm256_store_pd( reinterpret_cast<double*>( address ), value.value );
475 #elif BLAZE_SSE2_MODE 476 _mm_store_pd( reinterpret_cast<double*>( address ), value.value );
478 *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
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.
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
decltype(auto) eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:797
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