35 #ifndef _BLAZE_MATH_SIMD_LOADA_H_ 36 #define _BLAZE_MATH_SIMD_LOADA_H_ 77 template<
typename T >
79 , If_< IsSigned<T>, SIMDint8, SIMDuint8 > >
80 loada(
const T* address ) noexcept
84 #if BLAZE_AVX512BW_MODE 85 return _mm512_load_si512( reinterpret_cast<const __m512i*>( address ) );
87 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
89 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
108 template<
typename T >
111 loada(
const complex<T>* address ) noexcept
116 #if BLAZE_AVX512BW_MODE 117 return _mm512_load_si512( reinterpret_cast<const __m512i*>( address ) );
118 #elif BLAZE_AVX2_MODE 119 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
120 #elif BLAZE_SSE2_MODE 121 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
148 template<
typename T >
155 #if BLAZE_AVX512BW_MODE 156 return _mm512_load_si512( reinterpret_cast<const __m512i*>( address ) );
157 #elif BLAZE_AVX2_MODE 158 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
159 #elif BLAZE_SSE2_MODE 160 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
179 template<
typename T >
182 loada(
const complex<T>* address ) noexcept
187 #if BLAZE_AVX512BW_MODE 188 return _mm512_load_si512( reinterpret_cast<const __m512i*>( address ) );
189 #elif BLAZE_AVX2_MODE 190 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
191 #elif BLAZE_SSE2_MODE 192 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
219 template<
typename T >
226 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 227 return _mm512_load_epi32( address );
228 #elif BLAZE_AVX2_MODE 229 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
230 #elif BLAZE_SSE2_MODE 231 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
250 template<
typename T >
253 loada(
const complex<T>* address ) noexcept
258 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 259 return _mm512_load_epi32( address );
260 #elif BLAZE_AVX2_MODE 261 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
262 #elif BLAZE_SSE2_MODE 263 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
290 template<
typename T >
297 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 298 return _mm512_load_epi64( address );
299 #elif BLAZE_AVX2_MODE 300 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
301 #elif BLAZE_SSE2_MODE 302 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
321 template<
typename T >
324 loada(
const complex<T>* address ) noexcept
329 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 330 return _mm512_load_epi64( address );
331 #elif BLAZE_AVX2_MODE 332 return _mm256_load_si256( reinterpret_cast<const __m256i*>( address ) );
333 #elif BLAZE_SSE2_MODE 334 return _mm_load_si128( reinterpret_cast<const __m128i*>( address ) );
336 return If_< IsSigned<T>, SIMDcint64,
SIMDcuint64 >( *address );
365 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 366 return _mm512_load_ps( address );
368 return _mm256_load_ps( address );
370 return _mm_load_ps( address );
394 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 395 return _mm512_load_ps( reinterpret_cast<const float*>( address ) );
397 return _mm256_load_ps( reinterpret_cast<const float*>( address ) );
399 return _mm_load_ps( reinterpret_cast<const float*>( address ) );
430 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 431 return _mm512_load_pd( address );
433 return _mm256_load_pd( address );
434 #elif BLAZE_SSE2_MODE 435 return _mm_load_pd( address );
459 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE 460 return _mm512_load_pd( reinterpret_cast<const double*>( address ) );
462 return _mm256_load_pd( reinterpret_cast<const double*>( address ) );
463 #elif BLAZE_SSE2_MODE 464 return _mm_load_pd( reinterpret_cast<const double*>( address ) );
SIMD type for 16-bit signed integral data values.
SIMD type for 32-bit unsigned integral complex values.
SIMD type for 16-bit unsigned integral complex values.
SIMD type for 32-bit signed integral complex values.
Header file for the IsIntegral type trait.
Header file for the And class template.
SIMD type for 32-bit unsigned integral data values.
SIMD type for 64-bit double precision floating point data values.
SIMD type for 64-bit unsigned integral complex values.
SIMD type for 16-bit signed integral complex values.
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
Header file for the If class template.
SIMD type for 16-bit unsigned integral data values.
BLAZE_ALWAYS_INLINE const EnableIf_< And< IsIntegral< T >, HasSize< T, 1UL > >, If_< IsSigned< T >, SIMDint8, SIMDuint8 > > loada(const T *address) noexcept
Loads a vector of 1-byte integral values.
Definition: Loada.h:80
SIMD type for 32-bit signed integral data values.
Header file for the EnableIf class template.
Header file for the basic SIMD types.
Header file for run time assertion macros.
SIMD type for 8-bit signed integral complex values.
Header file for the HasSize type trait.
SIMD type for 32-bit single precision complex values.
SIMD type for 64-bit signed integral complex values.
Header file for the IsSigned type trait.
SIMD type for 32-bit single precision floating point data values.
BLAZE_ALWAYS_INLINE bool checkAlignment(const T *address)
Checks the alignment of the given address.
Definition: AlignmentCheck.h:68
SIMD type for 64-bit unsigned integral data values.
SIMD type for 64-bit integral data values.
SIMD type for 8-bit unsigned integral complex values.
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