Setzero.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_SIMD_SETZERO_H_
36 #define _BLAZE_MATH_SIMD_SETZERO_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
44 #include <blaze/system/Inline.h>
46 
47 
48 namespace blaze {
49 
50 //=================================================================================================
51 //
52 // 8-BIT INTEGRAL SIMD TYPES
53 //
54 //=================================================================================================
55 
56 //*************************************************************************************************
63 template< typename T > // Type of the SIMD element
64 BLAZE_ALWAYS_INLINE void setzero( SIMDi8<T>& value ) noexcept
65 {
66 #if BLAZE_AVX2_MODE
67  (~value).value = _mm256_setzero_si256();
68 #elif BLAZE_SSE2_MODE
69  (~value).value = _mm_setzero_si128();
70 #else
71  (~value).value = 0;
72 #endif
73 }
74 //*************************************************************************************************
75 
76 
77 //*************************************************************************************************
84 template< typename T > // Type of the SIMD element
85 BLAZE_ALWAYS_INLINE void setzero( SIMDci8<T>& value ) noexcept
86 {
87 #if BLAZE_AVX2_MODE
88  (~value).value = _mm256_setzero_si256();
89 #elif BLAZE_SSE2_MODE
90  (~value).value = _mm_setzero_si128();
91 #else
92  (~value).value = 0;
93 #endif
94 }
95 //*************************************************************************************************
96 
97 
98 
99 
100 //=================================================================================================
101 //
102 // 16-BIT INTEGRAL SIMD TYPES
103 //
104 //=================================================================================================
105 
106 //*************************************************************************************************
113 template< typename T > // Type of the SIMD element
114 BLAZE_ALWAYS_INLINE void setzero( SIMDi16<T>& value ) noexcept
115 {
116 #if BLAZE_AVX2_MODE
117  (~value).value = _mm256_setzero_si256();
118 #elif BLAZE_SSE2_MODE
119  (~value).value = _mm_setzero_si128();
120 #else
121  (~value).value = 0;
122 #endif
123 }
124 //*************************************************************************************************
125 
126 
127 //*************************************************************************************************
134 template< typename T > // Type of the SIMD element
135 BLAZE_ALWAYS_INLINE void setzero( SIMDci16<T>& value ) noexcept
136 {
137 #if BLAZE_AVX2_MODE
138  (~value).value = _mm256_setzero_si256();
139 #elif BLAZE_SSE2_MODE
140  (~value).value = _mm_setzero_si128();
141 #else
142  (~value).value = 0;
143 #endif
144 }
145 //*************************************************************************************************
146 
147 
148 
149 
150 //=================================================================================================
151 //
152 // 32-BIT INTEGRAL SIMD TYPES
153 //
154 //=================================================================================================
155 
156 //*************************************************************************************************
163 template< typename T > // Type of the SIMD element
164 BLAZE_ALWAYS_INLINE void setzero( SIMDi32<T>& value ) noexcept
165 {
166 #if BLAZE_MIC_MODE
167  (~value).value = _mm512_setzero_epi32();
168 #elif BLAZE_AVX2_MODE
169  (~value).value = _mm256_setzero_si256();
170 #elif BLAZE_SSE2_MODE
171  (~value).value = _mm_setzero_si128();
172 #else
173  (~value).value = 0;
174 #endif
175 }
176 //*************************************************************************************************
177 
178 
179 //*************************************************************************************************
186 template< typename T > // Type of the SIMD element
187 BLAZE_ALWAYS_INLINE void setzero( SIMDci32<T>& value ) noexcept
188 {
189 #if BLAZE_MIC_MODE
190  (~value).value = _mm512_setzero_epi32();
191 #elif BLAZE_AVX2_MODE
192  (~value).value = _mm256_setzero_si256();
193 #elif BLAZE_SSE2_MODE
194  (~value).value = _mm_setzero_si128();
195 #else
196  (~value).value = 0;
197 #endif
198 }
199 //*************************************************************************************************
200 
201 
202 
203 
204 //=================================================================================================
205 //
206 // 64-BIT INTEGRAL SIMD TYPES
207 //
208 //=================================================================================================
209 
210 //*************************************************************************************************
217 template< typename T > // Type of the SIMD element
218 BLAZE_ALWAYS_INLINE void setzero( SIMDi64<T>& value ) noexcept
219 {
220 #if BLAZE_MIC_MODE
221  (~value).value = _mm512_setzero_epi32();
222 #elif BLAZE_AVX2_MODE
223  (~value).value = _mm256_setzero_si256();
224 #elif BLAZE_SSE2_MODE
225  (~value).value = _mm_setzero_si128();
226 #else
227  (~value).value = 0;
228 #endif
229 }
230 //*************************************************************************************************
231 
232 
233 //*************************************************************************************************
240 template< typename T > // Type of the SIMD element
241 BLAZE_ALWAYS_INLINE void setzero( SIMDci64<T>& value ) noexcept
242 {
243 #if BLAZE_MIC_MODE
244  (~value).value = _mm512_setzero_epi32();
245 #elif BLAZE_AVX2_MODE
246  (~value).value = _mm256_setzero_si256();
247 #elif BLAZE_SSE2_MODE
248  (~value).value = _mm_setzero_si128();
249 #else
250  (~value).value = 0;
251 #endif
252 }
253 //*************************************************************************************************
254 
255 
256 
257 
258 //=================================================================================================
259 //
260 // 32-BIT FLOATING POINT SIMD TYPES
261 //
262 //=================================================================================================
263 
264 //*************************************************************************************************
271 BLAZE_ALWAYS_INLINE void setzero( SIMDfloat& value ) noexcept
272 {
273 #if BLAZE_MIC_MODE
274  value.value = _mm512_setzero_ps();
275 #elif BLAZE_AVX_MODE
276  value.value = _mm256_setzero_ps();
277 #elif BLAZE_SSE_MODE
278  value.value = _mm_setzero_ps();
279 #else
280  value.value = 0.0F;
281 #endif
282 }
283 //*************************************************************************************************
284 
285 
286 //*************************************************************************************************
293 BLAZE_ALWAYS_INLINE void setzero( SIMDcfloat& value ) noexcept
294 {
295 #if BLAZE_MIC_MODE
296  value.value = _mm512_setzero_ps();
297 #elif BLAZE_AVX_MODE
298  value.value = _mm256_setzero_ps();
299 #elif BLAZE_SSE_MODE
300  value.value = _mm_setzero_ps();
301 #else
302  value.value = 0.0F;
303 #endif
304 }
305 //*************************************************************************************************
306 
307 
308 
309 
310 //=================================================================================================
311 //
312 // 64-BIT FLOATING POINT SIMD TYPES
313 //
314 //=================================================================================================
315 
316 //*************************************************************************************************
323 BLAZE_ALWAYS_INLINE void setzero( SIMDdouble& value ) noexcept
324 {
325 #if BLAZE_MIC_MODE
326  value.value = _mm512_setzero_pd();
327 #elif BLAZE_AVX_MODE
328  value.value = _mm256_setzero_pd();
329 #elif BLAZE_SSE2_MODE
330  value.value = _mm_setzero_pd();
331 #else
332  value.value = 0.0;
333 #endif
334 }
335 //*************************************************************************************************
336 
337 
338 //*************************************************************************************************
345 BLAZE_ALWAYS_INLINE void setzero( SIMDcdouble& value ) noexcept
346 {
347 #if BLAZE_MIC_MODE
348  value.value = _mm512_setzero_pd();
349 #elif BLAZE_AVX_MODE
350  value.value = _mm256_setzero_pd();
351 #elif BLAZE_SSE2_MODE
352  value.value = _mm_setzero_pd();
353 #else
354  value.value = 0.0;
355 #endif
356 }
357 //*************************************************************************************************
358 
359 } // namespace blaze
360 
361 #endif
SIMD type for 64-bit double precision floating point data values.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
BLAZE_ALWAYS_INLINE void setzero(SIMDi8< T > &value) noexcept
Setting an integral SIMD type with 8-bit data values to zero.
Definition: Setzero.h:64
Header file for the basic SIMD types.
SIMD type for 32-bit single precision complex values.
SIMD type for 32-bit single precision floating point data values.
SIMD type for 64-bit double precision complex values.
System settings for the SSE mode.
System settings for the inline keywords.