clang 23.0.0git
avx512vbmi2intrin.h
Go to the documentation of this file.
1/*===------------- avx512vbmi2intrin.h - VBMI2 intrinsics ------------------===
2 *
3 *
4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 * See https://llvm.org/LICENSE.txt for license information.
6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 *
8 *===-----------------------------------------------------------------------===
9 */
10#ifndef __IMMINTRIN_H
11#error "Never use <avx512vbmi2intrin.h> directly; include <immintrin.h> instead."
12#endif
13
14#ifndef __AVX512VBMI2INTRIN_H
15#define __AVX512VBMI2INTRIN_H
16
17/* Define the default attributes for the functions in this file. */
18#define __DEFAULT_FN_ATTRS \
19 __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi2"), \
20 __min_vector_width__(512)))
21
22#if defined(__cplusplus) && (__cplusplus >= 201103L)
23#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS constexpr
24#else
25#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS
26#endif
27
28static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
29_mm512_mask_compress_epi16(__m512i __S, __mmask32 __U, __m512i __D) {
30 return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi) __D,
31 (__v32hi) __S,
32 __U);
33}
34
35static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
37 return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi) __D,
38 (__v32hi) _mm512_setzero_si512(),
39 __U);
40}
41
42static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
43_mm512_mask_compress_epi8(__m512i __S, __mmask64 __U, __m512i __D) {
44 return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi) __D,
45 (__v64qi) __S,
46 __U);
47}
48
49static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
51 return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi) __D,
52 (__v64qi) _mm512_setzero_si512(),
53 __U);
54}
55
56static __inline__ void __DEFAULT_FN_ATTRS
58{
59 __builtin_ia32_compressstorehi512_mask ((__v32hi *) __P, (__v32hi) __D,
60 __U);
61}
62
63static __inline__ void __DEFAULT_FN_ATTRS
65{
66 __builtin_ia32_compressstoreqi512_mask ((__v64qi *) __P, (__v64qi) __D,
67 __U);
68}
69
70static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
71_mm512_mask_expand_epi16(__m512i __S, __mmask32 __U, __m512i __D)
72{
73 return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __D,
74 (__v32hi) __S,
75 __U);
76}
77
78static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
80{
81 return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __D,
82 (__v32hi) _mm512_setzero_si512(),
83 __U);
84}
85
86static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
87_mm512_mask_expand_epi8(__m512i __S, __mmask64 __U, __m512i __D)
88{
89 return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __D,
90 (__v64qi) __S,
91 __U);
92}
93
94static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
96{
97 return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __D,
98 (__v64qi) _mm512_setzero_si512(),
99 __U);
100}
101
102static __inline__ __m512i __DEFAULT_FN_ATTRS
103_mm512_mask_expandloadu_epi16(__m512i __S, __mmask32 __U, void const *__P)
104{
105 return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *)__P,
106 (__v32hi) __S,
107 __U);
108}
109
110static __inline__ __m512i __DEFAULT_FN_ATTRS
112{
113 return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *)__P,
114 (__v32hi) _mm512_setzero_si512(),
115 __U);
116}
117
118static __inline__ __m512i __DEFAULT_FN_ATTRS
119_mm512_mask_expandloadu_epi8(__m512i __S, __mmask64 __U, void const *__P)
120{
121 return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *)__P,
122 (__v64qi) __S,
123 __U);
124}
125
126static __inline__ __m512i __DEFAULT_FN_ATTRS
128{
129 return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *)__P,
130 (__v64qi) _mm512_setzero_si512(),
131 __U);
132}
133
134#define _mm512_shldi_epi64(A, B, I) \
135 ((__m512i)__builtin_ia32_vpshldq512((__v8di)(__m512i)(A), \
136 (__v8di)(__m512i)(B), (int)(I)))
137
138#define _mm512_mask_shldi_epi64(S, U, A, B, I) \
139 ((__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
140 (__v8di)_mm512_shldi_epi64((A), (B), (I)), \
141 (__v8di)(__m512i)(S)))
142
143#define _mm512_maskz_shldi_epi64(U, A, B, I) \
144 ((__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
145 (__v8di)_mm512_shldi_epi64((A), (B), (I)), \
146 (__v8di)_mm512_setzero_si512()))
147
148#define _mm512_shldi_epi32(A, B, I) \
149 ((__m512i)__builtin_ia32_vpshldd512((__v16si)(__m512i)(A), \
150 (__v16si)(__m512i)(B), (int)(I)))
151
152#define _mm512_mask_shldi_epi32(S, U, A, B, I) \
153 ((__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
154 (__v16si)_mm512_shldi_epi32((A), (B), (I)), \
155 (__v16si)(__m512i)(S)))
156
157#define _mm512_maskz_shldi_epi32(U, A, B, I) \
158 ((__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
159 (__v16si)_mm512_shldi_epi32((A), (B), (I)), \
160 (__v16si)_mm512_setzero_si512()))
161
162#define _mm512_shldi_epi16(A, B, I) \
163 ((__m512i)__builtin_ia32_vpshldw512((__v32hi)(__m512i)(A), \
164 (__v32hi)(__m512i)(B), (int)(I)))
165
166#define _mm512_mask_shldi_epi16(S, U, A, B, I) \
167 ((__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
168 (__v32hi)_mm512_shldi_epi16((A), (B), (I)), \
169 (__v32hi)(__m512i)(S)))
170
171#define _mm512_maskz_shldi_epi16(U, A, B, I) \
172 ((__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
173 (__v32hi)_mm512_shldi_epi16((A), (B), (I)), \
174 (__v32hi)_mm512_setzero_si512()))
175
176#define _mm512_shrdi_epi64(A, B, I) \
177 ((__m512i)__builtin_ia32_vpshrdq512((__v8di)(__m512i)(A), \
178 (__v8di)(__m512i)(B), (int)(I)))
179
180#define _mm512_mask_shrdi_epi64(S, U, A, B, I) \
181 ((__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
182 (__v8di)_mm512_shrdi_epi64((A), (B), (I)), \
183 (__v8di)(__m512i)(S)))
184
185#define _mm512_maskz_shrdi_epi64(U, A, B, I) \
186 ((__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
187 (__v8di)_mm512_shrdi_epi64((A), (B), (I)), \
188 (__v8di)_mm512_setzero_si512()))
189
190#define _mm512_shrdi_epi32(A, B, I) \
191 ((__m512i)__builtin_ia32_vpshrdd512((__v16si)(__m512i)(A), \
192 (__v16si)(__m512i)(B), (int)(I)))
193
194#define _mm512_mask_shrdi_epi32(S, U, A, B, I) \
195 ((__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
196 (__v16si)_mm512_shrdi_epi32((A), (B), (I)), \
197 (__v16si)(__m512i)(S)))
198
199#define _mm512_maskz_shrdi_epi32(U, A, B, I) \
200 ((__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
201 (__v16si)_mm512_shrdi_epi32((A), (B), (I)), \
202 (__v16si)_mm512_setzero_si512()))
203
204#define _mm512_shrdi_epi16(A, B, I) \
205 ((__m512i)__builtin_ia32_vpshrdw512((__v32hi)(__m512i)(A), \
206 (__v32hi)(__m512i)(B), (int)(I)))
207
208#define _mm512_mask_shrdi_epi16(S, U, A, B, I) \
209 ((__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
210 (__v32hi)_mm512_shrdi_epi16((A), (B), (I)), \
211 (__v32hi)(__m512i)(S)))
212
213#define _mm512_maskz_shrdi_epi16(U, A, B, I) \
214 ((__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
215 (__v32hi)_mm512_shrdi_epi16((A), (B), (I)), \
216 (__v32hi)_mm512_setzero_si512()))
217
218static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
219_mm512_shldv_epi64(__m512i __A, __m512i __B, __m512i __C)
220{
221 return (__m512i)__builtin_elementwise_fshl((__v8du)__A, (__v8du)__B,
222 (__v8du)__C);
223}
224
225static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
226_mm512_mask_shldv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
227{
228 return (__m512i)__builtin_ia32_selectq_512(__U,
229 (__v8di)_mm512_shldv_epi64(__A, __B, __C),
230 (__v8di)__A);
231}
232
233static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
234_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
235{
236 return (__m512i)__builtin_ia32_selectq_512(__U,
237 (__v8di)_mm512_shldv_epi64(__A, __B, __C),
238 (__v8di)_mm512_setzero_si512());
239}
240
241static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
242_mm512_shldv_epi32(__m512i __A, __m512i __B, __m512i __C)
243{
244 return (__m512i)__builtin_elementwise_fshl((__v16su)__A, (__v16su)__B,
245 (__v16su)__C);
246}
247
248static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
249_mm512_mask_shldv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
250{
251 return (__m512i)__builtin_ia32_selectd_512(__U,
252 (__v16si)_mm512_shldv_epi32(__A, __B, __C),
253 (__v16si)__A);
254}
255
256static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
257_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
258{
259 return (__m512i)__builtin_ia32_selectd_512(__U,
260 (__v16si)_mm512_shldv_epi32(__A, __B, __C),
261 (__v16si)_mm512_setzero_si512());
262}
263
264static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
265_mm512_shldv_epi16(__m512i __A, __m512i __B, __m512i __C)
266{
267 return (__m512i)__builtin_elementwise_fshl((__v32hu)__A, (__v32hu)__B,
268 (__v32hu)__C);
269}
270
271static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
272_mm512_mask_shldv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
273{
274 return (__m512i)__builtin_ia32_selectw_512(__U,
275 (__v32hi)_mm512_shldv_epi16(__A, __B, __C),
276 (__v32hi)__A);
277}
278
279static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
280_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
281{
282 return (__m512i)__builtin_ia32_selectw_512(__U,
283 (__v32hi)_mm512_shldv_epi16(__A, __B, __C),
284 (__v32hi)_mm512_setzero_si512());
285}
286
287static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
288_mm512_shrdv_epi64(__m512i __A, __m512i __B, __m512i __C)
289{
290 // Ops __A and __B are swapped.
291 return (__m512i)__builtin_elementwise_fshr((__v8du)__B, (__v8du)__A,
292 (__v8du)__C);
293}
294
295static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
296_mm512_mask_shrdv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
297{
298 return (__m512i)__builtin_ia32_selectq_512(__U,
299 (__v8di)_mm512_shrdv_epi64(__A, __B, __C),
300 (__v8di)__A);
301}
302
303static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
304_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
305{
306 return (__m512i)__builtin_ia32_selectq_512(__U,
307 (__v8di)_mm512_shrdv_epi64(__A, __B, __C),
308 (__v8di)_mm512_setzero_si512());
309}
310
311static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
312_mm512_shrdv_epi32(__m512i __A, __m512i __B, __m512i __C)
313{
314 // Ops __A and __B are swapped.
315 return (__m512i)__builtin_elementwise_fshr((__v16su)__B, (__v16su)__A,
316 (__v16su)__C);
317}
318
319static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
320_mm512_mask_shrdv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
321{
322 return (__m512i) __builtin_ia32_selectd_512(__U,
323 (__v16si)_mm512_shrdv_epi32(__A, __B, __C),
324 (__v16si)__A);
325}
326
327static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
328_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
329{
330 return (__m512i) __builtin_ia32_selectd_512(__U,
331 (__v16si)_mm512_shrdv_epi32(__A, __B, __C),
332 (__v16si)_mm512_setzero_si512());
333}
334
335static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
336_mm512_shrdv_epi16(__m512i __A, __m512i __B, __m512i __C)
337{
338 // Ops __A and __B are swapped.
339 return (__m512i)__builtin_elementwise_fshr((__v32hu)__B, (__v32hu)__A,
340 (__v32hu)__C);
341}
342
343static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
344_mm512_mask_shrdv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
345{
346 return (__m512i)__builtin_ia32_selectw_512(__U,
347 (__v32hi)_mm512_shrdv_epi16(__A, __B, __C),
348 (__v32hi)__A);
349}
350
351static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
352_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
353{
354 return (__m512i)__builtin_ia32_selectw_512(__U,
355 (__v32hi)_mm512_shrdv_epi16(__A, __B, __C),
356 (__v32hi)_mm512_setzero_si512());
357}
358
359
360#undef __DEFAULT_FN_ATTRS
361#undef __DEFAULT_FN_ATTRS_CONSTEXPR
362
363#endif
364
#define __DEFAULT_FN_ATTRS
unsigned long long __mmask64
#define __DEFAULT_FN_ATTRS_CONSTEXPR
unsigned int __mmask32
unsigned char __mmask8
unsigned short __mmask16
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_setzero_si512(void)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_expand_epi16(__mmask32 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_expandloadu_epi8(__mmask64 __U, void const *__P)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shrdv_epi32(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_compress_epi16(__mmask32 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_expand_epi8(__m512i __S, __mmask64 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_compress_epi8(__m512i __S, __mmask64 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shrdv_epi16(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shldv_epi16(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_expandloadu_epi16(__m512i __S, __mmask32 __U, void const *__P)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_compress_epi16(__m512i __S, __mmask32 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shldv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_expand_epi8(__mmask64 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shrdv_epi64(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shldv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_compress_epi8(__mmask64 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shrdv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_expandloadu_epi8(__m512i __S, __mmask64 __U, void const *__P)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_expandloadu_epi16(__mmask32 __U, void const *__P)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shrdv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shldv_epi64(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ void __DEFAULT_FN_ATTRS _mm512_mask_compressstoreu_epi16(void *__P, __mmask32 __U, __m512i __D)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shrdv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_shldv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_shldv_epi32(__m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR _mm512_mask_expand_epi16(__m512i __S, __mmask32 __U, __m512i __D)
static __inline__ void __DEFAULT_FN_ATTRS _mm512_mask_compressstoreu_epi8(void *__P, __mmask64 __U, __m512i __D)
static __inline__ void short __D
Definition immintrin.h:342
__inline unsigned int unsigned int unsigned int * __P
Definition bmi2intrin.h:25