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 );
110 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
112 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
114 *address = (*value).value;
139 stream( T1* address,
const SIMDi16<T2>& value )
noexcept
143#if BLAZE_AVX512BW_MODE
144 _mm512_stream_si512(
reinterpret_cast<__m512i*
>( address ), (*value).value );
146 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
148 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
150 *address = (*value).value;
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 );
175 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
177 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
179 *address = (*value).value;
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 );
213 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
215 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
217 *address = (*value).value;
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 );
244 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
246 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
248 *address = (*value).value;
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 );
282 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
284 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
286 *address = (*value).value;
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 );
313 _mm256_stream_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
315 _mm_stream_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
317 *address = (*value).value;
339template<
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;
403template<
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 );
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 );
443 _mm_stream_pd(
reinterpret_cast<double*
>( address ), value.value );
445 *address = value.value;
Header file for the alignment check function.
Header file for run time assertion macros.
Header file for the basic SIMD types.
Header file for the complex data type.
Header file for the EnableIf class template.
Header file for the HasSize type trait.
Header file for the IsIntegral type trait.
SIMD type for 64-bit double precision complex values.
SIMD type for 32-bit single precision complex values.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
BLAZE_ALWAYS_INLINE void stream(complex< double > *address, const SIMDcdouble &value) noexcept
Aligned, non-temporal store of a vector of 'complex<double>' values.
Definition: Stream.h:431
#define BLAZE_STATIC_ASSERT(expr)
Compile time assertion macro.
Definition: StaticAssert.h:112
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
BLAZE_ALWAYS_INLINE bool checkAlignment(const T *address)
Checks the alignment of the given address.
Definition: AlignmentCheck.h:68
System settings for the inline keywords.
System settings for the SSE mode.