35 #ifndef _BLAZE_MATH_INTRINSICS_STORE_H_
36 #define _BLAZE_MATH_INTRINSICS_STORE_H_
93 template<
typename T >
98 typedef sse_int16_t Type;
107 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), value.value );
108 #elif BLAZE_SSE2_MODE
109 _mm_store_si128( reinterpret_cast<__m128i*>( address ), value.value );
111 *address = value.value;
130 template<
typename T >
135 typedef sse_int32_t Type;
144 _mm512_store_epi32( address, value.value );
145 #elif BLAZE_AVX2_MODE
146 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), value.value );
147 #elif BLAZE_SSE2_MODE
148 _mm_store_si128( reinterpret_cast<__m128i*>( address ), value.value );
150 *address = value.value;
169 template<
typename T >
174 typedef sse_int64_t Type;
183 _mm512_store_epi64( address, value.value );
184 #elif BLAZE_AVX2_MODE
185 _mm256_store_si256( reinterpret_cast<__m256i*>( address ), value.value );
186 #elif BLAZE_SSE2_MODE
187 _mm_store_si128( reinterpret_cast<__m128i*>( address ), value.value );
189 *address = value.value;
223 template<
typename T >
225 store( T* address,
const typename Store<T,
sizeof(T)>::Type& value )
249 _mm512_store_ps( address, value.value );
251 _mm256_store_ps( address, value.value );
253 _mm_store_ps( address, value.value );
255 *address = value.value;
278 _mm512_store_pd( address, value.value );
280 _mm256_store_pd( address, value.value );
281 #elif BLAZE_SSE2_MODE
282 _mm_store_pd( address, value.value );
284 *address = value.value;
308 _mm512_store_ps( reinterpret_cast<float*>( address ), value.value );
310 _mm256_store_ps( reinterpret_cast<float*>( address ), value.value );
312 _mm_store_ps( reinterpret_cast<float*>( address ), value.value );
314 *address = value.value;
338 _mm512_store_pd( reinterpret_cast<double*>( address ), value.value );
340 _mm256_store_pd( reinterpret_cast<double*>( address ), value.value );
341 #elif BLAZE_SSE2_MODE
342 _mm_store_pd( reinterpret_cast<double*>( address ), value.value );
344 *address = value.value;
Intrinsic type for 32-bit single precision complex values.
#define BLAZE_CONSTRAINT_MUST_BE_INTEGRAL_TYPE(T)
Constraint on the data type.In case the given data type T is not an integral data type...
Definition: Integral.h:78
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Intrinsic type for 32-bit single precision floating point data values.
Intrinsic type for 64-bit double precision complex values.
Constraint on the data type.
Header file for the EnableIf class template.
Intrinsic type for 64-bit double precision floating point data values.
Header file for the basic intrinsic types.
Header file for run time assertion macros.
bool checkAlignment(const T *address)
Checks the alignment of the given.
Definition: AlignmentCheck.h:68
Header file for the alignment check function.
Header file for basic type definitions.
System settings for the SSE mode.
Header file for the complex data type.
BLAZE_ALWAYS_INLINE void store(complex< double > *address, const sse_cdouble_t &value)
Aligned store of a vector of 'complex' values.
Definition: Store.h:332
#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:143
BLAZE_ALWAYS_INLINE EnableIf< IsIntegral< T > >::Type store(T *address, const typename Store< T, sizeof(T)>::Type &value)
Aligned store of a vector of integral values.
Definition: Store.h:225
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