1 /*===------------- avx512vlvbmi2intrin.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 <avx512vlvbmi2intrin.h> directly; include <immintrin.h> instead."
12 #endif
13 
14 #ifndef __AVX512VLVBMI2INTRIN_H
15 #define __AVX512VLVBMI2INTRIN_H
16 
17 /* Define the default attributes for the functions in this file. */
18 #define __DEFAULT_FN_ATTRS128                                                  \
19   __attribute__((__always_inline__, __nodebug__,                               \
20                  __target__("avx512vl,avx512vbmi2,no-evex512"),                \
21                  __min_vector_width__(128)))
22 #define __DEFAULT_FN_ATTRS256                                                  \
23   __attribute__((__always_inline__, __nodebug__,                               \
24                  __target__("avx512vl,avx512vbmi2,no-evex512"),                \
25                  __min_vector_width__(256)))
26 
27 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_compress_epi16(__m128i __S,__mmask8 __U,__m128i __D)28 _mm_mask_compress_epi16(__m128i __S, __mmask8 __U, __m128i __D)
29 {
30   return (__m128i) __builtin_ia32_compresshi128_mask ((__v8hi) __D,
31               (__v8hi) __S,
32               __U);
33 }
34 
35 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_compress_epi16(__mmask8 __U,__m128i __D)36 _mm_maskz_compress_epi16(__mmask8 __U, __m128i __D)
37 {
38   return (__m128i) __builtin_ia32_compresshi128_mask ((__v8hi) __D,
39               (__v8hi) _mm_setzero_si128(),
40               __U);
41 }
42 
43 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_compress_epi8(__m128i __S,__mmask16 __U,__m128i __D)44 _mm_mask_compress_epi8(__m128i __S, __mmask16 __U, __m128i __D)
45 {
46   return (__m128i) __builtin_ia32_compressqi128_mask ((__v16qi) __D,
47               (__v16qi) __S,
48               __U);
49 }
50 
51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_compress_epi8(__mmask16 __U,__m128i __D)52 _mm_maskz_compress_epi8(__mmask16 __U, __m128i __D)
53 {
54   return (__m128i) __builtin_ia32_compressqi128_mask ((__v16qi) __D,
55               (__v16qi) _mm_setzero_si128(),
56               __U);
57 }
58 
59 static __inline__ void __DEFAULT_FN_ATTRS128
_mm_mask_compressstoreu_epi16(void * __P,__mmask8 __U,__m128i __D)60 _mm_mask_compressstoreu_epi16(void *__P, __mmask8 __U, __m128i __D)
61 {
62   __builtin_ia32_compressstorehi128_mask ((__v8hi *) __P, (__v8hi) __D,
63               __U);
64 }
65 
66 static __inline__ void __DEFAULT_FN_ATTRS128
_mm_mask_compressstoreu_epi8(void * __P,__mmask16 __U,__m128i __D)67 _mm_mask_compressstoreu_epi8(void *__P, __mmask16 __U, __m128i __D)
68 {
69   __builtin_ia32_compressstoreqi128_mask ((__v16qi *) __P, (__v16qi) __D,
70               __U);
71 }
72 
73 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_expand_epi16(__m128i __S,__mmask8 __U,__m128i __D)74 _mm_mask_expand_epi16(__m128i __S, __mmask8 __U, __m128i __D)
75 {
76   return (__m128i) __builtin_ia32_expandhi128_mask ((__v8hi) __D,
77               (__v8hi) __S,
78               __U);
79 }
80 
81 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_expand_epi16(__mmask8 __U,__m128i __D)82 _mm_maskz_expand_epi16(__mmask8 __U, __m128i __D)
83 {
84   return (__m128i) __builtin_ia32_expandhi128_mask ((__v8hi) __D,
85               (__v8hi) _mm_setzero_si128(),
86               __U);
87 }
88 
89 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_expand_epi8(__m128i __S,__mmask16 __U,__m128i __D)90 _mm_mask_expand_epi8(__m128i __S, __mmask16 __U, __m128i __D)
91 {
92   return (__m128i) __builtin_ia32_expandqi128_mask ((__v16qi) __D,
93               (__v16qi) __S,
94               __U);
95 }
96 
97 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_expand_epi8(__mmask16 __U,__m128i __D)98 _mm_maskz_expand_epi8(__mmask16 __U, __m128i __D)
99 {
100   return (__m128i) __builtin_ia32_expandqi128_mask ((__v16qi) __D,
101               (__v16qi) _mm_setzero_si128(),
102               __U);
103 }
104 
105 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_expandloadu_epi16(__m128i __S,__mmask8 __U,void const * __P)106 _mm_mask_expandloadu_epi16(__m128i __S, __mmask8 __U, void const *__P)
107 {
108   return (__m128i) __builtin_ia32_expandloadhi128_mask ((const __v8hi *)__P,
109               (__v8hi) __S,
110               __U);
111 }
112 
113 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_expandloadu_epi16(__mmask8 __U,void const * __P)114 _mm_maskz_expandloadu_epi16(__mmask8 __U, void const *__P)
115 {
116   return (__m128i) __builtin_ia32_expandloadhi128_mask ((const __v8hi *)__P,
117               (__v8hi) _mm_setzero_si128(),
118               __U);
119 }
120 
121 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_expandloadu_epi8(__m128i __S,__mmask16 __U,void const * __P)122 _mm_mask_expandloadu_epi8(__m128i __S, __mmask16 __U, void const *__P)
123 {
124   return (__m128i) __builtin_ia32_expandloadqi128_mask ((const __v16qi *)__P,
125               (__v16qi) __S,
126               __U);
127 }
128 
129 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_expandloadu_epi8(__mmask16 __U,void const * __P)130 _mm_maskz_expandloadu_epi8(__mmask16 __U, void const *__P)
131 {
132   return (__m128i) __builtin_ia32_expandloadqi128_mask ((const __v16qi *)__P,
133               (__v16qi) _mm_setzero_si128(),
134               __U);
135 }
136 
137 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_compress_epi16(__m256i __S,__mmask16 __U,__m256i __D)138 _mm256_mask_compress_epi16(__m256i __S, __mmask16 __U, __m256i __D)
139 {
140   return (__m256i) __builtin_ia32_compresshi256_mask ((__v16hi) __D,
141               (__v16hi) __S,
142               __U);
143 }
144 
145 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_compress_epi16(__mmask16 __U,__m256i __D)146 _mm256_maskz_compress_epi16(__mmask16 __U, __m256i __D)
147 {
148   return (__m256i) __builtin_ia32_compresshi256_mask ((__v16hi) __D,
149               (__v16hi) _mm256_setzero_si256(),
150               __U);
151 }
152 
153 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_compress_epi8(__m256i __S,__mmask32 __U,__m256i __D)154 _mm256_mask_compress_epi8(__m256i __S, __mmask32 __U, __m256i __D)
155 {
156   return (__m256i) __builtin_ia32_compressqi256_mask ((__v32qi) __D,
157               (__v32qi) __S,
158               __U);
159 }
160 
161 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_compress_epi8(__mmask32 __U,__m256i __D)162 _mm256_maskz_compress_epi8(__mmask32 __U, __m256i __D)
163 {
164   return (__m256i) __builtin_ia32_compressqi256_mask ((__v32qi) __D,
165               (__v32qi) _mm256_setzero_si256(),
166               __U);
167 }
168 
169 static __inline__ void __DEFAULT_FN_ATTRS256
_mm256_mask_compressstoreu_epi16(void * __P,__mmask16 __U,__m256i __D)170 _mm256_mask_compressstoreu_epi16(void *__P, __mmask16 __U, __m256i __D)
171 {
172   __builtin_ia32_compressstorehi256_mask ((__v16hi *) __P, (__v16hi) __D,
173               __U);
174 }
175 
176 static __inline__ void __DEFAULT_FN_ATTRS256
_mm256_mask_compressstoreu_epi8(void * __P,__mmask32 __U,__m256i __D)177 _mm256_mask_compressstoreu_epi8(void *__P, __mmask32 __U, __m256i __D)
178 {
179   __builtin_ia32_compressstoreqi256_mask ((__v32qi *) __P, (__v32qi) __D,
180               __U);
181 }
182 
183 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_expand_epi16(__m256i __S,__mmask16 __U,__m256i __D)184 _mm256_mask_expand_epi16(__m256i __S, __mmask16 __U, __m256i __D)
185 {
186   return (__m256i) __builtin_ia32_expandhi256_mask ((__v16hi) __D,
187               (__v16hi) __S,
188               __U);
189 }
190 
191 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_expand_epi16(__mmask16 __U,__m256i __D)192 _mm256_maskz_expand_epi16(__mmask16 __U, __m256i __D)
193 {
194   return (__m256i) __builtin_ia32_expandhi256_mask ((__v16hi) __D,
195               (__v16hi) _mm256_setzero_si256(),
196               __U);
197 }
198 
199 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_expand_epi8(__m256i __S,__mmask32 __U,__m256i __D)200 _mm256_mask_expand_epi8(__m256i __S, __mmask32 __U, __m256i __D)
201 {
202   return (__m256i) __builtin_ia32_expandqi256_mask ((__v32qi) __D,
203               (__v32qi) __S,
204               __U);
205 }
206 
207 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_expand_epi8(__mmask32 __U,__m256i __D)208 _mm256_maskz_expand_epi8(__mmask32 __U, __m256i __D)
209 {
210   return (__m256i) __builtin_ia32_expandqi256_mask ((__v32qi) __D,
211               (__v32qi) _mm256_setzero_si256(),
212               __U);
213 }
214 
215 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_expandloadu_epi16(__m256i __S,__mmask16 __U,void const * __P)216 _mm256_mask_expandloadu_epi16(__m256i __S, __mmask16 __U, void const *__P)
217 {
218   return (__m256i) __builtin_ia32_expandloadhi256_mask ((const __v16hi *)__P,
219               (__v16hi) __S,
220               __U);
221 }
222 
223 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_expandloadu_epi16(__mmask16 __U,void const * __P)224 _mm256_maskz_expandloadu_epi16(__mmask16 __U, void const *__P)
225 {
226   return (__m256i) __builtin_ia32_expandloadhi256_mask ((const __v16hi *)__P,
227               (__v16hi) _mm256_setzero_si256(),
228               __U);
229 }
230 
231 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_expandloadu_epi8(__m256i __S,__mmask32 __U,void const * __P)232 _mm256_mask_expandloadu_epi8(__m256i __S, __mmask32 __U, void const *__P)
233 {
234   return (__m256i) __builtin_ia32_expandloadqi256_mask ((const __v32qi *)__P,
235               (__v32qi) __S,
236               __U);
237 }
238 
239 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_expandloadu_epi8(__mmask32 __U,void const * __P)240 _mm256_maskz_expandloadu_epi8(__mmask32 __U, void const *__P)
241 {
242   return (__m256i) __builtin_ia32_expandloadqi256_mask ((const __v32qi *)__P,
243               (__v32qi) _mm256_setzero_si256(),
244               __U);
245 }
246 
247 #define _mm256_shldi_epi64(A, B, I) \
248   ((__m256i)__builtin_ia32_vpshldq256((__v4di)(__m256i)(A), \
249                                       (__v4di)(__m256i)(B), (int)(I)))
250 
251 #define _mm256_mask_shldi_epi64(S, U, A, B, I) \
252   ((__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
253                                      (__v4di)_mm256_shldi_epi64((A), (B), (I)), \
254                                      (__v4di)(__m256i)(S)))
255 
256 #define _mm256_maskz_shldi_epi64(U, A, B, I) \
257   ((__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
258                                      (__v4di)_mm256_shldi_epi64((A), (B), (I)), \
259                                      (__v4di)_mm256_setzero_si256()))
260 
261 #define _mm_shldi_epi64(A, B, I) \
262   ((__m128i)__builtin_ia32_vpshldq128((__v2di)(__m128i)(A), \
263                                       (__v2di)(__m128i)(B), (int)(I)))
264 
265 #define _mm_mask_shldi_epi64(S, U, A, B, I) \
266   ((__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
267                                        (__v2di)_mm_shldi_epi64((A), (B), (I)), \
268                                        (__v2di)(__m128i)(S)))
269 
270 #define _mm_maskz_shldi_epi64(U, A, B, I) \
271   ((__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
272                                        (__v2di)_mm_shldi_epi64((A), (B), (I)), \
273                                        (__v2di)_mm_setzero_si128()))
274 
275 #define _mm256_shldi_epi32(A, B, I) \
276   ((__m256i)__builtin_ia32_vpshldd256((__v8si)(__m256i)(A), \
277                                       (__v8si)(__m256i)(B), (int)(I)))
278 
279 #define _mm256_mask_shldi_epi32(S, U, A, B, I) \
280   ((__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
281                                      (__v8si)_mm256_shldi_epi32((A), (B), (I)), \
282                                      (__v8si)(__m256i)(S)))
283 
284 #define _mm256_maskz_shldi_epi32(U, A, B, I) \
285   ((__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
286                                      (__v8si)_mm256_shldi_epi32((A), (B), (I)), \
287                                      (__v8si)_mm256_setzero_si256()))
288 
289 #define _mm_shldi_epi32(A, B, I) \
290   ((__m128i)__builtin_ia32_vpshldd128((__v4si)(__m128i)(A), \
291                                       (__v4si)(__m128i)(B), (int)(I)))
292 
293 #define _mm_mask_shldi_epi32(S, U, A, B, I) \
294   ((__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
295                                        (__v4si)_mm_shldi_epi32((A), (B), (I)), \
296                                        (__v4si)(__m128i)(S)))
297 
298 #define _mm_maskz_shldi_epi32(U, A, B, I) \
299   ((__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
300                                        (__v4si)_mm_shldi_epi32((A), (B), (I)), \
301                                        (__v4si)_mm_setzero_si128()))
302 
303 #define _mm256_shldi_epi16(A, B, I) \
304   ((__m256i)__builtin_ia32_vpshldw256((__v16hi)(__m256i)(A), \
305                                       (__v16hi)(__m256i)(B), (int)(I)))
306 
307 #define _mm256_mask_shldi_epi16(S, U, A, B, I) \
308   ((__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
309                                     (__v16hi)_mm256_shldi_epi16((A), (B), (I)), \
310                                     (__v16hi)(__m256i)(S)))
311 
312 #define _mm256_maskz_shldi_epi16(U, A, B, I) \
313   ((__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
314                                     (__v16hi)_mm256_shldi_epi16((A), (B), (I)), \
315                                     (__v16hi)_mm256_setzero_si256()))
316 
317 #define _mm_shldi_epi16(A, B, I) \
318   ((__m128i)__builtin_ia32_vpshldw128((__v8hi)(__m128i)(A), \
319                                       (__v8hi)(__m128i)(B), (int)(I)))
320 
321 #define _mm_mask_shldi_epi16(S, U, A, B, I) \
322   ((__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
323                                        (__v8hi)_mm_shldi_epi16((A), (B), (I)), \
324                                        (__v8hi)(__m128i)(S)))
325 
326 #define _mm_maskz_shldi_epi16(U, A, B, I) \
327   ((__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
328                                        (__v8hi)_mm_shldi_epi16((A), (B), (I)), \
329                                        (__v8hi)_mm_setzero_si128()))
330 
331 #define _mm256_shrdi_epi64(A, B, I) \
332   ((__m256i)__builtin_ia32_vpshrdq256((__v4di)(__m256i)(A), \
333                                       (__v4di)(__m256i)(B), (int)(I)))
334 
335 #define _mm256_mask_shrdi_epi64(S, U, A, B, I) \
336   ((__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
337                                      (__v4di)_mm256_shrdi_epi64((A), (B), (I)), \
338                                      (__v4di)(__m256i)(S)))
339 
340 #define _mm256_maskz_shrdi_epi64(U, A, B, I) \
341   ((__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
342                                      (__v4di)_mm256_shrdi_epi64((A), (B), (I)), \
343                                      (__v4di)_mm256_setzero_si256()))
344 
345 #define _mm_shrdi_epi64(A, B, I) \
346   ((__m128i)__builtin_ia32_vpshrdq128((__v2di)(__m128i)(A), \
347                                       (__v2di)(__m128i)(B), (int)(I)))
348 
349 #define _mm_mask_shrdi_epi64(S, U, A, B, I) \
350   ((__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
351                                        (__v2di)_mm_shrdi_epi64((A), (B), (I)), \
352                                        (__v2di)(__m128i)(S)))
353 
354 #define _mm_maskz_shrdi_epi64(U, A, B, I) \
355   ((__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
356                                        (__v2di)_mm_shrdi_epi64((A), (B), (I)), \
357                                        (__v2di)_mm_setzero_si128()))
358 
359 #define _mm256_shrdi_epi32(A, B, I) \
360   ((__m256i)__builtin_ia32_vpshrdd256((__v8si)(__m256i)(A), \
361                                       (__v8si)(__m256i)(B), (int)(I)))
362 
363 #define _mm256_mask_shrdi_epi32(S, U, A, B, I) \
364   ((__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
365                                      (__v8si)_mm256_shrdi_epi32((A), (B), (I)), \
366                                      (__v8si)(__m256i)(S)))
367 
368 #define _mm256_maskz_shrdi_epi32(U, A, B, I) \
369   ((__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
370                                      (__v8si)_mm256_shrdi_epi32((A), (B), (I)), \
371                                      (__v8si)_mm256_setzero_si256()))
372 
373 #define _mm_shrdi_epi32(A, B, I) \
374   ((__m128i)__builtin_ia32_vpshrdd128((__v4si)(__m128i)(A), \
375                                       (__v4si)(__m128i)(B), (int)(I)))
376 
377 #define _mm_mask_shrdi_epi32(S, U, A, B, I) \
378   ((__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
379                                        (__v4si)_mm_shrdi_epi32((A), (B), (I)), \
380                                        (__v4si)(__m128i)(S)))
381 
382 #define _mm_maskz_shrdi_epi32(U, A, B, I) \
383   ((__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
384                                        (__v4si)_mm_shrdi_epi32((A), (B), (I)), \
385                                        (__v4si)_mm_setzero_si128()))
386 
387 #define _mm256_shrdi_epi16(A, B, I) \
388   ((__m256i)__builtin_ia32_vpshrdw256((__v16hi)(__m256i)(A), \
389                                       (__v16hi)(__m256i)(B), (int)(I)))
390 
391 #define _mm256_mask_shrdi_epi16(S, U, A, B, I) \
392   ((__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
393                                     (__v16hi)_mm256_shrdi_epi16((A), (B), (I)), \
394                                     (__v16hi)(__m256i)(S)))
395 
396 #define _mm256_maskz_shrdi_epi16(U, A, B, I) \
397   ((__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
398                                     (__v16hi)_mm256_shrdi_epi16((A), (B), (I)), \
399                                     (__v16hi)_mm256_setzero_si256()))
400 
401 #define _mm_shrdi_epi16(A, B, I) \
402   ((__m128i)__builtin_ia32_vpshrdw128((__v8hi)(__m128i)(A), \
403                                       (__v8hi)(__m128i)(B), (int)(I)))
404 
405 #define _mm_mask_shrdi_epi16(S, U, A, B, I) \
406   ((__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
407                                        (__v8hi)_mm_shrdi_epi16((A), (B), (I)), \
408                                        (__v8hi)(__m128i)(S)))
409 
410 #define _mm_maskz_shrdi_epi16(U, A, B, I) \
411   ((__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
412                                        (__v8hi)_mm_shrdi_epi16((A), (B), (I)), \
413                                        (__v8hi)_mm_setzero_si128()))
414 
415 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shldv_epi64(__m256i __A,__m256i __B,__m256i __C)416 _mm256_shldv_epi64(__m256i __A, __m256i __B, __m256i __C)
417 {
418   return (__m256i)__builtin_ia32_vpshldvq256((__v4di)__A, (__v4di)__B,
419                                              (__v4di)__C);
420 }
421 
422 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shldv_epi64(__m256i __A,__mmask8 __U,__m256i __B,__m256i __C)423 _mm256_mask_shldv_epi64(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
424 {
425   return (__m256i)__builtin_ia32_selectq_256(__U,
426                                       (__v4di)_mm256_shldv_epi64(__A, __B, __C),
427                                       (__v4di)__A);
428 }
429 
430 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shldv_epi64(__mmask8 __U,__m256i __A,__m256i __B,__m256i __C)431 _mm256_maskz_shldv_epi64(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
432 {
433   return (__m256i)__builtin_ia32_selectq_256(__U,
434                                       (__v4di)_mm256_shldv_epi64(__A, __B, __C),
435                                       (__v4di)_mm256_setzero_si256());
436 }
437 
438 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shldv_epi64(__m128i __A,__m128i __B,__m128i __C)439 _mm_shldv_epi64(__m128i __A, __m128i __B, __m128i __C)
440 {
441   return (__m128i)__builtin_ia32_vpshldvq128((__v2di)__A, (__v2di)__B,
442                                              (__v2di)__C);
443 }
444 
445 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shldv_epi64(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)446 _mm_mask_shldv_epi64(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
447 {
448   return (__m128i)__builtin_ia32_selectq_128(__U,
449                                          (__v2di)_mm_shldv_epi64(__A, __B, __C),
450                                          (__v2di)__A);
451 }
452 
453 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shldv_epi64(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)454 _mm_maskz_shldv_epi64(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
455 {
456   return (__m128i)__builtin_ia32_selectq_128(__U,
457                                          (__v2di)_mm_shldv_epi64(__A, __B, __C),
458                                          (__v2di)_mm_setzero_si128());
459 }
460 
461 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shldv_epi32(__m256i __A,__m256i __B,__m256i __C)462 _mm256_shldv_epi32(__m256i __A, __m256i __B, __m256i __C)
463 {
464   return (__m256i)__builtin_ia32_vpshldvd256((__v8si)__A, (__v8si)__B,
465                                              (__v8si)__C);
466 }
467 
468 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shldv_epi32(__m256i __A,__mmask8 __U,__m256i __B,__m256i __C)469 _mm256_mask_shldv_epi32(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
470 {
471   return (__m256i)__builtin_ia32_selectd_256(__U,
472                                       (__v8si)_mm256_shldv_epi32(__A, __B, __C),
473                                       (__v8si)__A);
474 }
475 
476 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shldv_epi32(__mmask8 __U,__m256i __A,__m256i __B,__m256i __C)477 _mm256_maskz_shldv_epi32(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
478 {
479   return (__m256i)__builtin_ia32_selectd_256(__U,
480                                       (__v8si)_mm256_shldv_epi32(__A, __B, __C),
481                                       (__v8si)_mm256_setzero_si256());
482 }
483 
484 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shldv_epi32(__m128i __A,__m128i __B,__m128i __C)485 _mm_shldv_epi32(__m128i __A, __m128i __B, __m128i __C)
486 {
487   return (__m128i)__builtin_ia32_vpshldvd128((__v4si)__A, (__v4si)__B,
488                                              (__v4si)__C);
489 }
490 
491 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shldv_epi32(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)492 _mm_mask_shldv_epi32(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
493 {
494   return (__m128i)__builtin_ia32_selectd_128(__U,
495                                          (__v4si)_mm_shldv_epi32(__A, __B, __C),
496                                          (__v4si)__A);
497 }
498 
499 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shldv_epi32(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)500 _mm_maskz_shldv_epi32(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
501 {
502   return (__m128i)__builtin_ia32_selectd_128(__U,
503                                          (__v4si)_mm_shldv_epi32(__A, __B, __C),
504                                          (__v4si)_mm_setzero_si128());
505 }
506 
507 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shldv_epi16(__m256i __A,__m256i __B,__m256i __C)508 _mm256_shldv_epi16(__m256i __A, __m256i __B, __m256i __C)
509 {
510   return (__m256i)__builtin_ia32_vpshldvw256((__v16hi)__A, (__v16hi)__B,
511                                              (__v16hi)__C);
512 }
513 
514 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shldv_epi16(__m256i __A,__mmask16 __U,__m256i __B,__m256i __C)515 _mm256_mask_shldv_epi16(__m256i __A, __mmask16 __U, __m256i __B, __m256i __C)
516 {
517   return (__m256i)__builtin_ia32_selectw_256(__U,
518                                       (__v16hi)_mm256_shldv_epi16(__A, __B, __C),
519                                       (__v16hi)__A);
520 }
521 
522 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shldv_epi16(__mmask16 __U,__m256i __A,__m256i __B,__m256i __C)523 _mm256_maskz_shldv_epi16(__mmask16 __U, __m256i __A, __m256i __B, __m256i __C)
524 {
525   return (__m256i)__builtin_ia32_selectw_256(__U,
526                                       (__v16hi)_mm256_shldv_epi16(__A, __B, __C),
527                                       (__v16hi)_mm256_setzero_si256());
528 }
529 
530 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shldv_epi16(__m128i __A,__m128i __B,__m128i __C)531 _mm_shldv_epi16(__m128i __A, __m128i __B, __m128i __C)
532 {
533   return (__m128i)__builtin_ia32_vpshldvw128((__v8hi)__A, (__v8hi)__B,
534                                              (__v8hi)__C);
535 }
536 
537 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shldv_epi16(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)538 _mm_mask_shldv_epi16(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
539 {
540   return (__m128i)__builtin_ia32_selectw_128(__U,
541                                          (__v8hi)_mm_shldv_epi16(__A, __B, __C),
542                                          (__v8hi)__A);
543 }
544 
545 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shldv_epi16(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)546 _mm_maskz_shldv_epi16(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
547 {
548   return (__m128i)__builtin_ia32_selectw_128(__U,
549                                          (__v8hi)_mm_shldv_epi16(__A, __B, __C),
550                                          (__v8hi)_mm_setzero_si128());
551 }
552 
553 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shrdv_epi64(__m256i __A,__m256i __B,__m256i __C)554 _mm256_shrdv_epi64(__m256i __A, __m256i __B, __m256i __C)
555 {
556   return (__m256i)__builtin_ia32_vpshrdvq256((__v4di)__A, (__v4di)__B,
557                                              (__v4di)__C);
558 }
559 
560 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shrdv_epi64(__m256i __A,__mmask8 __U,__m256i __B,__m256i __C)561 _mm256_mask_shrdv_epi64(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
562 {
563   return (__m256i)__builtin_ia32_selectq_256(__U,
564                                       (__v4di)_mm256_shrdv_epi64(__A, __B, __C),
565                                       (__v4di)__A);
566 }
567 
568 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shrdv_epi64(__mmask8 __U,__m256i __A,__m256i __B,__m256i __C)569 _mm256_maskz_shrdv_epi64(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
570 {
571   return (__m256i)__builtin_ia32_selectq_256(__U,
572                                       (__v4di)_mm256_shrdv_epi64(__A, __B, __C),
573                                       (__v4di)_mm256_setzero_si256());
574 }
575 
576 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shrdv_epi64(__m128i __A,__m128i __B,__m128i __C)577 _mm_shrdv_epi64(__m128i __A, __m128i __B, __m128i __C)
578 {
579   return (__m128i)__builtin_ia32_vpshrdvq128((__v2di)__A, (__v2di)__B,
580                                              (__v2di)__C);
581 }
582 
583 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shrdv_epi64(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)584 _mm_mask_shrdv_epi64(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
585 {
586   return (__m128i)__builtin_ia32_selectq_128(__U,
587                                          (__v2di)_mm_shrdv_epi64(__A, __B, __C),
588                                          (__v2di)__A);
589 }
590 
591 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shrdv_epi64(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)592 _mm_maskz_shrdv_epi64(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
593 {
594   return (__m128i)__builtin_ia32_selectq_128(__U,
595                                          (__v2di)_mm_shrdv_epi64(__A, __B, __C),
596                                          (__v2di)_mm_setzero_si128());
597 }
598 
599 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shrdv_epi32(__m256i __A,__m256i __B,__m256i __C)600 _mm256_shrdv_epi32(__m256i __A, __m256i __B, __m256i __C)
601 {
602   return (__m256i)__builtin_ia32_vpshrdvd256((__v8si)__A, (__v8si)__B,
603                                              (__v8si)__C);
604 }
605 
606 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shrdv_epi32(__m256i __A,__mmask8 __U,__m256i __B,__m256i __C)607 _mm256_mask_shrdv_epi32(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
608 {
609   return (__m256i)__builtin_ia32_selectd_256(__U,
610                                       (__v8si)_mm256_shrdv_epi32(__A, __B, __C),
611                                       (__v8si)__A);
612 }
613 
614 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shrdv_epi32(__mmask8 __U,__m256i __A,__m256i __B,__m256i __C)615 _mm256_maskz_shrdv_epi32(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
616 {
617   return (__m256i)__builtin_ia32_selectd_256(__U,
618                                       (__v8si)_mm256_shrdv_epi32(__A, __B, __C),
619                                       (__v8si)_mm256_setzero_si256());
620 }
621 
622 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shrdv_epi32(__m128i __A,__m128i __B,__m128i __C)623 _mm_shrdv_epi32(__m128i __A, __m128i __B, __m128i __C)
624 {
625   return (__m128i)__builtin_ia32_vpshrdvd128((__v4si)__A, (__v4si)__B,
626                                              (__v4si)__C);
627 }
628 
629 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shrdv_epi32(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)630 _mm_mask_shrdv_epi32(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
631 {
632   return (__m128i)__builtin_ia32_selectd_128(__U,
633                                          (__v4si)_mm_shrdv_epi32(__A, __B, __C),
634                                          (__v4si)__A);
635 }
636 
637 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shrdv_epi32(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)638 _mm_maskz_shrdv_epi32(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
639 {
640   return (__m128i)__builtin_ia32_selectd_128(__U,
641                                          (__v4si)_mm_shrdv_epi32(__A, __B, __C),
642                                          (__v4si)_mm_setzero_si128());
643 }
644 
645 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_shrdv_epi16(__m256i __A,__m256i __B,__m256i __C)646 _mm256_shrdv_epi16(__m256i __A, __m256i __B, __m256i __C)
647 {
648   return (__m256i)__builtin_ia32_vpshrdvw256((__v16hi)__A, (__v16hi)__B,
649                                              (__v16hi)__C);
650 }
651 
652 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_shrdv_epi16(__m256i __A,__mmask16 __U,__m256i __B,__m256i __C)653 _mm256_mask_shrdv_epi16(__m256i __A, __mmask16 __U, __m256i __B, __m256i __C)
654 {
655   return (__m256i)__builtin_ia32_selectw_256(__U,
656                                      (__v16hi)_mm256_shrdv_epi16(__A, __B, __C),
657                                      (__v16hi)__A);
658 }
659 
660 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_shrdv_epi16(__mmask16 __U,__m256i __A,__m256i __B,__m256i __C)661 _mm256_maskz_shrdv_epi16(__mmask16 __U, __m256i __A, __m256i __B, __m256i __C)
662 {
663   return (__m256i)__builtin_ia32_selectw_256(__U,
664                                      (__v16hi)_mm256_shrdv_epi16(__A, __B, __C),
665                                      (__v16hi)_mm256_setzero_si256());
666 }
667 
668 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_shrdv_epi16(__m128i __A,__m128i __B,__m128i __C)669 _mm_shrdv_epi16(__m128i __A, __m128i __B, __m128i __C)
670 {
671   return (__m128i)__builtin_ia32_vpshrdvw128((__v8hi)__A, (__v8hi)__B,
672                                              (__v8hi)__C);
673 }
674 
675 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_shrdv_epi16(__m128i __A,__mmask8 __U,__m128i __B,__m128i __C)676 _mm_mask_shrdv_epi16(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
677 {
678   return (__m128i)__builtin_ia32_selectw_128(__U,
679                                          (__v8hi)_mm_shrdv_epi16(__A, __B, __C),
680                                          (__v8hi)__A);
681 }
682 
683 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_shrdv_epi16(__mmask8 __U,__m128i __A,__m128i __B,__m128i __C)684 _mm_maskz_shrdv_epi16(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
685 {
686   return (__m128i)__builtin_ia32_selectw_128(__U,
687                                          (__v8hi)_mm_shrdv_epi16(__A, __B, __C),
688                                          (__v8hi)_mm_setzero_si128());
689 }
690 
691 
692 #undef __DEFAULT_FN_ATTRS128
693 #undef __DEFAULT_FN_ATTRS256
694 
695 #endif
696