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 /* Arithmetic */
166 
167 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_add_pd(__m512d __a,__m512d __b)168 _mm512_add_pd(__m512d __a, __m512d __b)
169 {
170   return __a + __b;
171 }
172 
173 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_add_ps(__m512 __a,__m512 __b)174 _mm512_add_ps(__m512 __a, __m512 __b)
175 {
176   return __a + __b;
177 }
178 
179 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_mul_pd(__m512d __a,__m512d __b)180 _mm512_mul_pd(__m512d __a, __m512d __b)
181 {
182   return __a * __b;
183 }
184 
185 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_mul_ps(__m512 __a,__m512 __b)186 _mm512_mul_ps(__m512 __a, __m512 __b)
187 {
188   return __a * __b;
189 }
190 
191 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_sub_pd(__m512d __a,__m512d __b)192 _mm512_sub_pd(__m512d __a, __m512d __b)
193 {
194   return __a - __b;
195 }
196 
197 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_sub_ps(__m512 __a,__m512 __b)198 _mm512_sub_ps(__m512 __a, __m512 __b)
199 {
200   return __a - __b;
201 }
202 
203 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_max_pd(__m512d __A,__m512d __B)204 _mm512_max_pd(__m512d __A, __m512d __B)
205 {
206   return (__m512d) __builtin_ia32_maxpd512_mask ((__v8df) __A,
207              (__v8df) __B,
208              (__v8df)
209              _mm512_setzero_pd (),
210              (__mmask8) -1,
211              _MM_FROUND_CUR_DIRECTION);
212 }
213 
214 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_max_ps(__m512 __A,__m512 __B)215 _mm512_max_ps(__m512 __A, __m512 __B)
216 {
217   return (__m512) __builtin_ia32_maxps512_mask ((__v16sf) __A,
218             (__v16sf) __B,
219             (__v16sf)
220             _mm512_setzero_ps (),
221             (__mmask16) -1,
222             _MM_FROUND_CUR_DIRECTION);
223 }
224 
225 static __inline __m512i
226 __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epi32(__m512i __A,__m512i __B)227 _mm512_max_epi32(__m512i __A, __m512i __B)
228 {
229   return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A,
230               (__v16si) __B,
231               (__v16si)
232               _mm512_setzero_si512 (),
233               (__mmask16) -1);
234 }
235 
236 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epu32(__m512i __A,__m512i __B)237 _mm512_max_epu32(__m512i __A, __m512i __B)
238 {
239   return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A,
240               (__v16si) __B,
241               (__v16si)
242               _mm512_setzero_si512 (),
243               (__mmask16) -1);
244 }
245 
246 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epi64(__m512i __A,__m512i __B)247 _mm512_max_epi64(__m512i __A, __m512i __B)
248 {
249   return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A,
250               (__v8di) __B,
251               (__v8di)
252               _mm512_setzero_si512 (),
253               (__mmask8) -1);
254 }
255 
256 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_max_epu64(__m512i __A,__m512i __B)257 _mm512_max_epu64(__m512i __A, __m512i __B)
258 {
259   return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A,
260               (__v8di) __B,
261               (__v8di)
262               _mm512_setzero_si512 (),
263               (__mmask8) -1);
264 }
265 
266 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_min_pd(__m512d __A,__m512d __B)267 _mm512_min_pd(__m512d __A, __m512d __B)
268 {
269   return (__m512d) __builtin_ia32_minpd512_mask ((__v8df) __A,
270              (__v8df) __B,
271              (__v8df)
272              _mm512_setzero_pd (),
273              (__mmask8) -1,
274              _MM_FROUND_CUR_DIRECTION);
275 }
276 
277 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_min_ps(__m512 __A,__m512 __B)278 _mm512_min_ps(__m512 __A, __m512 __B)
279 {
280   return (__m512) __builtin_ia32_minps512_mask ((__v16sf) __A,
281             (__v16sf) __B,
282             (__v16sf)
283             _mm512_setzero_ps (),
284             (__mmask16) -1,
285             _MM_FROUND_CUR_DIRECTION);
286 }
287 
288 static __inline __m512i
289 __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epi32(__m512i __A,__m512i __B)290 _mm512_min_epi32(__m512i __A, __m512i __B)
291 {
292   return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A,
293               (__v16si) __B,
294               (__v16si)
295               _mm512_setzero_si512 (),
296               (__mmask16) -1);
297 }
298 
299 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epu32(__m512i __A,__m512i __B)300 _mm512_min_epu32(__m512i __A, __m512i __B)
301 {
302   return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A,
303               (__v16si) __B,
304               (__v16si)
305               _mm512_setzero_si512 (),
306               (__mmask16) -1);
307 }
308 
309 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epi64(__m512i __A,__m512i __B)310 _mm512_min_epi64(__m512i __A, __m512i __B)
311 {
312   return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A,
313               (__v8di) __B,
314               (__v8di)
315               _mm512_setzero_si512 (),
316               (__mmask8) -1);
317 }
318 
319 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_min_epu64(__m512i __A,__m512i __B)320 _mm512_min_epu64(__m512i __A, __m512i __B)
321 {
322   return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A,
323               (__v8di) __B,
324               (__v8di)
325               _mm512_setzero_si512 (),
326               (__mmask8) -1);
327 }
328 
329 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mul_epi32(__m512i __X,__m512i __Y)330 _mm512_mul_epi32(__m512i __X, __m512i __Y)
331 {
332   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
333               (__v16si) __Y,
334               (__v8di)
335               _mm512_setzero_si512 (),
336               (__mmask8) -1);
337 }
338 
339 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mul_epu32(__m512i __X,__m512i __Y)340 _mm512_mul_epu32(__m512i __X, __m512i __Y)
341 {
342   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
343                (__v16si) __Y,
344                (__v8di)
345                _mm512_setzero_si512 (),
346                (__mmask8) -1);
347 }
348 
349 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_sqrt_pd(__m512d a)350 _mm512_sqrt_pd(__m512d a)
351 {
352   return (__m512d)__builtin_ia32_sqrtpd512_mask((__v8df)a,
353                                                 (__v8df) _mm512_setzero_pd (),
354                                                 (__mmask8) -1,
355                                                 _MM_FROUND_CUR_DIRECTION);
356 }
357 
358 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_sqrt_ps(__m512 a)359 _mm512_sqrt_ps(__m512 a)
360 {
361   return (__m512)__builtin_ia32_sqrtps512_mask((__v16sf)a,
362                                                (__v16sf) _mm512_setzero_ps (),
363                                                (__mmask16) -1,
364                                                _MM_FROUND_CUR_DIRECTION);
365 }
366 
367 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_rsqrt14_pd(__m512d __A)368 _mm512_rsqrt14_pd(__m512d __A)
369 {
370   return (__m512d) __builtin_ia32_rsqrt14pd512_mask ((__v8df) __A,
371                  (__v8df)
372                  _mm512_setzero_pd (),
373                  (__mmask8) -1);}
374 
375 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_rsqrt14_ps(__m512 __A)376 _mm512_rsqrt14_ps(__m512 __A)
377 {
378   return (__m512) __builtin_ia32_rsqrt14ps512_mask ((__v16sf) __A,
379                 (__v16sf)
380                 _mm512_setzero_ps (),
381                 (__mmask16) -1);
382 }
383 
384 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
_mm_rsqrt14_ss(__m128 __A,__m128 __B)385 _mm_rsqrt14_ss(__m128 __A, __m128 __B)
386 {
387   return (__m128) __builtin_ia32_rsqrt14ss_mask ((__v4sf) __A,
388              (__v4sf) __B,
389              (__v4sf)
390              _mm_setzero_ps (),
391              (__mmask8) -1);
392 }
393 
394 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
_mm_rsqrt14_sd(__m128d __A,__m128d __B)395 _mm_rsqrt14_sd(__m128d __A, __m128d __B)
396 {
397   return (__m128d) __builtin_ia32_rsqrt14sd_mask ((__v2df) __A,
398               (__v2df) __B,
399               (__v2df)
400               _mm_setzero_pd (),
401               (__mmask8) -1);
402 }
403 
404 static  __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_rcp14_pd(__m512d __A)405 _mm512_rcp14_pd(__m512d __A)
406 {
407   return (__m512d) __builtin_ia32_rcp14pd512_mask ((__v8df) __A,
408                (__v8df)
409                _mm512_setzero_pd (),
410                (__mmask8) -1);
411 }
412 
413 static  __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_rcp14_ps(__m512 __A)414 _mm512_rcp14_ps(__m512 __A)
415 {
416   return (__m512) __builtin_ia32_rcp14ps512_mask ((__v16sf) __A,
417               (__v16sf)
418               _mm512_setzero_ps (),
419               (__mmask16) -1);
420 }
421 static  __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
_mm_rcp14_ss(__m128 __A,__m128 __B)422 _mm_rcp14_ss(__m128 __A, __m128 __B)
423 {
424   return (__m128) __builtin_ia32_rcp14ss_mask ((__v4sf) __A,
425                  (__v4sf) __B,
426                  (__v4sf)
427                  _mm_setzero_ps (),
428                  (__mmask8) -1);
429 }
430 
431 static  __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
_mm_rcp14_sd(__m128d __A,__m128d __B)432 _mm_rcp14_sd(__m128d __A, __m128d __B)
433 {
434   return (__m128d) __builtin_ia32_rcp14sd_mask ((__v2df) __A,
435             (__v2df) __B,
436             (__v2df)
437             _mm_setzero_pd (),
438             (__mmask8) -1);
439 }
440 
441 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_floor_ps(__m512 __A)442 _mm512_floor_ps(__m512 __A)
443 {
444   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
445                                                   _MM_FROUND_FLOOR,
446                                                   (__v16sf) __A, -1,
447                                                   _MM_FROUND_CUR_DIRECTION);
448 }
449 
450 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_floor_pd(__m512d __A)451 _mm512_floor_pd(__m512d __A)
452 {
453   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
454                                                    _MM_FROUND_FLOOR,
455                                                    (__v8df) __A, -1,
456                                                    _MM_FROUND_CUR_DIRECTION);
457 }
458 
459 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_ceil_ps(__m512 __A)460 _mm512_ceil_ps(__m512 __A)
461 {
462   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A,
463                                                   _MM_FROUND_CEIL,
464                                                   (__v16sf) __A, -1,
465                                                   _MM_FROUND_CUR_DIRECTION);
466 }
467 
468 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_ceil_pd(__m512d __A)469 _mm512_ceil_pd(__m512d __A)
470 {
471   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A,
472                                                    _MM_FROUND_CEIL,
473                                                    (__v8df) __A, -1,
474                                                    _MM_FROUND_CUR_DIRECTION);
475 }
476 
477 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
_mm512_abs_epi64(__m512i __A)478 _mm512_abs_epi64(__m512i __A)
479 {
480   return (__m512i) __builtin_ia32_pabsq512_mask ((__v8di) __A,
481              (__v8di)
482              _mm512_setzero_si512 (),
483              (__mmask8) -1);
484 }
485 
486 static __inline __m512i __attribute__ (( __always_inline__, __nodebug__))
_mm512_abs_epi32(__m512i __A)487 _mm512_abs_epi32(__m512i __A)
488 {
489   return (__m512i) __builtin_ia32_pabsd512_mask ((__v16si) __A,
490              (__v16si)
491              _mm512_setzero_si512 (),
492              (__mmask16) -1);
493 }
494 
495 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_roundscale_ps(__m512 __A,const int __imm)496 _mm512_roundscale_ps(__m512 __A, const int __imm)
497 {
498   return (__m512) __builtin_ia32_rndscaleps_mask ((__v16sf) __A, __imm,
499               (__v16sf) __A, -1,
500               _MM_FROUND_CUR_DIRECTION);
501 }
502 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_roundscale_pd(__m512d __A,const int __imm)503 _mm512_roundscale_pd(__m512d __A, const int __imm)
504 {
505   return (__m512d) __builtin_ia32_rndscalepd_mask ((__v8df) __A, __imm,
506                (__v8df) __A, -1,
507                _MM_FROUND_CUR_DIRECTION);
508 }
509 
510 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fmadd_pd(__m512d __A,__m512d __B,__m512d __C)511 _mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C)
512 {
513   return (__m512d)
514     __builtin_ia32_vfmaddpd512_mask(__A,
515                                     __B,
516                                     __C,
517                                     (__mmask8) -1,
518                                     _MM_FROUND_CUR_DIRECTION);
519 }
520 
521 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fmsub_pd(__m512d __A,__m512d __B,__m512d __C)522 _mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C)
523 {
524   return (__m512d)
525     __builtin_ia32_vfmsubpd512_mask(__A,
526                                     __B,
527                                     __C,
528                                     (__mmask8) -1,
529                                     _MM_FROUND_CUR_DIRECTION);
530 }
531 
532 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_fnmadd_pd(__m512d __A,__m512d __B,__m512d __C)533 _mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C)
534 {
535   return (__m512d)
536     __builtin_ia32_vfnmaddpd512_mask(__A,
537                                      __B,
538                                      __C,
539                                      (__mmask8) -1,
540                                      _MM_FROUND_CUR_DIRECTION);
541 }
542 
543 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fmadd_ps(__m512 __A,__m512 __B,__m512 __C)544 _mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C)
545 {
546   return (__m512)
547     __builtin_ia32_vfmaddps512_mask(__A,
548                                     __B,
549                                     __C,
550                                     (__mmask16) -1,
551                                     _MM_FROUND_CUR_DIRECTION);
552 }
553 
554 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fmsub_ps(__m512 __A,__m512 __B,__m512 __C)555 _mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C)
556 {
557   return (__m512)
558     __builtin_ia32_vfmsubps512_mask(__A,
559                                     __B,
560                                     __C,
561                                     (__mmask16) -1,
562                                     _MM_FROUND_CUR_DIRECTION);
563 }
564 
565 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_fnmadd_ps(__m512 __A,__m512 __B,__m512 __C)566 _mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C)
567 {
568   return (__m512)
569     __builtin_ia32_vfnmaddps512_mask(__A,
570                                      __B,
571                                      __C,
572                                      (__mmask16) -1,
573                                      _MM_FROUND_CUR_DIRECTION);
574 }
575 
576 /* Vector permutations */
577 
578 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_epi32(__m512i __A,__m512i __I,__m512i __B)579 _mm512_permutex2var_epi32(__m512i __A, __m512i __I, __m512i __B)
580 {
581   return (__m512i) __builtin_ia32_vpermt2vard512_mask ((__v16si) __I
582                                                        /* idx */ ,
583                                                        (__v16si) __A,
584                                                        (__v16si) __B,
585                                                        (__mmask16) -1);
586 }
587 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_epi64(__m512i __A,__m512i __I,__m512i __B)588 _mm512_permutex2var_epi64(__m512i __A, __m512i __I, __m512i __B)
589 {
590   return (__m512i) __builtin_ia32_vpermt2varq512_mask ((__v8di) __I
591                                                        /* idx */ ,
592                                                        (__v8di) __A,
593                                                        (__v8di) __B,
594                                                        (__mmask8) -1);
595 }
596 
597 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_pd(__m512d __A,__m512i __I,__m512d __B)598 _mm512_permutex2var_pd(__m512d __A, __m512i __I, __m512d __B)
599 {
600   return (__m512d) __builtin_ia32_vpermt2varpd512_mask ((__v8di) __I
601                                                         /* idx */ ,
602                                                         (__v8df) __A,
603                                                         (__v8df) __B,
604                                                         (__mmask8) -1);
605 }
606 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_permutex2var_ps(__m512 __A,__m512i __I,__m512 __B)607 _mm512_permutex2var_ps(__m512 __A, __m512i __I, __m512 __B)
608 {
609   return (__m512) __builtin_ia32_vpermt2varps512_mask ((__v16si) __I
610                                                        /* idx */ ,
611                                                        (__v16sf) __A,
612                                                        (__v16sf) __B,
613                                                        (__mmask16) -1);
614 }
615 
616 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_valign_epi64(__m512i __A,__m512i __B,const int __I)617 _mm512_valign_epi64(__m512i __A, __m512i __B, const int __I)
618 {
619   return (__m512i) __builtin_ia32_alignq512_mask((__v8di)__A,
620                                                  (__v8di)__B,
621                                                  __I,
622                                                  (__v8di)_mm512_setzero_si512(),
623                                                  (__mmask8) -1);
624 }
625 
626 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_valign_epi32(__m512i __A,__m512i __B,const int __I)627 _mm512_valign_epi32(__m512i __A, __m512i __B, const int __I)
628 {
629   return (__m512i)__builtin_ia32_alignd512_mask((__v16si)__A,
630                                                 (__v16si)__B,
631                                                 __I,
632                                                 (__v16si)_mm512_setzero_si512(),
633                                                 (__mmask16) -1);
634 }
635 
636 /* Vector Blend */
637 
638 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_pd(__mmask8 __U,__m512d __A,__m512d __W)639 _mm512_mask_blend_pd(__mmask8 __U, __m512d __A, __m512d __W)
640 {
641   return (__m512d) __builtin_ia32_blendmpd_512_mask ((__v8df) __A,
642                  (__v8df) __W,
643                  (__mmask8) __U);
644 }
645 
646 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_ps(__mmask16 __U,__m512 __A,__m512 __W)647 _mm512_mask_blend_ps(__mmask16 __U, __m512 __A, __m512 __W)
648 {
649   return (__m512) __builtin_ia32_blendmps_512_mask ((__v16sf) __A,
650                 (__v16sf) __W,
651                 (__mmask16) __U);
652 }
653 
654 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_epi64(__mmask8 __U,__m512i __A,__m512i __W)655 _mm512_mask_blend_epi64(__mmask8 __U, __m512i __A, __m512i __W)
656 {
657   return (__m512i) __builtin_ia32_blendmq_512_mask ((__v8di) __A,
658                 (__v8di) __W,
659                 (__mmask8) __U);
660 }
661 
662 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_blend_epi32(__mmask16 __U,__m512i __A,__m512i __W)663 _mm512_mask_blend_epi32(__mmask16 __U, __m512i __A, __m512i __W)
664 {
665   return (__m512i) __builtin_ia32_blendmd_512_mask ((__v16si) __A,
666                 (__v16si) __W,
667                 (__mmask16) __U);
668 }
669 
670 /* Compare */
671 
672 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
_mm512_cmp_ps_mask(__m512 a,__m512 b,const int p)673 _mm512_cmp_ps_mask(__m512 a, __m512 b, const int p)
674 {
675   return (__mmask16) __builtin_ia32_cmpps512_mask ((__v16sf) a,
676                (__v16sf) b, p, (__mmask16) -1,
677                _MM_FROUND_CUR_DIRECTION);
678 }
679 
680 static __inline __mmask8 __attribute__ ((__always_inline__, __nodebug__))
_mm512_cmp_pd_mask(__m512d __X,__m512d __Y,const int __P)681 _mm512_cmp_pd_mask(__m512d __X, __m512d __Y, const int __P)
682 {
683   return (__mmask8) __builtin_ia32_cmppd512_mask ((__v8df) __X,
684               (__v8df) __Y, __P,
685               (__mmask8) -1,
686               _MM_FROUND_CUR_DIRECTION);
687 }
688 
689 /* Conversion */
690 
691 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvttps_epu32(__m512 __A)692 _mm512_cvttps_epu32(__m512 __A)
693 {
694   return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A,
695                   (__v16si)
696                   _mm512_setzero_si512 (),
697                   (__mmask16) -1,
698                   _MM_FROUND_CUR_DIRECTION);
699 }
700 
701 static __inline __m512 __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvt_roundepi32_ps(__m512i __A,const int __R)702 _mm512_cvt_roundepi32_ps(__m512i __A, const int __R)
703 {
704   return (__m512) __builtin_ia32_cvtdq2ps512_mask ((__v16si) __A,
705                (__v16sf)
706                _mm512_setzero_ps (),
707                (__mmask16) -1,
708                __R);
709 }
710 
711 static __inline __m512 __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvt_roundepu32_ps(__m512i __A,const int __R)712 _mm512_cvt_roundepu32_ps(__m512i __A, const int __R)
713 {
714   return (__m512) __builtin_ia32_cvtudq2ps512_mask ((__v16si) __A,
715                (__v16sf)
716                _mm512_setzero_ps (),
717                (__mmask16) -1,
718                __R);
719 }
720 
721 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvtepi32_pd(__m256i __A)722 _mm512_cvtepi32_pd(__m256i __A)
723 {
724   return (__m512d) __builtin_ia32_cvtdq2pd512_mask ((__v8si) __A,
725                 (__v8df)
726                 _mm512_setzero_pd (),
727                 (__mmask8) -1);
728 }
729 
730 static __inline __m512d __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvtepu32_pd(__m256i __A)731 _mm512_cvtepu32_pd(__m256i __A)
732 {
733   return (__m512d) __builtin_ia32_cvtudq2pd512_mask ((__v8si) __A,
734                 (__v8df)
735                 _mm512_setzero_pd (),
736                 (__mmask8) -1);
737 }
738 static __inline __m256 __attribute__ (( __always_inline__, __nodebug__))
_mm512_cvt_roundpd_ps(__m512d __A,const int __R)739 _mm512_cvt_roundpd_ps(__m512d __A, const int __R)
740 {
741   return (__m256) __builtin_ia32_cvtpd2ps512_mask ((__v8df) __A,
742                (__v8sf)
743                _mm256_setzero_ps (),
744                (__mmask8) -1,
745                __R);
746 }
747 
748 static  __inline __m256i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvtps_ph(__m512 __A,const int __I)749 _mm512_cvtps_ph(__m512 __A, const int __I)
750 {
751   return (__m256i) __builtin_ia32_vcvtps2ph512_mask ((__v16sf) __A,
752                  __I,
753                  (__v16hi)
754                  _mm256_setzero_si256 (),
755                  -1);
756 }
757 
758 static  __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvtph_ps(__m256i __A)759 _mm512_cvtph_ps(__m256i __A)
760 {
761   return (__m512) __builtin_ia32_vcvtph2ps512_mask ((__v16hi) __A,
762                 (__v16sf)
763                 _mm512_setzero_ps (),
764                 (__mmask16) -1,
765                 _MM_FROUND_CUR_DIRECTION);
766 }
767 
768 static __inline __m512i __attribute__((__always_inline__, __nodebug__))
_mm512_cvttps_epi32(__m512 a)769 _mm512_cvttps_epi32(__m512 a)
770 {
771   return (__m512i)
772     __builtin_ia32_cvttps2dq512_mask((__v16sf) a,
773                                      (__v16si) _mm512_setzero_si512 (),
774                                      (__mmask16) -1, _MM_FROUND_CUR_DIRECTION);
775 }
776 
777 static __inline __m256i __attribute__((__always_inline__, __nodebug__))
_mm512_cvttpd_epi32(__m512d a)778 _mm512_cvttpd_epi32(__m512d a)
779 {
780   return (__m256i)__builtin_ia32_cvttpd2dq512_mask((__v8df) a,
781                                                    (__v8si)_mm256_setzero_si256(),
782                                                    (__mmask8) -1,
783                                                     _MM_FROUND_CUR_DIRECTION);
784 }
785 
786 static __inline __m256i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvtt_roundpd_epi32(__m512d __A,const int __R)787 _mm512_cvtt_roundpd_epi32(__m512d __A, const int __R)
788 {
789   return (__m256i) __builtin_ia32_cvttpd2dq512_mask ((__v8df) __A,
790                  (__v8si)
791                  _mm256_setzero_si256 (),
792                  (__mmask8) -1,
793                  __R);
794 }
795 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvtt_roundps_epi32(__m512 __A,const int __R)796 _mm512_cvtt_roundps_epi32(__m512 __A, const int __R)
797 {
798   return (__m512i) __builtin_ia32_cvttps2dq512_mask ((__v16sf) __A,
799                  (__v16si)
800                  _mm512_setzero_si512 (),
801                  (__mmask16) -1,
802                  __R);
803 }
804 
805 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvt_roundps_epi32(__m512 __A,const int __R)806 _mm512_cvt_roundps_epi32(__m512 __A, const int __R)
807 {
808   return (__m512i) __builtin_ia32_cvtps2dq512_mask ((__v16sf) __A,
809                 (__v16si)
810                 _mm512_setzero_si512 (),
811                 (__mmask16) -1,
812                 __R);
813 }
814 static __inline __m256i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvt_roundpd_epi32(__m512d __A,const int __R)815 _mm512_cvt_roundpd_epi32(__m512d __A, const int __R)
816 {
817   return (__m256i) __builtin_ia32_cvtpd2dq512_mask ((__v8df) __A,
818                 (__v8si)
819                 _mm256_setzero_si256 (),
820                 (__mmask8) -1,
821                 __R);
822 }
823 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvt_roundps_epu32(__m512 __A,const int __R)824 _mm512_cvt_roundps_epu32(__m512 __A, const int __R)
825 {
826   return (__m512i) __builtin_ia32_cvtps2udq512_mask ((__v16sf) __A,
827                 (__v16si)
828                 _mm512_setzero_si512 (),
829                 (__mmask16) -1,
830                 __R);
831 }
832 static __inline __m256i __attribute__ ((__always_inline__, __nodebug__))
_mm512_cvt_roundpd_epu32(__m512d __A,const int __R)833 _mm512_cvt_roundpd_epu32(__m512d __A, const int __R)
834 {
835   return (__m256i) __builtin_ia32_cvtpd2udq512_mask ((__v8df) __A,
836                 (__v8si)
837                 _mm256_setzero_si256 (),
838                 (__mmask8) -1,
839                 __R);
840 }
841 
842 /* Unpack and Interleave */
843 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_unpackhi_pd(__m512d __a,__m512d __b)844 _mm512_unpackhi_pd(__m512d __a, __m512d __b)
845 {
846   return __builtin_shufflevector(__a, __b, 1, 9, 1+2, 9+2, 1+4, 9+4, 1+6, 9+6);
847 }
848 
849 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_unpacklo_pd(__m512d __a,__m512d __b)850 _mm512_unpacklo_pd(__m512d __a, __m512d __b)
851 {
852   return __builtin_shufflevector(__a, __b, 0, 8, 0+2, 8+2, 0+4, 8+4, 0+6, 8+6);
853 }
854 
855 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_unpackhi_ps(__m512 __a,__m512 __b)856 _mm512_unpackhi_ps(__m512 __a, __m512 __b)
857 {
858   return __builtin_shufflevector(__a, __b,
859                                  2,    18,    3,    19,
860                                  2+4,  18+4,  3+4,  19+4,
861                                  2+8,  18+8,  3+8,  19+8,
862                                  2+12, 18+12, 3+12, 19+12);
863 }
864 
865 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_unpacklo_ps(__m512 __a,__m512 __b)866 _mm512_unpacklo_ps(__m512 __a, __m512 __b)
867 {
868   return __builtin_shufflevector(__a, __b,
869                                  0,    16,    1,    17,
870                                  0+4,  16+4,  1+4,  17+4,
871                                  0+8,  16+8,  1+8,  17+8,
872                                  0+12, 16+12, 1+12, 17+12);
873 }
874 
875 /* Bit Test */
876 
877 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
_mm512_test_epi32_mask(__m512i __A,__m512i __B)878 _mm512_test_epi32_mask(__m512i __A, __m512i __B)
879 {
880   return (__mmask16) __builtin_ia32_ptestmd512 ((__v16si) __A,
881             (__v16si) __B,
882             (__mmask16) -1);
883 }
884 
885 static __inline __mmask8 __attribute__ ((__always_inline__, __nodebug__))
_mm512_test_epi64_mask(__m512i __A,__m512i __B)886 _mm512_test_epi64_mask(__m512i __A, __m512i __B)
887 {
888   return (__mmask8) __builtin_ia32_ptestmq512 ((__v8di) __A,
889                  (__v8di) __B,
890                  (__mmask8) -1);
891 }
892 
893 /* SIMD load ops */
894 
895 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_epi32(__mmask16 __U,void const * __P)896 _mm512_maskz_loadu_epi32(__mmask16 __U, void const *__P)
897 {
898   return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *)__P,
899                                                      (__v16si)
900                                                      _mm512_setzero_si512 (),
901                                                      (__mmask16) __U);
902 }
903 
904 static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_epi64(__mmask8 __U,void const * __P)905 _mm512_maskz_loadu_epi64(__mmask8 __U, void const *__P)
906 {
907   return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *)__P,
908                                                      (__v8di)
909                                                      _mm512_setzero_si512 (),
910                                                      (__mmask8) __U);
911 }
912 
913 static __inline __m512 __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_ps(__mmask16 __U,void const * __P)914 _mm512_maskz_loadu_ps(__mmask16 __U, void const *__P)
915 {
916   return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *)__P,
917                                                   (__v16sf)
918                                                   _mm512_setzero_ps (),
919                                                   (__mmask16) __U);
920 }
921 
922 static __inline __m512d __attribute__ ((__always_inline__, __nodebug__))
_mm512_maskz_loadu_pd(__mmask8 __U,void const * __P)923 _mm512_maskz_loadu_pd(__mmask8 __U, void const *__P)
924 {
925   return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P,
926                                                    (__v8df)
927                                                    _mm512_setzero_pd (),
928                                                    (__mmask8) __U);
929 }
930 
931 static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_loadu_pd(double const * __p)932 _mm512_loadu_pd(double const *__p)
933 {
934   struct __loadu_pd {
935     __m512d __v;
936   } __attribute__((packed, may_alias));
937   return ((struct __loadu_pd*)__p)->__v;
938 }
939 
940 static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_loadu_ps(float const * __p)941 _mm512_loadu_ps(float const *__p)
942 {
943   struct __loadu_ps {
944     __m512 __v;
945   } __attribute__((packed, may_alias));
946   return ((struct __loadu_ps*)__p)->__v;
947 }
948 
949 /* SIMD store ops */
950 
951 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_epi64(void * __P,__mmask8 __U,__m512i __A)952 _mm512_mask_storeu_epi64(void *__P, __mmask8 __U, __m512i __A)
953 {
954   __builtin_ia32_storedqudi512_mask ((__v8di *)__P, (__v8di) __A,
955                                      (__mmask8) __U);
956 }
957 
958 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_epi32(void * __P,__mmask16 __U,__m512i __A)959 _mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A)
960 {
961   __builtin_ia32_storedqusi512_mask ((__v16si *)__P, (__v16si) __A,
962                                      (__mmask16) __U);
963 }
964 
965 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_pd(void * __P,__mmask8 __U,__m512d __A)966 _mm512_mask_storeu_pd(void *__P, __mmask8 __U, __m512d __A)
967 {
968   __builtin_ia32_storeupd512_mask ((__v8df *)__P, (__v8df) __A, (__mmask8) __U);
969 }
970 
971 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_storeu_pd(void * __P,__m512d __A)972 _mm512_storeu_pd(void *__P, __m512d __A)
973 {
974   __builtin_ia32_storeupd512_mask((__v8df *)__P, (__v8df)__A, (__mmask8)-1);
975 }
976 
977 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_mask_storeu_ps(void * __P,__mmask16 __U,__m512 __A)978 _mm512_mask_storeu_ps(void *__P, __mmask16 __U, __m512 __A)
979 {
980   __builtin_ia32_storeups512_mask ((__v16sf *)__P, (__v16sf) __A,
981                                    (__mmask16) __U);
982 }
983 
984 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_storeu_ps(void * __P,__m512 __A)985 _mm512_storeu_ps(void *__P, __m512 __A)
986 {
987   __builtin_ia32_storeups512_mask((__v16sf *)__P, (__v16sf)__A, (__mmask16)-1);
988 }
989 
990 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_store_ps(void * __P,__m512 __A)991 _mm512_store_ps(void *__P, __m512 __A)
992 {
993   *(__m512*)__P = __A;
994 }
995 
996 static __inline void __attribute__ ((__always_inline__, __nodebug__))
_mm512_store_pd(void * __P,__m512d __A)997 _mm512_store_pd(void *__P, __m512d __A)
998 {
999   *(__m512d*)__P = __A;
1000 }
1001 
1002 /* Mask ops */
1003 
1004 static __inline __mmask16 __attribute__ ((__always_inline__, __nodebug__))
_mm512_knot(__mmask16 __M)1005 _mm512_knot(__mmask16 __M)
1006 {
1007   return __builtin_ia32_knothi(__M);
1008 }
1009 
1010 /* Integer compare */
1011 
1012 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi32_mask(__m512i __a,__m512i __b)1013 _mm512_cmpeq_epi32_mask(__m512i __a, __m512i __b) {
1014   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1015                                                    (__mmask16)-1);
1016 }
1017 
1018 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi32_mask(__mmask16 __u,__m512i __a,__m512i __b)1019 _mm512_mask_cmpeq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) {
1020   return (__mmask16)__builtin_ia32_pcmpeqd512_mask((__v16si)__a, (__v16si)__b,
1021                                                    __u);
1022 }
1023 
1024 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi64_mask(__mmask8 __u,__m512i __a,__m512i __b)1025 _mm512_mask_cmpeq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) {
1026   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1027                                                   __u);
1028 }
1029 
1030 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi64_mask(__m512i __a,__m512i __b)1031 _mm512_cmpeq_epi64_mask(__m512i __a, __m512i __b) {
1032   return (__mmask8)__builtin_ia32_pcmpeqq512_mask((__v8di)__a, (__v8di)__b,
1033                                                   (__mmask8)-1);
1034 }
1035 
1036 #endif // __AVX512FINTRIN_H
1037