]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/Headers/avx512fintrin.h
Vendor import of clang trunk r238337:
[FreeBSD/FreeBSD.git] / lib / Headers / avx512fintrin.h
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
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__))
167 _mm512_and_epi32(__m512i __a, __m512i __b)
168 {
169   return __a & __b;
170 }
171
172 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
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__))
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__))
191 _mm512_and_epi64(__m512i __a, __m512i __b)
192 {
193   return __a & __b;
194 }
195
196 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
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__))
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__))
215 _mm512_andnot_epi32 (__m512i __A, __m512i __B)
216 {
217   return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A,
218               (__v16si) __B,
219               (__v16si)
220               _mm512_setzero_si512 (),
221               (__mmask16) -1);
222 }
223
224 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
225 _mm512_mask_andnot_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B)
226 {
227   return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A,
228               (__v16si) __B,
229               (__v16si) __W,
230               (__mmask16) __U);
231 }
232
233 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
234 _mm512_maskz_andnot_epi32 (__mmask16 __U, __m512i __A, __m512i __B)
235 {
236   return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A,
237               (__v16si) __B,
238               (__v16si)
239               _mm512_setzero_si512 (),
240               (__mmask16) __U);
241 }
242
243 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
244 _mm512_andnot_epi64 (__m512i __A, __m512i __B)
245 {
246   return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A,
247               (__v8di) __B,
248               (__v8di)
249               _mm512_setzero_si512 (),
250               (__mmask8) -1);
251 }
252
253 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
254 _mm512_mask_andnot_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B)
255 {
256   return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A,
257               (__v8di) __B,
258               (__v8di) __W, __U);
259 }
260
261 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
262 _mm512_maskz_andnot_epi64 (__mmask8 __U, __m512i __A, __m512i __B)
263 {
264   return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A,
265               (__v8di) __B,
266               (__v8di)
267               _mm512_setzero_pd (),
268               __U);
269 }
270 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
271 _mm512_or_epi32(__m512i __a, __m512i __b)
272 {
273   return __a | __b;
274 }
275
276 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
277 _mm512_mask_or_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b)
278 {
279   return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a,
280               (__v16si) __b,
281               (__v16si) __src,
282               (__mmask16) __k);
283 }
284 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
285 _mm512_maskz_or_epi32(__mmask16 __k, __m512i __a, __m512i __b)
286 {
287   return (__m512i) __builtin_ia32_pord512_mask((__v16si) __a,
288               (__v16si) __b,
289               (__v16si)
290               _mm512_setzero_si512 (),
291               (__mmask16) __k);
292 }
293
294 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
295 _mm512_or_epi64(__m512i __a, __m512i __b)
296 {
297   return __a | __b;
298 }
299
300 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
301 _mm512_mask_or_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b)
302 {
303   return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a,
304               (__v8di) __b,
305               (__v8di) __src,
306               (__mmask8) __k);
307 }
308 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
309 _mm512_maskz_or_epi64(__mmask8 __k, __m512i __a, __m512i __b)
310 {
311   return (__m512i) __builtin_ia32_porq512_mask ((__v8di) __a,
312               (__v8di) __b,
313               (__v8di)
314               _mm512_setzero_si512 (),
315               (__mmask8) __k);
316 }
317
318 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
319 _mm512_xor_epi32(__m512i __a, __m512i __b)
320 {
321   return __a ^ __b;
322 }
323
324 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
325 _mm512_mask_xor_epi32(__m512i __src, __mmask16 __k, __m512i __a, __m512i __b)
326 {
327   return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a,
328               (__v16si) __b,
329               (__v16si) __src,
330               (__mmask16) __k);
331 }
332 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
333 _mm512_maskz_xor_epi32(__mmask16 __k, __m512i __a, __m512i __b)
334 {
335   return (__m512i) __builtin_ia32_pxord512_mask((__v16si) __a,
336               (__v16si) __b,
337               (__v16si)
338               _mm512_setzero_si512 (),
339               (__mmask16) __k);
340 }
341
342 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
343 _mm512_xor_epi64(__m512i __a, __m512i __b)
344 {
345   return __a ^ __b;
346 }
347
348 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
349 _mm512_mask_xor_epi64(__m512i __src, __mmask8 __k, __m512i __a, __m512i __b)
350 {
351   return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a,
352               (__v8di) __b,
353               (__v8di) __src,
354               (__mmask8) __k);
355 }
356 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
357 _mm512_maskz_xor_epi64(__mmask8 __k, __m512i __a, __m512i __b)
358 {
359   return (__m512i) __builtin_ia32_pxorq512_mask ((__v8di) __a,
360               (__v8di) __b,
361               (__v8di)
362               _mm512_setzero_si512 (),
363               (__mmask8) __k);
364 }
365
366 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
367 _mm512_and_si512(__m512i __a, __m512i __b)
368 {
369   return __a & __b;
370 }
371
372 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
373 _mm512_or_si512(__m512i __a, __m512i __b)
374 {
375   return __a | __b;
376 }
377
378 static __inline__ __m512i __attribute__((__always_inline__, __nodebug__))
379 _mm512_xor_si512(__m512i __a, __m512i __b)
380 {
381   return __a ^ __b;
382 }
383 /* Arithmetic */
384
385 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
386 _mm512_add_pd(__m512d __a, __m512d __b)
387 {
388   return __a + __b;
389 }
390
391 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
392 _mm512_add_ps(__m512 __a, __m512 __b)
393 {
394   return __a + __b;
395 }
396
397 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
398 _mm512_mul_pd(__m512d __a, __m512d __b)
399 {
400   return __a * __b;
401 }
402
403 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
404 _mm512_mul_ps(__m512 __a, __m512 __b)
405 {
406   return __a * __b;
407 }
408
409 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
410 _mm512_sub_pd(__m512d __a, __m512d __b)
411 {
412   return __a - __b;
413 }
414
415 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
416 _mm512_sub_ps(__m512 __a, __m512 __b)
417 {
418   return __a - __b;
419 }
420
421 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
422 _mm512_add_epi64 (__m512i __A, __m512i __B)
423 {
424   return (__m512i) ((__v8di) __A + (__v8di) __B);
425 }
426
427 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
428 _mm512_mask_add_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B)
429 {
430   return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A,
431              (__v8di) __B,
432              (__v8di) __W,
433              (__mmask8) __U);
434 }
435
436 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
437 _mm512_maskz_add_epi64 (__mmask8 __U, __m512i __A, __m512i __B)
438 {
439   return (__m512i) __builtin_ia32_paddq512_mask ((__v8di) __A,
440              (__v8di) __B,
441              (__v8di)
442              _mm512_setzero_si512 (),
443              (__mmask8) __U);
444 }
445
446 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
447 _mm512_sub_epi64 (__m512i __A, __m512i __B)
448 {
449   return (__m512i) ((__v8di) __A - (__v8di) __B);
450 }
451
452 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
453 _mm512_mask_sub_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B)
454 {
455   return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A,
456              (__v8di) __B,
457              (__v8di) __W,
458              (__mmask8) __U);
459 }
460
461 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
462 _mm512_maskz_sub_epi64 (__mmask8 __U, __m512i __A, __m512i __B)
463 {
464   return (__m512i) __builtin_ia32_psubq512_mask ((__v8di) __A,
465              (__v8di) __B,
466              (__v8di)
467              _mm512_setzero_si512 (),
468              (__mmask8) __U);
469 }
470
471 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
472 _mm512_add_epi32 (__m512i __A, __m512i __B)
473 {
474   return (__m512i) ((__v16si) __A + (__v16si) __B);
475 }
476
477 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
478 _mm512_mask_add_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B)
479 {
480   return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A,
481              (__v16si) __B,
482              (__v16si) __W,
483              (__mmask16) __U);
484 }
485
486 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
487 _mm512_maskz_add_epi32 (__mmask16 __U, __m512i __A, __m512i __B)
488 {
489   return (__m512i) __builtin_ia32_paddd512_mask ((__v16si) __A,
490              (__v16si) __B,
491              (__v16si)
492              _mm512_setzero_si512 (),
493              (__mmask16) __U);
494 }
495
496 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
497 _mm512_sub_epi32 (__m512i __A, __m512i __B)
498 {
499   return (__m512i) ((__v16si) __A - (__v16si) __B);
500 }
501
502 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
503 _mm512_mask_sub_epi32 (__m512i __W, __mmask16 __U, __m512i __A, __m512i __B)
504 {
505   return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A,
506              (__v16si) __B,
507              (__v16si) __W,
508              (__mmask16) __U);
509 }
510
511 static __inline__ __m512i __attribute__ ((__always_inline__, __nodebug__))
512 _mm512_maskz_sub_epi32 (__mmask16 __U, __m512i __A, __m512i __B)
513 {
514   return (__m512i) __builtin_ia32_psubd512_mask ((__v16si) __A,
515              (__v16si) __B,
516              (__v16si)
517              _mm512_setzero_si512 (),
518              (__mmask16) __U);
519 }
520
521 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
522 _mm512_max_pd(__m512d __A, __m512d __B)
523 {
524   return (__m512d) __builtin_ia32_maxpd512_mask ((__v8df) __A,
525              (__v8df) __B,
526              (__v8df)
527              _mm512_setzero_pd (),
528              (__mmask8) -1,
529              _MM_FROUND_CUR_DIRECTION);
530 }
531
532 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
533 _mm512_max_ps(__m512 __A, __m512 __B)
534 {
535   return (__m512) __builtin_ia32_maxps512_mask ((__v16sf) __A,
536             (__v16sf) __B,
537             (__v16sf)
538             _mm512_setzero_ps (),
539             (__mmask16) -1,
540             _MM_FROUND_CUR_DIRECTION);
541 }
542
543 static __inline __m512i
544 __attribute__ ((__always_inline__, __nodebug__))
545 _mm512_max_epi32(__m512i __A, __m512i __B)
546 {
547   return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A,
548               (__v16si) __B,
549               (__v16si)
550               _mm512_setzero_si512 (),
551               (__mmask16) -1);
552 }
553
554 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
555 _mm512_max_epu32(__m512i __A, __m512i __B)
556 {
557   return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A,
558               (__v16si) __B,
559               (__v16si)
560               _mm512_setzero_si512 (),
561               (__mmask16) -1);
562 }
563
564 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
565 _mm512_max_epi64(__m512i __A, __m512i __B)
566 {
567   return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A,
568               (__v8di) __B,
569               (__v8di)
570               _mm512_setzero_si512 (),
571               (__mmask8) -1);
572 }
573
574 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
575 _mm512_max_epu64(__m512i __A, __m512i __B)
576 {
577   return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A,
578               (__v8di) __B,
579               (__v8di)
580               _mm512_setzero_si512 (),
581               (__mmask8) -1);
582 }
583
584 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
585 _mm512_min_pd(__m512d __A, __m512d __B)
586 {
587   return (__m512d) __builtin_ia32_minpd512_mask ((__v8df) __A,
588              (__v8df) __B,
589              (__v8df)
590              _mm512_setzero_pd (),
591              (__mmask8) -1,
592              _MM_FROUND_CUR_DIRECTION);
593 }
594
595 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
596 _mm512_min_ps(__m512 __A, __m512 __B)
597 {
598   return (__m512) __builtin_ia32_minps512_mask ((__v16sf) __A,
599             (__v16sf) __B,
600             (__v16sf)
601             _mm512_setzero_ps (),
602             (__mmask16) -1,
603             _MM_FROUND_CUR_DIRECTION);
604 }
605
606 static __inline __m512i
607 __attribute__ ((__always_inline__, __nodebug__))
608 _mm512_min_epi32(__m512i __A, __m512i __B)
609 {
610   return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A,
611               (__v16si) __B,
612               (__v16si)
613               _mm512_setzero_si512 (),
614               (__mmask16) -1);
615 }
616
617 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
618 _mm512_min_epu32(__m512i __A, __m512i __B)
619 {
620   return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A,
621               (__v16si) __B,
622               (__v16si)
623               _mm512_setzero_si512 (),
624               (__mmask16) -1);
625 }
626
627 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
628 _mm512_min_epi64(__m512i __A, __m512i __B)
629 {
630   return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A,
631               (__v8di) __B,
632               (__v8di)
633               _mm512_setzero_si512 (),
634               (__mmask8) -1);
635 }
636
637 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
638 _mm512_min_epu64(__m512i __A, __m512i __B)
639 {
640   return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A,
641               (__v8di) __B,
642               (__v8di)
643               _mm512_setzero_si512 (),
644               (__mmask8) -1);
645 }
646
647 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
648 _mm512_mul_epi32(__m512i __X, __m512i __Y)
649 {
650   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
651               (__v16si) __Y,
652               (__v8di)
653               _mm512_setzero_si512 (),
654               (__mmask8) -1);
655 }
656
657 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
658 _mm512_mask_mul_epi32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y)
659 {
660   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
661               (__v16si) __Y,
662               (__v8di) __W, __M);
663 }
664
665 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
666 _mm512_maskz_mul_epi32 (__mmask8 __M, __m512i __X, __m512i __Y)
667 {
668   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
669               (__v16si) __Y,
670               (__v8di)
671               _mm512_setzero_si512 (),
672               __M);
673 }
674
675 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
676 _mm512_mul_epu32(__m512i __X, __m512i __Y)
677 {
678   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
679                (__v16si) __Y,
680                (__v8di)
681                _mm512_setzero_si512 (),
682                (__mmask8) -1);
683 }
684
685 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
686 _mm512_mask_mul_epu32 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y)
687 {
688   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
689                (__v16si) __Y,
690                (__v8di) __W, __M);
691 }
692
693 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
694 _mm512_maskz_mul_epu32 (__mmask8 __M, __m512i __X, __m512i __Y)
695 {
696   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
697                (__v16si) __Y,
698                (__v8di)
699                _mm512_setzero_si512 (),
700                __M);
701 }
702
703 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
704 _mm512_mullo_epi32 (__m512i __A, __m512i __B)
705 {
706   return (__m512i) ((__v16si) __A * (__v16si) __B);
707 }
708
709 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
710 _mm512_maskz_mullo_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
711 {
712   return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A,
713               (__v16si) __B,
714               (__v16si)
715               _mm512_setzero_si512 (),
716               __M);
717 }
718
719 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
720 _mm512_mask_mullo_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
721 {
722   return (__m512i) __builtin_ia32_pmulld512_mask ((__v16si) __A,
723               (__v16si) __B,
724               (__v16si) __W, __M);
725 }
726
727 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
728 _mm512_sqrt_pd(__m512d a)
729 {
730   return (__m512d)__builtin_ia32_sqrtpd512_mask((__v8df)a,
731                                                 (__v8df) _mm512_setzero_pd (),
732                                                 (__mmask8) -1,
733                                                 _MM_FROUND_CUR_DIRECTION);
734 }
735
736 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
737 _mm512_sqrt_ps(__m512 a)
738 {
739   return (__m512)__builtin_ia32_sqrtps512_mask((__v16sf)a,
740                                                (__v16sf) _mm512_setzero_ps (),
741                                                (__mmask16) -1,
742                                                _MM_FROUND_CUR_DIRECTION);
743 }
744
745 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
746 _mm512_rsqrt14_pd(__m512d __A)
747 {
748   return (__m512d) __builtin_ia32_rsqrt14pd512_mask ((__v8df) __A,
749                  (__v8df)
750                  _mm512_setzero_pd (),
751                  (__mmask8) -1);}
752
753 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
754 _mm512_rsqrt14_ps(__m512 __A)
755 {
756   return (__m512) __builtin_ia32_rsqrt14ps512_mask ((__v16sf) __A,
757                 (__v16sf)
758                 _mm512_setzero_ps (),
759                 (__mmask16) -1);
760 }
761
762 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
763 _mm_rsqrt14_ss(__m128 __A, __m128 __B)
764 {
765   return (__m128) __builtin_ia32_rsqrt14ss_mask ((__v4sf) __A,
766              (__v4sf) __B,
767              (__v4sf)
768              _mm_setzero_ps (),
769              (__mmask8) -1);
770 }
771
772 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
773 _mm_rsqrt14_sd(__m128d __A, __m128d __B)
774 {
775   return (__m128d) __builtin_ia32_rsqrt14sd_mask ((__v2df) __A,
776               (__v2df) __B,
777               (__v2df)
778               _mm_setzero_pd (),
779               (__mmask8) -1);
780 }
781
782 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
783 _mm512_rcp14_pd(__m512d __A)
784 {
785   return (__m512d) __builtin_ia32_rcp14pd512_mask ((__v8df) __A,
786                (__v8df)
787                _mm512_setzero_pd (),
788                (__mmask8) -1);
789 }
790
791 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
792 _mm512_rcp14_ps(__m512 __A)
793 {
794   return (__m512) __builtin_ia32_rcp14ps512_mask ((__v16sf) __A,
795               (__v16sf)
796               _mm512_setzero_ps (),
797               (__mmask16) -1);
798 }
799 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
800 _mm_rcp14_ss(__m128 __A, __m128 __B)
801 {
802   return (__m128) __builtin_ia32_rcp14ss_mask ((__v4sf) __A,
803                  (__v4sf) __B,
804                  (__v4sf)
805                  _mm_setzero_ps (),
806                  (__mmask8) -1);
807 }
808
809 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
810 _mm_rcp14_sd(__m128d __A, __m128d __B)
811 {
812   return (__m128d) __builtin_ia32_rcp14sd_mask ((__v2df) __A,
813             (__v2df) __B,
814             (__v2df)
815             _mm_setzero_pd (),
816             (__mmask8) -1);
817 }
818
819 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
820 _mm512_floor_ps(__m512 __A)
821 {
822   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
823                                                   _MM_FROUND_FLOOR,
824                                                   (__v16sf) __A, -1,
825                                                   _MM_FROUND_CUR_DIRECTION);
826 }
827
828 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
829 _mm512_floor_pd(__m512d __A)
830 {
831   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
832                                                    _MM_FROUND_FLOOR,
833                                                    (__v8df) __A, -1,
834                                                    _MM_FROUND_CUR_DIRECTION);
835 }
836
837 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
838 _mm512_ceil_ps(__m512 __A)
839 {
840   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
841                                                   _MM_FROUND_CEIL,
842                                                   (__v16sf) __A, -1,
843                                                   _MM_FROUND_CUR_DIRECTION);
844 }
845
846 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
847 _mm512_ceil_pd(__m512d __A)
848 {
849   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
850                                                    _MM_FROUND_CEIL,
851                                                    (__v8df) __A, -1,
852                                                    _MM_FROUND_CUR_DIRECTION);
853 }
854
855 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
856 _mm512_abs_epi64(__m512i __A)
857 {
858   return (__m512i) __builtin_ia32_pabsq512_mask ((__v8di) __A,
859              (__v8di)
860              _mm512_setzero_si512 (),
861              (__mmask8) -1);
862 }
863
864 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
865 _mm512_abs_epi32(__m512i __A)
866 {
867   return (__m512i) __builtin_ia32_pabsd512_mask ((__v16si) __A,
868              (__v16si)
869              _mm512_setzero_si512 (),
870              (__mmask16) -1);
871 }
872
873 #define _mm512_roundscale_ps(A, B) __extension__ ({ \
874   (__m512)__builtin_ia32_rndscaleps_mask((__v16sf)(A), (B), (__v16sf)(A), \
875                                          -1, _MM_FROUND_CUR_DIRECTION); })
876
877 #define _mm512_roundscale_pd(A, B) __extension__ ({ \
878   (__m512d)__builtin_ia32_rndscalepd_mask((__v8df)(A), (B), (__v8df)(A), \
879                                           -1, _MM_FROUND_CUR_DIRECTION); })
880
881 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
882 _mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C)
883 {
884   return (__m512d)
885     __builtin_ia32_vfmaddpd512_mask(__A,
886                                     __B,
887                                     __C,
888                                     (__mmask8) -1,
889                                     _MM_FROUND_CUR_DIRECTION);
890 }
891
892 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
893 _mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C)
894 {
895   return (__m512d)
896     __builtin_ia32_vfmsubpd512_mask(__A,
897                                     __B,
898                                     __C,
899                                     (__mmask8) -1,
900                                     _MM_FROUND_CUR_DIRECTION);
901 }
902
903 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
904 _mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C)
905 {
906   return (__m512d)
907     __builtin_ia32_vfnmaddpd512_mask(__A,
908                                      __B,
909                                      __C,
910                                      (__mmask8) -1,
911                                      _MM_FROUND_CUR_DIRECTION);
912 }
913
914 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
915 _mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C)
916 {
917   return (__m512)
918     __builtin_ia32_vfmaddps512_mask(__A,
919                                     __B,
920                                     __C,
921                                     (__mmask16) -1,
922                                     _MM_FROUND_CUR_DIRECTION);
923 }
924
925 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
926 _mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C)
927 {
928   return (__m512)
929     __builtin_ia32_vfmsubps512_mask(__A,
930                                     __B,
931                                     __C,
932                                     (__mmask16) -1,
933                                     _MM_FROUND_CUR_DIRECTION);
934 }
935
936 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
937 _mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C)
938 {
939   return (__m512)
940     __builtin_ia32_vfnmaddps512_mask(__A,
941                                      __B,
942                                      __C,
943                                      (__mmask16) -1,
944                                      _MM_FROUND_CUR_DIRECTION);
945 }
946
947 /* Vector permutations */
948
949 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
950 _mm512_permutex2var_epi32(__m512i __A, __m512i __I, __m512i __B)
951 {
952   return (__m512i) __builtin_ia32_vpermt2vard512_mask ((__v16si) __I
953                                                        /* idx */ ,
954                                                        (__v16si) __A,
955                                                        (__v16si) __B,
956                                                        (__mmask16) -1);
957 }
958 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
959 _mm512_permutex2var_epi64(__m512i __A, __m512i __I, __m512i __B)
960 {
961   return (__m512i) __builtin_ia32_vpermt2varq512_mask ((__v8di) __I
962                                                        /* idx */ ,
963                                                        (__v8di) __A,
964                                                        (__v8di) __B,
965                                                        (__mmask8) -1);
966 }
967
968 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
969 _mm512_permutex2var_pd(__m512d __A, __m512i __I, __m512d __B)
970 {
971   return (__m512d) __builtin_ia32_vpermt2varpd512_mask ((__v8di) __I
972                                                         /* idx */ ,
973                                                         (__v8df) __A,
974                                                         (__v8df) __B,
975                                                         (__mmask8) -1);
976 }
977 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
978 _mm512_permutex2var_ps(__m512 __A, __m512i __I, __m512 __B)
979 {
980   return (__m512) __builtin_ia32_vpermt2varps512_mask ((__v16si) __I
981                                                        /* idx */ ,
982                                                        (__v16sf) __A,
983                                                        (__v16sf) __B,
984                                                        (__mmask16) -1);
985 }
986
987 #define _mm512_alignr_epi64(A, B, I) __extension__ ({ \
988   (__m512i)__builtin_ia32_alignq512_mask((__v8di)(__m512i)(A), \
989                                          (__v8di)(__m512i)(B), \
990                                          (I), (__v8di)_mm512_setzero_si512(), \
991                                          (__mmask8)-1); })
992
993 #define _mm512_alignr_epi32(A, B, I) __extension__ ({ \
994   (__m512i)__builtin_ia32_alignd512_mask((__v16si)(__m512i)(A), \
995                                          (__v16si)(__m512i)(B), \
996                                          (I), (__v16si)_mm512_setzero_si512(), \
997                                          (__mmask16)-1); })
998
999 /* Vector Extract */
1000
1001 #define _mm512_extractf64x4_pd(A, I) __extension__ ({                    \
1002       __m512d __A = (A);                                                 \
1003       (__m256d)                                                          \
1004         __builtin_ia32_extractf64x4_mask((__v8df)__A,                    \
1005                                          (I),                            \
1006                                          (__v4df)_mm256_setzero_si256(), \
1007                                          (__mmask8) -1); })
1008
1009 #define _mm512_extractf32x4_ps(A, I) __extension__ ({                    \
1010       __m512 __A = (A);                                                  \
1011       (__m128)                                                           \
1012         __builtin_ia32_extractf32x4_mask((__v16sf)__A,                   \
1013                                          (I),                            \
1014                                          (__v4sf)_mm_setzero_ps(),       \
1015                                          (__mmask8) -1); })
1016
1017 /* Vector Blend */
1018
1019 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
1020 _mm512_mask_blend_pd(__mmask8 __U, __m512d __A, __m512d __W)
1021 {
1022   return (__m512d) __builtin_ia32_blendmpd_512_mask ((__v8df) __A,
1023                  (__v8df) __W,
1024                  (__mmask8) __U);
1025 }
1026
1027 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
1028 _mm512_mask_blend_ps(__mmask16 __U, __m512 __A, __m512 __W)
1029 {
1030   return (__m512) __builtin_ia32_blendmps_512_mask ((__v16sf) __A,
1031                 (__v16sf) __W,
1032                 (__mmask16) __U);
1033 }
1034
1035 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
1036 _mm512_mask_blend_epi64(__mmask8 __U, __m512i __A, __m512i __W)
1037 {
1038   return (__m512i) __builtin_ia32_blendmq_512_mask ((__v8di) __A,
1039                 (__v8di) __W,
1040                 (__mmask8) __U);
1041 }
1042
1043 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
1044 _mm512_mask_blend_epi32(__mmask16 __U, __m512i __A, __m512i __W)
1045 {
1046   return (__m512i) __builtin_ia32_blendmd_512_mask ((__v16si) __A,
1047                 (__v16si) __W,
1048                 (__mmask16) __U);
1049 }
1050
1051 /* Compare */
1052
1053 #define _mm512_cmp_round_ps_mask(A, B, P, R) __extension__ ({ \
1054   (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
1055                                           (__v16sf)(__m512)(B), \
1056                                           (P), (__mmask16)-1, (R)); })
1057
1058 #define _mm512_mask_cmp_round_ps_mask(U, A, B, P, R) __extension__ ({ \
1059   (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
1060                                           (__v16sf)(__m512)(B), \
1061                                           (P), (__mmask16)(U), (R)); })
1062
1063 #define _mm512_cmp_ps_mask(A, B, P) \
1064   _mm512_cmp_round_ps_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
1065
1066 #define _mm512_mask_cmp_ps_mask(U, A, B, P) \
1067   _mm512_mask_cmp_round_ps_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
1068
1069 #define _mm512_cmp_round_pd_mask(A, B, P, R) __extension__ ({ \
1070   (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
1071                                          (__v8df)(__m512d)(B), \
1072                                          (P), (__mmask8)-1, (R)); })
1073
1074 #define _mm512_mask_cmp_round_pd_mask(U, A, B, P, R) __extension__ ({ \
1075   (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
1076                                          (__v8df)(__m512d)(B), \
1077                                          (P), (__mmask8)(U), (R)); })
1078
1079 #define _mm512_cmp_pd_mask(A, B, P) \
1080   _mm512_cmp_round_pd_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
1081
1082 #define _mm512_mask_cmp_pd_mask(U, A, B, P) \
1083   _mm512_mask_cmp_round_pd_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
1084
1085 /* Conversion */
1086
1087 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
1088 _mm512_cvttps_epu32(__m512 __A)
1089 {
1090   return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A,
1091                   (__v16si)
1092                   _mm512_setzero_si512 (),
1093                   (__mmask16) -1,
1094                   _MM_FROUND_CUR_DIRECTION);
1095 }
1096
1097 #define _mm512_cvt_roundepi32_ps(A, R) __extension__ ({ \
1098   (__m512)__builtin_ia32_cvtdq2ps512_mask((__v16si)(A), \
1099                                           (__v16sf)_mm512_setzero_ps(), \
1100                                           (__mmask16)-1, (R)); })
1101
1102 #define _mm512_cvt_roundepu32_ps(A, R) __extension__ ({ \
1103   (__m512)__builtin_ia32_cvtudq2ps512_mask((__v16si)(A), \
1104                                            (__v16sf)_mm512_setzero_ps(), \
1105                                            (__mmask16)-1, (R)); })
1106
1107 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
1108 _mm512_cvtepi32_pd(__m256i __A)
1109 {
1110   return (__m512d) __builtin_ia32_cvtdq2pd512_mask ((__v8si) __A,
1111                 (__v8df)
1112                 _mm512_setzero_pd (),
1113                 (__mmask8) -1);
1114 }
1115
1116 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
1117 _mm512_cvtepu32_pd(__m256i __A)
1118 {
1119   return (__m512d) __builtin_ia32_cvtudq2pd512_mask ((__v8si) __A,
1120                 (__v8df)
1121                 _mm512_setzero_pd (),
1122                 (__mmask8) -1);
1123 }
1124
1125 #define _mm512_cvt_roundpd_ps(A, R) __extension__ ({ \
1126   (__m256)__builtin_ia32_cvtpd2ps512_mask((__v8df)(A), \
1127                                           (__v8sf)_mm256_setzero_ps(), \
1128                                           (__mmask8)-1, (R)); })
1129
1130 #define _mm512_cvtps_ph(A, I) __extension__ ({ \
1131   (__m256i)__builtin_ia32_vcvtps2ph512_mask((__v16sf)(A), (I), \
1132                                             (__v16hi)_mm256_setzero_si256(), \
1133                                             -1); })
1134
1135 static  __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
1136 _mm512_cvtph_ps(__m256i __A)
1137 {
1138   return (__m512) __builtin_ia32_vcvtph2ps512_mask ((__v16hi) __A,
1139                 (__v16sf)
1140                 _mm512_setzero_ps (),
1141                 (__mmask16) -1,
1142                 _MM_FROUND_CUR_DIRECTION);
1143 }
1144
1145 static __inline __m512i __attribute__((__always_inline__, __nodebug__))
1146 _mm512_cvttps_epi32(__m512 a)
1147 {
1148   return (__m512i)
1149     __builtin_ia32_cvttps2dq512_mask((__v16sf) a,
1150                                      (__v16si) _mm512_setzero_si512 (),
1151                                      (__mmask16) -1, _MM_FROUND_CUR_DIRECTION);
1152 }
1153
1154 static __inline __m256i __attribute__((__always_inline__, __nodebug__))
1155 _mm512_cvttpd_epi32(__m512d a)
1156 {
1157   return (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df) a,
1158                                                    (__v8si)_mm256_setzero_si256(),
1159                                                    (__mmask8) -1,
1160                                                     _MM_FROUND_CUR_DIRECTION);
1161 }
1162
1163 #define _mm512_cvtt_roundpd_epi32(A, R) __extension__ ({ \
1164   (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df)(A), \
1165                                             (__v8si)_mm256_setzero_si256(), \
1166                                             (__mmask8)-1, (R)); })
1167
1168 #define _mm512_cvtt_roundps_epi32(A, R) __extension__ ({ \
1169   (__m512i)__builtin_ia32_cvttps2dq512_mask((__v16sf)(A), \
1170                                             (__v16si)_mm512_setzero_si512(), \
1171                                             (__mmask16)-1, (R)); })
1172
1173 #define _mm512_cvt_roundps_epi32(A, R) __extension__ ({ \
1174   (__m512i)__builtin_ia32_cvtps2dq512_mask((__v16sf)(A), \
1175                                            (__v16si)_mm512_setzero_si512(), \
1176                                            (__mmask16)-1, (R)); })
1177
1178 #define _mm512_cvt_roundpd_epi32(A, R) __extension__ ({ \
1179   (__m256i)__builtin_ia32_cvtpd2dq512_mask((__v8df)(A), \
1180                                            (__v8si)_mm256_setzero_si256(), \
1181                                            (__mmask8)-1, (R)); })
1182
1183 #define _mm512_cvt_roundps_epu32(A, R) __extension__ ({ \
1184   (__m512i)__builtin_ia32_cvtps2udq512_mask((__v16sf)(A), \
1185                                             (__v16si)_mm512_setzero_si512(), \
1186                                             (__mmask16)-1, (R)); })
1187
1188 #define _mm512_cvt_roundpd_epu32(A, R) __extension__ ({ \
1189   (__m256i)__builtin_ia32_cvtpd2udq512_mask((__v8df)(A), \
1190                                             (__v8si)_mm256_setzero_si256(), \
1191                                             (__mmask8) -1, (R)); })
1192
1193 /* Unpack and Interleave */
1194 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
1195 _mm512_unpackhi_pd(__m512d __a, __m512d __b)
1196 {
1197   return __builtin_shufflevector(__a, __b, 1, 9, 1+2, 9+2, 1+4, 9+4, 1+6, 9+6);
1198 }
1199
1200 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
1201 _mm512_unpacklo_pd(__m512d __a, __m512d __b)
1202 {
1203   return __builtin_shufflevector(__a, __b, 0, 8, 0+2, 8+2, 0+4, 8+4, 0+6, 8+6);
1204 }
1205
1206 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
1207 _mm512_unpackhi_ps(__m512 __a, __m512 __b)
1208 {
1209   return __builtin_shufflevector(__a, __b,
1210                                  2,    18,    3,    19,
1211                                  2+4,  18+4,  3+4,  19+4,
1212                                  2+8,  18+8,  3+8,  19+8,
1213                                  2+12, 18+12, 3+12, 19+12);
1214 }
1215
1216 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
1217 _mm512_unpacklo_ps(__m512 __a, __m512 __b)
1218 {
1219   return __builtin_shufflevector(__a, __b,
1220                                  0,    16,    1,    17,
1221                                  0+4,  16+4,  1+4,  17+4,
1222                                  0+8,  16+8,  1+8,  17+8,
1223                                  0+12, 16+12, 1+12, 17+12);
1224 }
1225
1226 /* Bit Test */
1227
1228 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
1229 _mm512_test_epi32_mask(__m512i __A, __m512i __B)
1230 {
1231   return (__mmask16) __builtin_ia32_ptestmd512 ((__v16si) __A,
1232             (__v16si) __B,
1233             (__mmask16) -1);
1234 }
1235
1236 static __inline __mmask8 __attribute__ ((__always_inline__, __nodebug__))
1237 _mm512_test_epi64_mask(__m512i __A, __m512i __B)
1238 {
1239   return (__mmask8) __builtin_ia32_ptestmq512 ((__v8di) __A,
1240                  (__v8di) __B,
1241                  (__mmask8) -1);
1242 }
1243
1244 /* SIMD load ops */
1245
1246 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
1247 _mm512_maskz_loadu_epi32(__mmask16 __U, void const *__P)
1248 {
1249   return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *)__P,
1250                                                      (__v16si)
1251                                                      _mm512_setzero_si512 (),
1252                                                      (__mmask16) __U);
1253 }
1254
1255 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
1256 _mm512_maskz_loadu_epi64(__mmask8 __U, void const *__P)
1257 {
1258   return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *)__P,
1259                                                      (__v8di)
1260                                                      _mm512_setzero_si512 (),
1261                                                      (__mmask8) __U);
1262 }
1263
1264 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
1265 _mm512_maskz_loadu_ps(__mmask16 __U, void const *__P)
1266 {
1267   return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *)__P,
1268                                                   (__v16sf)
1269                                                   _mm512_setzero_ps (),
1270                                                   (__mmask16) __U);
1271 }
1272
1273 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
1274 _mm512_maskz_loadu_pd(__mmask8 __U, void const *__P)
1275 {
1276   return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P,
1277                                                    (__v8df)
1278                                                    _mm512_setzero_pd (),
1279                                                    (__mmask8) __U);
1280 }
1281
1282 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
1283 _mm512_maskz_load_ps(__mmask16 __U, void const *__P)
1284 {
1285   return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__P,
1286                                                   (__v16sf)
1287                                                   _mm512_setzero_ps (),
1288                                                   (__mmask16) __U);
1289 }
1290
1291 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
1292 _mm512_maskz_load_pd(__mmask8 __U, void const *__P)
1293 {
1294   return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__P,
1295                                                    (__v8df)
1296                                                    _mm512_setzero_pd (),
1297                                                    (__mmask8) __U);
1298 }
1299
1300 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
1301 _mm512_loadu_pd(double const *__p)
1302 {
1303   struct __loadu_pd {
1304     __m512d __v;
1305   } __attribute__((__packed__, __may_alias__));
1306   return ((struct __loadu_pd*)__p)->__v;
1307 }
1308
1309 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
1310 _mm512_loadu_ps(float const *__p)
1311 {
1312   struct __loadu_ps {
1313     __m512 __v;
1314   } __attribute__((__packed__, __may_alias__));
1315   return ((struct __loadu_ps*)__p)->__v;
1316 }
1317
1318 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
1319 _mm512_load_ps(double const *__p)
1320 {
1321   return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__p,
1322                                                   (__v16sf)
1323                                                   _mm512_setzero_ps (),
1324                                                   (__mmask16) -1);
1325 }
1326
1327 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
1328 _mm512_load_pd(float const *__p)
1329 {
1330   return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__p,
1331                                                    (__v8df)
1332                                                    _mm512_setzero_pd (),
1333                                                    (__mmask8) -1);
1334 }
1335
1336 /* SIMD store ops */
1337
1338 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1339 _mm512_mask_storeu_epi64(void *__P, __mmask8 __U, __m512i __A)
1340 {
1341   __builtin_ia32_storedqudi512_mask ((__v8di *)__P, (__v8di) __A,
1342                                      (__mmask8) __U);
1343 }
1344
1345 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1346 _mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A)
1347 {
1348   __builtin_ia32_storedqusi512_mask ((__v16si *)__P, (__v16si) __A,
1349                                      (__mmask16) __U);
1350 }
1351
1352 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1353 _mm512_mask_storeu_pd(void *__P, __mmask8 __U, __m512d __A)
1354 {
1355   __builtin_ia32_storeupd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U);
1356 }
1357
1358 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1359 _mm512_storeu_pd(void *__P, __m512d __A)
1360 {
1361   __builtin_ia32_storeupd512_mask((__v8df *)__P, (__v8df)__A, (__mmask8)-1);
1362 }
1363
1364 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1365 _mm512_mask_storeu_ps(void *__P, __mmask16 __U, __m512 __A)
1366 {
1367   __builtin_ia32_storeups512_mask ((__v16sf *)__P, (__v16sf) __A,
1368                                    (__mmask16) __U);
1369 }
1370
1371 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1372 _mm512_storeu_ps(void *__P, __m512 __A)
1373 {
1374   __builtin_ia32_storeups512_mask((__v16sf *)__P, (__v16sf)__A, (__mmask16)-1);
1375 }
1376
1377 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1378 _mm512_mask_store_pd(void *__P, __mmask8 __U, __m512d __A)
1379 {
1380   __builtin_ia32_storeapd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U);
1381 }
1382
1383 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1384 _mm512_store_pd(void *__P, __m512d __A)
1385 {
1386   *(__m512d*)__P = __A;
1387 }
1388
1389 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1390 _mm512_mask_store_ps(void *__P, __mmask16 __U, __m512 __A)
1391 {
1392   __builtin_ia32_storeaps512_mask ((__v16sf *)__P, (__v16sf) __A,
1393                                    (__mmask16) __U);
1394 }
1395
1396 static __inline void __attribute__ ((__always_inline__, __nodebug__))
1397 _mm512_store_ps(void *__P, __m512 __A)
1398 {
1399   *(__m512*)__P = __A;
1400 }
1401
1402 /* Mask ops */
1403
1404 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
1405 _mm512_knot(__mmask16 __M)
1406 {
1407   return __builtin_ia32_knothi(__M);
1408 }
1409
1410 /* Integer compare */
1411
1412 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1413 _mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) {
1414   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1415                                                    (__mmask16)-1);
1416 }
1417
1418 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1419 _mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1420   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1421                                                    __u);
1422 }
1423
1424 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1425 _mm512_cmpeq_epu32_mask(__m512i __a, __m512i __b) {
1426   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0,
1427                                                  (__mmask16)-1);
1428 }
1429
1430 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1431 _mm512_mask_cmpeq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1432   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 0,
1433                                                  __u);
1434 }
1435
1436 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1437 _mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1438   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1439                                                   __u);
1440 }
1441
1442 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1443 _mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) {
1444   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1445                                                   (__mmask8)-1);
1446 }
1447
1448 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1449 _mm512_cmpeq_epu64_mask(__m512i __a, __m512i __b) {
1450   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0,
1451                                                 (__mmask8)-1);
1452 }
1453
1454 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1455 _mm512_mask_cmpeq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1456   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 0,
1457                                                 __u);
1458 }
1459
1460 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1461 _mm512_cmpge_epi32_mask(__m512i __a, __m512i __b) {
1462   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1463                                                 (__mmask16)-1);
1464 }
1465
1466 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1467 _mm512_mask_cmpge_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1468   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1469                                                 __u);
1470 }
1471
1472 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1473 _mm512_cmpge_epu32_mask(__m512i __a, __m512i __b) {
1474   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1475                                                  (__mmask16)-1);
1476 }
1477
1478 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1479 _mm512_mask_cmpge_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1480   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 5,
1481                                                  __u);
1482 }
1483
1484 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1485 _mm512_cmpge_epi64_mask(__m512i __a, __m512i __b) {
1486   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1487                                                (__mmask8)-1);
1488 }
1489
1490 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1491 _mm512_mask_cmpge_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1492   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1493                                                __u);
1494 }
1495
1496 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1497 _mm512_cmpge_epu64_mask(__m512i __a, __m512i __b) {
1498   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1499                                                 (__mmask8)-1);
1500 }
1501
1502 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1503 _mm512_mask_cmpge_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1504   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 5,
1505                                                 __u);
1506 }
1507
1508 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1509 _mm512_cmpgt_epi32_mask(__m512i __a, __m512i __b) {
1510   return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b,
1511                                                    (__mmask16)-1);
1512 }
1513
1514 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1515 _mm512_mask_cmpgt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1516   return (__mmask16)__builtin_ia32_pcmpgtd512_mask((__v16si)__a, (__v16si)__b,
1517                                                    __u);
1518 }
1519
1520 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1521 _mm512_cmpgt_epu32_mask(__m512i __a, __m512i __b) {
1522   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6,
1523                                                  (__mmask16)-1);
1524 }
1525
1526 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1527 _mm512_mask_cmpgt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1528   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 6,
1529                                                  __u);
1530 }
1531
1532 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1533 _mm512_mask_cmpgt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1534   return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b,
1535                                                   __u);
1536 }
1537
1538 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1539 _mm512_cmpgt_epi64_mask(__m512i __a, __m512i __b) {
1540   return (__mmask8)__builtin_ia32_pcmpgtq512_mask((__v8di)__a, (__v8di)__b,
1541                                                   (__mmask8)-1);
1542 }
1543
1544 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1545 _mm512_cmpgt_epu64_mask(__m512i __a, __m512i __b) {
1546   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6,
1547                                                 (__mmask8)-1);
1548 }
1549
1550 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1551 _mm512_mask_cmpgt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1552   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 6,
1553                                                 __u);
1554 }
1555
1556 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1557 _mm512_cmple_epi32_mask(__m512i __a, __m512i __b) {
1558   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1559                                                 (__mmask16)-1);
1560 }
1561
1562 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1563 _mm512_mask_cmple_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1564   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1565                                                 __u);
1566 }
1567
1568 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1569 _mm512_cmple_epu32_mask(__m512i __a, __m512i __b) {
1570   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1571                                                  (__mmask16)-1);
1572 }
1573
1574 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1575 _mm512_mask_cmple_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1576   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 2,
1577                                                  __u);
1578 }
1579
1580 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1581 _mm512_cmple_epi64_mask(__m512i __a, __m512i __b) {
1582   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1583                                                (__mmask8)-1);
1584 }
1585
1586 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1587 _mm512_mask_cmple_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1588   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1589                                                __u);
1590 }
1591
1592 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1593 _mm512_cmple_epu64_mask(__m512i __a, __m512i __b) {
1594   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1595                                                 (__mmask8)-1);
1596 }
1597
1598 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1599 _mm512_mask_cmple_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1600   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 2,
1601                                                 __u);
1602 }
1603
1604 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1605 _mm512_cmplt_epi32_mask(__m512i __a, __m512i __b) {
1606   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1607                                                 (__mmask16)-1);
1608 }
1609
1610 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1611 _mm512_mask_cmplt_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1612   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1613                                                 __u);
1614 }
1615
1616 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1617 _mm512_cmplt_epu32_mask(__m512i __a, __m512i __b) {
1618   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1619                                                  (__mmask16)-1);
1620 }
1621
1622 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1623 _mm512_mask_cmplt_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1624   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 1,
1625                                                  __u);
1626 }
1627
1628 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1629 _mm512_cmplt_epi64_mask(__m512i __a, __m512i __b) {
1630   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1631                                                (__mmask8)-1);
1632 }
1633
1634 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1635 _mm512_mask_cmplt_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1636   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1637                                                __u);
1638 }
1639
1640 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1641 _mm512_cmplt_epu64_mask(__m512i __a, __m512i __b) {
1642   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1643                                                 (__mmask8)-1);
1644 }
1645
1646 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1647 _mm512_mask_cmplt_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1648   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 1,
1649                                                 __u);
1650 }
1651
1652 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1653 _mm512_cmpneq_epi32_mask(__m512i __a, __m512i __b) {
1654   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1655                                                 (__mmask16)-1);
1656 }
1657
1658 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1659 _mm512_mask_cmpneq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1660   return (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1661                                                 __u);
1662 }
1663
1664 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1665 _mm512_cmpneq_epu32_mask(__m512i __a, __m512i __b) {
1666   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1667                                                  (__mmask16)-1);
1668 }
1669
1670 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
1671 _mm512_mask_cmpneq_epu32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1672   return (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, 4,
1673                                                  __u);
1674 }
1675
1676 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1677 _mm512_cmpneq_epi64_mask(__m512i __a, __m512i __b) {
1678   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1679                                                (__mmask8)-1);
1680 }
1681
1682 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1683 _mm512_mask_cmpneq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1684   return (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1685                                                __u);
1686 }
1687
1688 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1689 _mm512_cmpneq_epu64_mask(__m512i __a, __m512i __b) {
1690   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1691                                                 (__mmask8)-1);
1692 }
1693
1694 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
1695 _mm512_mask_cmpneq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1696   return (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, 4,
1697                                                 __u);
1698 }
1699
1700 #define _mm512_cmp_epi32_mask(a, b, p) __extension__ ({ \
1701   __m512i __a = (a); \
1702   __m512i __b = (b); \
1703   (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1704                                          (__mmask16)-1); })
1705
1706 #define _mm512_cmp_epu32_mask(a, b, p) __extension__ ({ \
1707   __m512i __a = (a); \
1708   __m512i __b = (b); \
1709   (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1710                                           (__mmask16)-1); })
1711
1712 #define _mm512_cmp_epi64_mask(a, b, p) __extension__ ({ \
1713   __m512i __a = (a); \
1714   __m512i __b = (b); \
1715   (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1716                                         (__mmask8)-1); })
1717
1718 #define _mm512_cmp_epu64_mask(a, b, p) __extension__ ({ \
1719   __m512i __a = (a); \
1720   __m512i __b = (b); \
1721   (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1722                                          (__mmask8)-1); })
1723
1724 #define _mm512_mask_cmp_epi32_mask(m, a, b, p) __extension__ ({ \
1725   __m512i __a = (a); \
1726   __m512i __b = (b); \
1727   (__mmask16)__builtin_ia32_cmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1728                                          (__mmask16)(m)); })
1729
1730 #define _mm512_mask_cmp_epu32_mask(m, a, b, p) __extension__ ({ \
1731   __m512i __a = (a); \
1732   __m512i __b = (b); \
1733   (__mmask16)__builtin_ia32_ucmpd512_mask((__v16si)__a, (__v16si)__b, (p), \
1734                                           (__mmask16)(m)); })
1735
1736 #define _mm512_mask_cmp_epi64_mask(m, a, b, p) __extension__ ({ \
1737   __m512i __a = (a); \
1738   __m512i __b = (b); \
1739   (__mmask8)__builtin_ia32_cmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1740                                         (__mmask8)(m)); })
1741
1742 #define _mm512_mask_cmp_epu64_mask(m, a, b, p) __extension__ ({ \
1743   __m512i __a = (a); \
1744   __m512i __b = (b); \
1745   (__mmask8)__builtin_ia32_ucmpq512_mask((__v8di)__a, (__v8di)__b, (p), \
1746                                          (__mmask8)(m)); })
1747 #endif // __AVX512FINTRIN_H