35 #ifndef _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
36 #define _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
64 inline sse_int8_t() : value( _mm256_setzero_si256() ) {}
65 inline sse_int8_t( __m256i v ) : value( v ) {}
66 inline int8_t operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
71 inline sse_int8_t() : value( _mm_setzero_si128() ) {}
72 inline sse_int8_t( __m128i v ) : value( v ) {}
73 inline int8_t operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
78 inline sse_int8_t() : value( 0 ) {}
79 inline sse_int8_t( int8_t v ) : value( v ) {}
80 inline int8_t operator[](
size_t )
const {
return value; }
96 inline sse_int16_t() : value( _mm256_setzero_si256() ) {}
97 inline sse_int16_t( __m256i v ) : value( v ) {}
98 inline int16_t operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
101 #elif BLAZE_SSE2_MODE
103 inline sse_int16_t() : value( _mm_setzero_si128() ) {}
104 inline sse_int16_t( __m128i v ) : value( v ) {}
105 inline int16_t operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
110 inline sse_int16_t() : value( 0 ) {}
111 inline sse_int16_t( int16_t v ) : value( v ) {}
112 inline int16_t operator[](
size_t )
const {
return value; }
128 inline sse_int32_t() : value( _mm512_setzero_epi32() ) {}
129 inline sse_int32_t( __m512i v ) : value( v ) {}
130 inline int32_t operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
133 #elif BLAZE_AVX2_MODE
135 inline sse_int32_t() : value( _mm256_setzero_si256() ) {}
136 inline sse_int32_t( __m256i v ) : value( v ) {}
137 inline int32_t operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
140 #elif BLAZE_SSE2_MODE
142 inline sse_int32_t() : value( _mm_setzero_si128() ) {}
143 inline sse_int32_t( __m128i v ) : value( v ) {}
144 inline int32_t operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
149 inline sse_int32_t() : value( 0 ) {}
150 inline sse_int32_t( int32_t v ) : value( v ) {}
151 inline int32_t operator[](
size_t )
const {
return value; }
167 inline sse_int64_t() : value( _mm512_setzero_epi32() ) {}
168 inline sse_int64_t( __m512i v ) : value( v ) {}
169 inline int64_t operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
172 #elif BLAZE_AVX2_MODE
174 inline sse_int64_t() : value( _mm256_setzero_si256() ) {}
175 inline sse_int64_t( __m256i v ) : value( v ) {}
176 inline int64_t operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
179 #elif BLAZE_SSE2_MODE
181 inline sse_int64_t() : value( _mm_setzero_si128() ) {}
182 inline sse_int64_t( __m128i v ) : value( v ) {}
183 inline int64_t operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
188 inline sse_int64_t() : value( 0 ) {}
189 inline sse_int64_t( int64_t v ) : value( v ) {}
190 inline int64_t operator[](
size_t )
const {
return value; }
206 inline sse_float_t() : value( _mm512_setzero_ps() ) {}
207 inline sse_float_t( __m512 v ) : value( v ) {}
208 inline float operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
213 inline sse_float_t() : value( _mm256_setzero_ps() ) {}
214 inline sse_float_t( __m256 v ) : value( v ) {}
215 inline float operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
220 inline sse_float_t() : value( _mm_setzero_ps() ) {}
221 inline sse_float_t( __m128 v ) : value( v ) {}
222 inline float operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
227 inline sse_float_t() : value( 0.0F ) {}
228 inline sse_float_t(
float v ) : value( v ) {}
229 inline float operator[](
size_t )
const {
return value; }
244 struct sse_double_t {
245 inline sse_double_t() : value( _mm512_setzero_pd() ) {}
246 inline sse_double_t( __m512d v ) : value( v ) {}
247 inline double operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
251 struct sse_double_t {
252 inline sse_double_t() : value( _mm256_setzero_pd() ) {}
253 inline sse_double_t( __m256d v ) : value( v ) {}
254 inline double operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
257 #elif BLAZE_SSE2_MODE
258 struct sse_double_t {
259 inline sse_double_t() : value( _mm_setzero_pd() ) {}
260 inline sse_double_t( __m128d v ) : value( v ) {}
261 inline double operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
265 struct sse_double_t {
266 inline sse_double_t() : value( 0.0 ) {}
267 inline sse_double_t(
double v ) : value( v ) {}
268 inline double operator[](
size_t )
const {
return value; }
283 struct sse_cfloat_t {
284 inline sse_cfloat_t() : value( _mm512_setzero_ps() ) {}
285 inline sse_cfloat_t( __m512 v ) : value( v ) {}
286 inline complex<float> operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
290 struct sse_cfloat_t {
291 inline sse_cfloat_t() : value( _mm256_setzero_ps() ) {}
292 inline sse_cfloat_t( __m256 v ) : value( v ) {}
293 inline complex<float> operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
297 struct sse_cfloat_t {
298 inline sse_cfloat_t() : value( _mm_setzero_ps() ) {}
299 inline sse_cfloat_t( __m128 v ) : value( v ) {}
300 inline complex<float> operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
304 struct sse_cfloat_t {
305 inline sse_cfloat_t() : value( 0.0F, 0.0F ) {}
306 inline sse_cfloat_t( complex<float> v ) : value( v ) {}
307 inline complex<float> operator[](
size_t )
const {
return value; }
308 complex<float> value;
322 struct sse_cdouble_t {
323 inline sse_cdouble_t() : value( _mm512_setzero_pd() ) {}
324 inline sse_cdouble_t( __m512d v ) : value( v ) {}
325 inline complex<double> operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
329 struct sse_cdouble_t {
330 inline sse_cdouble_t() : value( _mm256_setzero_pd() ) {}
331 inline sse_cdouble_t( __m256d v ) : value( v ) {}
332 inline complex<double> operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
335 #elif BLAZE_SSE2_MODE
336 struct sse_cdouble_t {
337 inline sse_cdouble_t() : value( _mm_setzero_pd() ) {}
338 inline sse_cdouble_t( __m128d v ) : value( v ) {}
339 inline complex<double> operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
343 struct sse_cdouble_t {
344 inline sse_cdouble_t() : value( 0.0, 0.0 ) {}
345 inline sse_cdouble_t( complex<double> v ) : value( v ) {}
346 inline complex<double> operator[](
size_t )
const {
return value; }
347 complex<double> value;
Header file for basic type definitions.
System settings for the SSE mode.
Header file for the complex data type.