35 #ifndef _BLAZE_MATH_INTRINSICS_LOADU_H_
36 #define _BLAZE_MATH_INTRINSICS_LOADU_H_
89 template<
typename T >
94 typedef sse_int16_t Type;
98 static inline Type
loadu(
const T* address )
101 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
102 #elif BLAZE_SSE2_MODE
103 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
124 template<
typename T >
129 typedef sse_int32_t Type;
133 static inline Type
loadu(
const T* address )
136 __m512i v1 = _mm512_setzero_epi32();
137 v1 = _mm512_loadunpacklo_epi32( v1, address );
138 v1 = _mm512_loadunpackhi_epi32( v1, address+16UL );
140 #elif BLAZE_AVX2_MODE
141 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
142 #elif BLAZE_SSE2_MODE
143 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
164 template<
typename T >
169 typedef sse_int64_t Type;
173 static inline Type
loadu(
const T* address )
176 __m512i v1 = _mm512_setzero_epi32();
177 v1 = _mm512_loadunpacklo_epi64( v1, address );
178 v1 = _mm512_loadunpackhi_epi64( v1, address+8UL );
180 #elif BLAZE_AVX2_MODE
181 return _mm256_loadu_si256( reinterpret_cast<const __m256i*>( address ) );
182 #elif BLAZE_SSE2_MODE
183 return _mm_loadu_si128( reinterpret_cast<const __m128i*>( address ) );
217 template<
typename T >
218 inline typename EnableIf< IsIntegral<T>, Loadu<T,sizeof(T)> >::Type::Type
239 __m512 v1 = _mm512_setzero_ps();
240 v1 = _mm512_loadunpacklo_ps( v1, address );
241 v1 = _mm512_loadunpackhi_ps( v1, address+16UL );
244 return _mm256_loadu_ps( address );
246 return _mm_loadu_ps( address );
267 __m512d v1 = _mm512_setzero_pd();
268 v1 = _mm512_loadunpacklo_pd( v1, address );
269 v1 = _mm512_loadunpackhi_pd( v1, address+8UL );
272 return _mm256_loadu_pd( address );
273 #elif BLAZE_SSE2_MODE
274 return _mm_loadu_pd( address );
297 __m512 v1 = _mm512_setzero_ps();
298 v1 = _mm512_loadunpacklo_ps( v1, reinterpret_cast<const float*>( address ) );
299 v1 = _mm512_loadunpackhi_ps( v1, reinterpret_cast<const float*>( address+8UL ) );
302 return _mm256_loadu_ps( reinterpret_cast<const float*>( address ) );
304 return _mm_loadu_ps( reinterpret_cast<const float*>( address ) );
327 __m512d v1 = _mm512_setzero_pd();
328 v1 = _mm512_loadunpacklo_pd( v1, reinterpret_cast<const double*>( address ) );
329 v1 = _mm512_loadunpackhi_pd( v1, reinterpret_cast<const double*>( address+4UL ) );
332 return _mm256_loadu_pd( reinterpret_cast<const double*>( address ) );
333 #elif BLAZE_SSE2_MODE
334 return _mm_loadu_pd( reinterpret_cast<const double*>( address ) );
Intrinsic type for 32-bit single precision complex values.
EnableIf< IsIntegral< T >, Loadu< T, sizeof(T)> >::Type::Type loadu(const T *address)
Loads a vector of integral values.
Definition: Loadu.h:219
#define BLAZE_CONSTRAINT_MUST_BE_INTEGRAL_TYPE(T)
Constraint on the data type.In case the given data type T is not an integral data type...
Definition: Integral.h:78
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.
sse_cdouble_t loadu(const complex< double > *address)
Loads a vector of 'complex' values.
Definition: Loadu.h:322
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