35 #ifndef _BLAZE_MATH_SIMD_STREAM_H_ 36 #define _BLAZE_MATH_SIMD_STREAM_H_ 74 stream( T1* address,
const SIMDi8<T2>& value ) noexcept
78 #if BLAZE_AVX512BW_MODE 79 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
81 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
83 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
85 *address = (~value).value;
102 stream( complex<T1>* address,
const SIMDci8<T2>& value ) noexcept
107 #if BLAZE_AVX512BW_MODE 108 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
109 #elif BLAZE_AVX2_MODE 110 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
111 #elif BLAZE_SSE2_MODE 112 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
114 *address = (~value).value;
136 template<
typename T1
139 stream( T1* address,
const SIMDi16<T2>& value ) noexcept
143 #if BLAZE_AVX512BW_MODE 144 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
145 #elif BLAZE_AVX2_MODE 146 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
147 #elif BLAZE_SSE2_MODE 148 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
150 *address = (~value).value;
164 template<
typename T1
167 stream( complex<T1>* address,
const SIMDci16<T2>& value ) noexcept
172 #if BLAZE_AVX512BW_MODE 173 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
174 #elif BLAZE_AVX2_MODE 175 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
176 #elif BLAZE_SSE2_MODE 177 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
179 *address = (~value).value;
201 template<
typename T1
204 stream( T1* address,
const SIMDi32<T2>& value ) noexcept
208 #if BLAZE_AVX512F_MODE 209 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
211 _mm512_store_epi32( address, (~value).value );
212 #elif BLAZE_AVX2_MODE 213 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
214 #elif BLAZE_SSE2_MODE 215 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
217 *address = (~value).value;
231 template<
typename T1
234 stream( complex<T1>* address,
const SIMDci32<T2>& value ) noexcept
239 #if BLAZE_AVX512F_MODE 240 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
242 _mm512_store_epi32( address, (~value).value );
243 #elif BLAZE_AVX2_MODE 244 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
245 #elif BLAZE_SSE2_MODE 246 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
248 *address = (~value).value;
270 template<
typename T1
273 stream( T1* address,
const SIMDi64<T2>& value ) noexcept
277 #if BLAZE_AVX512F_MODE 278 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
280 _mm512_store_epi64( address, (~value).value );
281 #elif BLAZE_AVX2_MODE 282 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
283 #elif BLAZE_SSE2_MODE 284 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
286 *address = (~value).value;
300 template<
typename T1
303 stream( complex<T1>* address,
const SIMDci64<T2>& value ) noexcept
308 #if BLAZE_AVX512F_MODE 309 _mm512_stream_si512( reinterpret_cast<__m512i*>( address ), (~value).value );
311 _mm512_store_epi64( address, (~value).value );
312 #elif BLAZE_AVX2_MODE 313 _mm256_stream_si256( reinterpret_cast<__m256i*>( address ), (~value).value );
314 #elif BLAZE_SSE2_MODE 315 _mm_stream_si128( reinterpret_cast<__m128i*>( address ), (~value).value );
317 *address = (~value).value;
339 template<
typename T >
344 #if BLAZE_AVX512F_MODE 345 _mm512_stream_ps( address, (~value).value );
347 _mm512_storenr_ps( address, (~value).
eval().value );
349 _mm256_stream_ps( address, (~value).
eval().value );
351 _mm_stream_ps( address, (~value).
eval().value );
353 *address = (~value).
eval().value;
372 #if BLAZE_AVX512F_MODE 373 _mm512_stream_ps( reinterpret_cast<float*>( address ), (~value).value );
375 _mm512_storenr_ps( reinterpret_cast<float*>( address ), value.value );
377 _mm256_stream_ps( reinterpret_cast<float*>( address ), value.value );
379 _mm_stream_ps( reinterpret_cast<float*>( address ), value.value );
381 *address = value.value;
403 template<
typename T >
408 #if BLAZE_AVX512F_MODE 409 _mm512_stream_pd( address, (~value).value );
411 _mm512_storenr_pd( address, (~value).
eval().value );
413 _mm256_stream_pd( address, (~value).
eval().value );
414 #elif BLAZE_SSE2_MODE 415 _mm_stream_pd( address, (~value).
eval().value );
417 *address = (~value).
eval().value;
436 #if BLAZE_AVX512F_MODE 437 _mm512_stream_pd( reinterpret_cast<double*>( address ), (~value).value );
439 _mm512_storenr_pd( reinterpret_cast<double*>( address ), value.value );
441 _mm256_stream_pd( reinterpret_cast<double*>( address ), value.value );
442 #elif BLAZE_SSE2_MODE 443 _mm_stream_pd( reinterpret_cast<double*>( address ), value.value );
445 *address = value.value;
Header file for the IsIntegral type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#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:786
Header file for the EnableIf class template.
Header file for the basic SIMD types.
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 EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< 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:74
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