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__))
_mm512_shrdi_epi16(__m512i __A,__m512i __B,int __C)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__))
_mm512_shrdi_epi32(__m512i __A,__m512i __B,int __C)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__))
_mm512_mask_shrdi_epi32(__m512i __A,__mmask16 __B,__m512i __C,__m512i __D,int __E)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__))
_mm512_maskz_shrdi_epi32(__mmask16 __A,__m512i __B,__m512i __C,int __D)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__))
_mm512_shrdi_epi64(__m512i __A,__m512i __B,int __C)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__))
_mm512_mask_shrdi_epi64(__m512i __A,__mmask8 __B,__m512i __C,__m512i __D,int __E)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__))
_mm512_maskz_shrdi_epi64(__mmask8 __A,__m512i __B,__m512i __C,int __D)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__))
_mm512_shldi_epi16(__m512i __A,__m512i __B,int __C)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__))
_mm512_shldi_epi32(__m512i __A,__m512i __B,int __C)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__))
_mm512_mask_shldi_epi32(__m512i __A,__mmask16 __B,__m512i __C,__m512i __D,int __E)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__))
_mm512_maskz_shldi_epi32(__mmask16 __A,__m512i __B,__m512i __C,int __D)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__))
_mm512_shldi_epi64(__m512i __A,__m512i __B,int __C)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__))
_mm512_mask_shldi_epi64(__m512i __A,__mmask8 __B,__m512i __C,__m512i __D,int __E)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__))
_mm512_maskz_shldi_epi64(__mmask8 __A,__m512i __B,__m512i __C,int __D)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), \
161 (int)(E), \
162 (__v16si)(__m512i)(A), \
163 (__mmask16)(B)))
164 #define _mm512_maskz_shrdi_epi32(A, B, C, D) \
165 ((__m512i) \
166 __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(B), \
167 (__v16si)(__m512i)(C),(int)(D), \
168 (__v16si)(__m512i)_mm512_setzero_si512 (), \
169 (__mmask16)(A)))
170 #define _mm512_shrdi_epi64(A, B, C) \
171 ((__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)(__m512i)(A), \
172 (__v8di)(__m512i)(B),(int)(C)))
173 #define _mm512_mask_shrdi_epi64(A, B, C, D, E) \
174 ((__m512i) __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(C), \
175 (__v8di)(__m512i)(D), (int)(E), \
176 (__v8di)(__m512i)(A), \
177 (__mmask8)(B)))
178 #define _mm512_maskz_shrdi_epi64(A, B, C, D) \
179 ((__m512i) \
180 __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(B), \
181 (__v8di)(__m512i)(C),(int)(D), \
182 (__v8di)(__m512i)_mm512_setzero_si512 (), \
183 (__mmask8)(A)))
184 #define _mm512_shldi_epi16(A, B, C) \
185 ((__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)(__m512i)(A), \
186 (__v32hi)(__m512i)(B),(int)(C)))
187 #define _mm512_shldi_epi32(A, B, C) \
188 ((__m512i) __builtin_ia32_vpshld_v16si ((__v16si)(__m512i)(A), \
189 (__v16si)(__m512i)(B),(int)(C)))
190 #define _mm512_mask_shldi_epi32(A, B, C, D, E) \
191 ((__m512i) __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(C), \
192 (__v16si)(__m512i)(D), \
193 (int)(E), \
194 (__v16si)(__m512i)(A), \
195 (__mmask16)(B)))
196 #define _mm512_maskz_shldi_epi32(A, B, C, D) \
197 ((__m512i) \
198 __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(B), \
199 (__v16si)(__m512i)(C),(int)(D), \
200 (__v16si)(__m512i)_mm512_setzero_si512 (), \
201 (__mmask16)(A)))
202 #define _mm512_shldi_epi64(A, B, C) \
203 ((__m512i) __builtin_ia32_vpshld_v8di ((__v8di)(__m512i)(A), \
204 (__v8di)(__m512i)(B), (int)(C)))
205 #define _mm512_mask_shldi_epi64(A, B, C, D, E) \
206 ((__m512i) __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(C), \
207 (__v8di)(__m512i)(D), (int)(E), \
208 (__v8di)(__m512i)(A), \
209 (__mmask8)(B)))
210 #define _mm512_maskz_shldi_epi64(A, B, C, D) \
211 ((__m512i) \
212 __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(B), \
213 (__v8di)(__m512i)(C),(int)(D), \
214 (__v8di)(__m512i)_mm512_setzero_si512 (), \
215 (__mmask8)(A)))
216 #endif
217
218 extern __inline __m512i
219 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shrdv_epi16(__m512i __A,__m512i __B,__m512i __C)220 _mm512_shrdv_epi16 (__m512i __A, __m512i __B, __m512i __C)
221 {
222 return (__m512i) __builtin_ia32_vpshrdv_v32hi ((__v32hi)__A, (__v32hi) __B,
223 (__v32hi) __C);
224 }
225
226 extern __inline __m512i
227 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shrdv_epi32(__m512i __A,__m512i __B,__m512i __C)228 _mm512_shrdv_epi32 (__m512i __A, __m512i __B, __m512i __C)
229 {
230 return (__m512i) __builtin_ia32_vpshrdv_v16si ((__v16si)__A, (__v16si) __B,
231 (__v16si) __C);
232 }
233
234 extern __inline __m512i
235 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shrdv_epi32(__m512i __A,__mmask16 __B,__m512i __C,__m512i __D)236 _mm512_mask_shrdv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
237 {
238 return (__m512i)__builtin_ia32_vpshrdv_v16si_mask ((__v16si)__A,
239 (__v16si) __C, (__v16si) __D, (__mmask16)__B);
240 }
241
242 extern __inline __m512i
243 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shrdv_epi32(__mmask16 __A,__m512i __B,__m512i __C,__m512i __D)244 _mm512_maskz_shrdv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
245 {
246 return (__m512i)__builtin_ia32_vpshrdv_v16si_maskz ((__v16si)__B,
247 (__v16si) __C, (__v16si) __D, (__mmask16)__A);
248 }
249
250 extern __inline __m512i
251 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shrdv_epi64(__m512i __A,__m512i __B,__m512i __C)252 _mm512_shrdv_epi64 (__m512i __A, __m512i __B, __m512i __C)
253 {
254 return (__m512i) __builtin_ia32_vpshrdv_v8di ((__v8di)__A, (__v8di) __B,
255 (__v8di) __C);
256 }
257
258 extern __inline __m512i
259 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shrdv_epi64(__m512i __A,__mmask8 __B,__m512i __C,__m512i __D)260 _mm512_mask_shrdv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
261 {
262 return (__m512i)__builtin_ia32_vpshrdv_v8di_mask ((__v8di)__A, (__v8di) __C,
263 (__v8di) __D, (__mmask8)__B);
264 }
265
266 extern __inline __m512i
267 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shrdv_epi64(__mmask8 __A,__m512i __B,__m512i __C,__m512i __D)268 _mm512_maskz_shrdv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
269 {
270 return (__m512i)__builtin_ia32_vpshrdv_v8di_maskz ((__v8di)__B, (__v8di) __C,
271 (__v8di) __D, (__mmask8)__A);
272 }
273 extern __inline __m512i
274 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shldv_epi16(__m512i __A,__m512i __B,__m512i __C)275 _mm512_shldv_epi16 (__m512i __A, __m512i __B, __m512i __C)
276 {
277 return (__m512i) __builtin_ia32_vpshldv_v32hi ((__v32hi)__A, (__v32hi) __B,
278 (__v32hi) __C);
279 }
280
281 extern __inline __m512i
282 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shldv_epi32(__m512i __A,__m512i __B,__m512i __C)283 _mm512_shldv_epi32 (__m512i __A, __m512i __B, __m512i __C)
284 {
285 return (__m512i) __builtin_ia32_vpshldv_v16si ((__v16si)__A, (__v16si) __B,
286 (__v16si) __C);
287 }
288
289 extern __inline __m512i
290 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shldv_epi32(__m512i __A,__mmask16 __B,__m512i __C,__m512i __D)291 _mm512_mask_shldv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
292 {
293 return (__m512i)__builtin_ia32_vpshldv_v16si_mask ((__v16si)__A,
294 (__v16si) __C, (__v16si) __D, (__mmask16)__B);
295 }
296
297 extern __inline __m512i
298 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shldv_epi32(__mmask16 __A,__m512i __B,__m512i __C,__m512i __D)299 _mm512_maskz_shldv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
300 {
301 return (__m512i)__builtin_ia32_vpshldv_v16si_maskz ((__v16si)__B,
302 (__v16si) __C, (__v16si) __D, (__mmask16)__A);
303 }
304
305 extern __inline __m512i
306 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_shldv_epi64(__m512i __A,__m512i __B,__m512i __C)307 _mm512_shldv_epi64 (__m512i __A, __m512i __B, __m512i __C)
308 {
309 return (__m512i) __builtin_ia32_vpshldv_v8di ((__v8di)__A, (__v8di) __B,
310 (__v8di) __C);
311 }
312
313 extern __inline __m512i
314 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shldv_epi64(__m512i __A,__mmask8 __B,__m512i __C,__m512i __D)315 _mm512_mask_shldv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
316 {
317 return (__m512i)__builtin_ia32_vpshldv_v8di_mask ((__v8di)__A, (__v8di) __C,
318 (__v8di) __D, (__mmask8)__B);
319 }
320
321 extern __inline __m512i
322 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shldv_epi64(__mmask8 __A,__m512i __B,__m512i __C,__m512i __D)323 _mm512_maskz_shldv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
324 {
325 return (__m512i)__builtin_ia32_vpshldv_v8di_maskz ((__v8di)__B, (__v8di) __C,
326 (__v8di) __D, (__mmask8)__A);
327 }
328
329 #ifdef __DISABLE_AVX512VBMI2__
330 #undef __DISABLE_AVX512VBMI2__
331
332 #pragma GCC pop_options
333 #endif /* __DISABLE_AVX512VBMI2__ */
334
335 #if !defined(__AVX512VBMI2__) || !defined(__AVX512BW__)
336 #pragma GCC push_options
337 #pragma GCC target("avx512vbmi2,avx512bw")
338 #define __DISABLE_AVX512VBMI2BW__
339 #endif /* __AVX512VBMI2BW__ */
340
341 extern __inline __m512i
342 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_compress_epi8(__m512i __A,__mmask64 __B,__m512i __C)343 _mm512_mask_compress_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
344 {
345 return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__C,
346 (__v64qi)__A, (__mmask64)__B);
347 }
348
349
350 extern __inline __m512i
351 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_compress_epi8(__mmask64 __A,__m512i __B)352 _mm512_maskz_compress_epi8 (__mmask64 __A, __m512i __B)
353 {
354 return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__B,
355 (__v64qi)_mm512_setzero_si512 (), (__mmask64)__A);
356 }
357
358
359 extern __inline void
360 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_compressstoreu_epi8(void * __A,__mmask64 __B,__m512i __C)361 _mm512_mask_compressstoreu_epi8 (void * __A, __mmask64 __B, __m512i __C)
362 {
363 __builtin_ia32_compressstoreuqi512_mask ((__v64qi *) __A, (__v64qi) __C,
364 (__mmask64) __B);
365 }
366
367 extern __inline __m512i
368 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_compress_epi16(__m512i __A,__mmask32 __B,__m512i __C)369 _mm512_mask_compress_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
370 {
371 return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__C,
372 (__v32hi)__A, (__mmask32)__B);
373 }
374
375 extern __inline __m512i
376 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_compress_epi16(__mmask32 __A,__m512i __B)377 _mm512_maskz_compress_epi16 (__mmask32 __A, __m512i __B)
378 {
379 return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__B,
380 (__v32hi)_mm512_setzero_si512 (), (__mmask32)__A);
381 }
382
383 extern __inline void
384 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_compressstoreu_epi16(void * __A,__mmask32 __B,__m512i __C)385 _mm512_mask_compressstoreu_epi16 (void * __A, __mmask32 __B, __m512i __C)
386 {
387 __builtin_ia32_compressstoreuhi512_mask ((__v32hi *) __A, (__v32hi) __C,
388 (__mmask32) __B);
389 }
390
391 extern __inline __m512i
392 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_expand_epi8(__m512i __A,__mmask64 __B,__m512i __C)393 _mm512_mask_expand_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
394 {
395 return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __C,
396 (__v64qi) __A,
397 (__mmask64) __B);
398 }
399
400 extern __inline __m512i
401 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_expand_epi8(__mmask64 __A,__m512i __B)402 _mm512_maskz_expand_epi8 (__mmask64 __A, __m512i __B)
403 {
404 return (__m512i) __builtin_ia32_expandqi512_maskz ((__v64qi) __B,
405 (__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
406 }
407
408 extern __inline __m512i
409 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_expandloadu_epi8(__m512i __A,__mmask64 __B,const void * __C)410 _mm512_mask_expandloadu_epi8 (__m512i __A, __mmask64 __B, const void * __C)
411 {
412 return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *) __C,
413 (__v64qi) __A, (__mmask64) __B);
414 }
415
416 extern __inline __m512i
417 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_expandloadu_epi8(__mmask64 __A,const void * __B)418 _mm512_maskz_expandloadu_epi8 (__mmask64 __A, const void * __B)
419 {
420 return (__m512i) __builtin_ia32_expandloadqi512_maskz ((const __v64qi *) __B,
421 (__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
422 }
423
424 extern __inline __m512i
425 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_expand_epi16(__m512i __A,__mmask32 __B,__m512i __C)426 _mm512_mask_expand_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
427 {
428 return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __C,
429 (__v32hi) __A,
430 (__mmask32) __B);
431 }
432
433 extern __inline __m512i
434 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_expand_epi16(__mmask32 __A,__m512i __B)435 _mm512_maskz_expand_epi16 (__mmask32 __A, __m512i __B)
436 {
437 return (__m512i) __builtin_ia32_expandhi512_maskz ((__v32hi) __B,
438 (__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
439 }
440
441 extern __inline __m512i
442 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_expandloadu_epi16(__m512i __A,__mmask32 __B,const void * __C)443 _mm512_mask_expandloadu_epi16 (__m512i __A, __mmask32 __B, const void * __C)
444 {
445 return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *) __C,
446 (__v32hi) __A, (__mmask32) __B);
447 }
448
449 extern __inline __m512i
450 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_expandloadu_epi16(__mmask32 __A,const void * __B)451 _mm512_maskz_expandloadu_epi16 (__mmask32 __A, const void * __B)
452 {
453 return (__m512i) __builtin_ia32_expandloadhi512_maskz ((const __v32hi *) __B,
454 (__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
455 }
456
457 #ifdef __OPTIMIZE__
458 extern __inline __m512i
459 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shrdi_epi16(__m512i __A,__mmask32 __B,__m512i __C,__m512i __D,int __E)460 _mm512_mask_shrdi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
461 int __E)
462 {
463 return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__C,
464 (__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
465 }
466
467 extern __inline __m512i
468 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shrdi_epi16(__mmask32 __A,__m512i __B,__m512i __C,int __D)469 _mm512_maskz_shrdi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
470 {
471 return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__B,
472 (__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
473 }
474
475 extern __inline __m512i
476 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shldi_epi16(__m512i __A,__mmask32 __B,__m512i __C,__m512i __D,int __E)477 _mm512_mask_shldi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
478 int __E)
479 {
480 return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__C,
481 (__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
482 }
483
484 extern __inline __m512i
485 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shldi_epi16(__mmask32 __A,__m512i __B,__m512i __C,int __D)486 _mm512_maskz_shldi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
487 {
488 return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__B,
489 (__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
490 }
491
492 #else
493 #define _mm512_mask_shrdi_epi16(A, B, C, D, E) \
494 ((__m512i) __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(C), \
495 (__v32hi)(__m512i)(D), \
496 (int)(E), \
497 (__v32hi)(__m512i)(A), \
498 (__mmask32)(B)))
499 #define _mm512_maskz_shrdi_epi16(A, B, C, D) \
500 ((__m512i) \
501 __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(B), \
502 (__v32hi)(__m512i)(C),(int)(D), \
503 (__v32hi)(__m512i)_mm512_setzero_si512 (), \
504 (__mmask32)(A)))
505 #define _mm512_mask_shldi_epi16(A, B, C, D, E) \
506 ((__m512i) __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(C), \
507 (__v32hi)(__m512i)(D), \
508 (int)(E), \
509 (__v32hi)(__m512i)(A), \
510 (__mmask32)(B)))
511 #define _mm512_maskz_shldi_epi16(A, B, C, D) \
512 ((__m512i) \
513 __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(B), \
514 (__v32hi)(__m512i)(C),(int)(D), \
515 (__v32hi)(__m512i)_mm512_setzero_si512 (), \
516 (__mmask32)(A)))
517 #endif
518
519 extern __inline __m512i
520 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shrdv_epi16(__m512i __A,__mmask32 __B,__m512i __C,__m512i __D)521 _mm512_mask_shrdv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
522 {
523 return (__m512i)__builtin_ia32_vpshrdv_v32hi_mask ((__v32hi)__A,
524 (__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
525 }
526
527 extern __inline __m512i
528 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shrdv_epi16(__mmask32 __A,__m512i __B,__m512i __C,__m512i __D)529 _mm512_maskz_shrdv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
530 {
531 return (__m512i)__builtin_ia32_vpshrdv_v32hi_maskz ((__v32hi)__B,
532 (__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
533 }
534
535 extern __inline __m512i
536 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_mask_shldv_epi16(__m512i __A,__mmask32 __B,__m512i __C,__m512i __D)537 _mm512_mask_shldv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
538 {
539 return (__m512i)__builtin_ia32_vpshldv_v32hi_mask ((__v32hi)__A,
540 (__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
541 }
542
543 extern __inline __m512i
544 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm512_maskz_shldv_epi16(__mmask32 __A,__m512i __B,__m512i __C,__m512i __D)545 _mm512_maskz_shldv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
546 {
547 return (__m512i)__builtin_ia32_vpshldv_v32hi_maskz ((__v32hi)__B,
548 (__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
549 }
550
551 #ifdef __DISABLE_AVX512VBMI2BW__
552 #undef __DISABLE_AVX512VBMI2BW__
553
554 #pragma GCC pop_options
555 #endif /* __DISABLE_AVX512VBMI2BW__ */
556
557 #endif /* __AVX512VBMI2INTRIN_H_INCLUDED */
558