35#ifndef _BLAZE_MATH_SIMD_LOADU_H_
36#define _BLAZE_MATH_SIMD_LOADU_H_
76 loadu(
const T* address )
noexcept
78#if BLAZE_AVX512BW_MODE
79 return _mm512_loadu_si512(
reinterpret_cast<const __m512i*
>( address ) );
81 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
83 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
101template<
typename T >
104 loadu(
const complex<T>* address )
noexcept
108#if BLAZE_AVX512BW_MODE
109 return _mm512_loadu_si512(
reinterpret_cast<const __m512i*
>( address ) );
111 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
113 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
139template<
typename T >
144#if BLAZE_AVX512BW_MODE
145 return _mm512_loadu_si512(
reinterpret_cast<const __m512i*
>( address ) );
147 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
149 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
167template<
typename T >
170 loadu(
const complex<T>* address )
noexcept
174#if BLAZE_AVX512BW_MODE
175 return _mm512_loadu_si512(
reinterpret_cast<const __m512i*
>( address ) );
177 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
179 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
205template<
typename T >
210#if BLAZE_AVX512F_MODE
211 return _mm512_maskz_loadu_epi32( 0xFFFF,
reinterpret_cast<const __m512i*
>( address ) );
213 __m512i v1 = _mm512_setzero_si512();
214 v1 = _mm512_loadunpacklo_epi32( v1, address );
215 v1 = _mm512_loadunpackhi_epi32( v1, address+16UL );
218 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
220 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
238template<
typename T >
241 loadu(
const complex<T>* address )
noexcept
245#if BLAZE_AVX512F_MODE
246 return _mm512_maskz_loadu_epi32( 0xFFFF, address );
248 __m512i v1 = _mm512_setzero_si512();
249 v1 = _mm512_loadunpacklo_epi32( v1, address );
250 v1 = _mm512_loadunpackhi_epi32( v1, address+8UL );
253 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
255 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
281template<
typename T >
286#if BLAZE_AVX512F_MODE
287 return _mm512_maskz_loadu_epi64( 0xFF, address );
289 __m512i v1 = _mm512_setzero_si512();
290 v1 = _mm512_loadunpacklo_epi64( v1, address );
291 v1 = _mm512_loadunpackhi_epi64( v1, address+8UL );
294 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
296 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
314template<
typename T >
317 loadu(
const complex<T>* address )
noexcept
321#if BLAZE_AVX512F_MODE
322 return _mm512_maskz_loadu_epi64( 0xFF, address );
324 __m512i v1 = _mm512_setzero_si512();
325 v1 = _mm512_loadunpacklo_epi64( v1, address );
326 v1 = _mm512_loadunpackhi_epi64( v1, address+4UL );
329 return _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>( address ) );
331 return _mm_loadu_si128(
reinterpret_cast<const __m128i*
>( address ) );
359#if BLAZE_AVX512F_MODE
360 return _mm512_loadu_ps( address );
362 __m512 v1 = _mm512_setzero_ps();
363 v1 = _mm512_loadunpacklo_ps( v1, address );
364 v1 = _mm512_loadunpackhi_ps( v1, address+16UL );
367 return _mm256_loadu_ps( address );
369 return _mm_loadu_ps( address );
391#if BLAZE_AVX512F_MODE
392 return _mm512_loadu_ps( address );
394 __m512 v1 = _mm512_setzero_ps();
395 v1 = _mm512_loadunpacklo_ps( v1,
reinterpret_cast<const float*
>( address ) );
396 v1 = _mm512_loadunpackhi_ps( v1,
reinterpret_cast<const float*
>( address+8UL ) );
399 return _mm256_loadu_ps(
reinterpret_cast<const float*
>( address ) );
401 return _mm_loadu_ps(
reinterpret_cast<const float*
>( address ) );
429#if BLAZE_AVX512F_MODE
430 return _mm512_loadu_pd( address );
432 __m512d v1 = _mm512_setzero_pd();
433 v1 = _mm512_loadunpacklo_pd( v1, address );
434 v1 = _mm512_loadunpackhi_pd( v1, address+8UL );
437 return _mm256_loadu_pd( address );
439 return _mm_loadu_pd( address );
461#if BLAZE_AVX512F_MODE
462 return _mm512_loadu_pd( address );
464 __m512d v1 = _mm512_setzero_pd();
465 v1 = _mm512_loadunpacklo_pd( v1,
reinterpret_cast<const double*
>( address ) );
466 v1 = _mm512_loadunpackhi_pd( v1,
reinterpret_cast<const double*
>( address+4UL ) );
469 return _mm256_loadu_pd(
reinterpret_cast<const double*
>( address ) );
471 return _mm_loadu_pd(
reinterpret_cast<const double*
>( address ) );
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 If class template.
Header file for the IsIntegral type trait.
Header file for the IsSigned type trait.
SIMD type for 64-bit double precision complex values.
SIMD type for 32-bit single precision complex values.
SIMD type for 16-bit signed integral complex values.
SIMD type for 32-bit signed integral complex values.
SIMD type for 64-bit signed integral complex values.
SIMD type for 8-bit signed integral complex values.
SIMD type for 16-bit unsigned integral complex values.
SIMD type for 32-bit unsigned integral complex values.
SIMD type for 64-bit unsigned integral complex values.
SIMD type for 8-bit unsigned integral complex values.
SIMD type for 64-bit double precision floating point data values.
SIMD type for 32-bit single precision floating point data values.
SIMD type for 16-bit signed integral data values.
SIMD type for 32-bit signed integral data values.
SIMD type for 64-bit integral data values.
SIMD type for 8-bit signed integral data values.
SIMD type for 16-bit unsigned integral data values.
SIMD type for 32-bit unsigned integral data values.
SIMD type for 64-bit unsigned integral data values.
SIMD type for 8-bit unsigned integral data values.
BLAZE_ALWAYS_INLINE const SIMDcdouble loadu(const complex< double > *address) noexcept
Loads a vector of 'complex<double>' values.
Definition: Loadu.h:457
#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
typename If< Condition >::template Type< T1, T2 > If_t
Auxiliary alias template for the If class template.
Definition: If.h:108
System settings for the inline keywords.
System settings for the SSE mode.