35 #ifndef _BLAZE_MATH_INTRINSICS_LOADU_H_
36 #define _BLAZE_MATH_INTRINSICS_LOADU_H_
74 template<
typename T >
75 BLAZE_ALWAYS_INLINE typename EnableIf< And< IsIntegral<T>, HasSize<T,2UL> >, sse_int16_t >::Type
79 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
81 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
99 template<
typename T >
100 BLAZE_ALWAYS_INLINE typename EnableIf< And< IsIntegral<T>, HasSize<T,4UL> >, sse_int32_t >::Type
104 __m512i v1 = _mm512_setzero_epi32();
105 v1 = _mm512_loadunpacklo_epi32( v1, address );
106 v1 = _mm512_loadunpackhi_epi32( v1, address+16UL );
108 #elif BLAZE_AVX2_MODE
109 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
110 #elif BLAZE_SSE2_MODE
111 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
129 template<
typename T >
130 BLAZE_ALWAYS_INLINE typename EnableIf< And< IsIntegral<T>, HasSize<T,8UL> >, sse_int64_t >::Type
134 __m512i v1 = _mm512_setzero_epi32();
135 v1 = _mm512_loadunpacklo_epi64( v1, address );
136 v1 = _mm512_loadunpackhi_epi64( v1, address+8UL );
138 #elif BLAZE_AVX2_MODE
139 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
140 #elif BLAZE_SSE2_MODE
141 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
162 __m512 v1 = _mm512_setzero_ps();
163 v1 = _mm512_loadunpacklo_ps( v1, address );
164 v1 = _mm512_loadunpackhi_ps( v1, address+16UL );
167 return _mm256_loadu_ps( address );
169 return _mm_loadu_ps( address );
190 __m512d v1 = _mm512_setzero_pd();
191 v1 = _mm512_loadunpacklo_pd( v1, address );
192 v1 = _mm512_loadunpackhi_pd( v1, address+8UL );
195 return _mm256_loadu_pd( address );
196 #elif BLAZE_SSE2_MODE
197 return _mm_loadu_pd( address );
220 __m512 v1 = _mm512_setzero_ps();
221 v1 = _mm512_loadunpacklo_ps( v1, reinterpret_cast<const float*>( address ) );
222 v1 = _mm512_loadunpackhi_ps( v1, reinterpret_cast<const float*>( address+8UL ) );
225 return _mm256_loadu_ps( reinterpret_cast<const float*>( address ) );
227 return _mm_loadu_ps( reinterpret_cast<const float*>( address ) );
250 __m512d v1 = _mm512_setzero_pd();
251 v1 = _mm512_loadunpacklo_pd( v1, reinterpret_cast<const double*>( address ) );
252 v1 = _mm512_loadunpackhi_pd( v1, reinterpret_cast<const double*>( address+4UL ) );
255 return _mm256_loadu_pd( reinterpret_cast<const double*>( address ) );
256 #elif BLAZE_SSE2_MODE
257 return _mm_loadu_pd( reinterpret_cast<const double*>( address ) );
Intrinsic type for 32-bit single precision complex values.
Header file for basic type definitions.
Header file for the IsIntegral type trait.
Header file for the And class template.
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
BLAZE_ALWAYS_INLINE EnableIf< And< IsIntegral< T >, HasSize< T, 2UL > >, sse_int16_t >::Type loadu(const T *address)
Loads a vector of 2-byte integral values.
Definition: Loadu.h:76
Intrinsic type for 32-bit single precision floating point data values.
Intrinsic type for 64-bit double precision complex values.
Constraint on the data type.
Header file for the EnableIf class template.
Intrinsic type for 64-bit double precision floating point data values.
Header file for the basic intrinsic types.
Header file for the HasSize type trait.
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:143
System settings for the inline keywords.