Blaze  3.6
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_AVX512BW_MODE
67  (~value).value = _mm512_setzero_si512();
68 #elif BLAZE_AVX2_MODE
69  (~value).value = _mm256_setzero_si256();
70 #elif BLAZE_SSE2_MODE
71  (~value).value = _mm_setzero_si128();
72 #else
73  (~value).value = 0;
74 #endif
75 }
76 //*************************************************************************************************
77 
78 
79 //*************************************************************************************************
86 template< typename T > // Type of the SIMD element
87 BLAZE_ALWAYS_INLINE void setzero( SIMDci8<T>& value ) noexcept
88 {
89 #if BLAZE_AVX512BW_MODE
90  (~value).value = _mm512_setzero_si512();
91 #elif BLAZE_AVX2_MODE
92  (~value).value = _mm256_setzero_si256();
93 #elif BLAZE_SSE2_MODE
94  (~value).value = _mm_setzero_si128();
95 #else
96  (~value).value = 0;
97 #endif
98 }
99 //*************************************************************************************************
100 
101 
102 
103 
104 //=================================================================================================
105 //
106 // 16-BIT INTEGRAL SIMD TYPES
107 //
108 //=================================================================================================
109 
110 //*************************************************************************************************
117 template< typename T > // Type of the SIMD element
118 BLAZE_ALWAYS_INLINE void setzero( SIMDi16<T>& value ) noexcept
119 {
120 #if BLAZE_AVX512BW_MODE
121  (~value).value = _mm512_setzero_si512();
122 #elif BLAZE_AVX2_MODE
123  (~value).value = _mm256_setzero_si256();
124 #elif BLAZE_SSE2_MODE
125  (~value).value = _mm_setzero_si128();
126 #else
127  (~value).value = 0;
128 #endif
129 }
130 //*************************************************************************************************
131 
132 
133 //*************************************************************************************************
140 template< typename T > // Type of the SIMD element
141 BLAZE_ALWAYS_INLINE void setzero( SIMDci16<T>& value ) noexcept
142 {
143 #if BLAZE_AVX512BW_MODE
144  (~value).value = _mm512_setzero_si512();
145 #elif BLAZE_AVX2_MODE
146  (~value).value = _mm256_setzero_si256();
147 #elif BLAZE_SSE2_MODE
148  (~value).value = _mm_setzero_si128();
149 #else
150  (~value).value = 0;
151 #endif
152 }
153 //*************************************************************************************************
154 
155 
156 
157 
158 //=================================================================================================
159 //
160 // 32-BIT INTEGRAL SIMD TYPES
161 //
162 //=================================================================================================
163 
164 //*************************************************************************************************
171 template< typename T > // Type of the SIMD element
172 BLAZE_ALWAYS_INLINE void setzero( SIMDi32<T>& value ) noexcept
173 {
174 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
175  (~value).value = _mm512_setzero_si512();
176 #elif BLAZE_AVX2_MODE
177  (~value).value = _mm256_setzero_si256();
178 #elif BLAZE_SSE2_MODE
179  (~value).value = _mm_setzero_si128();
180 #else
181  (~value).value = 0;
182 #endif
183 }
184 //*************************************************************************************************
185 
186 
187 //*************************************************************************************************
194 template< typename T > // Type of the SIMD element
195 BLAZE_ALWAYS_INLINE void setzero( SIMDci32<T>& value ) noexcept
196 {
197 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
198  (~value).value = _mm512_setzero_si512();
199 #elif BLAZE_AVX2_MODE
200  (~value).value = _mm256_setzero_si256();
201 #elif BLAZE_SSE2_MODE
202  (~value).value = _mm_setzero_si128();
203 #else
204  (~value).value = 0;
205 #endif
206 }
207 //*************************************************************************************************
208 
209 
210 
211 
212 //=================================================================================================
213 //
214 // 64-BIT INTEGRAL SIMD TYPES
215 //
216 //=================================================================================================
217 
218 //*************************************************************************************************
225 template< typename T > // Type of the SIMD element
226 BLAZE_ALWAYS_INLINE void setzero( SIMDi64<T>& value ) noexcept
227 {
228 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
229  (~value).value = _mm512_setzero_si512();
230 #elif BLAZE_AVX2_MODE
231  (~value).value = _mm256_setzero_si256();
232 #elif BLAZE_SSE2_MODE
233  (~value).value = _mm_setzero_si128();
234 #else
235  (~value).value = 0;
236 #endif
237 }
238 //*************************************************************************************************
239 
240 
241 //*************************************************************************************************
248 template< typename T > // Type of the SIMD element
249 BLAZE_ALWAYS_INLINE void setzero( SIMDci64<T>& value ) noexcept
250 {
251 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
252  (~value).value = _mm512_setzero_si512();
253 #elif BLAZE_AVX2_MODE
254  (~value).value = _mm256_setzero_si256();
255 #elif BLAZE_SSE2_MODE
256  (~value).value = _mm_setzero_si128();
257 #else
258  (~value).value = 0;
259 #endif
260 }
261 //*************************************************************************************************
262 
263 
264 
265 
266 //=================================================================================================
267 //
268 // 32-BIT FLOATING POINT SIMD TYPES
269 //
270 //=================================================================================================
271 
272 //*************************************************************************************************
279 BLAZE_ALWAYS_INLINE void setzero( SIMDfloat& value ) noexcept
280 {
281 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
282  value.value = _mm512_setzero_ps();
283 #elif BLAZE_AVX_MODE
284  value.value = _mm256_setzero_ps();
285 #elif BLAZE_SSE_MODE
286  value.value = _mm_setzero_ps();
287 #else
288  value.value = 0.0F;
289 #endif
290 }
291 //*************************************************************************************************
292 
293 
294 //*************************************************************************************************
301 BLAZE_ALWAYS_INLINE void setzero( SIMDcfloat& value ) noexcept
302 {
303 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
304  value.value = _mm512_setzero_ps();
305 #elif BLAZE_AVX_MODE
306  value.value = _mm256_setzero_ps();
307 #elif BLAZE_SSE_MODE
308  value.value = _mm_setzero_ps();
309 #else
310  value.value = 0.0F;
311 #endif
312 }
313 //*************************************************************************************************
314 
315 
316 
317 
318 //=================================================================================================
319 //
320 // 64-BIT FLOATING POINT SIMD TYPES
321 //
322 //=================================================================================================
323 
324 //*************************************************************************************************
331 BLAZE_ALWAYS_INLINE void setzero( SIMDdouble& value ) noexcept
332 {
333 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
334  value.value = _mm512_setzero_pd();
335 #elif BLAZE_AVX_MODE
336  value.value = _mm256_setzero_pd();
337 #elif BLAZE_SSE2_MODE
338  value.value = _mm_setzero_pd();
339 #else
340  value.value = 0.0;
341 #endif
342 }
343 //*************************************************************************************************
344 
345 
346 //*************************************************************************************************
353 BLAZE_ALWAYS_INLINE void setzero( SIMDcdouble& value ) noexcept
354 {
355 #if BLAZE_AVX512F_MODE || BLAZE_MIC_MODE
356  value.value = _mm512_setzero_pd();
357 #elif BLAZE_AVX_MODE
358  value.value = _mm256_setzero_pd();
359 #elif BLAZE_SSE2_MODE
360  value.value = _mm_setzero_pd();
361 #else
362  value.value = 0.0;
363 #endif
364 }
365 //*************************************************************************************************
366 
367 } // namespace blaze
368 
369 #endif
SIMD type for 64-bit double precision floating point data values.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#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.