|
15 | 15 | #define __VBMIVLINTRIN_H |
16 | 16 |
|
17 | 17 | /* Define the default attributes for the functions in this file. */ |
| 18 | +#if defined(__cplusplus) && (__cplusplus >= 201103L) |
| 19 | +#define __DEFAULT_FN_ATTRS128 \ |
| 20 | + __attribute__((__always_inline__, __nodebug__, \ |
| 21 | + __target__("avx512vbmi,avx512vl"), \ |
| 22 | + __min_vector_width__(128))) constexpr |
| 23 | +#define __DEFAULT_FN_ATTRS256 \ |
| 24 | + __attribute__((__always_inline__, __nodebug__, \ |
| 25 | + __target__("avx512vbmi,avx512vl"), \ |
| 26 | + __min_vector_width__(256))) constexpr |
| 27 | +#else |
18 | 28 | #define __DEFAULT_FN_ATTRS128 \ |
19 | 29 | __attribute__((__always_inline__, __nodebug__, \ |
20 | 30 | __target__("avx512vbmi,avx512vl"), \ |
|
23 | 33 | __attribute__((__always_inline__, __nodebug__, \ |
24 | 34 | __target__("avx512vbmi,avx512vl"), \ |
25 | 35 | __min_vector_width__(256))) |
26 | | - |
27 | | -#if defined(__cplusplus) && (__cplusplus >= 201103L) |
28 | | -#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128 constexpr |
29 | | -#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 constexpr |
30 | | -#else |
31 | | -#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128 |
32 | | -#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 |
33 | 36 | #endif |
34 | 37 |
|
35 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
| 38 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
36 | 39 | _mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B) { |
37 | 40 | return (__m128i)__builtin_ia32_vpermi2varqi128((__v16qi)__A, |
38 | 41 | (__v16qi)__I, |
39 | 42 | (__v16qi)__B); |
40 | 43 | } |
41 | 44 |
|
42 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
43 | | -_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I, |
44 | | - __m128i __B) { |
| 45 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_mask_permutex2var_epi8( |
| 46 | + __m128i __A, __mmask16 __U, __m128i __I, __m128i __B) { |
45 | 47 | return (__m128i)__builtin_ia32_selectb_128(__U, |
46 | 48 | (__v16qi)_mm_permutex2var_epi8(__A, __I, __B), |
47 | 49 | (__v16qi)__A); |
48 | 50 | } |
49 | 51 |
|
50 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
51 | | -_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U, |
52 | | - __m128i __B) { |
| 52 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_mask2_permutex2var_epi8( |
| 53 | + __m128i __A, __m128i __I, __mmask16 __U, __m128i __B) { |
53 | 54 | return (__m128i)__builtin_ia32_selectb_128(__U, |
54 | 55 | (__v16qi)_mm_permutex2var_epi8(__A, __I, __B), |
55 | 56 | (__v16qi)__I); |
56 | 57 | } |
57 | 58 |
|
58 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
59 | | -_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I, |
60 | | - __m128i __B) { |
| 59 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_maskz_permutex2var_epi8( |
| 60 | + __mmask16 __U, __m128i __A, __m128i __I, __m128i __B) { |
61 | 61 | return (__m128i)__builtin_ia32_selectb_128(__U, |
62 | 62 | (__v16qi)_mm_permutex2var_epi8(__A, __I, __B), |
63 | 63 | (__v16qi)_mm_setzero_si128()); |
64 | 64 | } |
65 | 65 |
|
66 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
| 66 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
67 | 67 | _mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B) { |
68 | 68 | return (__m256i)__builtin_ia32_vpermi2varqi256((__v32qi)__A, (__v32qi)__I, |
69 | 69 | (__v32qi)__B); |
70 | 70 | } |
71 | 71 |
|
72 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
73 | | -_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I, |
74 | | - __m256i __B) { |
| 72 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_mask_permutex2var_epi8( |
| 73 | + __m256i __A, __mmask32 __U, __m256i __I, __m256i __B) { |
75 | 74 | return (__m256i)__builtin_ia32_selectb_256(__U, |
76 | 75 | (__v32qi)_mm256_permutex2var_epi8(__A, __I, __B), |
77 | 76 | (__v32qi)__A); |
78 | 77 | } |
79 | 78 |
|
80 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
81 | | -_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U, |
82 | | - __m256i __B) { |
| 79 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_mask2_permutex2var_epi8( |
| 80 | + __m256i __A, __m256i __I, __mmask32 __U, __m256i __B) { |
83 | 81 | return (__m256i)__builtin_ia32_selectb_256(__U, |
84 | 82 | (__v32qi)_mm256_permutex2var_epi8(__A, __I, __B), |
85 | 83 | (__v32qi)__I); |
86 | 84 | } |
87 | 85 |
|
88 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
89 | | -_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I, |
90 | | - __m256i __B) { |
| 86 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_maskz_permutex2var_epi8( |
| 87 | + __mmask32 __U, __m256i __A, __m256i __I, __m256i __B) { |
91 | 88 | return (__m256i)__builtin_ia32_selectb_256(__U, |
92 | 89 | (__v32qi)_mm256_permutex2var_epi8(__A, __I, __B), |
93 | 90 | (__v32qi)_mm256_setzero_si256()); |
94 | 91 | } |
95 | 92 |
|
96 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
| 93 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
97 | 94 | _mm_permutexvar_epi8(__m128i __A, __m128i __B) { |
98 | 95 | return (__m128i)__builtin_ia32_permvarqi128((__v16qi)__B, (__v16qi)__A); |
99 | 96 | } |
100 | 97 |
|
101 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
| 98 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 |
102 | 99 | _mm_maskz_permutexvar_epi8(__mmask16 __M, __m128i __A, __m128i __B) { |
103 | 100 | return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M, |
104 | 101 | (__v16qi)_mm_permutexvar_epi8(__A, __B), |
105 | 102 | (__v16qi)_mm_setzero_si128()); |
106 | 103 | } |
107 | 104 |
|
108 | | -static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR |
109 | | -_mm_mask_permutexvar_epi8(__m128i __W, __mmask16 __M, __m128i __A, |
110 | | - __m128i __B) { |
| 105 | +static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_mask_permutexvar_epi8( |
| 106 | + __m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { |
111 | 107 | return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M, |
112 | 108 | (__v16qi)_mm_permutexvar_epi8(__A, __B), |
113 | 109 | (__v16qi)__W); |
114 | 110 | } |
115 | 111 |
|
116 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
| 112 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
117 | 113 | _mm256_permutexvar_epi8(__m256i __A, __m256i __B) { |
118 | 114 | return (__m256i)__builtin_ia32_permvarqi256((__v32qi) __B, (__v32qi) __A); |
119 | 115 | } |
120 | 116 |
|
121 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
| 117 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 |
122 | 118 | _mm256_maskz_permutexvar_epi8(__mmask32 __M, __m256i __A, __m256i __B) { |
123 | 119 | return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M, |
124 | 120 | (__v32qi)_mm256_permutexvar_epi8(__A, __B), |
125 | 121 | (__v32qi)_mm256_setzero_si256()); |
126 | 122 | } |
127 | 123 |
|
128 | | -static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR |
129 | | -_mm256_mask_permutexvar_epi8(__m256i __W, __mmask32 __M, __m256i __A, |
130 | | - __m256i __B) { |
| 124 | +static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_mask_permutexvar_epi8( |
| 125 | + __m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { |
131 | 126 | return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M, |
132 | 127 | (__v32qi)_mm256_permutexvar_epi8(__A, __B), |
133 | 128 | (__v32qi)__W); |
@@ -179,9 +174,6 @@ _mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y) |
179 | 174 | (__v32qi)_mm256_setzero_si256()); |
180 | 175 | } |
181 | 176 |
|
182 | | -#undef __DEFAULT_FN_ATTRS128_CONSTEXPR |
183 | | -#undef __DEFAULT_FN_ATTRS256_CONSTEXPR |
184 | 177 | #undef __DEFAULT_FN_ATTRS128 |
185 | 178 | #undef __DEFAULT_FN_ATTRS256 |
186 | | - |
187 | 179 | #endif |
0 commit comments