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