1 /*===---- avx512fintrin.h - AVX2 intrinsics --------------------------------===
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to deal
5  * in the Software without restriction, including without limitation the rights
6  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7  * copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19  * THE SOFTWARE.
20  *
21  *===-----------------------------------------------------------------------===
22  */
23 #ifndef __IMMINTRIN_H
24 #error "Never use <avx512fintrin.h> directly; include <immintrin.h> instead."
25 #endif
26 
27 #ifndef __AVX512FINTRIN_H
28 #define __AVX512FINTRIN_H
29 
30 typedef double __v8df __attribute__((__vector_size__(64)));
31 typedef float __v16sf __attribute__((__vector_size__(64)));
32 typedef long long __v8di __attribute__((__vector_size__(64)));
33 typedef int __v16si __attribute__((__vector_size__(64)));
34 
35 typedef float __m512 __attribute__((__vector_size__(64)));
36 typedef double __m512d __attribute__((__vector_size__(64)));
37 typedef long long __m512i __attribute__((__vector_size__(64)));
38 
39 typedef unsigned char __mmask8;
40 typedef unsigned short __mmask16;
41 
42 /* Rounding mode macros.  */
43 #define _MM_FROUND_TO_NEAREST_INT   0x00
44 #define _MM_FROUND_TO_NEG_INF       0x01
45 #define _MM_FROUND_TO_POS_INF       0x02
46 #define _MM_FROUND_TO_ZERO          0x03
47 #define _MM_FROUND_CUR_DIRECTION    0x04
48 
49 /* Create vectors with repeated elements */
50 
51 static  __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_setzero_si512(void)52 _mm512_setzero_si512(void)
53 {
54   return (__m512i)(__v8di){ 0, 0, 0, 0, 0, 0, 0, 0 };
55 }
56 
57 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_set1_epi32(__mmask16 __M,int __A)58 _mm512_maskz_set1_epi32(__mmask16 __M, int __A)
59 {
60   return (__m512i) __builtin_ia32_pbroadcastd512_gpr_mask (__A,
61                  (__v16si)
62                  _mm512_setzero_si512 (),
63                  __M);
64 }
65 
66 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_set1_epi64(__mmask8 __M,long long __A)67 _mm512_maskz_set1_epi64(__mmask8 __M, long long __A)
68 {
69 #ifdef __x86_64__
70   return (__m512i) __builtin_ia32_pbroadcastq512_gpr_mask (__A,
71                  (__v8di)
72                  _mm512_setzero_si512 (),
73                  __M);
74 #else
75   return (__m512i) __builtin_ia32_pbroadcastq512_mem_mask (__A,
76                  (__v8di)
77                  _mm512_setzero_si512 (),
78                  __M);
79 #endif
80 }
81 
82 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_setzero_ps(void)83 _mm512_setzero_ps(void)
84 {
85   return (__m512){ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
86                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
87 }
88 static  __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_setzero_pd(void)89 _mm512_setzero_pd(void)
90 {
91   return (__m512d){ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
92 }
93 
94 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_set1_ps(float __w)95 _mm512_set1_ps(float __w)
96 {
97   return (__m512){ __w, __w, __w, __w, __w, __w, __w, __w,
98                    __w, __w, __w, __w, __w, __w, __w, __w  };
99 }
100 
101 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_set1_pd(double __w)102 _mm512_set1_pd(double __w)
103 {
104   return (__m512d){ __w, __w, __w, __w, __w, __w, __w, __w };
105 }
106 
107 static __inline __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_set1_epi32(int __s)108 _mm512_set1_epi32(int __s)
109 {
110   return (__m512i)(__v16si){ __s, __s, __s, __s, __s, __s, __s, __s,
111                              __s, __s, __s, __s, __s, __s, __s, __s };
112 }
113 
114 static __inline __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_set1_epi64(long long __d)115 _mm512_set1_epi64(long long __d)
116 {
117   return (__m512i)(__v8di){ __d, __d, __d, __d, __d, __d, __d, __d };
118 }
119 
120 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_broadcastss_ps(__m128 __X)121 _mm512_broadcastss_ps(__m128 __X)
122 {
123   float __f = __X[0];
124   return (__v16sf){ __f, __f, __f, __f,
125                     __f, __f, __f, __f,
126                     __f, __f, __f, __f,
127                     __f, __f, __f, __f };
128 }
129 
130 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_broadcastsd_pd(__m128d __X)131 _mm512_broadcastsd_pd(__m128d __X)
132 {
133   double __d = __X[0];
134   return (__v8df){ __d, __d, __d, __d,
135                    __d, __d, __d, __d };
136 }
137 
138 /* Cast between vector types */
139 
140 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_castpd256_pd512(__m256d __a)141 _mm512_castpd256_pd512(__m256d __a)
142 {
143   return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, -1, -1, -1, -1);
144 }
145 
146 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_castps256_ps512(__m256 __a)147 _mm512_castps256_ps512(__m256 __a)
148 {
149   return __builtin_shufflevector(__a, __a, 0,  1,  2,  3,  4,  5,  6,  7,
150                                           -1, -1, -1, -1, -1, -1, -1, -1);
151 }
152 
153 static __inline __m128d __attribute__((__always_inline__, __nodebug__))
_mm512_castpd512_pd128(__m512d __a)154 _mm512_castpd512_pd128(__m512d __a)
155 {
156   return __builtin_shufflevector(__a, __a, 0, 1);
157 }
158 
159 static __inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm512_castps512_ps128(__m512 __a)160 _mm512_castps512_ps128(__m512 __a)
161 {
162   return __builtin_shufflevector(__a, __a, 0, 1, 2, 3);
163 }
164 
165 /* Bitwise operators */
166 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_and_epi32(__m512i __a,__m512i __b)167 _mm512_and_epi32(__m512i __a, __m512i __b)
168 {
169   return __a & __b;
170 }
171 
172 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_and_epi32(__m512i __src,__mmask16 __k,__m512i __a,__m512i __b)173 _mm512_mask_and_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b)
174 {
175   return (__m512i) __builtin_ia32_pandd512_mask((__v16si) __a,
176               (__v16si) __b,
177               (__v16si) __src,
178               (__mmask16) __k);
179 }
180 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_and_epi32(__mmask16 __k,__m512i __a,__m512i __b)181 _mm512_maskz_and_epi32(__mmask16 __k, __m512i __a, __m512i __b)
182 {
183   return (__m512i) __builtin_ia32_pandd512_mask((__v16si) __a,
184               (__v16si) __b,
185               (__v16si)
186               _mm512_setzero_si512 (),
187               (__mmask16) __k);
188 }
189 
190 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_and_epi64(__m512i __a,__m512i __b)191 _mm512_and_epi64(__m512i __a, __m512i __b)
192 {
193   return __a & __b;
194 }
195 
196 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_and_epi64(__m512i __src,__mmask8 __k,__m512i __a,__m512i __b)197 _mm512_mask_and_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b)
198 {
199   return (__m512i) __builtin_ia32_pandq512_mask ((__v8di) __a,
200               (__v8di) __b,
201               (__v8di) __src,
202               (__mmask8) __k);
203 }
204 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_and_epi64(__mmask8 __k,__m512i __a,__m512i __b)205 _mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b)
206 {
207   return (__m512i) __builtin_ia32_pandq512_mask ((__v8di) __a,
208               (__v8di) __b,
209               (__v8di)
210               _mm512_setzero_si512 (),
211               (__mmask8) __k);
212 }
213 
214 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_or_epi32(__m512i __a,__m512i __b)215 _mm512_or_epi32(__m512i __a, __m512i __b)
216 {
217   return __a | __b;
218 }
219 
220 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_or_epi32(__m512i __src,__mmask16 __k,__m512i __a,__m512i __b)221 _mm512_mask_or_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b)
222 {
223   return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a,
224               (__v16si) __b,
225               (__v16si) __src,
226               (__mmask16) __k);
227 }
228 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_or_epi32(__mmask16 __k,__m512i __a,__m512i __b)229 _mm512_maskz_or_epi32(__mmask16 __k, __m512i __a, __m512i __b)
230 {
231   return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a,
232               (__v16si) __b,
233               (__v16si)
234               _mm512_setzero_si512 (),
235               (__mmask16) __k);
236 }
237 
238 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_or_epi64(__m512i __a,__m512i __b)239 _mm512_or_epi64(__m512i __a, __m512i __b)
240 {
241   return __a | __b;
242 }
243 
244 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_or_epi64(__m512i __src,__mmask8 __k,__m512i __a,__m512i __b)245 _mm512_mask_or_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b)
246 {
247   return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a,
248               (__v8di) __b,
249               (__v8di) __src,
250               (__mmask8) __k);
251 }
252 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_or_epi64(__mmask8 __k,__m512i __a,__m512i __b)253 _mm512_maskz_or_epi64(__mmask8 __k, __m512i __a, __m512i __b)
254 {
255   return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a,
256               (__v8di) __b,
257               (__v8di)
258               _mm512_setzero_si512 (),
259               (__mmask8) __k);
260 }
261 
262 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_xor_epi32(__m512i __a,__m512i __b)263 _mm512_xor_epi32(__m512i __a, __m512i __b)
264 {
265   return __a ^ __b;
266 }
267 
268 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_xor_epi32(__m512i __src,__mmask16 __k,__m512i __a,__m512i __b)269 _mm512_mask_xor_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b)
270 {
271   return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a,
272               (__v16si) __b,
273               (__v16si) __src,
274               (__mmask16) __k);
275 }
276 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_xor_epi32(__mmask16 __k,__m512i __a,__m512i __b)277 _mm512_maskz_xor_epi32(__mmask16 __k, __m512i __a, __m512i __b)
278 {
279   return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a,
280               (__v16si) __b,
281               (__v16si)
282               _mm512_setzero_si512 (),
283               (__mmask16) __k);
284 }
285 
286 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_xor_epi64(__m512i __a,__m512i __b)287 _mm512_xor_epi64(__m512i __a, __m512i __b)
288 {
289   return __a ^ __b;
290 }
291 
292 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_mask_xor_epi64(__m512i __src,__mmask8 __k,__m512i __a,__m512i __b)293 _mm512_mask_xor_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b)
294 {
295   return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a,
296               (__v8di) __b,
297               (__v8di) __src,
298               (__mmask8) __k);
299 }
300 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_maskz_xor_epi64(__mmask8 __k,__m512i __a,__m512i __b)301 _mm512_maskz_xor_epi64(__mmask8 __k, __m512i __a, __m512i __b)
302 {
303   return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a,
304               (__v8di) __b,
305               (__v8di)
306               _mm512_setzero_si512 (),
307               (__mmask8) __k);
308 }
309 
310 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_and_si512(__m512i __a,__m512i __b)311 _mm512_and_si512(__m512i __a, __m512i __b)
312 {
313   return __a & __b;
314 }
315 
316 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_or_si512(__m512i __a,__m512i __b)317 _mm512_or_si512(__m512i __a, __m512i __b)
318 {
319   return __a | __b;
320 }
321 
322 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_xor_si512(__m512i __a,__m512i __b)323 _mm512_xor_si512(__m512i __a, __m512i __b)
324 {
325   return __a ^ __b;
326 }
327 /* Arithmetic */
328 
329 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_add_pd(__m512d __a,__m512d __b)330 _mm512_add_pd(__m512d __a, __m512d __b)
331 {
332   return __a + __b;
333 }
334 
335 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_add_ps(__m512 __a,__m512 __b)336 _mm512_add_ps(__m512 __a, __m512 __b)
337 {
338   return __a + __b;
339 }
340 
341 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_mul_pd(__m512d __a,__m512d __b)342 _mm512_mul_pd(__m512d __a, __m512d __b)
343 {
344   return __a * __b;
345 }
346 
347 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_mul_ps(__m512 __a,__m512 __b)348 _mm512_mul_ps(__m512 __a, __m512 __b)
349 {
350   return __a * __b;
351 }
352 
353 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_sub_pd(__m512d __a,__m512d __b)354 _mm512_sub_pd(__m512d __a, __m512d __b)
355 {
356   return __a - __b;
357 }
358 
359 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_sub_ps(__m512 __a,__m512 __b)360 _mm512_sub_ps(__m512 __a, __m512 __b)
361 {
362   return __a - __b;
363 }
364 
365 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_max_pd(__m512d __A,__m512d __B)366 _mm512_max_pd(__m512d __A, __m512d __B)
367 {
368   return (__m512d) __builtin_ia32_maxpd512_mask ((__v8df) __A,
369              (__v8df) __B,
370              (__v8df)
371              _mm512_setzero_pd (),
372              (__mmask8) -1,
373              _MM_FROUND_CUR_DIRECTION);
374 }
375 
376 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_max_ps(__m512 __A,__m512 __B)377 _mm512_max_ps(__m512 __A, __m512 __B)
378 {
379   return (__m512) __builtin_ia32_maxps512_mask ((__v16sf) __A,
380             (__v16sf) __B,
381             (__v16sf)
382             _mm512_setzero_ps (),
383             (__mmask16) -1,
384             _MM_FROUND_CUR_DIRECTION);
385 }
386 
387 static __inline __m512i
388 __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epi32(__m512i __A,__m512i __B)389 _mm512_max_epi32(__m512i __A, __m512i __B)
390 {
391   return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A,
392               (__v16si) __B,
393               (__v16si)
394               _mm512_setzero_si512 (),
395               (__mmask16) -1);
396 }
397 
398 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epu32(__m512i __A,__m512i __B)399 _mm512_max_epu32(__m512i __A, __m512i __B)
400 {
401   return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A,
402               (__v16si) __B,
403               (__v16si)
404               _mm512_setzero_si512 (),
405               (__mmask16) -1);
406 }
407 
408 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epi64(__m512i __A,__m512i __B)409 _mm512_max_epi64(__m512i __A, __m512i __B)
410 {
411   return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A,
412               (__v8di) __B,
413               (__v8di)
414               _mm512_setzero_si512 (),
415               (__mmask8) -1);
416 }
417 
418 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epu64(__m512i __A,__m512i __B)419 _mm512_max_epu64(__m512i __A, __m512i __B)
420 {
421   return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A,
422               (__v8di) __B,
423               (__v8di)
424               _mm512_setzero_si512 (),
425               (__mmask8) -1);
426 }
427 
428 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_min_pd(__m512d __A,__m512d __B)429 _mm512_min_pd(__m512d __A, __m512d __B)
430 {
431   return (__m512d) __builtin_ia32_minpd512_mask ((__v8df) __A,
432              (__v8df) __B,
433              (__v8df)
434              _mm512_setzero_pd (),
435              (__mmask8) -1,
436              _MM_FROUND_CUR_DIRECTION);
437 }
438 
439 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_min_ps(__m512 __A,__m512 __B)440 _mm512_min_ps(__m512 __A, __m512 __B)
441 {
442   return (__m512) __builtin_ia32_minps512_mask ((__v16sf) __A,
443             (__v16sf) __B,
444             (__v16sf)
445             _mm512_setzero_ps (),
446             (__mmask16) -1,
447             _MM_FROUND_CUR_DIRECTION);
448 }
449 
450 static __inline __m512i
451 __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epi32(__m512i __A,__m512i __B)452 _mm512_min_epi32(__m512i __A, __m512i __B)
453 {
454   return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A,
455               (__v16si) __B,
456               (__v16si)
457               _mm512_setzero_si512 (),
458               (__mmask16) -1);
459 }
460 
461 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epu32(__m512i __A,__m512i __B)462 _mm512_min_epu32(__m512i __A, __m512i __B)
463 {
464   return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A,
465               (__v16si) __B,
466               (__v16si)
467               _mm512_setzero_si512 (),
468               (__mmask16) -1);
469 }
470 
471 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epi64(__m512i __A,__m512i __B)472 _mm512_min_epi64(__m512i __A, __m512i __B)
473 {
474   return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A,
475               (__v8di) __B,
476               (__v8di)
477               _mm512_setzero_si512 (),
478               (__mmask8) -1);
479 }
480 
481 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epu64(__m512i __A,__m512i __B)482 _mm512_min_epu64(__m512i __A, __m512i __B)
483 {
484   return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A,
485               (__v8di) __B,
486               (__v8di)
487               _mm512_setzero_si512 (),
488               (__mmask8) -1);
489 }
490 
491 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mul_epi32(__m512i __X,__m512i __Y)492 _mm512_mul_epi32(__m512i __X, __m512i __Y)
493 {
494   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
495               (__v16si) __Y,
496               (__v8di)
497               _mm512_setzero_si512 (),
498               (__mmask8) -1);
499 }
500 
501 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mul_epu32(__m512i __X,__m512i __Y)502 _mm512_mul_epu32(__m512i __X, __m512i __Y)
503 {
504   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
505                (__v16si) __Y,
506                (__v8di)
507                _mm512_setzero_si512 (),
508                (__mmask8) -1);
509 }
510 
511 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_sqrt_pd(__m512d a)512 _mm512_sqrt_pd(__m512d a)
513 {
514   return (__m512d)__builtin_ia32_sqrtpd512_mask((__v8df)a,
515                                                 (__v8df) _mm512_setzero_pd (),
516                                                 (__mmask8) -1,
517                                                 _MM_FROUND_CUR_DIRECTION);
518 }
519 
520 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_sqrt_ps(__m512 a)521 _mm512_sqrt_ps(__m512 a)
522 {
523   return (__m512)__builtin_ia32_sqrtps512_mask((__v16sf)a,
524                                                (__v16sf) _mm512_setzero_ps (),
525                                                (__mmask16) -1,
526                                                _MM_FROUND_CUR_DIRECTION);
527 }
528 
529 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_rsqrt14_pd(__m512d __A)530 _mm512_rsqrt14_pd(__m512d __A)
531 {
532   return (__m512d) __builtin_ia32_rsqrt14pd512_mask ((__v8df) __A,
533                  (__v8df)
534                  _mm512_setzero_pd (),
535                  (__mmask8) -1);}
536 
537 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_rsqrt14_ps(__m512 __A)538 _mm512_rsqrt14_ps(__m512 __A)
539 {
540   return (__m512) __builtin_ia32_rsqrt14ps512_mask ((__v16sf) __A,
541                 (__v16sf)
542                 _mm512_setzero_ps (),
543                 (__mmask16) -1);
544 }
545 
546 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
_mm_rsqrt14_ss(__m128 __A,__m128 __B)547 _mm_rsqrt14_ss(__m128 __A, __m128 __B)
548 {
549   return (__m128) __builtin_ia32_rsqrt14ss_mask ((__v4sf) __A,
550              (__v4sf) __B,
551              (__v4sf)
552              _mm_setzero_ps (),
553              (__mmask8) -1);
554 }
555 
556 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
_mm_rsqrt14_sd(__m128d __A,__m128d __B)557 _mm_rsqrt14_sd(__m128d __A, __m128d __B)
558 {
559   return (__m128d) __builtin_ia32_rsqrt14sd_mask ((__v2df) __A,
560               (__v2df) __B,
561               (__v2df)
562               _mm_setzero_pd (),
563               (__mmask8) -1);
564 }
565 
566 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_rcp14_pd(__m512d __A)567 _mm512_rcp14_pd(__m512d __A)
568 {
569   return (__m512d) __builtin_ia32_rcp14pd512_mask ((__v8df) __A,
570                (__v8df)
571                _mm512_setzero_pd (),
572                (__mmask8) -1);
573 }
574 
575 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_rcp14_ps(__m512 __A)576 _mm512_rcp14_ps(__m512 __A)
577 {
578   return (__m512) __builtin_ia32_rcp14ps512_mask ((__v16sf) __A,
579               (__v16sf)
580               _mm512_setzero_ps (),
581               (__mmask16) -1);
582 }
583 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
_mm_rcp14_ss(__m128 __A,__m128 __B)584 _mm_rcp14_ss(__m128 __A, __m128 __B)
585 {
586   return (__m128) __builtin_ia32_rcp14ss_mask ((__v4sf) __A,
587                  (__v4sf) __B,
588                  (__v4sf)
589                  _mm_setzero_ps (),
590                  (__mmask8) -1);
591 }
592 
593 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
_mm_rcp14_sd(__m128d __A,__m128d __B)594 _mm_rcp14_sd(__m128d __A, __m128d __B)
595 {
596   return (__m128d) __builtin_ia32_rcp14sd_mask ((__v2df) __A,
597             (__v2df) __B,
598             (__v2df)
599             _mm_setzero_pd (),
600             (__mmask8) -1);
601 }
602 
603 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_floor_ps(__m512 __A)604 _mm512_floor_ps(__m512 __A)
605 {
606   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
607                                                   _MM_FROUND_FLOOR,
608                                                   (__v16sf) __A, -1,
609                                                   _MM_FROUND_CUR_DIRECTION);
610 }
611 
612 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_floor_pd(__m512d __A)613 _mm512_floor_pd(__m512d __A)
614 {
615   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
616                                                    _MM_FROUND_FLOOR,
617                                                    (__v8df) __A, -1,
618                                                    _MM_FROUND_CUR_DIRECTION);
619 }
620 
621 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_ceil_ps(__m512 __A)622 _mm512_ceil_ps(__m512 __A)
623 {
624   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
625                                                   _MM_FROUND_CEIL,
626                                                   (__v16sf) __A, -1,
627                                                   _MM_FROUND_CUR_DIRECTION);
628 }
629 
630 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_ceil_pd(__m512d __A)631 _mm512_ceil_pd(__m512d __A)
632 {
633   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
634                                                    _MM_FROUND_CEIL,
635                                                    (__v8df) __A, -1,
636                                                    _MM_FROUND_CUR_DIRECTION);
637 }
638 
639 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
_mm512_abs_epi64(__m512i __A)640 _mm512_abs_epi64(__m512i __A)
641 {
642   return (__m512i) __builtin_ia32_pabsq512_mask ((__v8di) __A,
643              (__v8di)
644              _mm512_setzero_si512 (),
645              (__mmask8) -1);
646 }
647 
648 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
_mm512_abs_epi32(__m512i __A)649 _mm512_abs_epi32(__m512i __A)
650 {
651   return (__m512i) __builtin_ia32_pabsd512_mask ((__v16si) __A,
652              (__v16si)
653              _mm512_setzero_si512 (),
654              (__mmask16) -1);
655 }
656 
657 #define _mm512_roundscale_ps(A, B) __extension__ ({ \
658   (__m512)__builtin_ia32_rndscaleps_mask((__v16sf)(A), (B), (__v16sf)(A), \
659                                          -1, _MM_FROUND_CUR_DIRECTION); })
660 
661 #define _mm512_roundscale_pd(A, B) __extension__ ({ \
662   (__m512d)__builtin_ia32_rndscalepd_mask((__v8df)(A), (B), (__v8df)(A), \
663                                           -1, _MM_FROUND_CUR_DIRECTION); })
664 
665 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fmadd_pd(__m512d __A,__m512d __B,__m512d __C)666 _mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C)
667 {
668   return (__m512d)
669     __builtin_ia32_vfmaddpd512_mask(__A,
670                                     __B,
671                                     __C,
672                                     (__mmask8) -1,
673                                     _MM_FROUND_CUR_DIRECTION);
674 }
675 
676 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fmsub_pd(__m512d __A,__m512d __B,__m512d __C)677 _mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C)
678 {
679   return (__m512d)
680     __builtin_ia32_vfmsubpd512_mask(__A,
681                                     __B,
682                                     __C,
683                                     (__mmask8) -1,
684                                     _MM_FROUND_CUR_DIRECTION);
685 }
686 
687 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fnmadd_pd(__m512d __A,__m512d __B,__m512d __C)688 _mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C)
689 {
690   return (__m512d)
691     __builtin_ia32_vfnmaddpd512_mask(__A,
692                                      __B,
693                                      __C,
694                                      (__mmask8) -1,
695                                      _MM_FROUND_CUR_DIRECTION);
696 }
697 
698 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fmadd_ps(__m512 __A,__m512 __B,__m512 __C)699 _mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C)
700 {
701   return (__m512)
702     __builtin_ia32_vfmaddps512_mask(__A,
703                                     __B,
704                                     __C,
705                                     (__mmask16) -1,
706                                     _MM_FROUND_CUR_DIRECTION);
707 }
708 
709 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fmsub_ps(__m512 __A,__m512 __B,__m512 __C)710 _mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C)
711 {
712   return (__m512)
713     __builtin_ia32_vfmsubps512_mask(__A,
714                                     __B,
715                                     __C,
716                                     (__mmask16) -1,
717                                     _MM_FROUND_CUR_DIRECTION);
718 }
719 
720 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fnmadd_ps(__m512 __A,__m512 __B,__m512 __C)721 _mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C)
722 {
723   return (__m512)
724     __builtin_ia32_vfnmaddps512_mask(__A,
725                                      __B,
726                                      __C,
727                                      (__mmask16) -1,
728                                      _MM_FROUND_CUR_DIRECTION);
729 }
730 
731 /* Vector permutations */
732 
733 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_epi32(__m512i __A,__m512i __I,__m512i __B)734 _mm512_permutex2var_epi32(__m512i __A, __m512i __I, __m512i __B)
735 {
736   return (__m512i) __builtin_ia32_vpermt2vard512_mask ((__v16si) __I
737                                                        /* idx */ ,
738                                                        (__v16si) __A,
739                                                        (__v16si) __B,
740                                                        (__mmask16) -1);
741 }
742 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_epi64(__m512i __A,__m512i __I,__m512i __B)743 _mm512_permutex2var_epi64(__m512i __A, __m512i __I, __m512i __B)
744 {
745   return (__m512i) __builtin_ia32_vpermt2varq512_mask ((__v8di) __I
746                                                        /* idx */ ,
747                                                        (__v8di) __A,
748                                                        (__v8di) __B,
749                                                        (__mmask8) -1);
750 }
751 
752 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_pd(__m512d __A,__m512i __I,__m512d __B)753 _mm512_permutex2var_pd(__m512d __A, __m512i __I, __m512d __B)
754 {
755   return (__m512d) __builtin_ia32_vpermt2varpd512_mask ((__v8di) __I
756                                                         /* idx */ ,
757                                                         (__v8df) __A,
758                                                         (__v8df) __B,
759                                                         (__mmask8) -1);
760 }
761 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_ps(__m512 __A,__m512i __I,__m512 __B)762 _mm512_permutex2var_ps(__m512 __A, __m512i __I, __m512 __B)
763 {
764   return (__m512) __builtin_ia32_vpermt2varps512_mask ((__v16si) __I
765                                                        /* idx */ ,
766                                                        (__v16sf) __A,
767                                                        (__v16sf) __B,
768                                                        (__mmask16) -1);
769 }
770 
771 #define _mm512_alignr_epi64(A, B, I) __extension__ ({ \
772   (__m512i)__builtin_ia32_alignq512_mask((__v8di)(__m512i)(A), \
773                                          (__v8di)(__m512i)(B), \
774                                          (I), (__v8di)_mm512_setzero_si512(), \
775                                          (__mmask8)-1); })
776 
777 #define _mm512_alignr_epi32(A, B, I) __extension__ ({ \
778   (__m512i)__builtin_ia32_alignd512_mask((__v16si)(__m512i)(A), \
779                                          (__v16si)(__m512i)(B), \
780                                          (I), (__v16si)_mm512_setzero_si512(), \
781                                          (__mmask16)-1); })
782 
783 /* Vector Extract */
784 
785 #define _mm512_extractf64x4_pd(A, I) __extension__ ({                    \
786       __m512d __A = (A);                                                 \
787       (__m256d)                                                          \
788         __builtin_ia32_extractf64x4_mask((__v8df)__A,                    \
789                                          (I),                            \
790                                          (__v4df)_mm256_setzero_si256(), \
791                                          (__mmask8) -1); })
792 
793 #define _mm512_extractf32x4_ps(A, I) __extension__ ({                    \
794       __m512 __A = (A);                                                  \
795       (__m128)                                                           \
796         __builtin_ia32_extractf32x4_mask((__v16sf)__A,                   \
797                                          (I),                            \
798                                          (__v4sf)_mm_setzero_ps(),       \
799                                          (__mmask8) -1); })
800 
801 /* Vector Blend */
802 
803 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_pd(__mmask8 __U,__m512d __A,__m512d __W)804 _mm512_mask_blend_pd(__mmask8 __U, __m512d __A, __m512d __W)
805 {
806   return (__m512d) __builtin_ia32_blendmpd_512_mask ((__v8df) __A,
807                  (__v8df) __W,
808                  (__mmask8) __U);
809 }
810 
811 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_ps(__mmask16 __U,__m512 __A,__m512 __W)812 _mm512_mask_blend_ps(__mmask16 __U, __m512 __A, __m512 __W)
813 {
814   return (__m512) __builtin_ia32_blendmps_512_mask ((__v16sf) __A,
815                 (__v16sf) __W,
816                 (__mmask16) __U);
817 }
818 
819 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_epi64(__mmask8 __U,__m512i __A,__m512i __W)820 _mm512_mask_blend_epi64(__mmask8 __U, __m512i __A, __m512i __W)
821 {
822   return (__m512i) __builtin_ia32_blendmq_512_mask ((__v8di) __A,
823                 (__v8di) __W,
824                 (__mmask8) __U);
825 }
826 
827 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_epi32(__mmask16 __U,__m512i __A,__m512i __W)828 _mm512_mask_blend_epi32(__mmask16 __U, __m512i __A, __m512i __W)
829 {
830   return (__m512i) __builtin_ia32_blendmd_512_mask ((__v16si) __A,
831                 (__v16si) __W,
832                 (__mmask16) __U);
833 }
834 
835 /* Compare */
836 
837 #define _mm512_cmp_round_ps_mask(A, B, P, R) __extension__ ({ \
838   (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
839                                           (__v16sf)(__m512)(B), \
840                                           (P), (__mmask16)-1, (R)); })
841 
842 #define _mm512_mask_cmp_round_ps_mask(U, A, B, P, R) __extension__ ({ \
843   (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
844                                           (__v16sf)(__m512)(B), \
845                                           (P), (__mmask16)(U), (R)); })
846 
847 #define _mm512_cmp_ps_mask(A, B, P) \
848   _mm512_cmp_round_ps_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
849 
850 #define _mm512_mask_cmp_ps_mask(U, A, B, P) \
851   _mm512_mask_cmp_round_ps_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
852 
853 #define _mm512_cmp_round_pd_mask(A, B, P, R) __extension__ ({ \
854   (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
855                                          (__v8df)(__m512d)(B), \
856                                          (P), (__mmask8)-1, (R)); })
857 
858 #define _mm512_mask_cmp_round_pd_mask(U, A, B, P, R) __extension__ ({ \
859   (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
860                                          (__v8df)(__m512d)(B), \
861                                          (P), (__mmask8)(U), (R)); })
862 
863 #define _mm512_cmp_pd_mask(A, B, P) \
864   _mm512_cmp_round_pd_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
865 
866 #define _mm512_mask_cmp_pd_mask(U, A, B, P) \
867   _mm512_mask_cmp_round_pd_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
868 
869 /* Conversion */
870 
871 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvttps_epu32(__m512 __A)872 _mm512_cvttps_epu32(__m512 __A)
873 {
874   return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A,
875                   (__v16si)
876                   _mm512_setzero_si512 (),
877                   (__mmask16) -1,
878                   _MM_FROUND_CUR_DIRECTION);
879 }
880 
881 #define _mm512_cvt_roundepi32_ps(A, R) __extension__ ({ \
882   (__m512)__builtin_ia32_cvtdq2ps512_mask((__v16si)(A), \
883                                           (__v16sf)_mm512_setzero_ps(), \
884                                           (__mmask16)-1, (R)); })
885 
886 #define _mm512_cvt_roundepu32_ps(A, R) __extension__ ({ \
887   (__m512)__builtin_ia32_cvtudq2ps512_mask((__v16si)(A), \
888                                            (__v16sf)_mm512_setzero_ps(), \
889                                            (__mmask16)-1, (R)); })
890 
891 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvtepi32_pd(__m256i __A)892 _mm512_cvtepi32_pd(__m256i __A)
893 {
894   return (__m512d) __builtin_ia32_cvtdq2pd512_mask ((__v8si) __A,
895                 (__v8df)
896                 _mm512_setzero_pd (),
897                 (__mmask8) -1);
898 }
899 
900 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvtepu32_pd(__m256i __A)901 _mm512_cvtepu32_pd(__m256i __A)
902 {
903   return (__m512d) __builtin_ia32_cvtudq2pd512_mask ((__v8si) __A,
904                 (__v8df)
905                 _mm512_setzero_pd (),
906                 (__mmask8) -1);
907 }
908 
909 #define _mm512_cvt_roundpd_ps(A, R) __extension__ ({ \
910   (__m256)__builtin_ia32_cvtpd2ps512_mask((__v8df)(A), \
911                                           (__v8sf)_mm256_setzero_ps(), \
912                                           (__mmask8)-1, (R)); })
913 
914 #define _mm512_cvtps_ph(A, I) __extension__ ({ \
915   (__m256i)__builtin_ia32_vcvtps2ph512_mask((__v16sf)(A), (I), \
916                                             (__v16hi)_mm256_setzero_si256(), \
917                                             -1); })
918 
919 static  __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvtph_ps(__m256i __A)920 _mm512_cvtph_ps(__m256i __A)
921 {
922   return (__m512) __builtin_ia32_vcvtph2ps512_mask ((__v16hi) __A,
923                 (__v16sf)
924                 _mm512_setzero_ps (),
925                 (__mmask16) -1,
926                 _MM_FROUND_CUR_DIRECTION);
927 }
928 
929 static __inline __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_cvttps_epi32(__m512 a)930 _mm512_cvttps_epi32(__m512 a)
931 {
932   return (__m512i)
933     __builtin_ia32_cvttps2dq512_mask((__v16sf) a,
934                                      (__v16si) _mm512_setzero_si512 (),
935                                      (__mmask16) -1, _MM_FROUND_CUR_DIRECTION);
936 }
937 
938 static __inline __m256i __attribute__((__always_inline__, __nodebug__))
_mm512_cvttpd_epi32(__m512d a)939 _mm512_cvttpd_epi32(__m512d a)
940 {
941   return (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df) a,
942                                                    (__v8si)_mm256_setzero_si256(),
943                                                    (__mmask8) -1,
944                                                     _MM_FROUND_CUR_DIRECTION);
945 }
946 
947 #define _mm512_cvtt_roundpd_epi32(A, R) __extension__ ({ \
948   (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df)(A), \
949                                             (__v8si)_mm256_setzero_si256(), \
950                                             (__mmask8)-1, (R)); })
951 
952 #define _mm512_cvtt_roundps_epi32(A, R) __extension__ ({ \
953   (__m512i)__builtin_ia32_cvttps2dq512_mask((__v16sf)(A), \
954                                             (__v16si)_mm512_setzero_si512(), \
955                                             (__mmask16)-1, (R)); })
956 
957 #define _mm512_cvt_roundps_epi32(A, R) __extension__ ({ \
958   (__m512i)__builtin_ia32_cvtps2dq512_mask((__v16sf)(A), \
959                                            (__v16si)_mm512_setzero_si512(), \
960                                            (__mmask16)-1, (R)); })
961 
962 #define _mm512_cvt_roundpd_epi32(A, R) __extension__ ({ \
963   (__m256i)__builtin_ia32_cvtpd2dq512_mask((__v8df)(A), \
964                                            (__v8si)_mm256_setzero_si256(), \
965                                            (__mmask8)-1, (R)); })
966 
967 #define _mm512_cvt_roundps_epu32(A, R) __extension__ ({ \
968   (__m512i)__builtin_ia32_cvtps2udq512_mask((__v16sf)(A), \
969                                             (__v16si)_mm512_setzero_si512(), \
970                                             (__mmask16)-1, (R)); })
971 
972 #define _mm512_cvt_roundpd_epu32(A, R) __extension__ ({ \
973   (__m256i)__builtin_ia32_cvtpd2udq512_mask((__v8df)(A), \
974                                             (__v8si)_mm256_setzero_si256(), \
975                                             (__mmask8) -1, (R)); })
976 
977 /* Unpack and Interleave */
978 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_unpackhi_pd(__m512d __a,__m512d __b)979 _mm512_unpackhi_pd(__m512d __a, __m512d __b)
980 {
981   return __builtin_shufflevector(__a, __b, 1, 9, 1+2, 9+2, 1+4, 9+4, 1+6, 9+6);
982 }
983 
984 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_unpacklo_pd(__m512d __a,__m512d __b)985 _mm512_unpacklo_pd(__m512d __a, __m512d __b)
986 {
987   return __builtin_shufflevector(__a, __b, 0, 8, 0+2, 8+2, 0+4, 8+4, 0+6, 8+6);
988 }
989 
990 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_unpackhi_ps(__m512 __a,__m512 __b)991 _mm512_unpackhi_ps(__m512 __a, __m512 __b)
992 {
993   return __builtin_shufflevector(__a, __b,
994                                  2,    18,    3,    19,
995                                  2+4,  18+4,  3+4,  19+4,
996                                  2+8,  18+8,  3+8,  19+8,
997                                  2+12, 18+12, 3+12, 19+12);
998 }
999 
1000 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_unpacklo_ps(__m512 __a,__m512 __b)1001 _mm512_unpacklo_ps(__m512 __a, __m512 __b)
1002 {
1003   return __builtin_shufflevector(__a, __b,
1004                                  0,    16,    1,    17,
1005                                  0+4,  16+4,  1+4,  17+4,
1006                                  0+8,  16+8,  1+8,  17+8,
1007                                  0+12, 16+12, 1+12, 17+12);
1008 }
1009 
1010 /* Bit Test */
1011 
1012 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
_mm512_test_epi32_mask(__m512i __A,__m512i __B)1013 _mm512_test_epi32_mask(__m512i __A, __m512i __B)
1014 {
1015   return (__mmask16) __builtin_ia32_ptestmd512 ((__v16si) __A,
1016             (__v16si) __B,
1017             (__mmask16) -1);
1018 }
1019 
1020 static __inline __mmask8 __attribute__ ((__always_inline__, __nodebug__))
_mm512_test_epi64_mask(__m512i __A,__m512i __B)1021 _mm512_test_epi64_mask(__m512i __A, __m512i __B)
1022 {
1023   return (__mmask8) __builtin_ia32_ptestmq512 ((__v8di) __A,
1024                  (__v8di) __B,
1025                  (__mmask8) -1);
1026 }
1027 
1028 /* SIMD load ops */
1029 
1030 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_epi32(__mmask16 __U,void const * __P)1031 _mm512_maskz_loadu_epi32(__mmask16 __U, void const *__P)
1032 {
1033   return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *)__P,
1034                                                      (__v16si)
1035                                                      _mm512_setzero_si512 (),
1036                                                      (__mmask16) __U);
1037 }
1038 
1039 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_epi64(__mmask8 __U,void const * __P)1040 _mm512_maskz_loadu_epi64(__mmask8 __U, void const *__P)
1041 {
1042   return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *)__P,
1043                                                      (__v8di)
1044                                                      _mm512_setzero_si512 (),
1045                                                      (__mmask8) __U);
1046 }
1047 
1048 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_ps(__mmask16 __U,void const * __P)1049 _mm512_maskz_loadu_ps(__mmask16 __U, void const *__P)
1050 {
1051   return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *)__P,
1052                                                   (__v16sf)
1053                                                   _mm512_setzero_ps (),
1054                                                   (__mmask16) __U);
1055 }
1056 
1057 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_pd(__mmask8 __U,void const * __P)1058 _mm512_maskz_loadu_pd(__mmask8 __U, void const *__P)
1059 {
1060   return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P,
1061                                                    (__v8df)
1062                                                    _mm512_setzero_pd (),
1063                                                    (__mmask8) __U);
1064 }
1065 
1066 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_load_ps(__mmask16 __U,void const * __P)1067 _mm512_maskz_load_ps(__mmask16 __U, void const *__P)
1068 {
1069   return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__P,
1070                                                   (__v16sf)
1071                                                   _mm512_setzero_ps (),
1072                                                   (__mmask16) __U);
1073 }
1074 
1075 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_load_pd(__mmask8 __U,void const * __P)1076 _mm512_maskz_load_pd(__mmask8 __U, void const *__P)
1077 {
1078   return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__P,
1079                                                    (__v8df)
1080                                                    _mm512_setzero_pd (),
1081                                                    (__mmask8) __U);
1082 }
1083 
1084 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_loadu_pd(double const * __p)1085 _mm512_loadu_pd(double const *__p)
1086 {
1087   struct __loadu_pd {
1088     __m512d __v;
1089   } __attribute__((__packed__, __may_alias__));
1090   return ((struct __loadu_pd*)__p)->__v;
1091 }
1092 
1093 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_loadu_ps(float const * __p)1094 _mm512_loadu_ps(float const *__p)
1095 {
1096   struct __loadu_ps {
1097     __m512 __v;
1098   } __attribute__((__packed__, __may_alias__));
1099   return ((struct __loadu_ps*)__p)->__v;
1100 }
1101 
1102 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_load_ps(double const * __p)1103 _mm512_load_ps(double const *__p)
1104 {
1105   return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__p,
1106                                                   (__v16sf)
1107                                                   _mm512_setzero_ps (),
1108                                                   (__mmask16) -1);
1109 }
1110 
1111 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_load_pd(float const * __p)1112 _mm512_load_pd(float const *__p)
1113 {
1114   return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__p,
1115                                                    (__v8df)
1116                                                    _mm512_setzero_pd (),
1117                                                    (__mmask8) -1);
1118 }
1119 
1120 /* SIMD store ops */
1121 
1122 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_epi64(void * __P,__mmask8 __U,__m512i __A)1123 _mm512_mask_storeu_epi64(void *__P, __mmask8 __U, __m512i __A)
1124 {
1125   __builtin_ia32_storedqudi512_mask ((__v8di *)__P, (__v8di) __A,
1126                                      (__mmask8) __U);
1127 }
1128 
1129 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_epi32(void * __P,__mmask16 __U,__m512i __A)1130 _mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A)
1131 {
1132   __builtin_ia32_storedqusi512_mask ((__v16si *)__P, (__v16si) __A,
1133                                      (__mmask16) __U);
1134 }
1135 
1136 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_pd(void * __P,__mmask8 __U,__m512d __A)1137 _mm512_mask_storeu_pd(void *__P, __mmask8 __U, __m512d __A)
1138 {
1139   __builtin_ia32_storeupd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U);
1140 }
1141 
1142 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_storeu_pd(void * __P,__m512d __A)1143 _mm512_storeu_pd(void *__P, __m512d __A)
1144 {
1145   __builtin_ia32_storeupd512_mask((__v8df *)__P, (__v8df)__A, (__mmask8)-1);
1146 }
1147 
1148 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_ps(void * __P,__mmask16 __U,__m512 __A)1149 _mm512_mask_storeu_ps(void *__P, __mmask16 __U, __m512 __A)
1150 {
1151   __builtin_ia32_storeups512_mask ((__v16sf *)__P, (__v16sf) __A,
1152                                    (__mmask16) __U);
1153 }
1154 
1155 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_storeu_ps(void * __P,__m512 __A)1156 _mm512_storeu_ps(void *__P, __m512 __A)
1157 {
1158   __builtin_ia32_storeups512_mask((__v16sf *)__P, (__v16sf)__A, (__mmask16)-1);
1159 }
1160 
1161 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_store_pd(void * __P,__mmask8 __U,__m512d __A)1162 _mm512_mask_store_pd(void *__P, __mmask8 __U, __m512d __A)
1163 {
1164   __builtin_ia32_storeapd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U);
1165 }
1166 
1167 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_store_pd(void * __P,__m512d __A)1168 _mm512_store_pd(void *__P, __m512d __A)
1169 {
1170   *(__m512d*)__P = __A;
1171 }
1172 
1173 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_store_ps(void * __P,__mmask16 __U,__m512 __A)1174 _mm512_mask_store_ps(void *__P, __mmask16 __U, __m512 __A)
1175 {
1176   __builtin_ia32_storeaps512_mask ((__v16sf *)__P, (__v16sf) __A,
1177                                    (__mmask16) __U);
1178 }
1179 
1180 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_store_ps(void * __P,__m512 __A)1181 _mm512_store_ps(void *__P, __m512 __A)
1182 {
1183   *(__m512*)__P = __A;
1184 }
1185 
1186 /* Mask ops */
1187 
1188 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
_mm512_knot(__mmask16 __M)1189 _mm512_knot(__mmask16 __M)
1190 {
1191   return __builtin_ia32_knothi(__M);
1192 }
1193 
1194 /* Integer compare */
1195 
1196 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi32_mask(__m512i __a,__m512i __b)1197 _mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) {
1198   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1199                                                    (__mmask16)-1);
1200 }
1201 
1202 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1203 _mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1204   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1205                                                    __u);
1206 }
1207 
1208 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epu32_mask(__m512i __a,__m512i __b)1209 _mm512_cmpeq_epu32_mask(__m512i __a, __m512i __b) {
1210   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0,
1211                                                  (__mmask16)-1);
1212 }
1213 
1214 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1215 _mm512_mask_cmpeq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1216   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0,
1217                                                  __u);
1218 }
1219 
1220 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1221 _mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1222   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1223                                                   __u);
1224 }
1225 
1226 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi64_mask(__m512i __a,__m512i __b)1227 _mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) {
1228   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1229                                                   (__mmask8)-1);
1230 }
1231 
1232 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epu64_mask(__m512i __a,__m512i __b)1233 _mm512_cmpeq_epu64_mask(__m512i __a, __m512i __b) {
1234   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0,
1235                                                 (__mmask8)-1);
1236 }
1237 
1238 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1239 _mm512_mask_cmpeq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1240   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0,
1241                                                 __u);
1242 }
1243 
1244 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epi32_mask(__m512i __a,__m512i __b)1245 _mm512_cmpge_epi32_mask(__m512i __a, __m512i __b) {
1246   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1247                                                 (__mmask16)-1);
1248 }
1249 
1250 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1251 _mm512_mask_cmpge_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1252   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1253                                                 __u);
1254 }
1255 
1256 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epu32_mask(__m512i __a,__m512i __b)1257 _mm512_cmpge_epu32_mask(__m512i __a, __m512i __b) {
1258   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1259                                                  (__mmask16)-1);
1260 }
1261 
1262 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1263 _mm512_mask_cmpge_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1264   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1265                                                  __u);
1266 }
1267 
1268 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epi64_mask(__m512i __a,__m512i __b)1269 _mm512_cmpge_epi64_mask(__m512i __a, __m512i __b) {
1270   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1271                                                (__mmask8)-1);
1272 }
1273 
1274 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1275 _mm512_mask_cmpge_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1276   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1277                                                __u);
1278 }
1279 
1280 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epu64_mask(__m512i __a,__m512i __b)1281 _mm512_cmpge_epu64_mask(__m512i __a, __m512i __b) {
1282   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1283                                                 (__mmask8)-1);
1284 }
1285 
1286 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1287 _mm512_mask_cmpge_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1288   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1289                                                 __u);
1290 }
1291 
1292 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epi32_mask(__m512i __a,__m512i __b)1293 _mm512_cmpgt_epi32_mask(__m512i __a, __m512i __b) {
1294   return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b,
1295                                                    (__mmask16)-1);
1296 }
1297 
1298 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1299 _mm512_mask_cmpgt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1300   return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b,
1301                                                    __u);
1302 }
1303 
1304 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epu32_mask(__m512i __a,__m512i __b)1305 _mm512_cmpgt_epu32_mask(__m512i __a, __m512i __b) {
1306   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6,
1307                                                  (__mmask16)-1);
1308 }
1309 
1310 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1311 _mm512_mask_cmpgt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1312   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6,
1313                                                  __u);
1314 }
1315 
1316 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1317 _mm512_mask_cmpgt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1318   return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b,
1319                                                   __u);
1320 }
1321 
1322 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epi64_mask(__m512i __a,__m512i __b)1323 _mm512_cmpgt_epi64_mask(__m512i __a, __m512i __b) {
1324   return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b,
1325                                                   (__mmask8)-1);
1326 }
1327 
1328 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epu64_mask(__m512i __a,__m512i __b)1329 _mm512_cmpgt_epu64_mask(__m512i __a, __m512i __b) {
1330   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6,
1331                                                 (__mmask8)-1);
1332 }
1333 
1334 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1335 _mm512_mask_cmpgt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1336   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6,
1337                                                 __u);
1338 }
1339 
1340 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epi32_mask(__m512i __a,__m512i __b)1341 _mm512_cmple_epi32_mask(__m512i __a, __m512i __b) {
1342   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1343                                                 (__mmask16)-1);
1344 }
1345 
1346 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1347 _mm512_mask_cmple_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1348   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1349                                                 __u);
1350 }
1351 
1352 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epu32_mask(__m512i __a,__m512i __b)1353 _mm512_cmple_epu32_mask(__m512i __a, __m512i __b) {
1354   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1355                                                  (__mmask16)-1);
1356 }
1357 
1358 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1359 _mm512_mask_cmple_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1360   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1361                                                  __u);
1362 }
1363 
1364 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epi64_mask(__m512i __a,__m512i __b)1365 _mm512_cmple_epi64_mask(__m512i __a, __m512i __b) {
1366   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1367                                                (__mmask8)-1);
1368 }
1369 
1370 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1371 _mm512_mask_cmple_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1372   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1373                                                __u);
1374 }
1375 
1376 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epu64_mask(__m512i __a,__m512i __b)1377 _mm512_cmple_epu64_mask(__m512i __a, __m512i __b) {
1378   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1379                                                 (__mmask8)-1);
1380 }
1381 
1382 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1383 _mm512_mask_cmple_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1384   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1385                                                 __u);
1386 }
1387 
1388 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epi32_mask(__m512i __a,__m512i __b)1389 _mm512_cmplt_epi32_mask(__m512i __a, __m512i __b) {
1390   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1391                                                 (__mmask16)-1);
1392 }
1393 
1394 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1395 _mm512_mask_cmplt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1396   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1397                                                 __u);
1398 }
1399 
1400 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epu32_mask(__m512i __a,__m512i __b)1401 _mm512_cmplt_epu32_mask(__m512i __a, __m512i __b) {
1402   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1403                                                  (__mmask16)-1);
1404 }
1405 
1406 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1407 _mm512_mask_cmplt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1408   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1409                                                  __u);
1410 }
1411 
1412 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epi64_mask(__m512i __a,__m512i __b)1413 _mm512_cmplt_epi64_mask(__m512i __a, __m512i __b) {
1414   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1415                                                (__mmask8)-1);
1416 }
1417 
1418 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1419 _mm512_mask_cmplt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1420   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1421                                                __u);
1422 }
1423 
1424 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epu64_mask(__m512i __a,__m512i __b)1425 _mm512_cmplt_epu64_mask(__m512i __a, __m512i __b) {
1426   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1427                                                 (__mmask8)-1);
1428 }
1429 
1430 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1431 _mm512_mask_cmplt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1432   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1433                                                 __u);
1434 }
1435 
1436 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epi32_mask(__m512i __a,__m512i __b)1437 _mm512_cmpneq_epi32_mask(__m512i __a, __m512i __b) {
1438   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1439                                                 (__mmask16)-1);
1440 }
1441 
1442 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1443 _mm512_mask_cmpneq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1444   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1445                                                 __u);
1446 }
1447 
1448 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epu32_mask(__m512i __a,__m512i __b)1449 _mm512_cmpneq_epu32_mask(__m512i __a, __m512i __b) {
1450   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1451                                                  (__mmask16)-1);
1452 }
1453 
1454 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epu32_mask(__mmask16 __u,__m512i __a,__m512i __b)1455 _mm512_mask_cmpneq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1456   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1457                                                  __u);
1458 }
1459 
1460 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epi64_mask(__m512i __a,__m512i __b)1461 _mm512_cmpneq_epi64_mask(__m512i __a, __m512i __b) {
1462   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1463                                                (__mmask8)-1);
1464 }
1465 
1466 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1467 _mm512_mask_cmpneq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1468   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1469                                                __u);
1470 }
1471 
1472 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epu64_mask(__m512i __a,__m512i __b)1473 _mm512_cmpneq_epu64_mask(__m512i __a, __m512i __b) {
1474   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1475                                                 (__mmask8)-1);
1476 }
1477 
1478 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epu64_mask(__mmask8 __u,__m512i __a,__m512i __b)1479 _mm512_mask_cmpneq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1480   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1481                                                 __u);
1482 }
1483 
1484 #define _mm512_cmp_epi32_mask(a, b, p) __extension__ ({ \
1485   __m512i __a = (a); \
1486   __m512i __b = (b); \
1487   (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1488                                          (__mmask16)-1); })
1489 
1490 #define _mm512_cmp_epu32_mask(a, b, p) __extension__ ({ \
1491   __m512i __a = (a); \
1492   __m512i __b = (b); \
1493   (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1494                                           (__mmask16)-1); })
1495 
1496 #define _mm512_cmp_epi64_mask(a, b, p) __extension__ ({ \
1497   __m512i __a = (a); \
1498   __m512i __b = (b); \
1499   (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1500                                         (__mmask8)-1); })
1501 
1502 #define _mm512_cmp_epu64_mask(a, b, p) __extension__ ({ \
1503   __m512i __a = (a); \
1504   __m512i __b = (b); \
1505   (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1506                                          (__mmask8)-1); })
1507 
1508 #define _mm512_mask_cmp_epi32_mask(m, a, b, p) __extension__ ({ \
1509   __m512i __a = (a); \
1510   __m512i __b = (b); \
1511   (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1512                                          (__mmask16)(m)); })
1513 
1514 #define _mm512_mask_cmp_epu32_mask(m, a, b, p) __extension__ ({ \
1515   __m512i __a = (a); \
1516   __m512i __b = (b); \
1517   (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1518                                           (__mmask16)(m)); })
1519 
1520 #define _mm512_mask_cmp_epi64_mask(m, a, b, p) __extension__ ({ \
1521   __m512i __a = (a); \
1522   __m512i __b = (b); \
1523   (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1524                                         (__mmask8)(m)); })
1525 
1526 #define _mm512_mask_cmp_epu64_mask(m, a, b, p) __extension__ ({ \
1527   __m512i __a = (a); \
1528   __m512i __b = (b); \
1529   (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1530                                          (__mmask8)(m)); })
1531 #endif // __AVX512FINTRIN_H
1532