1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | #ifndef __IMMINTRIN_H |
25 | #error \ |
26 | "Never use <avx512vpopcntdqintrin.h> directly; include <immintrin.h> instead." |
27 | #endif |
28 | |
29 | #ifndef __AVX512VPOPCNTDQINTRIN_H |
30 | #define __AVX512VPOPCNTDQINTRIN_H |
31 | |
32 | |
33 | #define __DEFAULT_FN_ATTRS \ |
34 | __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq"), __min_vector_width__(512))) |
35 | |
36 | static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_popcnt_epi64(__m512i __A) { |
37 | return (__m512i)__builtin_ia32_vpopcntq_512((__v8di)__A); |
38 | } |
39 | |
40 | static __inline__ __m512i __DEFAULT_FN_ATTRS |
41 | _mm512_mask_popcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) { |
42 | return (__m512i)__builtin_ia32_selectq_512( |
43 | (__mmask8)__U, (__v8di)_mm512_popcnt_epi64(__A), (__v8di)__W); |
44 | } |
45 | |
46 | static __inline__ __m512i __DEFAULT_FN_ATTRS |
47 | _mm512_maskz_popcnt_epi64(__mmask8 __U, __m512i __A) { |
48 | return _mm512_mask_popcnt_epi64((__m512i)_mm512_setzero_si512(), __U, __A); |
49 | } |
50 | |
51 | static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_popcnt_epi32(__m512i __A) { |
52 | return (__m512i)__builtin_ia32_vpopcntd_512((__v16si)__A); |
53 | } |
54 | |
55 | static __inline__ __m512i __DEFAULT_FN_ATTRS |
56 | _mm512_mask_popcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) { |
57 | return (__m512i)__builtin_ia32_selectd_512( |
58 | (__mmask16)__U, (__v16si)_mm512_popcnt_epi32(__A), (__v16si)__W); |
59 | } |
60 | |
61 | static __inline__ __m512i __DEFAULT_FN_ATTRS |
62 | _mm512_maskz_popcnt_epi32(__mmask16 __U, __m512i __A) { |
63 | return _mm512_mask_popcnt_epi32((__m512i)_mm512_setzero_si512(), __U, __A); |
64 | } |
65 | |
66 | #undef __DEFAULT_FN_ATTRS |
67 | |
68 | #endif |
69 | |