35 #ifndef _BLAZE_MATH_INTRINSICS_STREAM_H_
36 #define _BLAZE_MATH_INTRINSICS_STREAM_H_
90 template<
typename T >
95 typedef sse_int16_t Type;
99 static inline void stream( T* address,
const Type& value )
104 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), value.value );
105 #elif BLAZE_SSE2_MODE
106 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), value.value );
108 *address = value.value;
127 template<
typename T >
132 typedef sse_int32_t Type;
136 static inline void stream( T* address,
const Type& value )
141 _mm512_store_epi32( address, value.value );
142 #elif BLAZE_AVX2_MODE
143 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), value.value );
144 #elif BLAZE_SSE2_MODE
145 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), value.value );
147 *address = value.value;
166 template<
typename T >
171 typedef sse_int64_t Type;
175 static inline void stream( T* address,
const Type& value )
180 _mm512_store_epi64( address, value.value );
181 #elif BLAZE_AVX2_MODE
182 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), value.value );
183 #elif BLAZE_SSE2_MODE
184 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), value.value );
186 *address = value.value;
216 template<
typename T >
217 inline typename EnableIf< IsIntegral<T> >::Type
218 stream( T* address,
const typename Stream<T,
sizeof(T)>::Type& value )
238 _mm512_storenr_ps( address, value.value );
240 _mm256_stream_ps( address, value.value );
242 _mm_stream_ps( address, value.value );
244 *address = value.value;
263 _mm512_storenr_pd( address, value.value );
265 _mm256_stream_pd( address, value.value );
266 #elif BLAZE_SSE2_MODE
267 _mm_stream_pd( address, value.value );
269 *address = value.value;
289 _mm512_storenr_ps( reinterpret_cast<float*>( address ), value.value );
291 _mm256_stream_ps( reinterpret_cast<float*>( address ), value.value );
293 _mm_stream_ps( reinterpret_cast<float*>( address ), value.value );
295 *address = value.value;
315 _mm512_storenr_pd( reinterpret_cast<double*>( address ), value.value );
317 _mm256_stream_pd( reinterpret_cast<double*>( address ), value.value );
318 #elif BLAZE_SSE2_MODE
319 _mm_stream_pd( reinterpret_cast<double*>( address ), value.value );
321 *address = value.value;
Intrinsic type for 32-bit single precision complex values.
void stream(float *address, const sse_float_t &value)
Aligned, non-temporal store of a vector of 'float' values.
Definition: Stream.h:233
#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.
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.
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
#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