22 #ifndef _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
23 #define _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
51 inline sse_int8_t() : value( _mm256_setzero_si256() ) {}
52 inline sse_int8_t( __m256i v ) : value( v ) {}
53 inline int8_t& operator[](
size_t i ) {
return reinterpret_cast<int8_t*
>( &value )[i]; }
54 inline const int8_t& operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
59 inline sse_int8_t() : value( _mm_setzero_si128() ) {}
60 inline sse_int8_t( __m128i v ) : value( v ) {}
61 inline int8_t& operator[](
size_t i ) {
return reinterpret_cast<int8_t*
>( &value )[i]; }
62 inline const int8_t& operator[](
size_t i )
const {
return reinterpret_cast<const int8_t*
>( &value )[i]; }
67 inline sse_int8_t() : value( 0 ) {}
68 inline sse_int8_t( int8_t v ) : value( v ) {}
69 inline int8_t& operator[](
size_t ) {
return value; }
70 inline const int8_t& operator[](
size_t )
const {
return value; }
86 inline sse_int16_t() : value( _mm256_setzero_si256() ) {}
87 inline sse_int16_t( __m256i v ) : value( v ) {}
88 inline int16_t& operator[](
size_t i ) {
return reinterpret_cast<int16_t*
>( &value )[i]; }
89 inline const int16_t& operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
94 inline sse_int16_t() : value( _mm_setzero_si128() ) {}
95 inline sse_int16_t( __m128i v ) : value( v ) {}
96 inline int16_t& operator[](
size_t i ) {
return reinterpret_cast<int16_t*
>( &value )[i]; }
97 inline const int16_t& operator[](
size_t i )
const {
return reinterpret_cast<const int16_t*
>( &value )[i]; }
102 inline sse_int16_t() : value( 0 ) {}
103 inline sse_int16_t( int16_t v ) : value( v ) {}
104 inline int16_t& operator[](
size_t ) {
return value; }
105 inline const int16_t& operator[](
size_t )
const {
return value; }
121 inline sse_int32_t() : value( _mm512_setzero_epi32() ) {}
122 inline sse_int32_t( __m512i v ) : value( v ) {}
123 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
124 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
127 #elif BLAZE_AVX2_MODE
129 inline sse_int32_t() : value( _mm256_setzero_si256() ) {}
130 inline sse_int32_t( __m256i v ) : value( v ) {}
131 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
132 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
135 #elif BLAZE_SSE2_MODE
137 inline sse_int32_t() : value( _mm_setzero_si128() ) {}
138 inline sse_int32_t( __m128i v ) : value( v ) {}
139 inline int32_t& operator[](
size_t i ) {
return reinterpret_cast<int32_t*
>( &value )[i]; }
140 inline const int32_t& operator[](
size_t i )
const {
return reinterpret_cast<const int32_t*
>( &value )[i]; }
145 inline sse_int32_t() : value( 0 ) {}
146 inline sse_int32_t( int32_t v ) : value( v ) {}
147 inline int32_t& operator[](
size_t ) {
return value; }
148 inline const int32_t& operator[](
size_t )
const {
return value; }
164 inline sse_int64_t() : value( _mm512_setzero_epi32() ) {}
165 inline sse_int64_t( __m512i v ) : value( v ) {}
166 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
167 inline const int64_t& operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
170 #elif BLAZE_AVX2_MODE
172 inline sse_int64_t() : value( _mm256_setzero_si256() ) {}
173 inline sse_int64_t( __m256i v ) : value( v ) {}
174 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
175 inline const int64_t& operator[](
size_t i )
const {
return reinterpret_cast<const int64_t*
>( &value )[i]; }
178 #elif BLAZE_SSE2_MODE
180 inline sse_int64_t() : value( _mm_setzero_si128() ) {}
181 inline sse_int64_t( __m128i v ) : value( v ) {}
182 inline int64_t& operator[](
size_t i ) {
return reinterpret_cast<int64_t*
>( &value )[i]; }
183 inline const 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 ) {
return value; }
191 inline const int64_t& operator[](
size_t )
const {
return value; }
207 inline sse_float_t() : value( _mm512_setzero_ps() ) {}
208 inline sse_float_t( __m512 v ) : value( v ) {}
209 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
210 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
215 inline sse_float_t() : value( _mm256_setzero_ps() ) {}
216 inline sse_float_t( __m256 v ) : value( v ) {}
217 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
218 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
223 inline sse_float_t() : value( _mm_setzero_ps() ) {}
224 inline sse_float_t( __m128 v ) : value( v ) {}
225 inline float& operator[](
size_t i ) {
return reinterpret_cast<float*
>( &value )[i]; }
226 inline const float& operator[](
size_t i )
const {
return reinterpret_cast<const float*
>( &value )[i]; }
231 inline sse_float_t() : value( 0.0F ) {}
232 inline sse_float_t(
float v ) : value( v ) {}
233 inline float& operator[](
size_t ) {
return value; }
234 inline const float& operator[](
size_t )
const {
return value; }
249 struct sse_double_t {
250 inline sse_double_t() : value( _mm512_setzero_pd() ) {}
251 inline sse_double_t( __m512d v ) : value( v ) {}
252 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
253 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
257 struct sse_double_t {
258 inline sse_double_t() : value( _mm256_setzero_pd() ) {}
259 inline sse_double_t( __m256d v ) : value( v ) {}
260 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
261 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
264 #elif BLAZE_SSE2_MODE
265 struct sse_double_t {
266 inline sse_double_t() : value( _mm_setzero_pd() ) {}
267 inline sse_double_t( __m128d v ) : value( v ) {}
268 inline double& operator[](
size_t i ) {
return reinterpret_cast<double*
>( &value )[i]; }
269 inline const double& operator[](
size_t i )
const {
return reinterpret_cast<const double*
>( &value )[i]; }
273 struct sse_double_t {
274 inline sse_double_t() : value( 0.0 ) {}
275 inline sse_double_t(
double v ) : value( v ) {}
276 inline double& operator[](
size_t ) {
return value; }
277 inline const double& operator[](
size_t )
const {
return value; }
292 struct sse_cfloat_t {
293 inline sse_cfloat_t() : value( _mm256_setzero_ps() ) {}
294 inline sse_cfloat_t( __m256 v ) : value( v ) {}
295 inline complex<float>& operator[](
size_t i ) {
return reinterpret_cast<complex<float>*
>( &value )[i]; }
296 inline const complex<float>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
300 struct sse_cfloat_t {
301 inline sse_cfloat_t() : value( _mm_setzero_ps() ) {}
302 inline sse_cfloat_t( __m128 v ) : value( v ) {}
303 inline complex<float>& operator[](
size_t i ) {
return reinterpret_cast<complex<float>*
>( &value )[i]; }
304 inline const complex<float>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<float>*
>( &value )[i]; }
308 struct sse_cfloat_t {
309 inline sse_cfloat_t() : value( 0.0F, 0.0F ) {}
310 inline sse_cfloat_t( complex<float> v ) : value( v ) {}
311 inline complex<float>& operator[](
size_t ) {
return value; }
312 inline const complex<float>& operator[](
size_t )
const {
return value; }
313 complex<float> value;
327 struct sse_cdouble_t {
328 inline sse_cdouble_t() : value( _mm256_setzero_pd() ) {}
329 inline sse_cdouble_t( __m256d v ) : value( v ) {}
330 inline complex<double>& operator[](
size_t i ) {
return reinterpret_cast<complex<double>*
>( &value )[i]; }
331 inline const complex<double>& operator[](
size_t i )
const {
return reinterpret_cast<const complex<double>*
>( &value )[i]; }
334 #elif BLAZE_SSE2_MODE
335 struct sse_cdouble_t {
336 inline sse_cdouble_t() : value( _mm_setzero_pd() ) {}
337 inline sse_cdouble_t( __m128d v ) : value( v ) {}
338 inline complex<double>& operator[](
size_t i ) {
return reinterpret_cast<complex<double>*
>( &value )[i]; }
339 inline const 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 ) {
return value; }
347 inline const complex<double>& operator[](
size_t )
const {
return value; }
348 complex<double> value;