]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/i386/avx512vbmi2intrin.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / i386 / avx512vbmi2intrin.h
CommitLineData
8d9254fc 1/* Copyright (C) 2013-2020 Free Software Foundation, Inc.
11cca3ca
JK
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
2e34b5bc 31#if !defined(__AVX512VBMI2__)
11cca3ca 32#pragma GCC push_options
2e34b5bc
JJ
33#pragma GCC target("avx512vbmi2")
34#define __DISABLE_AVX512VBMI2__
35#endif /* __AVX512VBMI2__ */
2794892a
JK
36
37#ifdef __OPTIMIZE__
04d1ea7a
JK
38extern __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
04d1ea7a
JK
46extern __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
54extern __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
63extern __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
71extern __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
78extern __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
87extern __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
2794892a
JK
95extern __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
2794892a
JK
103extern __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
111extern __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
120extern __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
128extern __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
135extern __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
144extern __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
04d1ea7a
JK
152#define _mm512_shrdi_epi16(A, B, C) \
153 ((__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)(__m512i)(A), \
154 (__v32hi)(__m512i)(B),(int)(C))
04d1ea7a
JK
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))
2794892a
JK
175#define _mm512_shldi_epi16(A, B, C) \
176 ((__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)(__m512i)(A), \
177 (__v32hi)(__m512i)(B),(int)(C))
2794892a
JK
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
8d4f237b
JK
200extern __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
8d4f237b
JK
208extern __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
216extern __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
224extern __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
232extern __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
240extern __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
248extern __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}
3d2aff3d
JK
255extern __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
3d2aff3d
JK
263extern __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
271extern __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}
8d4f237b 278
3d2aff3d
JK
279extern __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
287extern __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
295extern __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
303extern __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}
8d4f237b 310
2e34b5bc
JJ
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
323extern __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
332extern __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
341extern __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
349extern __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
357extern __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
365extern __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
373extern __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
382extern __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
390extern __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
398extern __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
406extern __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
415extern __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
423extern __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
431extern __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__
440extern __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
449extern __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
457extern __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
466extern __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
491extern __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
499extern __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
507extern __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
515extern __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
11cca3ca
JK
523#ifdef __DISABLE_AVX512VBMI2BW__
524#undef __DISABLE_AVX512VBMI2BW__
525
526#pragma GCC pop_options
527#endif /* __DISABLE_AVX512VBMI2BW__ */
528
529#endif /* __AVX512VBMI2INTRIN_H_INCLUDED */