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 ) {
return reinterpret_cast<int8_t*
>( &value )[i]; }
67 inline const int8_t& operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
72 inline sse_int8_t() : value( _mm_setzero_si128() ) {}
73 inline sse_int8_t( __m128i v ) : value( v ) {}
74 inline int8_t& operator[](
size_t i ) {
return reinterpret_cast<int8_t*
>( &value )[i]; }
75 inline const int8_t& operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
80 inline sse_int8_t() : value( 0 ) {}
81 inline sse_int8_t( int8_t v ) : value( v ) {}
82 inline int8_t& operator[](
size_t ) {
return value; }
83 inline const int8_t& operator[](
size_t )
const {
return value; }
99 inline sse_int16_t() : value( _mm256_setzero_si256() ) {}
100 inline sse_int16_t( __m256i v ) : value( v ) {}
101 inline int16_t& operator[](
size_t i ) {
return reinterpret_cast<int16_t*
>( &value )[i]; }
102 inline const int16_t& operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
105 #elif BLAZE_SSE2_MODE
107 inline sse_int16_t() : value( _mm_setzero_si128() ) {}
108 inline sse_int16_t( __m128i v ) : value( v ) {}
109 inline int16_t& operator[](
size_t i ) {
return reinterpret_cast<int16_t*
>( &value )[i]; }
110 inline const int16_t& operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
115 inline sse_int16_t() : value( 0 ) {}
116 inline sse_int16_t( int16_t v ) : value( v ) {}
117 inline int16_t& operator[](
size_t ) {
return value; }
118 inline const int16_t& operator[](
size_t )
const {
return value; }
134 inline sse_int32_t() : value( _mm512_setzero_epi32() ) {}
135 inline sse_int32_t( __m512i v ) : value( v ) {}
136 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
137 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
140 #elif BLAZE_AVX2_MODE
142 inline sse_int32_t() : value( _mm256_setzero_si256() ) {}
143 inline sse_int32_t( __m256i v ) : value( v ) {}
144 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
145 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
148 #elif BLAZE_SSE2_MODE
150 inline sse_int32_t() : value( _mm_setzero_si128() ) {}
151 inline sse_int32_t( __m128i v ) : value( v ) {}
152 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
153 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
158 inline sse_int32_t() : value( 0 ) {}
159 inline sse_int32_t( int32_t v ) : value( v ) {}
160 inline int32_t& operator[](
size_t ) {
return value; }
161 inline const int32_t& operator[](
size_t )
const {
return value; }
177 inline sse_int64_t() : value( _mm512_setzero_epi32() ) {}
178 inline sse_int64_t( __m512i v ) : value( v ) {}
179 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
180 inline const int64_t& operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
183 #elif BLAZE_AVX2_MODE
185 inline sse_int64_t() : value( _mm256_setzero_si256() ) {}
186 inline sse_int64_t( __m256i v ) : value( v ) {}
187 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
188 inline const int64_t& operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
191 #elif BLAZE_SSE2_MODE
193 inline sse_int64_t() : value( _mm_setzero_si128() ) {}
194 inline sse_int64_t( __m128i v ) : value( v ) {}
195 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
196 inline const int64_t& operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
201 inline sse_int64_t() : value( 0 ) {}
202 inline sse_int64_t( int64_t v ) : value( v ) {}
203 inline int64_t& operator[](
size_t ) {
return value; }
204 inline const int64_t& operator[](
size_t )
const {
return value; }
220 inline sse_float_t() : value( _mm512_setzero_ps() ) {}
221 inline sse_float_t( __m512 v ) : value( v ) {}
222 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
223 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
228 inline sse_float_t() : value( _mm256_setzero_ps() ) {}
229 inline sse_float_t( __m256 v ) : value( v ) {}
230 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
231 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
236 inline sse_float_t() : value( _mm_setzero_ps() ) {}
237 inline sse_float_t( __m128 v ) : value( v ) {}
238 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
239 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
244 inline sse_float_t() : value( 0.0F ) {}
245 inline sse_float_t(
float v ) : value( v ) {}
246 inline float& operator[](
size_t ) {
return value; }
247 inline const float& operator[](
size_t )
const {
return value; }
262 struct sse_double_t {
263 inline sse_double_t() : value( _mm512_setzero_pd() ) {}
264 inline sse_double_t( __m512d v ) : value( v ) {}
265 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
266 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
270 struct sse_double_t {
271 inline sse_double_t() : value( _mm256_setzero_pd() ) {}
272 inline sse_double_t( __m256d v ) : value( v ) {}
273 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
274 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
277 #elif BLAZE_SSE2_MODE
278 struct sse_double_t {
279 inline sse_double_t() : value( _mm_setzero_pd() ) {}
280 inline sse_double_t( __m128d v ) : value( v ) {}
281 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
282 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
286 struct sse_double_t {
287 inline sse_double_t() : value( 0.0 ) {}
288 inline sse_double_t(
double v ) : value( v ) {}
289 inline double& operator[](
size_t ) {
return value; }
290 inline const double& operator[](
size_t )
const {
return value; }
305 struct sse_cfloat_t {
306 inline sse_cfloat_t() : value( _mm512_setzero_ps() ) {}
307 inline sse_cfloat_t( __m512 v ) : value( v ) {}
308 inline complex<float>& operator[](
size_t i ) {
return reinterpret_cast<complex<float>*
>( &value )[i]; }
309 inline const complex<float>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
313 struct sse_cfloat_t {
314 inline sse_cfloat_t() : value( _mm256_setzero_ps() ) {}
315 inline sse_cfloat_t( __m256 v ) : value( v ) {}
316 inline complex<float>& operator[](
size_t i ) {
return reinterpret_cast<complex<float>*
>( &value )[i]; }
317 inline const complex<float>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
321 struct sse_cfloat_t {
322 inline sse_cfloat_t() : value( _mm_setzero_ps() ) {}
323 inline sse_cfloat_t( __m128 v ) : value( v ) {}
324 inline complex<float>& operator[](
size_t i ) {
return reinterpret_cast<complex<float>*
>( &value )[i]; }
325 inline const complex<float>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
329 struct sse_cfloat_t {
330 inline sse_cfloat_t() : value( 0.0F, 0.0F ) {}
331 inline sse_cfloat_t( complex<float> v ) : value( v ) {}
332 inline complex<float>& operator[](
size_t ) {
return value; }
333 inline const complex<float>& operator[](
size_t )
const {
return value; }
334 complex<float> value;
348 struct sse_cdouble_t {
349 inline sse_cdouble_t() : value( _mm512_setzero_pd() ) {}
350 inline sse_cdouble_t( __m512d v ) : value( v ) {}
351 inline complex<double>& operator[](
size_t i ) {
return reinterpret_cast<complex<double>*
>( &value )[i]; }
352 inline const complex<double>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
356 struct sse_cdouble_t {
357 inline sse_cdouble_t() : value( _mm256_setzero_pd() ) {}
358 inline sse_cdouble_t( __m256d v ) : value( v ) {}
359 inline complex<double>& operator[](
size_t i ) {
return reinterpret_cast<complex<double>*
>( &value )[i]; }
360 inline const complex<double>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
363 #elif BLAZE_SSE2_MODE
364 struct sse_cdouble_t {
365 inline sse_cdouble_t() : value( _mm_setzero_pd() ) {}
366 inline sse_cdouble_t( __m128d v ) : value( v ) {}
367 inline complex<double>& operator[](
size_t i ) {
return reinterpret_cast<complex<double>*
>( &value )[i]; }
368 inline const complex<double>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
372 struct sse_cdouble_t {
373 inline sse_cdouble_t() : value( 0.0, 0.0 ) {}
374 inline sse_cdouble_t( complex<double> v ) : value( v ) {}
375 inline complex<double>& operator[](
size_t ) {
return value; }
376 inline const complex<double>& operator[](
size_t )
const {
return value; }
377 complex<double> value;
Header file for basic type definitions.
System settings for the SSE mode.
Header file for the complex data type.