35 #ifndef _BLAZE_MATH_INTRINSICS_STOREU_H_
36 #define _BLAZE_MATH_INTRINSICS_STOREU_H_
89 template<
typename T >
94 typedef sse_int16_t Type;
98 static inline void storeu( T* address,
const Type& value )
101 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
102 #elif BLAZE_SSE2_MODE
103 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
105 *address = value.value;
124 template<
typename T >
129 typedef sse_int32_t Type;
133 static inline void storeu( T* address,
const Type& value )
136 _mm512_packstorelo_epi32( address, value.value );
137 _mm512_packstorehi_epi32( address+16UL, value.value );
138 #elif BLAZE_AVX2_MODE
139 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
140 #elif BLAZE_SSE2_MODE
141 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
143 *address = value.value;
162 template<
typename T >
167 typedef sse_int64_t Type;
171 static inline void storeu( T* address,
const Type& value )
174 _mm512_packstorelo_epi64( address, value.value );
175 _mm512_packstorehi_epi64( address+8UL, value.value );
176 #elif BLAZE_AVX2_MODE
177 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
178 #elif BLAZE_SSE2_MODE
179 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
181 *address = value.value;
214 template<
typename T >
215 inline typename EnableIf< IsIntegral<T> >::Type
216 storeu( T* address,
const typename Storeu<T,
sizeof(T)>::Type& value )
237 _mm512_packstorelo_ps( address , value.value );
238 _mm512_packstorehi_ps( address+16UL, value.value );
240 _mm256_storeu_ps( address, value.value );
242 _mm_storeu_ps( address, value.value );
244 *address = value.value;
264 _mm512_packstorelo_pd( address , value.value );
265 _mm512_packstorehi_pd( address+8UL, value.value );
267 _mm256_storeu_pd( address, value.value );
268 #elif BLAZE_SSE2_MODE
269 _mm_storeu_pd( address, value.value );
271 *address = value.value;
293 _mm512_packstorelo_ps( reinterpret_cast<float*>( address ), value.value );
294 _mm512_packstorehi_ps( reinterpret_cast<float*>( address+8UL ), value.value );
296 _mm256_storeu_ps( reinterpret_cast<float*>( address ), value.value );
298 _mm_storeu_ps( reinterpret_cast<float*>( address ), value.value );
300 *address = value.value;
322 _mm512_packstorelo_pd( reinterpret_cast<double*>( address ), value.value );
323 _mm512_packstorehi_pd( reinterpret_cast<double*>( address+4UL ), value.value );
325 _mm256_storeu_pd( reinterpret_cast<double*>( address ), value.value );
326 #elif BLAZE_SSE2_MODE
327 _mm_storeu_pd( reinterpret_cast<double*>( address ), value.value );
329 *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
Intrinsic type for 32-bit single precision floating point data values.
Intrinsic type for 64-bit double precision complex values.
void storeu(complex< double > *address, const sse_cdouble_t &value)
Unaligned store of a vector of 'complex' values.
Definition: Storeu.h:317
Constraint on the data type.
Header file for the EnableIf class template.
EnableIf< IsIntegral< T > >::Type storeu(T *address, const typename Storeu< T, sizeof(T)>::Type &value)
Unaligned store of a vector of integral values.
Definition: Storeu.h:216
Intrinsic type for 64-bit double precision floating point data values.
Header file for the basic intrinsic types.
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:143