35#ifndef _BLAZE_MATH_SIMD_STOREA_H_
36#define _BLAZE_MATH_SIMD_STOREA_H_
78 storea( T1* address,
const SIMDi8<T2>& value )
noexcept
82#if BLAZE_AVX512BW_MODE
83 _mm512_store_si512( address, (*value).value );
85 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
87 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
89 *address = (*value).value;
110 storea( complex<T1>* address,
const SIMDci8<T2>& value )
noexcept
115#if BLAZE_AVX512BW_MODE
116 _mm512_store_si512( address, (*value).value );
118 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
120 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
122 *address = (*value).value;
151 storea( T1* address,
const SIMDi16<T2>& value )
noexcept
155#if BLAZE_AVX512BW_MODE
156 _mm512_store_si512( address, (*value).value );
158 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
160 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
162 *address = (*value).value;
183 storea( complex<T1>* address,
const SIMDci16<T2>& value )
noexcept
188#if BLAZE_AVX512BW_MODE
189 _mm512_store_si512( address, (*value).value );
191 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
193 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
195 *address = (*value).value;
224 storea( T1* address,
const SIMDi32<T2>& value )
noexcept
228#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
229 _mm512_store_epi32( address, (*value).value );
231 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
233 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
235 *address = (*value).value;
256 storea( complex<T1>* address,
const SIMDci32<T2>& value )
noexcept
261#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
262 _mm512_store_epi32( address, (*value).value );
264 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
266 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
268 *address = (*value).value;
297 storea( T1* address,
const SIMDi64<T2>& value )
noexcept
301#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
302 _mm512_store_epi64( address, (*value).value );
304 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
306 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
308 *address = (*value).value;
329 storea( complex<T1>* address,
const SIMDci64<T2>& value )
noexcept
334#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
335 _mm512_store_epi64( address, (*value).value );
337 _mm256_store_si256(
reinterpret_cast<__m256i*
>( address ), (*value).value );
339 _mm_store_si128(
reinterpret_cast<__m128i*
>( address ), (*value).value );
341 *address = (*value).value;
367template<
typename T >
372#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
373 _mm512_store_ps( address, (*value).eval().value );
375 _mm256_store_ps( address, (*value).eval().value );
377 _mm_store_ps( address, (*value).eval().value );
379 *address = (*value).eval().value;
402#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
403 _mm512_store_ps(
reinterpret_cast<float*
>( address ), value.value );
405 _mm256_store_ps(
reinterpret_cast<float*
>( address ), value.value );
407 _mm_store_ps(
reinterpret_cast<float*
>( address ), value.value );
409 *address = value.value;
435template<
typename T >
440#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
441 _mm512_store_pd( address, (*value).eval().value );
443 _mm256_store_pd( address, (*value).eval().value );
445 _mm_store_pd( address, (*value).eval().value );
447 *address = (*value).eval().value;
470#if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
471 _mm512_store_pd(
reinterpret_cast<double*
>( address ), value.value );
473 _mm256_store_pd(
reinterpret_cast<double*
>( address ), value.value );
475 _mm_store_pd(
reinterpret_cast<double*
>( address ), value.value );
477 *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 storea(complex< double > *address, const SIMDcdouble &value) noexcept
Aligned store of a vector of 'complex<double>' values.
Definition: Storea.h:465
#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.