1 /* Copyright (C) 2013-2018 Free Software Foundation, Inc.
2 
3    This file is part of GCC.
4 
5    GCC is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3, or (at your option)
8    any later version.
9 
10    GCC is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    Under Section 7 of GPL version 3, you are granted additional
16    permissions described in the GCC Runtime Library Exception, version
17    3.1, as published by the Free Software Foundation.
18 
19    You should have received a copy of the GNU General Public License and
20    a copy of the GCC Runtime Library Exception along with this program;
21    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
22    <http://www.gnu.org/licenses/>.  */
23 
24 #ifndef _IMMINTRIN_H_INCLUDED
25 #error "Never use <avx512vbmi2intrin.h> directly; include <immintrin.h> instead."
26 #endif
27 
28 #ifndef __AVX512VBMI2INTRIN_H_INCLUDED
29 #define __AVX512VBMI2INTRIN_H_INCLUDED
30 
31 #if !defined(__AVX512VBMI2__)
32 #pragma GCC push_options
33 #pragma GCC target("avx512vbmi2")
34 #define __DISABLE_AVX512VBMI2__
35 #endif /* __AVX512VBMI2__ */
36 
37 #ifdef __OPTIMIZE__
38 extern __inline __m512i
39 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
40 _mm512_shrdi_epi16 (__m512i __A, __m512i __B, int __C)
41 {
42   return (__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)__A, (__v32hi) __B,
43 									__C);
44 }
45 
46 extern __inline __m512i
47 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
48 _mm512_shrdi_epi32 (__m512i __A, __m512i __B, int __C)
49 {
50   return (__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)__A, (__v16si) __B,
51 									__C);
52 }
53 
54 extern __inline __m512i
55 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
56 _mm512_mask_shrdi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
57 								int __E)
58 {
59   return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__C,
60 			(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
61 }
62 
63 extern __inline __m512i
64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
65 _mm512_maskz_shrdi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
66 {
67   return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__B,
68 	(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
69 }
70 
71 extern __inline __m512i
72 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
73 _mm512_shrdi_epi64 (__m512i __A, __m512i __B, int __C)
74 {
75   return (__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)__A, (__v8di) __B, __C);
76 }
77 
78 extern __inline __m512i
79 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
80 _mm512_mask_shrdi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
81 								int __E)
82 {
83   return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__C, (__v8di) __D,
84 					__E, (__v8di) __A, (__mmask8)__B);
85 }
86 
87 extern __inline __m512i
88 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
89 _mm512_maskz_shrdi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
90 {
91   return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__B, (__v8di) __C,
92 			__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
93 }
94 
95 extern __inline __m512i
96 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
97 _mm512_shldi_epi16 (__m512i __A, __m512i __B, int __C)
98 {
99   return (__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)__A, (__v32hi) __B,
100 									__C);
101 }
102 
103 extern __inline __m512i
104 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
105 _mm512_shldi_epi32 (__m512i __A, __m512i __B, int __C)
106 {
107   return (__m512i) __builtin_ia32_vpshld_v16si ((__v16si)__A, (__v16si) __B,
108 									__C);
109 }
110 
111 extern __inline __m512i
112 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
113 _mm512_mask_shldi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
114 								int __E)
115 {
116   return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__C,
117 			(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
118 }
119 
120 extern __inline __m512i
121 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
122 _mm512_maskz_shldi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
123 {
124   return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__B,
125 	(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
126 }
127 
128 extern __inline __m512i
129 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
130 _mm512_shldi_epi64 (__m512i __A, __m512i __B, int __C)
131 {
132   return (__m512i) __builtin_ia32_vpshld_v8di ((__v8di)__A, (__v8di) __B, __C);
133 }
134 
135 extern __inline __m512i
136 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
137 _mm512_mask_shldi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
138 								int __E)
139 {
140   return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__C, (__v8di) __D,
141 					__E, (__v8di) __A, (__mmask8)__B);
142 }
143 
144 extern __inline __m512i
145 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
146 _mm512_maskz_shldi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
147 {
148   return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__B, (__v8di) __C,
149 			__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
150 }
151 #else
152 #define _mm512_shrdi_epi16(A, B, C) \
153   ((__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)(__m512i)(A), \
154 						(__v32hi)(__m512i)(B),(int)(C))
155 #define _mm512_shrdi_epi32(A, B, C) \
156   ((__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)(__m512i)(A), \
157 	(__v16si)(__m512i)(B),(int)(C))
158 #define _mm512_mask_shrdi_epi32(A, B, C, D, E) \
159   ((__m512i) __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(C), \
160 	(__v16si)(__m512i)(D), (int)(E), (__v16si)(__m512i)(A),(__mmask16)(B))
161 #define _mm512_maskz_shrdi_epi32(A, B, C, D) \
162   ((__m512i) __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(B), \
163 	(__v16si)(__m512i)(C),(int)(D), \
164 	(__v16si)(__m512i)_mm512_setzero_si512 (), (__mmask16)(A))
165 #define _mm512_shrdi_epi64(A, B, C) \
166   ((__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)(__m512i)(A), \
167 	(__v8di)(__m512i)(B),(int)(C))
168 #define _mm512_mask_shrdi_epi64(A, B, C, D, E) \
169   ((__m512i) __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(C), \
170 	(__v8di)(__m512i)(D), (int)(E), (__v8di)(__m512i)(A),(__mmask8)(B))
171 #define _mm512_maskz_shrdi_epi64(A, B, C, D) \
172   ((__m512i) __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(B), \
173 	(__v8di)(__m512i)(C),(int)(D), \
174 	(__v8di)(__m512i)_mm512_setzero_si512 (), (__mmask8)(A))
175 #define _mm512_shldi_epi16(A, B, C) \
176   ((__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)(__m512i)(A), \
177 						(__v32hi)(__m512i)(B),(int)(C))
178 #define _mm512_shldi_epi32(A, B, C) \
179   ((__m512i) __builtin_ia32_vpshld_v16si ((__v16si)(__m512i)(A), 	\
180 				(__v16si)(__m512i)(B),(int)(C))
181 #define _mm512_mask_shldi_epi32(A, B, C, D, E) \
182   ((__m512i) __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(C), \
183 	(__v16si)(__m512i)(D), (int)(E), (__v16si)(__m512i)(A),(__mmask16)(B))
184 #define _mm512_maskz_shldi_epi32(A, B, C, D) \
185   ((__m512i) __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(B), \
186 	(__v16si)(__m512i)(C),(int)(D), \
187 	(__v16si)(__m512i)_mm512_setzero_si512 (), (__mmask16)(A))
188 #define _mm512_shldi_epi64(A, B, C) \
189   ((__m512i) __builtin_ia32_vpshld_v8di ((__v8di)(__m512i)(A), \
190 	(__v8di)(__m512i)(B),(int)(C))
191 #define _mm512_mask_shldi_epi64(A, B, C, D, E) \
192   ((__m512i) __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(C), \
193 	(__v8di)(__m512i)(D), (int)(E), (__v8di)(__m512i)(A),(__mmask8)(B))
194 #define _mm512_maskz_shldi_epi64(A, B, C, D) \
195   ((__m512i) __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(B), \
196 	(__v8di)(__m512i)(C),(int)(D), \
197 	(__v8di)(__m512i)_mm512_setzero_si512 (), (__mmask8)(A))
198 #endif
199 
200 extern __inline __m512i
201 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
202 _mm512_shrdv_epi16 (__m512i __A, __m512i __B, __m512i __C)
203 {
204   return (__m512i) __builtin_ia32_vpshrdv_v32hi ((__v32hi)__A, (__v32hi) __B,
205 								(__v32hi) __C);
206 }
207 
208 extern __inline __m512i
209 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
210 _mm512_shrdv_epi32 (__m512i __A, __m512i __B, __m512i __C)
211 {
212   return (__m512i) __builtin_ia32_vpshrdv_v16si ((__v16si)__A, (__v16si) __B,
213 								(__v16si) __C);
214 }
215 
216 extern __inline __m512i
217 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
218 _mm512_mask_shrdv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
219 {
220   return (__m512i)__builtin_ia32_vpshrdv_v16si_mask ((__v16si)__A,
221 				(__v16si) __C, (__v16si) __D, (__mmask16)__B);
222 }
223 
224 extern __inline __m512i
225 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
226 _mm512_maskz_shrdv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
227 {
228   return (__m512i)__builtin_ia32_vpshrdv_v16si_maskz ((__v16si)__B,
229 				(__v16si) __C, (__v16si) __D, (__mmask16)__A);
230 }
231 
232 extern __inline __m512i
233 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
234 _mm512_shrdv_epi64 (__m512i __A, __m512i __B, __m512i __C)
235 {
236   return (__m512i) __builtin_ia32_vpshrdv_v8di ((__v8di)__A, (__v8di) __B,
237 								(__v8di) __C);
238 }
239 
240 extern __inline __m512i
241 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
242 _mm512_mask_shrdv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
243 {
244   return (__m512i)__builtin_ia32_vpshrdv_v8di_mask ((__v8di)__A, (__v8di) __C,
245 						(__v8di) __D, (__mmask8)__B);
246 }
247 
248 extern __inline __m512i
249 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
250 _mm512_maskz_shrdv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
251 {
252   return (__m512i)__builtin_ia32_vpshrdv_v8di_maskz ((__v8di)__B, (__v8di) __C,
253 						 (__v8di) __D, (__mmask8)__A);
254 }
255 extern __inline __m512i
256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
257 _mm512_shldv_epi16 (__m512i __A, __m512i __B, __m512i __C)
258 {
259   return (__m512i) __builtin_ia32_vpshldv_v32hi ((__v32hi)__A, (__v32hi) __B,
260 							 (__v32hi) __C);
261 }
262 
263 extern __inline __m512i
264 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
265 _mm512_shldv_epi32 (__m512i __A, __m512i __B, __m512i __C)
266 {
267   return (__m512i) __builtin_ia32_vpshldv_v16si ((__v16si)__A, (__v16si) __B,
268 								(__v16si) __C);
269 }
270 
271 extern __inline __m512i
272 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
273 _mm512_mask_shldv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
274 {
275   return (__m512i)__builtin_ia32_vpshldv_v16si_mask ((__v16si)__A,
276 				(__v16si) __C, (__v16si) __D, (__mmask16)__B);
277 }
278 
279 extern __inline __m512i
280 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
281 _mm512_maskz_shldv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
282 {
283   return (__m512i)__builtin_ia32_vpshldv_v16si_maskz ((__v16si)__B,
284 				(__v16si) __C, (__v16si) __D, (__mmask16)__A);
285 }
286 
287 extern __inline __m512i
288 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
289 _mm512_shldv_epi64 (__m512i __A, __m512i __B, __m512i __C)
290 {
291   return (__m512i) __builtin_ia32_vpshldv_v8di ((__v8di)__A, (__v8di) __B,
292 								(__v8di) __C);
293 }
294 
295 extern __inline __m512i
296 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
297 _mm512_mask_shldv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
298 {
299   return (__m512i)__builtin_ia32_vpshldv_v8di_mask ((__v8di)__A, (__v8di) __C,
300 						(__v8di) __D, (__mmask8)__B);
301 }
302 
303 extern __inline __m512i
304 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
305 _mm512_maskz_shldv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
306 {
307   return (__m512i)__builtin_ia32_vpshldv_v8di_maskz ((__v8di)__B, (__v8di) __C,
308 						(__v8di) __D, (__mmask8)__A);
309 }
310 
311 #ifdef __DISABLE_AVX512VBMI2__
312 #undef __DISABLE_AVX512VBMI2__
313 
314 #pragma GCC pop_options
315 #endif /* __DISABLE_AVX512VBMI2__ */
316 
317 #if !defined(__AVX512VBMI2__) || !defined(__AVX512BW__)
318 #pragma GCC push_options
319 #pragma GCC target("avx512vbmi2,avx512bw")
320 #define __DISABLE_AVX512VBMI2BW__
321 #endif /* __AVX512VBMI2BW__ */
322 
323 extern __inline __m512i
324 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
325 _mm512_mask_compress_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
326 {
327   return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__C,
328 						(__v64qi)__A, (__mmask64)__B);
329 }
330 
331 
332 extern __inline __m512i
333 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
334 _mm512_maskz_compress_epi8 (__mmask64 __A, __m512i __B)
335 {
336   return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__B,
337 			(__v64qi)_mm512_setzero_si512 (), (__mmask64)__A);
338 }
339 
340 
341 extern __inline void
342 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
343 _mm512_mask_compressstoreu_epi8 (void * __A, __mmask64 __B, __m512i __C)
344 {
345   __builtin_ia32_compressstoreuqi512_mask ((__v64qi *) __A, (__v64qi) __C,
346 							(__mmask64) __B);
347 }
348 
349 extern __inline __m512i
350 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
351 _mm512_mask_compress_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
352 {
353   return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__C,
354 						(__v32hi)__A, (__mmask32)__B);
355 }
356 
357 extern __inline __m512i
358 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
359 _mm512_maskz_compress_epi16 (__mmask32 __A, __m512i __B)
360 {
361   return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__B,
362 			(__v32hi)_mm512_setzero_si512 (), (__mmask32)__A);
363 }
364 
365 extern __inline void
366 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
367 _mm512_mask_compressstoreu_epi16 (void * __A, __mmask32 __B, __m512i __C)
368 {
369   __builtin_ia32_compressstoreuhi512_mask ((__v32hi *) __A, (__v32hi) __C,
370 							(__mmask32) __B);
371 }
372 
373 extern __inline __m512i
374 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
375 _mm512_mask_expand_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
376 {
377   return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __C,
378 						    (__v64qi) __A,
379 						    (__mmask64) __B);
380 }
381 
382 extern __inline __m512i
383 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
384 _mm512_maskz_expand_epi8 (__mmask64 __A, __m512i __B)
385 {
386   return (__m512i) __builtin_ia32_expandqi512_maskz ((__v64qi) __B,
387 			(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
388 }
389 
390 extern __inline __m512i
391 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
392 _mm512_mask_expandloadu_epi8 (__m512i __A, __mmask64 __B, const void * __C)
393 {
394   return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *) __C,
395 					(__v64qi) __A, (__mmask64) __B);
396 }
397 
398 extern __inline __m512i
399 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
400 _mm512_maskz_expandloadu_epi8 (__mmask64 __A, const void * __B)
401 {
402   return (__m512i) __builtin_ia32_expandloadqi512_maskz ((const __v64qi *) __B,
403 			(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
404 }
405 
406 extern __inline __m512i
407 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
408 _mm512_mask_expand_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
409 {
410   return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __C,
411 						    (__v32hi) __A,
412 						    (__mmask32) __B);
413 }
414 
415 extern __inline __m512i
416 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
417 _mm512_maskz_expand_epi16 (__mmask32 __A, __m512i __B)
418 {
419   return (__m512i) __builtin_ia32_expandhi512_maskz ((__v32hi) __B,
420 			(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
421 }
422 
423 extern __inline __m512i
424 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
425 _mm512_mask_expandloadu_epi16 (__m512i __A, __mmask32 __B, const void * __C)
426 {
427   return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *) __C,
428 					(__v32hi) __A, (__mmask32) __B);
429 }
430 
431 extern __inline __m512i
432 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
433 _mm512_maskz_expandloadu_epi16 (__mmask32 __A, const void * __B)
434 {
435   return (__m512i) __builtin_ia32_expandloadhi512_maskz ((const __v32hi *) __B,
436 			(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
437 }
438 
439 #ifdef __OPTIMIZE__
440 extern __inline __m512i
441 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
442 _mm512_mask_shrdi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
443 								int __E)
444 {
445   return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__C,
446 			(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
447 }
448 
449 extern __inline __m512i
450 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
451 _mm512_maskz_shrdi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
452 {
453   return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__B,
454 	(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
455 }
456 
457 extern __inline __m512i
458 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
459 _mm512_mask_shldi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
460 								int __E)
461 {
462   return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__C,
463 			(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
464 }
465 
466 extern __inline __m512i
467 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
468 _mm512_maskz_shldi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
469 {
470   return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__B,
471 	(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
472 }
473 
474 #else
475 #define _mm512_mask_shrdi_epi16(A, B, C, D, E) \
476   ((__m512i) __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(C), \
477 	(__v32hi)(__m512i)(D), (int)(E), (__v32hi)(__m512i)(A),(__mmask32)(B))
478 #define _mm512_maskz_shrdi_epi16(A, B, C, D) \
479   ((__m512i) __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(B), \
480 	(__v32hi)(__m512i)(C),(int)(D), \
481 	(__v32hi)(__m512i)_mm512_setzero_si512 (), (__mmask32)(A))
482 #define _mm512_mask_shldi_epi16(A, B, C, D, E) \
483   ((__m512i) __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(C), \
484 	(__v32hi)(__m512i)(D), (int)(E), (__v32hi)(__m512i)(A),(__mmask32)(B))
485 #define _mm512_maskz_shldi_epi16(A, B, C, D) \
486   ((__m512i) __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(B),   \
487 	(__v32hi)(__m512i)(C),(int)(D), 				\
488 	(__v32hi)(__m512i)_mm512_setzero_si512 (), (__mmask32)(A))
489 #endif
490 
491 extern __inline __m512i
492 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
493 _mm512_mask_shrdv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
494 {
495   return (__m512i)__builtin_ia32_vpshrdv_v32hi_mask ((__v32hi)__A,
496 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
497 }
498 
499 extern __inline __m512i
500 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
501 _mm512_maskz_shrdv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
502 {
503   return (__m512i)__builtin_ia32_vpshrdv_v32hi_maskz ((__v32hi)__B,
504 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
505 }
506 
507 extern __inline __m512i
508 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
509 _mm512_mask_shldv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
510 {
511   return (__m512i)__builtin_ia32_vpshldv_v32hi_mask ((__v32hi)__A,
512 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
513 }
514 
515 extern __inline __m512i
516 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
517 _mm512_maskz_shldv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
518 {
519   return (__m512i)__builtin_ia32_vpshldv_v32hi_maskz ((__v32hi)__B,
520 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
521 }
522 
523 #ifdef __DISABLE_AVX512VBMI2BW__
524 #undef __DISABLE_AVX512VBMI2BW__
525 
526 #pragma GCC pop_options
527 #endif /* __DISABLE_AVX512VBMI2BW__ */
528 
529 #endif /* __AVX512VBMI2INTRIN_H_INCLUDED */
530