35 #ifndef _BLAZE_MATH_INTRINSICS_STOREU_H_
36 #define _BLAZE_MATH_INTRINSICS_STOREU_H_
91 template<
typename T >
96 typedef sse_int16_t Type;
103 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
104 #elif BLAZE_SSE2_MODE
105 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
107 *address = value.value;
126 template<
typename T >
131 typedef sse_int32_t Type;
138 _mm512_packstorelo_epi32( address, value.value );
139 _mm512_packstorehi_epi32( address+16UL, value.value );
140 #elif BLAZE_AVX2_MODE
141 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
142 #elif BLAZE_SSE2_MODE
143 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
145 *address = value.value;
164 template<
typename T >
169 typedef sse_int64_t Type;
176 _mm512_packstorelo_epi64( address, value.value );
177 _mm512_packstorehi_epi64( address+8UL, value.value );
178 #elif BLAZE_AVX2_MODE
179 _mm256_storeu_si256( reinterpret_cast<__m256i*>( address ), value.value );
180 #elif BLAZE_SSE2_MODE
181 _mm_storeu_si128( reinterpret_cast<__m128i*>( address ), value.value );
183 *address = value.value;
216 template<
typename T >
218 storeu( T* address,
const typename Storeu<T,
sizeof(T)>::Type& value )
239 _mm512_packstorelo_ps( address , value.value );
240 _mm512_packstorehi_ps( address+16UL, value.value );
242 _mm256_storeu_ps( address, value.value );
244 _mm_storeu_ps( address, value.value );
246 *address = value.value;
266 _mm512_packstorelo_pd( address , value.value );
267 _mm512_packstorehi_pd( address+8UL, value.value );
269 _mm256_storeu_pd( address, value.value );
270 #elif BLAZE_SSE2_MODE
271 _mm_storeu_pd( address, value.value );
273 *address = value.value;
295 _mm512_packstorelo_ps( reinterpret_cast<float*>( address ), value.value );
296 _mm512_packstorehi_ps( reinterpret_cast<float*>( address+8UL ), value.value );
298 _mm256_storeu_ps( reinterpret_cast<float*>( address ), value.value );
300 _mm_storeu_ps( reinterpret_cast<float*>( address ), value.value );
302 *address = value.value;
324 _mm512_packstorelo_pd( reinterpret_cast<double*>( address ), value.value );
325 _mm512_packstorehi_pd( reinterpret_cast<double*>( address+4UL ), value.value );
327 _mm256_storeu_pd( reinterpret_cast<double*>( address ), value.value );
328 #elif BLAZE_SSE2_MODE
329 _mm_storeu_pd( reinterpret_cast<double*>( address ), value.value );
331 *address = value.value;
Intrinsic type for 32-bit single precision complex values.
BLAZE_ALWAYS_INLINE void storeu(complex< double > *address, const sse_cdouble_t &value)
Unaligned store of a vector of 'complex' values.
Definition: Storeu.h:319
#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 basic type definitions.
BLAZE_ALWAYS_INLINE 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:218
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
System settings for the inline keywords.