Blaze 3.9
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
48namespace blaze {
49
50//=================================================================================================
51//
52// 8-BIT INTEGRAL SIMD TYPES
53//
54//=================================================================================================
55
56//*************************************************************************************************
63template< typename T > // Type of the SIMD element
64BLAZE_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//*************************************************************************************************
86template< typename T > // Type of the SIMD element
87BLAZE_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//*************************************************************************************************
117template< typename T > // Type of the SIMD element
118BLAZE_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//*************************************************************************************************
140template< typename T > // Type of the SIMD element
141BLAZE_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//*************************************************************************************************
171template< typename T > // Type of the SIMD element
172BLAZE_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//*************************************************************************************************
194template< typename T > // Type of the SIMD element
195BLAZE_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//*************************************************************************************************
225template< typename T > // Type of the SIMD element
226BLAZE_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//*************************************************************************************************
248template< typename T > // Type of the SIMD element
249BLAZE_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//*************************************************************************************************
279BLAZE_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//*************************************************************************************************
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//*************************************************************************************************
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//*************************************************************************************************
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
Header file for the basic SIMD types.
SIMD type for 64-bit double precision complex values.
SIMD type for 32-bit single precision complex values.
SIMD type for 64-bit double precision floating point data values.
SIMD type for 32-bit single precision floating point data values.
BLAZE_ALWAYS_INLINE void setzero(SIMDcdouble &value) noexcept
Setting a floating point SIMD type with 32-bit double precision complex values to zero.
Definition: Setzero.h:353
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
System settings for the inline keywords.
System settings for the SSE mode.