35 #ifndef _BLAZE_MATH_SIMD_STREAM_H_
36 #define _BLAZE_MATH_SIMD_STREAM_H_
75 stream( T1* address,
const SIMDi8<T2>& value ) noexcept
80 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
82 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
84 *address = (~value).value;
101 stream( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
107 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
108 #elif BLAZE_SSE2_MODE
109 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
111 *address = (~value).value;
133 template<
typename T1
136 stream( T1* address,
const SIMDi16<T2>& value ) noexcept
141 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
142 #elif BLAZE_SSE2_MODE
143 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
145 *address = (~value).value;
159 template<
typename T1
162 stream( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
168 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
169 #elif BLAZE_SSE2_MODE
170 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
172 *address = (~value).value;
194 template<
typename T1
197 stream( T1* address,
const SIMDi32<T2>& value ) noexcept
202 _mm512_store_epi32( address, (~value).value );
203 #elif BLAZE_AVX2_MODE
204 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
205 #elif BLAZE_SSE2_MODE
206 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
208 *address = (~value).value;
222 template<
typename T1
225 stream( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
231 _mm512_store_epi32( address, (~value).value );
232 #elif BLAZE_AVX2_MODE
233 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
234 #elif BLAZE_SSE2_MODE
235 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
237 *address = (~value).value;
259 template<
typename T1
262 stream( T1* address,
const SIMDi64<T2>& value ) noexcept
267 _mm512_store_epi64( address, (~value).value );
268 #elif BLAZE_AVX2_MODE
269 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
270 #elif BLAZE_SSE2_MODE
271 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
273 *address = (~value).value;
287 template<
typename T1
290 stream( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
296 _mm512_store_epi64( address, (~value).value );
297 #elif BLAZE_AVX2_MODE
298 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
299 #elif BLAZE_SSE2_MODE
300 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
302 *address = (~value).value;
324 template<
typename T >
330 _mm512_storenr_ps( address, (~value).
eval().value );
332 _mm256_stream_ps( address, (~value).
eval().value );
334 _mm_stream_ps( address, (~value).
eval().value );
336 *address = (~value).
eval().value;
356 _mm512_storenr_ps( reinterpret_cast<float*>( address ), value.value );
358 _mm256_stream_ps( reinterpret_cast<float*>( address ), value.value );
360 _mm_stream_ps( reinterpret_cast<float*>( address ), value.value );
362 *address = value.value;
384 template<
typename T >
390 _mm512_storenr_pd( address, (~value).
eval().value );
392 _mm256_stream_pd( address, (~value).
eval().value );
393 #elif BLAZE_SSE2_MODE
394 _mm_stream_pd( address, (~value).
eval().value );
396 *address = (~value).
eval().value;
416 _mm512_storenr_pd( reinterpret_cast<double*>( address ), value.value );
418 _mm256_stream_pd( reinterpret_cast<double*>( address ), value.value );
419 #elif BLAZE_SSE2_MODE
420 _mm_stream_pd( reinterpret_cast<double*>( address ), value.value );
422 *address = value.value;
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
Header file for the EnableIf class template.
Header file for the basic SIMD types.
BLAZE_ALWAYS_INLINE EnableIf_< And< IsIntegral< T1 >, HasSize< T1, 1UL > > > stream(T1 *address, const SIMDi8< T2 > &value) noexcept
Aligned, non-temporal store of a vector of 1-byte integral values.
Definition: Stream.h:75
Header file for run time assertion macros.
Header file for the HasSize type trait.
SIMD type for 32-bit single precision complex values.
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:705
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