35 #ifndef _BLAZE_MATH_SIMD_STREAM_H_ 36 #define _BLAZE_MATH_SIMD_STREAM_H_ 75 stream( T1* address,
const SIMDi8<T2>& value ) noexcept
79 #if BLAZE_AVX512BW_MODE 80 _mm512_stream_si512( address, (~value).value );
82 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
84 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
86 *address = (~value).value;
100 template<
typename T1
103 stream( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
108 #if BLAZE_AVX512BW_MODE 109 _mm512_stream_si512( address, (~value).value );
110 #elif BLAZE_AVX2_MODE 111 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
112 #elif BLAZE_SSE2_MODE 113 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
115 *address = (~value).value;
137 template<
typename T1
140 stream( T1* address,
const SIMDi16<T2>& value ) noexcept
144 #if BLAZE_AVX512BW_MODE 145 _mm512_stream_si512( address, (~value).value );
146 #elif BLAZE_AVX2_MODE 147 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
148 #elif BLAZE_SSE2_MODE 149 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
151 *address = (~value).value;
165 template<
typename T1
168 stream( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
173 #if BLAZE_AVX512BW_MODE 174 _mm512_stream_si512( address, (~value).value );
175 #elif BLAZE_AVX2_MODE 176 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
177 #elif BLAZE_SSE2_MODE 178 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
180 *address = (~value).value;
202 template<
typename T1
205 stream( T1* address,
const SIMDi32<T2>& value ) noexcept
209 #if BLAZE_AVX512F_MODE 210 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
212 _mm512_store_epi32( address, (~value).value );
213 #elif BLAZE_AVX2_MODE 214 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
215 #elif BLAZE_SSE2_MODE 216 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
218 *address = (~value).value;
232 template<
typename T1
235 stream( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
240 #if BLAZE_AVX512F_MODE 241 _mm512_stream_si512( address, (~value).value );
243 _mm512_store_epi32( address, (~value).value );
244 #elif BLAZE_AVX2_MODE 245 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
246 #elif BLAZE_SSE2_MODE 247 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
249 *address = (~value).value;
271 template<
typename T1
274 stream( T1* address,
const SIMDi64<T2>& value ) noexcept
278 #if BLAZE_AVX512F_MODE 279 _mm512_stream_si512( address, (~value).value );
281 _mm512_store_epi64( address, (~value).value );
282 #elif BLAZE_AVX2_MODE 283 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
284 #elif BLAZE_SSE2_MODE 285 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
287 *address = (~value).value;
301 template<
typename T1
304 stream( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
309 #if BLAZE_AVX512F_MODE 310 _mm512_stream_si512( address, (~value).value );
312 _mm512_store_epi64( address, (~value).value );
313 #elif BLAZE_AVX2_MODE 314 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
315 #elif BLAZE_SSE2_MODE 316 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
318 *address = (~value).value;
340 template<
typename T >
345 #if BLAZE_AVX512F_MODE 346 _mm512_stream_ps( address, (~value).value );
348 _mm512_storenr_ps( address, (~value).
eval().value );
350 _mm256_stream_ps( address, (~value).
eval().value );
352 _mm_stream_ps( address, (~value).
eval().value );
354 *address = (~value).
eval().value;
373 #if BLAZE_AVX512F_MODE 374 _mm512_stream_ps( reinterpret_cast<float*>( address ), (~value).value );
376 _mm512_storenr_ps( reinterpret_cast<float*>( address ), value.value );
378 _mm256_stream_ps( reinterpret_cast<float*>( address ), value.value );
380 _mm_stream_ps( reinterpret_cast<float*>( address ), value.value );
382 *address = value.value;
404 template<
typename T >
409 #if BLAZE_AVX512F_MODE 410 _mm512_stream_pd( address, (~value).value );
412 _mm512_storenr_pd( address, (~value).
eval().value );
414 _mm256_stream_pd( address, (~value).
eval().value );
415 #elif BLAZE_SSE2_MODE 416 _mm_stream_pd( address, (~value).
eval().value );
418 *address = (~value).
eval().value;
437 #if BLAZE_AVX512F_MODE 438 _mm512_stream_pd( reinterpret_cast<double*>( address ), (~value).value );
440 _mm512_storenr_pd( reinterpret_cast<double*>( address ), value.value );
442 _mm256_stream_pd( reinterpret_cast<double*>( address ), value.value );
443 #elif BLAZE_SSE2_MODE 444 _mm_stream_pd( reinterpret_cast<double*>( address ), value.value );
446 *address = value.value;
Compile time size check.This class offers the possibility to test the size of a type at compile time...
Definition: HasSize.h:75
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
decltype(auto) eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:797
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.
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