root / lab4 / .minix-src / include / clang-3.6 / avx512fintrin.h @ 14
History | View | Annotate | Download (34.5 KB)
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 |
/* Arithmetic */
|
166 |
|
167 |
static __inline __m512d __attribute__((__always_inline__, __nodebug__))
|
168 |
_mm512_add_pd(__m512d __a, __m512d __b) |
169 |
{ |
170 |
return __a + __b;
|
171 |
} |
172 |
|
173 |
static __inline __m512 __attribute__((__always_inline__, __nodebug__))
|
174 |
_mm512_add_ps(__m512 __a, __m512 __b) |
175 |
{ |
176 |
return __a + __b;
|
177 |
} |
178 |
|
179 |
static __inline __m512d __attribute__((__always_inline__, __nodebug__))
|
180 |
_mm512_mul_pd(__m512d __a, __m512d __b) |
181 |
{ |
182 |
return __a * __b;
|
183 |
} |
184 |
|
185 |
static __inline __m512 __attribute__((__always_inline__, __nodebug__))
|
186 |
_mm512_mul_ps(__m512 __a, __m512 __b) |
187 |
{ |
188 |
return __a * __b;
|
189 |
} |
190 |
|
191 |
static __inline __m512d __attribute__((__always_inline__, __nodebug__))
|
192 |
_mm512_sub_pd(__m512d __a, __m512d __b) |
193 |
{ |
194 |
return __a - __b;
|
195 |
} |
196 |
|
197 |
static __inline __m512 __attribute__((__always_inline__, __nodebug__))
|
198 |
_mm512_sub_ps(__m512 __a, __m512 __b) |
199 |
{ |
200 |
return __a - __b;
|
201 |
} |
202 |
|
203 |
static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
|
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__))
|
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__)) |
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__)) |
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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__)) |
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__)) |
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__)) |
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__)) |
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__)) |
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__)) |
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__)) |
991 |
_mm512_store_ps(void *__P, __m512 __A)
|
992 |
{ |
993 |
*(__m512*)__P = __A; |
994 |
} |
995 |
|
996 |
static __inline void __attribute__ ((__always_inline__, __nodebug__)) |
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__))
|
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__))
|
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__))
|
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__))
|
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__))
|
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 |