All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BasicTypes.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
23 #define _BLAZE_MATH_INTRINSICS_BASICTYPES_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
30 #include <blaze/system/SSE.h>
31 #include <blaze/util/Types.h>
32 
33 
34 namespace blaze {
35 
36 //=================================================================================================
37 //
38 // BASIC INTRINSIC TYPES
39 //
40 //=================================================================================================
41 
42 //*************************************************************************************************
48 #if BLAZE_SSE2_MODE
49 union sse_int8_t {
50  inline sse_int8_t() : value( _mm_setzero_si128() ) {}
51  inline sse_int8_t( __m128i v ) : value( v ) {}
52  __m128i value;
53  int8_t values[16];
54 };
55 #else
56 union sse_int8_t {
57  inline sse_int8_t() : value( 0 ) {}
58  inline sse_int8_t( int8_t v ) : value( v ) {}
59  int8_t value;
60  int8_t values[1];
61 };
62 #endif
63 
64 //*************************************************************************************************
65 
66 
67 //*************************************************************************************************
73 #if BLAZE_SSE2_MODE
74 union sse_int16_t {
75  inline sse_int16_t() : value( _mm_setzero_si128() ) {}
76  inline sse_int16_t( __m128i v ) : value( v ) {}
77  __m128i value;
78  int16_t values[8];
79 };
80 #else
81 union sse_int16_t {
82  inline sse_int16_t() : value( 0 ) {}
83  inline sse_int16_t( int16_t v ) : value( v ) {}
84  int16_t value;
85  int16_t values[1];
86 };
87 #endif
88 
89 //*************************************************************************************************
90 
91 
92 //*************************************************************************************************
98 #if BLAZE_MIC_MODE
99 union sse_int32_t {
100  inline sse_int32_t() : value( _mm512_setzero_epi32() ) {}
101  inline sse_int32_t( __m512i v ) : value( v ) {}
102  __m512i value;
103  int32_t values[16];
104 };
105 #elif BLAZE_SSE2_MODE
106 union sse_int32_t {
107  inline sse_int32_t() : value( _mm_setzero_si128() ) {}
108  inline sse_int32_t( __m128i v ) : value( v ) {}
109  __m128i value;
110  int32_t values[4];
111 };
112 #else
113 union sse_int32_t {
114  inline sse_int32_t() : value( 0 ) {}
115  inline sse_int32_t( int32_t v ) : value( v ) {}
116  int32_t value;
117  int32_t values[1];
118 };
119 #endif
120 
121 //*************************************************************************************************
122 
123 
124 //*************************************************************************************************
130 #if BLAZE_MIC_MODE
131 union sse_int64_t {
132  inline sse_int64_t() : value( _mm512_setzero_epi32() ) {}
133  inline sse_int64_t( __m512i v ) : value( v ) {}
134  __m512i value;
135  int64_t values[8];
136 };
137 #elif BLAZE_SSE2_MODE
138 union sse_int64_t {
139  inline sse_int64_t() : value( _mm_setzero_si128() ) {}
140  inline sse_int64_t( __m128i v ) : value( v ) {}
141  __m128i value;
142  int64_t values[2];
143 };
144 #else
145 union sse_int64_t {
146  inline sse_int64_t() : value( 0 ) {}
147  inline sse_int64_t( int64_t v ) : value( v ) {}
148  int64_t value;
149  int64_t values[1];
150 };
151 #endif
152 
153 //*************************************************************************************************
154 
155 
156 //*************************************************************************************************
162 #if BLAZE_MIC_MODE
163 union sse_float_t {
164  inline sse_float_t() : value( _mm512_setzero_ps() ) {}
165  inline sse_float_t( __m512 v ) : value( v ) {}
166  __m512 value;
167  float values[16];
168 };
169 #elif BLAZE_AVX_MODE
170 union sse_float_t {
171  inline sse_float_t() : value( _mm256_setzero_ps() ) {}
172  inline sse_float_t( __m256 v ) : value( v ) {}
173  __m256 value;
174  float values[8];
175 };
176 #elif BLAZE_SSE_MODE
177 union sse_float_t {
178  inline sse_float_t() : value( _mm_setzero_ps() ) {}
179  inline sse_float_t( __m128 v ) : value( v ) {}
180  __m128 value;
181  float values[4];
182 };
183 #else
184 union sse_float_t {
185  inline sse_float_t() : value( 0.0F ) {}
186  inline sse_float_t( float v ) : value( v ) {}
187  float value;
188  float values[1];
189 };
190 #endif
191 
192 //*************************************************************************************************
193 
194 
195 //*************************************************************************************************
201 #if BLAZE_MIC_MODE
202 union sse_double_t {
203  inline sse_double_t() : value( _mm512_setzero_pd() ) {}
204  inline sse_double_t( __m512d v ) : value( v ) {}
205  __m512d value;
206  double values[8];
207 };
208 #elif BLAZE_AVX_MODE
209 union sse_double_t {
210  inline sse_double_t() : value( _mm256_setzero_pd() ) {}
211  inline sse_double_t( __m256d v ) : value( v ) {}
212  __m256d value;
213  double values[4];
214 };
215 #elif BLAZE_SSE2_MODE
216 union sse_double_t {
217  inline sse_double_t() : value( _mm_setzero_pd() ) {}
218  inline sse_double_t( __m128d v ) : value( v ) {}
219  __m128d value;
220  double values[2];
221 };
222 #else
223 union sse_double_t {
224  inline sse_double_t() : value( 0.0 ) {}
225  inline sse_double_t( double v ) : value( v ) {}
226  double value;
227  double values[1];
228 };
229 #endif
230 
231 //*************************************************************************************************
232 
233 } // namespace blaze
234 
235 #endif