]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Headers/avx512bwintrin.h
MFV r331708:
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Headers / avx512bwintrin.h
1 /*===------------- avx512bwintrin.h - AVX512BW intrinsics ------------------===
2  *
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  *
22  *===-----------------------------------------------------------------------===
23  */
24 #ifndef __IMMINTRIN_H
25 #error "Never use <avx512bwintrin.h> directly; include <immintrin.h> instead."
26 #endif
27
28 #ifndef __AVX512BWINTRIN_H
29 #define __AVX512BWINTRIN_H
30
31 typedef unsigned int __mmask32;
32 typedef unsigned long long __mmask64;
33
34 /* Define the default attributes for the functions in this file. */
35 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bw")))
36
37 static  __inline __m512i __DEFAULT_FN_ATTRS
38 _mm512_setzero_qi(void) {
39   return (__m512i)(__v64qi){ 0, 0, 0, 0, 0, 0, 0, 0,
40                              0, 0, 0, 0, 0, 0, 0, 0,
41                              0, 0, 0, 0, 0, 0, 0, 0,
42                              0, 0, 0, 0, 0, 0, 0, 0,
43                              0, 0, 0, 0, 0, 0, 0, 0,
44                              0, 0, 0, 0, 0, 0, 0, 0,
45                              0, 0, 0, 0, 0, 0, 0, 0,
46                              0, 0, 0, 0, 0, 0, 0, 0 };
47 }
48
49 static  __inline __m512i __DEFAULT_FN_ATTRS
50 _mm512_setzero_hi(void) {
51   return (__m512i)(__v32hi){ 0, 0, 0, 0, 0, 0, 0, 0,
52                              0, 0, 0, 0, 0, 0, 0, 0,
53                              0, 0, 0, 0, 0, 0, 0, 0,
54                              0, 0, 0, 0, 0, 0, 0, 0 };
55 }
56
57 /* Integer compare */
58
59 #define _mm512_cmp_epi8_mask(a, b, p) __extension__ ({ \
60   (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \
61                                          (__v64qi)(__m512i)(b), (int)(p), \
62                                          (__mmask64)-1); })
63
64 #define _mm512_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \
65   (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \
66                                          (__v64qi)(__m512i)(b), (int)(p), \
67                                          (__mmask64)(m)); })
68
69 #define _mm512_cmp_epu8_mask(a, b, p) __extension__ ({ \
70   (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \
71                                           (__v64qi)(__m512i)(b), (int)(p), \
72                                           (__mmask64)-1); })
73
74 #define _mm512_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \
75   (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \
76                                           (__v64qi)(__m512i)(b), (int)(p), \
77                                           (__mmask64)(m)); })
78
79 #define _mm512_cmp_epi16_mask(a, b, p) __extension__ ({ \
80   (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \
81                                          (__v32hi)(__m512i)(b), (int)(p), \
82                                          (__mmask32)-1); })
83
84 #define _mm512_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \
85   (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \
86                                          (__v32hi)(__m512i)(b), (int)(p), \
87                                          (__mmask32)(m)); })
88
89 #define _mm512_cmp_epu16_mask(a, b, p) __extension__ ({ \
90   (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
91                                           (__v32hi)(__m512i)(b), (int)(p), \
92                                           (__mmask32)-1); })
93
94 #define _mm512_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \
95   (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
96                                           (__v32hi)(__m512i)(b), (int)(p), \
97                                           (__mmask32)(m)); })
98
99 #define _mm512_cmpeq_epi8_mask(A, B) \
100     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_EQ)
101 #define _mm512_mask_cmpeq_epi8_mask(k, A, B) \
102     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_EQ)
103 #define _mm512_cmpge_epi8_mask(A, B) \
104     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_GE)
105 #define _mm512_mask_cmpge_epi8_mask(k, A, B) \
106     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_GE)
107 #define _mm512_cmpgt_epi8_mask(A, B) \
108     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_GT)
109 #define _mm512_mask_cmpgt_epi8_mask(k, A, B) \
110     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_GT)
111 #define _mm512_cmple_epi8_mask(A, B) \
112     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_LE)
113 #define _mm512_mask_cmple_epi8_mask(k, A, B) \
114     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_LE)
115 #define _mm512_cmplt_epi8_mask(A, B) \
116     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_LT)
117 #define _mm512_mask_cmplt_epi8_mask(k, A, B) \
118     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_LT)
119 #define _mm512_cmpneq_epi8_mask(A, B) \
120     _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_NE)
121 #define _mm512_mask_cmpneq_epi8_mask(k, A, B) \
122     _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_NE)
123
124 #define _mm512_cmpeq_epu8_mask(A, B) \
125     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_EQ)
126 #define _mm512_mask_cmpeq_epu8_mask(k, A, B) \
127     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_EQ)
128 #define _mm512_cmpge_epu8_mask(A, B) \
129     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_GE)
130 #define _mm512_mask_cmpge_epu8_mask(k, A, B) \
131     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_GE)
132 #define _mm512_cmpgt_epu8_mask(A, B) \
133     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_GT)
134 #define _mm512_mask_cmpgt_epu8_mask(k, A, B) \
135     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_GT)
136 #define _mm512_cmple_epu8_mask(A, B) \
137     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_LE)
138 #define _mm512_mask_cmple_epu8_mask(k, A, B) \
139     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_LE)
140 #define _mm512_cmplt_epu8_mask(A, B) \
141     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_LT)
142 #define _mm512_mask_cmplt_epu8_mask(k, A, B) \
143     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_LT)
144 #define _mm512_cmpneq_epu8_mask(A, B) \
145     _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_NE)
146 #define _mm512_mask_cmpneq_epu8_mask(k, A, B) \
147     _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_NE)
148
149 #define _mm512_cmpeq_epi16_mask(A, B) \
150     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_EQ)
151 #define _mm512_mask_cmpeq_epi16_mask(k, A, B) \
152     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_EQ)
153 #define _mm512_cmpge_epi16_mask(A, B) \
154     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_GE)
155 #define _mm512_mask_cmpge_epi16_mask(k, A, B) \
156     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_GE)
157 #define _mm512_cmpgt_epi16_mask(A, B) \
158     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_GT)
159 #define _mm512_mask_cmpgt_epi16_mask(k, A, B) \
160     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_GT)
161 #define _mm512_cmple_epi16_mask(A, B) \
162     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_LE)
163 #define _mm512_mask_cmple_epi16_mask(k, A, B) \
164     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_LE)
165 #define _mm512_cmplt_epi16_mask(A, B) \
166     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_LT)
167 #define _mm512_mask_cmplt_epi16_mask(k, A, B) \
168     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_LT)
169 #define _mm512_cmpneq_epi16_mask(A, B) \
170     _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_NE)
171 #define _mm512_mask_cmpneq_epi16_mask(k, A, B) \
172     _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_NE)
173
174 #define _mm512_cmpeq_epu16_mask(A, B) \
175     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_EQ)
176 #define _mm512_mask_cmpeq_epu16_mask(k, A, B) \
177     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_EQ)
178 #define _mm512_cmpge_epu16_mask(A, B) \
179     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_GE)
180 #define _mm512_mask_cmpge_epu16_mask(k, A, B) \
181     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_GE)
182 #define _mm512_cmpgt_epu16_mask(A, B) \
183     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_GT)
184 #define _mm512_mask_cmpgt_epu16_mask(k, A, B) \
185     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_GT)
186 #define _mm512_cmple_epu16_mask(A, B) \
187     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LE)
188 #define _mm512_mask_cmple_epu16_mask(k, A, B) \
189     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_LE)
190 #define _mm512_cmplt_epu16_mask(A, B) \
191     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LT)
192 #define _mm512_mask_cmplt_epu16_mask(k, A, B) \
193     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_LT)
194 #define _mm512_cmpneq_epu16_mask(A, B) \
195     _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_NE)
196 #define _mm512_mask_cmpneq_epu16_mask(k, A, B) \
197     _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_NE)
198
199 static __inline__ __m512i __DEFAULT_FN_ATTRS
200 _mm512_add_epi8 (__m512i __A, __m512i __B) {
201   return (__m512i) ((__v64qu) __A + (__v64qu) __B);
202 }
203
204 static __inline__ __m512i __DEFAULT_FN_ATTRS
205 _mm512_mask_add_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
206   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
207                                              (__v64qi)_mm512_add_epi8(__A, __B),
208                                              (__v64qi)__W);
209 }
210
211 static __inline__ __m512i __DEFAULT_FN_ATTRS
212 _mm512_maskz_add_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
213   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
214                                              (__v64qi)_mm512_add_epi8(__A, __B),
215                                              (__v64qi)_mm512_setzero_qi());
216 }
217
218 static __inline__ __m512i __DEFAULT_FN_ATTRS
219 _mm512_sub_epi8 (__m512i __A, __m512i __B) {
220   return (__m512i) ((__v64qu) __A - (__v64qu) __B);
221 }
222
223 static __inline__ __m512i __DEFAULT_FN_ATTRS
224 _mm512_mask_sub_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
225   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
226                                              (__v64qi)_mm512_sub_epi8(__A, __B),
227                                              (__v64qi)__W);
228 }
229
230 static __inline__ __m512i __DEFAULT_FN_ATTRS
231 _mm512_maskz_sub_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
232   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
233                                              (__v64qi)_mm512_sub_epi8(__A, __B),
234                                              (__v64qi)_mm512_setzero_qi());
235 }
236
237 static __inline__ __m512i __DEFAULT_FN_ATTRS
238 _mm512_add_epi16 (__m512i __A, __m512i __B) {
239   return (__m512i) ((__v32hu) __A + (__v32hu) __B);
240 }
241
242 static __inline__ __m512i __DEFAULT_FN_ATTRS
243 _mm512_mask_add_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
244   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
245                                              (__v32hi)_mm512_add_epi16(__A, __B),
246                                              (__v32hi)__W);
247 }
248
249 static __inline__ __m512i __DEFAULT_FN_ATTRS
250 _mm512_maskz_add_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
251   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
252                                              (__v32hi)_mm512_add_epi16(__A, __B),
253                                              (__v32hi)_mm512_setzero_hi());
254 }
255
256 static __inline__ __m512i __DEFAULT_FN_ATTRS
257 _mm512_sub_epi16 (__m512i __A, __m512i __B) {
258   return (__m512i) ((__v32hu) __A - (__v32hu) __B);
259 }
260
261 static __inline__ __m512i __DEFAULT_FN_ATTRS
262 _mm512_mask_sub_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
263   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
264                                              (__v32hi)_mm512_sub_epi16(__A, __B),
265                                              (__v32hi)__W);
266 }
267
268 static __inline__ __m512i __DEFAULT_FN_ATTRS
269 _mm512_maskz_sub_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
270   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
271                                              (__v32hi)_mm512_sub_epi16(__A, __B),
272                                              (__v32hi)_mm512_setzero_hi());
273 }
274
275 static __inline__ __m512i __DEFAULT_FN_ATTRS
276 _mm512_mullo_epi16 (__m512i __A, __m512i __B) {
277   return (__m512i) ((__v32hu) __A * (__v32hu) __B);
278 }
279
280 static __inline__ __m512i __DEFAULT_FN_ATTRS
281 _mm512_mask_mullo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
282   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
283                                              (__v32hi)_mm512_mullo_epi16(__A, __B),
284                                              (__v32hi)__W);
285 }
286
287 static __inline__ __m512i __DEFAULT_FN_ATTRS
288 _mm512_maskz_mullo_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
289   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
290                                              (__v32hi)_mm512_mullo_epi16(__A, __B),
291                                              (__v32hi)_mm512_setzero_hi());
292 }
293
294 static __inline__ __m512i __DEFAULT_FN_ATTRS
295 _mm512_mask_blend_epi8 (__mmask64 __U, __m512i __A, __m512i __W)
296 {
297   return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U,
298               (__v64qi) __W,
299               (__v64qi) __A);
300 }
301
302 static __inline__ __m512i __DEFAULT_FN_ATTRS
303 _mm512_mask_blend_epi16 (__mmask32 __U, __m512i __A, __m512i __W)
304 {
305   return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U,
306               (__v32hi) __W,
307               (__v32hi) __A);
308 }
309
310 static __inline__ __m512i __DEFAULT_FN_ATTRS
311 _mm512_abs_epi8 (__m512i __A)
312 {
313   return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
314               (__v64qi) _mm512_setzero_qi(),
315               (__mmask64) -1);
316 }
317
318 static __inline__ __m512i __DEFAULT_FN_ATTRS
319 _mm512_mask_abs_epi8 (__m512i __W, __mmask64 __U, __m512i __A)
320 {
321   return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
322               (__v64qi) __W,
323               (__mmask64) __U);
324 }
325
326 static __inline__ __m512i __DEFAULT_FN_ATTRS
327 _mm512_maskz_abs_epi8 (__mmask64 __U, __m512i __A)
328 {
329   return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
330               (__v64qi) _mm512_setzero_qi(),
331               (__mmask64) __U);
332 }
333
334 static __inline__ __m512i __DEFAULT_FN_ATTRS
335 _mm512_abs_epi16 (__m512i __A)
336 {
337   return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
338               (__v32hi) _mm512_setzero_hi(),
339               (__mmask32) -1);
340 }
341
342 static __inline__ __m512i __DEFAULT_FN_ATTRS
343 _mm512_mask_abs_epi16 (__m512i __W, __mmask32 __U, __m512i __A)
344 {
345   return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
346               (__v32hi) __W,
347               (__mmask32) __U);
348 }
349
350 static __inline__ __m512i __DEFAULT_FN_ATTRS
351 _mm512_maskz_abs_epi16 (__mmask32 __U, __m512i __A)
352 {
353   return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
354               (__v32hi) _mm512_setzero_hi(),
355               (__mmask32) __U);
356 }
357
358 static __inline__ __m512i __DEFAULT_FN_ATTRS
359 _mm512_packs_epi32(__m512i __A, __m512i __B)
360 {
361   return (__m512i)__builtin_ia32_packssdw512((__v16si)__A, (__v16si)__B);
362 }
363
364 static __inline__ __m512i __DEFAULT_FN_ATTRS
365 _mm512_maskz_packs_epi32(__mmask32 __M, __m512i __A, __m512i __B)
366 {
367   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
368                                        (__v32hi)_mm512_packs_epi32(__A, __B),
369                                        (__v32hi)_mm512_setzero_hi());
370 }
371
372 static __inline__ __m512i __DEFAULT_FN_ATTRS
373 _mm512_mask_packs_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
374 {
375   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
376                                        (__v32hi)_mm512_packs_epi32(__A, __B),
377                                        (__v32hi)__W);
378 }
379
380 static __inline__ __m512i __DEFAULT_FN_ATTRS
381 _mm512_packs_epi16(__m512i __A, __m512i __B)
382 {
383   return (__m512i)__builtin_ia32_packsswb512((__v32hi)__A, (__v32hi) __B);
384 }
385
386 static __inline__ __m512i __DEFAULT_FN_ATTRS
387 _mm512_mask_packs_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
388 {
389   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
390                                         (__v64qi)_mm512_packs_epi16(__A, __B),
391                                         (__v64qi)__W);
392 }
393
394 static __inline__ __m512i __DEFAULT_FN_ATTRS
395 _mm512_maskz_packs_epi16(__mmask64 __M, __m512i __A, __m512i __B)
396 {
397   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
398                                         (__v64qi)_mm512_packs_epi16(__A, __B),
399                                         (__v64qi)_mm512_setzero_qi());
400 }
401
402 static __inline__ __m512i __DEFAULT_FN_ATTRS
403 _mm512_packus_epi32(__m512i __A, __m512i __B)
404 {
405   return (__m512i)__builtin_ia32_packusdw512((__v16si) __A, (__v16si) __B);
406 }
407
408 static __inline__ __m512i __DEFAULT_FN_ATTRS
409 _mm512_maskz_packus_epi32(__mmask32 __M, __m512i __A, __m512i __B)
410 {
411   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
412                                        (__v32hi)_mm512_packus_epi32(__A, __B),
413                                        (__v32hi)_mm512_setzero_hi());
414 }
415
416 static __inline__ __m512i __DEFAULT_FN_ATTRS
417 _mm512_mask_packus_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
418 {
419   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
420                                        (__v32hi)_mm512_packus_epi32(__A, __B),
421                                        (__v32hi)__W);
422 }
423
424 static __inline__ __m512i __DEFAULT_FN_ATTRS
425 _mm512_packus_epi16(__m512i __A, __m512i __B)
426 {
427   return (__m512i)__builtin_ia32_packuswb512((__v32hi) __A, (__v32hi) __B);
428 }
429
430 static __inline__ __m512i __DEFAULT_FN_ATTRS
431 _mm512_mask_packus_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
432 {
433   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
434                                         (__v64qi)_mm512_packus_epi16(__A, __B),
435                                         (__v64qi)__W);
436 }
437
438 static __inline__ __m512i __DEFAULT_FN_ATTRS
439 _mm512_maskz_packus_epi16(__mmask64 __M, __m512i __A, __m512i __B)
440 {
441   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
442                                         (__v64qi)_mm512_packus_epi16(__A, __B),
443                                         (__v64qi)_mm512_setzero_qi());
444 }
445
446 static __inline__ __m512i __DEFAULT_FN_ATTRS
447 _mm512_adds_epi8 (__m512i __A, __m512i __B)
448 {
449   return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
450               (__v64qi) __B,
451               (__v64qi) _mm512_setzero_qi(),
452               (__mmask64) -1);
453 }
454
455 static __inline__ __m512i __DEFAULT_FN_ATTRS
456 _mm512_mask_adds_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
457            __m512i __B)
458 {
459   return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
460               (__v64qi) __B,
461               (__v64qi) __W,
462               (__mmask64) __U);
463 }
464
465 static __inline__ __m512i __DEFAULT_FN_ATTRS
466 _mm512_maskz_adds_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
467 {
468   return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
469               (__v64qi) __B,
470               (__v64qi) _mm512_setzero_qi(),
471               (__mmask64) __U);
472 }
473
474 static __inline__ __m512i __DEFAULT_FN_ATTRS
475 _mm512_adds_epi16 (__m512i __A, __m512i __B)
476 {
477   return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
478               (__v32hi) __B,
479               (__v32hi) _mm512_setzero_hi(),
480               (__mmask32) -1);
481 }
482
483 static __inline__ __m512i __DEFAULT_FN_ATTRS
484 _mm512_mask_adds_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
485       __m512i __B)
486 {
487   return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
488               (__v32hi) __B,
489               (__v32hi) __W,
490               (__mmask32) __U);
491 }
492
493 static __inline__ __m512i __DEFAULT_FN_ATTRS
494 _mm512_maskz_adds_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
495 {
496   return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
497               (__v32hi) __B,
498               (__v32hi) _mm512_setzero_hi(),
499               (__mmask32) __U);
500 }
501
502 static __inline__ __m512i __DEFAULT_FN_ATTRS
503 _mm512_adds_epu8 (__m512i __A, __m512i __B)
504 {
505   return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
506               (__v64qi) __B,
507               (__v64qi) _mm512_setzero_qi(),
508               (__mmask64) -1);
509 }
510
511 static __inline__ __m512i __DEFAULT_FN_ATTRS
512 _mm512_mask_adds_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
513            __m512i __B)
514 {
515   return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
516               (__v64qi) __B,
517               (__v64qi) __W,
518               (__mmask64) __U);
519 }
520
521 static __inline__ __m512i __DEFAULT_FN_ATTRS
522 _mm512_maskz_adds_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
523 {
524   return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
525               (__v64qi) __B,
526               (__v64qi) _mm512_setzero_qi(),
527               (__mmask64) __U);
528 }
529
530 static __inline__ __m512i __DEFAULT_FN_ATTRS
531 _mm512_adds_epu16 (__m512i __A, __m512i __B)
532 {
533   return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
534               (__v32hi) __B,
535               (__v32hi) _mm512_setzero_hi(),
536               (__mmask32) -1);
537 }
538
539 static __inline__ __m512i __DEFAULT_FN_ATTRS
540 _mm512_mask_adds_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
541       __m512i __B)
542 {
543   return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
544               (__v32hi) __B,
545               (__v32hi) __W,
546               (__mmask32) __U);
547 }
548
549 static __inline__ __m512i __DEFAULT_FN_ATTRS
550 _mm512_maskz_adds_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
551 {
552   return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
553               (__v32hi) __B,
554               (__v32hi) _mm512_setzero_hi(),
555               (__mmask32) __U);
556 }
557
558 static __inline__ __m512i __DEFAULT_FN_ATTRS
559 _mm512_avg_epu8 (__m512i __A, __m512i __B)
560 {
561   typedef unsigned short __v64hu __attribute__((__vector_size__(128)));
562   return (__m512i)__builtin_convertvector(
563               ((__builtin_convertvector((__v64qu) __A, __v64hu) +
564                 __builtin_convertvector((__v64qu) __B, __v64hu)) + 1)
565                 >> 1, __v64qu);
566 }
567
568 static __inline__ __m512i __DEFAULT_FN_ATTRS
569 _mm512_mask_avg_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
570           __m512i __B)
571 {
572   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
573               (__v64qi)_mm512_avg_epu8(__A, __B),
574               (__v64qi)__W);
575 }
576
577 static __inline__ __m512i __DEFAULT_FN_ATTRS
578 _mm512_maskz_avg_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
579 {
580   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
581               (__v64qi)_mm512_avg_epu8(__A, __B),
582               (__v64qi)_mm512_setzero_qi());
583 }
584
585 static __inline__ __m512i __DEFAULT_FN_ATTRS
586 _mm512_avg_epu16 (__m512i __A, __m512i __B)
587 {
588   typedef unsigned int __v32su __attribute__((__vector_size__(128)));
589   return (__m512i)__builtin_convertvector(
590               ((__builtin_convertvector((__v32hu) __A, __v32su) +
591                 __builtin_convertvector((__v32hu) __B, __v32su)) + 1)
592                 >> 1, __v32hu);
593 }
594
595 static __inline__ __m512i __DEFAULT_FN_ATTRS
596 _mm512_mask_avg_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
597            __m512i __B)
598 {
599   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
600               (__v32hi)_mm512_avg_epu16(__A, __B),
601               (__v32hi)__W);
602 }
603
604 static __inline__ __m512i __DEFAULT_FN_ATTRS
605 _mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
606 {
607   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
608               (__v32hi)_mm512_avg_epu16(__A, __B),
609               (__v32hi) _mm512_setzero_hi());
610 }
611
612 static __inline__ __m512i __DEFAULT_FN_ATTRS
613 _mm512_max_epi8 (__m512i __A, __m512i __B)
614 {
615   return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
616               (__v64qi) __B,
617               (__v64qi) _mm512_setzero_qi(),
618               (__mmask64) -1);
619 }
620
621 static __inline__ __m512i __DEFAULT_FN_ATTRS
622 _mm512_maskz_max_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
623 {
624   return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
625               (__v64qi) __B,
626               (__v64qi) _mm512_setzero_qi(),
627               (__mmask64) __M);
628 }
629
630 static __inline__ __m512i __DEFAULT_FN_ATTRS
631 _mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
632           __m512i __B)
633 {
634   return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
635               (__v64qi) __B,
636               (__v64qi) __W,
637               (__mmask64) __M);
638 }
639
640 static __inline__ __m512i __DEFAULT_FN_ATTRS
641 _mm512_max_epi16 (__m512i __A, __m512i __B)
642 {
643   return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
644               (__v32hi) __B,
645               (__v32hi) _mm512_setzero_hi(),
646               (__mmask32) -1);
647 }
648
649 static __inline__ __m512i __DEFAULT_FN_ATTRS
650 _mm512_maskz_max_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
651 {
652   return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
653               (__v32hi) __B,
654               (__v32hi) _mm512_setzero_hi(),
655               (__mmask32) __M);
656 }
657
658 static __inline__ __m512i __DEFAULT_FN_ATTRS
659 _mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
660            __m512i __B)
661 {
662   return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
663               (__v32hi) __B,
664               (__v32hi) __W,
665               (__mmask32) __M);
666 }
667
668 static __inline__ __m512i __DEFAULT_FN_ATTRS
669 _mm512_max_epu8 (__m512i __A, __m512i __B)
670 {
671   return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
672               (__v64qi) __B,
673               (__v64qi) _mm512_setzero_qi(),
674               (__mmask64) -1);
675 }
676
677 static __inline__ __m512i __DEFAULT_FN_ATTRS
678 _mm512_maskz_max_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
679 {
680   return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
681               (__v64qi) __B,
682               (__v64qi) _mm512_setzero_qi(),
683               (__mmask64) __M);
684 }
685
686 static __inline__ __m512i __DEFAULT_FN_ATTRS
687 _mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A,
688           __m512i __B)
689 {
690   return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
691               (__v64qi) __B,
692               (__v64qi) __W,
693               (__mmask64) __M);
694 }
695
696 static __inline__ __m512i __DEFAULT_FN_ATTRS
697 _mm512_max_epu16 (__m512i __A, __m512i __B)
698 {
699   return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
700               (__v32hi) __B,
701               (__v32hi) _mm512_setzero_hi(),
702               (__mmask32) -1);
703 }
704
705 static __inline__ __m512i __DEFAULT_FN_ATTRS
706 _mm512_maskz_max_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
707 {
708   return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
709               (__v32hi) __B,
710               (__v32hi) _mm512_setzero_hi(),
711               (__mmask32) __M);
712 }
713
714 static __inline__ __m512i __DEFAULT_FN_ATTRS
715 _mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A,
716            __m512i __B)
717 {
718   return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
719               (__v32hi) __B,
720               (__v32hi) __W,
721               (__mmask32) __M);
722 }
723
724 static __inline__ __m512i __DEFAULT_FN_ATTRS
725 _mm512_min_epi8 (__m512i __A, __m512i __B)
726 {
727   return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
728               (__v64qi) __B,
729               (__v64qi) _mm512_setzero_qi(),
730               (__mmask64) -1);
731 }
732
733 static __inline__ __m512i __DEFAULT_FN_ATTRS
734 _mm512_maskz_min_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
735 {
736   return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
737               (__v64qi) __B,
738               (__v64qi) _mm512_setzero_qi(),
739               (__mmask64) __M);
740 }
741
742 static __inline__ __m512i __DEFAULT_FN_ATTRS
743 _mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
744           __m512i __B)
745 {
746   return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
747               (__v64qi) __B,
748               (__v64qi) __W,
749               (__mmask64) __M);
750 }
751
752 static __inline__ __m512i __DEFAULT_FN_ATTRS
753 _mm512_min_epi16 (__m512i __A, __m512i __B)
754 {
755   return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
756               (__v32hi) __B,
757               (__v32hi) _mm512_setzero_hi(),
758               (__mmask32) -1);
759 }
760
761 static __inline__ __m512i __DEFAULT_FN_ATTRS
762 _mm512_maskz_min_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
763 {
764   return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
765               (__v32hi) __B,
766               (__v32hi) _mm512_setzero_hi(),
767               (__mmask32) __M);
768 }
769
770 static __inline__ __m512i __DEFAULT_FN_ATTRS
771 _mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
772            __m512i __B)
773 {
774   return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
775               (__v32hi) __B,
776               (__v32hi) __W,
777               (__mmask32) __M);
778 }
779
780 static __inline__ __m512i __DEFAULT_FN_ATTRS
781 _mm512_min_epu8 (__m512i __A, __m512i __B)
782 {
783   return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
784               (__v64qi) __B,
785               (__v64qi) _mm512_setzero_qi(),
786               (__mmask64) -1);
787 }
788
789 static __inline__ __m512i __DEFAULT_FN_ATTRS
790 _mm512_maskz_min_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
791 {
792   return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
793               (__v64qi) __B,
794               (__v64qi) _mm512_setzero_qi(),
795               (__mmask64) __M);
796 }
797
798 static __inline__ __m512i __DEFAULT_FN_ATTRS
799 _mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A,
800           __m512i __B)
801 {
802   return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
803               (__v64qi) __B,
804               (__v64qi) __W,
805               (__mmask64) __M);
806 }
807
808 static __inline__ __m512i __DEFAULT_FN_ATTRS
809 _mm512_min_epu16 (__m512i __A, __m512i __B)
810 {
811   return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
812               (__v32hi) __B,
813               (__v32hi) _mm512_setzero_hi(),
814               (__mmask32) -1);
815 }
816
817 static __inline__ __m512i __DEFAULT_FN_ATTRS
818 _mm512_maskz_min_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
819 {
820   return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
821               (__v32hi) __B,
822               (__v32hi) _mm512_setzero_hi(),
823               (__mmask32) __M);
824 }
825
826 static __inline__ __m512i __DEFAULT_FN_ATTRS
827 _mm512_mask_min_epu16 (__m512i __W, __mmask32 __M, __m512i __A,
828            __m512i __B)
829 {
830   return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
831               (__v32hi) __B,
832               (__v32hi) __W,
833               (__mmask32) __M);
834 }
835
836 static __inline__ __m512i __DEFAULT_FN_ATTRS
837 _mm512_shuffle_epi8(__m512i __A, __m512i __B)
838 {
839   return (__m512i)__builtin_ia32_pshufb512((__v64qi)__A,(__v64qi)__B);
840 }
841
842 static __inline__ __m512i __DEFAULT_FN_ATTRS
843 _mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B)
844 {
845   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
846                                          (__v64qi)_mm512_shuffle_epi8(__A, __B),
847                                          (__v64qi)__W);
848 }
849
850 static __inline__ __m512i __DEFAULT_FN_ATTRS
851 _mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B)
852 {
853   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
854                                          (__v64qi)_mm512_shuffle_epi8(__A, __B),
855                                          (__v64qi)_mm512_setzero_qi());
856 }
857
858 static __inline__ __m512i __DEFAULT_FN_ATTRS
859 _mm512_subs_epi8 (__m512i __A, __m512i __B)
860 {
861   return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
862               (__v64qi) __B,
863               (__v64qi) _mm512_setzero_qi(),
864               (__mmask64) -1);
865 }
866
867 static __inline__ __m512i __DEFAULT_FN_ATTRS
868 _mm512_mask_subs_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
869            __m512i __B)
870 {
871   return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
872               (__v64qi) __B,
873               (__v64qi) __W,
874               (__mmask64) __U);
875 }
876
877 static __inline__ __m512i __DEFAULT_FN_ATTRS
878 _mm512_maskz_subs_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
879 {
880   return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
881               (__v64qi) __B,
882               (__v64qi) _mm512_setzero_qi(),
883               (__mmask64) __U);
884 }
885
886 static __inline__ __m512i __DEFAULT_FN_ATTRS
887 _mm512_subs_epi16 (__m512i __A, __m512i __B)
888 {
889   return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
890               (__v32hi) __B,
891               (__v32hi) _mm512_setzero_hi(),
892               (__mmask32) -1);
893 }
894
895 static __inline__ __m512i __DEFAULT_FN_ATTRS
896 _mm512_mask_subs_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
897       __m512i __B)
898 {
899   return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
900               (__v32hi) __B,
901               (__v32hi) __W,
902               (__mmask32) __U);
903 }
904
905 static __inline__ __m512i __DEFAULT_FN_ATTRS
906 _mm512_maskz_subs_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
907 {
908   return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
909               (__v32hi) __B,
910               (__v32hi) _mm512_setzero_hi(),
911               (__mmask32) __U);
912 }
913
914 static __inline__ __m512i __DEFAULT_FN_ATTRS
915 _mm512_subs_epu8 (__m512i __A, __m512i __B)
916 {
917   return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
918               (__v64qi) __B,
919               (__v64qi) _mm512_setzero_qi(),
920               (__mmask64) -1);
921 }
922
923 static __inline__ __m512i __DEFAULT_FN_ATTRS
924 _mm512_mask_subs_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
925            __m512i __B)
926 {
927   return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
928               (__v64qi) __B,
929               (__v64qi) __W,
930               (__mmask64) __U);
931 }
932
933 static __inline__ __m512i __DEFAULT_FN_ATTRS
934 _mm512_maskz_subs_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
935 {
936   return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
937               (__v64qi) __B,
938               (__v64qi) _mm512_setzero_qi(),
939               (__mmask64) __U);
940 }
941
942 static __inline__ __m512i __DEFAULT_FN_ATTRS
943 _mm512_subs_epu16 (__m512i __A, __m512i __B)
944 {
945   return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
946               (__v32hi) __B,
947               (__v32hi) _mm512_setzero_hi(),
948               (__mmask32) -1);
949 }
950
951 static __inline__ __m512i __DEFAULT_FN_ATTRS
952 _mm512_mask_subs_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
953       __m512i __B)
954 {
955   return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
956               (__v32hi) __B,
957               (__v32hi) __W,
958               (__mmask32) __U);
959 }
960
961 static __inline__ __m512i __DEFAULT_FN_ATTRS
962 _mm512_maskz_subs_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
963 {
964   return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
965               (__v32hi) __B,
966               (__v32hi) _mm512_setzero_hi(),
967               (__mmask32) __U);
968 }
969
970 static __inline__ __m512i __DEFAULT_FN_ATTRS
971 _mm512_mask2_permutex2var_epi16 (__m512i __A, __m512i __I,
972          __mmask32 __U, __m512i __B)
973 {
974   return (__m512i) __builtin_ia32_vpermi2varhi512_mask ((__v32hi) __A,
975               (__v32hi) __I /* idx */ ,
976               (__v32hi) __B,
977               (__mmask32) __U);
978 }
979
980 static __inline__ __m512i __DEFAULT_FN_ATTRS
981 _mm512_permutex2var_epi16 (__m512i __A, __m512i __I, __m512i __B)
982 {
983   return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */,
984               (__v32hi) __A,
985               (__v32hi) __B,
986               (__mmask32) -1);
987 }
988
989 static __inline__ __m512i __DEFAULT_FN_ATTRS
990 _mm512_mask_permutex2var_epi16 (__m512i __A, __mmask32 __U,
991         __m512i __I, __m512i __B)
992 {
993   return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */,
994               (__v32hi) __A,
995               (__v32hi) __B,
996               (__mmask32) __U);
997 }
998
999 static __inline__ __m512i __DEFAULT_FN_ATTRS
1000 _mm512_maskz_permutex2var_epi16 (__mmask32 __U, __m512i __A,
1001          __m512i __I, __m512i __B)
1002 {
1003   return (__m512i) __builtin_ia32_vpermt2varhi512_maskz ((__v32hi) __I
1004               /* idx */ ,
1005               (__v32hi) __A,
1006               (__v32hi) __B,
1007               (__mmask32) __U);
1008 }
1009
1010 static __inline__ __m512i __DEFAULT_FN_ATTRS
1011 _mm512_mulhrs_epi16 (__m512i __A, __m512i __B)
1012 {
1013   return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
1014                 (__v32hi) __B,
1015                 (__v32hi) _mm512_setzero_hi(),
1016                 (__mmask32) -1);
1017 }
1018
1019 static __inline__ __m512i __DEFAULT_FN_ATTRS
1020 _mm512_mask_mulhrs_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
1021         __m512i __B)
1022 {
1023   return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
1024                 (__v32hi) __B,
1025                 (__v32hi) __W,
1026                 (__mmask32) __U);
1027 }
1028
1029 static __inline__ __m512i __DEFAULT_FN_ATTRS
1030 _mm512_maskz_mulhrs_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
1031 {
1032   return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
1033                 (__v32hi) __B,
1034                 (__v32hi) _mm512_setzero_hi(),
1035                 (__mmask32) __U);
1036 }
1037
1038 static __inline__ __m512i __DEFAULT_FN_ATTRS
1039 _mm512_mulhi_epi16 (__m512i __A, __m512i __B)
1040 {
1041   return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
1042               (__v32hi) __B,
1043               (__v32hi) _mm512_setzero_hi(),
1044               (__mmask32) -1);
1045 }
1046
1047 static __inline__ __m512i __DEFAULT_FN_ATTRS
1048 _mm512_mask_mulhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
1049        __m512i __B)
1050 {
1051   return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
1052               (__v32hi) __B,
1053               (__v32hi) __W,
1054               (__mmask32) __U);
1055 }
1056
1057 static __inline__ __m512i __DEFAULT_FN_ATTRS
1058 _mm512_maskz_mulhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
1059 {
1060   return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
1061               (__v32hi) __B,
1062               (__v32hi) _mm512_setzero_hi(),
1063               (__mmask32) __U);
1064 }
1065
1066 static __inline__ __m512i __DEFAULT_FN_ATTRS
1067 _mm512_mulhi_epu16 (__m512i __A, __m512i __B)
1068 {
1069   return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
1070                (__v32hi) __B,
1071                (__v32hi) _mm512_setzero_hi(),
1072                (__mmask32) -1);
1073 }
1074
1075 static __inline__ __m512i __DEFAULT_FN_ATTRS
1076 _mm512_mask_mulhi_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
1077        __m512i __B)
1078 {
1079   return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
1080                (__v32hi) __B,
1081                (__v32hi) __W,
1082                (__mmask32) __U);
1083 }
1084
1085 static __inline__ __m512i __DEFAULT_FN_ATTRS
1086 _mm512_maskz_mulhi_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
1087 {
1088   return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
1089                (__v32hi) __B,
1090                (__v32hi) _mm512_setzero_hi(),
1091                (__mmask32) __U);
1092 }
1093
1094 static __inline__ __m512i __DEFAULT_FN_ATTRS
1095 _mm512_maddubs_epi16 (__m512i __X, __m512i __Y) {
1096   return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
1097                  (__v64qi) __Y,
1098                  (__v32hi) _mm512_setzero_hi(),
1099                  (__mmask32) -1);
1100 }
1101
1102 static __inline__ __m512i __DEFAULT_FN_ATTRS
1103 _mm512_mask_maddubs_epi16 (__m512i __W, __mmask32 __U, __m512i __X,
1104          __m512i __Y) {
1105   return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
1106                  (__v64qi) __Y,
1107                  (__v32hi) __W,
1108                  (__mmask32) __U);
1109 }
1110
1111 static __inline__ __m512i __DEFAULT_FN_ATTRS
1112 _mm512_maskz_maddubs_epi16 (__mmask32 __U, __m512i __X, __m512i __Y) {
1113   return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
1114                  (__v64qi) __Y,
1115                  (__v32hi) _mm512_setzero_hi(),
1116                  (__mmask32) __U);
1117 }
1118
1119 static __inline__ __m512i __DEFAULT_FN_ATTRS
1120 _mm512_madd_epi16 (__m512i __A, __m512i __B) {
1121   return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
1122                (__v32hi) __B,
1123                (__v16si) _mm512_setzero_si512(),
1124                (__mmask16) -1);
1125 }
1126
1127 static __inline__ __m512i __DEFAULT_FN_ATTRS
1128 _mm512_mask_madd_epi16 (__m512i __W, __mmask16 __U, __m512i __A,
1129       __m512i __B) {
1130   return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
1131                (__v32hi) __B,
1132                (__v16si) __W,
1133                (__mmask16) __U);
1134 }
1135
1136 static __inline__ __m512i __DEFAULT_FN_ATTRS
1137 _mm512_maskz_madd_epi16 (__mmask16 __U, __m512i __A, __m512i __B) {
1138   return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
1139                (__v32hi) __B,
1140                (__v16si) _mm512_setzero_si512(),
1141                (__mmask16) __U);
1142 }
1143
1144 static __inline__ __m256i __DEFAULT_FN_ATTRS
1145 _mm512_cvtsepi16_epi8 (__m512i __A) {
1146   return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
1147                (__v32qi)_mm256_setzero_si256(),
1148                (__mmask32) -1);
1149 }
1150
1151 static __inline__ __m256i __DEFAULT_FN_ATTRS
1152 _mm512_mask_cvtsepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) {
1153   return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
1154                (__v32qi)__O,
1155                __M);
1156 }
1157
1158 static __inline__ __m256i __DEFAULT_FN_ATTRS
1159 _mm512_maskz_cvtsepi16_epi8 (__mmask32 __M, __m512i __A) {
1160   return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
1161                (__v32qi) _mm256_setzero_si256(),
1162                __M);
1163 }
1164
1165 static __inline__ __m256i __DEFAULT_FN_ATTRS
1166 _mm512_cvtusepi16_epi8 (__m512i __A) {
1167   return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
1168                 (__v32qi) _mm256_setzero_si256(),
1169                 (__mmask32) -1);
1170 }
1171
1172 static __inline__ __m256i __DEFAULT_FN_ATTRS
1173 _mm512_mask_cvtusepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) {
1174   return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
1175                 (__v32qi) __O,
1176                 __M);
1177 }
1178
1179 static __inline__ __m256i __DEFAULT_FN_ATTRS
1180 _mm512_maskz_cvtusepi16_epi8 (__mmask32 __M, __m512i __A) {
1181   return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
1182                 (__v32qi) _mm256_setzero_si256(),
1183                 __M);
1184 }
1185
1186 static __inline__ __m256i __DEFAULT_FN_ATTRS
1187 _mm512_cvtepi16_epi8 (__m512i __A) {
1188   return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
1189               (__v32qi) _mm256_setzero_si256(),
1190               (__mmask32) -1);
1191 }
1192
1193 static __inline__ __m256i __DEFAULT_FN_ATTRS
1194 _mm512_mask_cvtepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) {
1195   return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
1196               (__v32qi) __O,
1197               __M);
1198 }
1199
1200 static __inline__ __m256i __DEFAULT_FN_ATTRS
1201 _mm512_maskz_cvtepi16_epi8 (__mmask32 __M, __m512i __A) {
1202   return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
1203               (__v32qi) _mm256_setzero_si256(),
1204               __M);
1205 }
1206
1207 static __inline__ void __DEFAULT_FN_ATTRS
1208 _mm512_mask_cvtepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
1209 {
1210   __builtin_ia32_pmovwb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
1211 }
1212
1213 static __inline__ void __DEFAULT_FN_ATTRS
1214 _mm512_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
1215 {
1216   __builtin_ia32_pmovswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
1217 }
1218
1219 static __inline__ void __DEFAULT_FN_ATTRS
1220 _mm512_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
1221 {
1222   __builtin_ia32_pmovuswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
1223 }
1224
1225 static __inline__ __m512i __DEFAULT_FN_ATTRS
1226 _mm512_unpackhi_epi8(__m512i __A, __m512i __B) {
1227   return (__m512i)__builtin_shufflevector((__v64qi)__A, (__v64qi)__B,
1228                                           8,  64+8,   9, 64+9,
1229                                           10, 64+10, 11, 64+11,
1230                                           12, 64+12, 13, 64+13,
1231                                           14, 64+14, 15, 64+15,
1232                                           24, 64+24, 25, 64+25,
1233                                           26, 64+26, 27, 64+27,
1234                                           28, 64+28, 29, 64+29,
1235                                           30, 64+30, 31, 64+31,
1236                                           40, 64+40, 41, 64+41,
1237                                           42, 64+42, 43, 64+43,
1238                                           44, 64+44, 45, 64+45,
1239                                           46, 64+46, 47, 64+47,
1240                                           56, 64+56, 57, 64+57,
1241                                           58, 64+58, 59, 64+59,
1242                                           60, 64+60, 61, 64+61,
1243                                           62, 64+62, 63, 64+63);
1244 }
1245
1246 static __inline__ __m512i __DEFAULT_FN_ATTRS
1247 _mm512_mask_unpackhi_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1248   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
1249                                         (__v64qi)_mm512_unpackhi_epi8(__A, __B),
1250                                         (__v64qi)__W);
1251 }
1252
1253 static __inline__ __m512i __DEFAULT_FN_ATTRS
1254 _mm512_maskz_unpackhi_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1255   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
1256                                         (__v64qi)_mm512_unpackhi_epi8(__A, __B),
1257                                         (__v64qi)_mm512_setzero_qi());
1258 }
1259
1260 static __inline__ __m512i __DEFAULT_FN_ATTRS
1261 _mm512_unpackhi_epi16(__m512i __A, __m512i __B) {
1262   return (__m512i)__builtin_shufflevector((__v32hi)__A, (__v32hi)__B,
1263                                           4,  32+4,   5, 32+5,
1264                                           6,  32+6,   7, 32+7,
1265                                           12, 32+12, 13, 32+13,
1266                                           14, 32+14, 15, 32+15,
1267                                           20, 32+20, 21, 32+21,
1268                                           22, 32+22, 23, 32+23,
1269                                           28, 32+28, 29, 32+29,
1270                                           30, 32+30, 31, 32+31);
1271 }
1272
1273 static __inline__ __m512i __DEFAULT_FN_ATTRS
1274 _mm512_mask_unpackhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1275   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1276                                        (__v32hi)_mm512_unpackhi_epi16(__A, __B),
1277                                        (__v32hi)__W);
1278 }
1279
1280 static __inline__ __m512i __DEFAULT_FN_ATTRS
1281 _mm512_maskz_unpackhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1282   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1283                                        (__v32hi)_mm512_unpackhi_epi16(__A, __B),
1284                                        (__v32hi)_mm512_setzero_hi());
1285 }
1286
1287 static __inline__ __m512i __DEFAULT_FN_ATTRS
1288 _mm512_unpacklo_epi8(__m512i __A, __m512i __B) {
1289   return (__m512i)__builtin_shufflevector((__v64qi)__A, (__v64qi)__B,
1290                                           0,  64+0,   1, 64+1,
1291                                           2,  64+2,   3, 64+3,
1292                                           4,  64+4,   5, 64+5,
1293                                           6,  64+6,   7, 64+7,
1294                                           16, 64+16, 17, 64+17,
1295                                           18, 64+18, 19, 64+19,
1296                                           20, 64+20, 21, 64+21,
1297                                           22, 64+22, 23, 64+23,
1298                                           32, 64+32, 33, 64+33,
1299                                           34, 64+34, 35, 64+35,
1300                                           36, 64+36, 37, 64+37,
1301                                           38, 64+38, 39, 64+39,
1302                                           48, 64+48, 49, 64+49,
1303                                           50, 64+50, 51, 64+51,
1304                                           52, 64+52, 53, 64+53,
1305                                           54, 64+54, 55, 64+55);
1306 }
1307
1308 static __inline__ __m512i __DEFAULT_FN_ATTRS
1309 _mm512_mask_unpacklo_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
1310   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
1311                                         (__v64qi)_mm512_unpacklo_epi8(__A, __B),
1312                                         (__v64qi)__W);
1313 }
1314
1315 static __inline__ __m512i __DEFAULT_FN_ATTRS
1316 _mm512_maskz_unpacklo_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
1317   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
1318                                         (__v64qi)_mm512_unpacklo_epi8(__A, __B),
1319                                         (__v64qi)_mm512_setzero_qi());
1320 }
1321
1322 static __inline__ __m512i __DEFAULT_FN_ATTRS
1323 _mm512_unpacklo_epi16(__m512i __A, __m512i __B) {
1324   return (__m512i)__builtin_shufflevector((__v32hi)__A, (__v32hi)__B,
1325                                           0,  32+0,   1, 32+1,
1326                                           2,  32+2,   3, 32+3,
1327                                           8,  32+8,   9, 32+9,
1328                                           10, 32+10, 11, 32+11,
1329                                           16, 32+16, 17, 32+17,
1330                                           18, 32+18, 19, 32+19,
1331                                           24, 32+24, 25, 32+25,
1332                                           26, 32+26, 27, 32+27);
1333 }
1334
1335 static __inline__ __m512i __DEFAULT_FN_ATTRS
1336 _mm512_mask_unpacklo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
1337   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1338                                        (__v32hi)_mm512_unpacklo_epi16(__A, __B),
1339                                        (__v32hi)__W);
1340 }
1341
1342 static __inline__ __m512i __DEFAULT_FN_ATTRS
1343 _mm512_maskz_unpacklo_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
1344   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1345                                        (__v32hi)_mm512_unpacklo_epi16(__A, __B),
1346                                        (__v32hi)_mm512_setzero_hi());
1347 }
1348
1349 static __inline__ __m512i __DEFAULT_FN_ATTRS
1350 _mm512_cvtepi8_epi16(__m256i __A)
1351 {
1352   /* This function always performs a signed extension, but __v32qi is a char
1353      which may be signed or unsigned, so use __v32qs. */
1354   return (__m512i)__builtin_convertvector((__v32qs)__A, __v32hi);
1355 }
1356
1357 static __inline__ __m512i __DEFAULT_FN_ATTRS
1358 _mm512_mask_cvtepi8_epi16(__m512i __W, __mmask32 __U, __m256i __A)
1359 {
1360   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1361                                              (__v32hi)_mm512_cvtepi8_epi16(__A),
1362                                              (__v32hi)__W);
1363 }
1364
1365 static __inline__ __m512i __DEFAULT_FN_ATTRS
1366 _mm512_maskz_cvtepi8_epi16(__mmask32 __U, __m256i __A)
1367 {
1368   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1369                                              (__v32hi)_mm512_cvtepi8_epi16(__A),
1370                                              (__v32hi)_mm512_setzero_hi());
1371 }
1372
1373 static __inline__ __m512i __DEFAULT_FN_ATTRS
1374 _mm512_cvtepu8_epi16(__m256i __A)
1375 {
1376   return (__m512i)__builtin_convertvector((__v32qu)__A, __v32hi);
1377 }
1378
1379 static __inline__ __m512i __DEFAULT_FN_ATTRS
1380 _mm512_mask_cvtepu8_epi16(__m512i __W, __mmask32 __U, __m256i __A)
1381 {
1382   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1383                                              (__v32hi)_mm512_cvtepu8_epi16(__A),
1384                                              (__v32hi)__W);
1385 }
1386
1387 static __inline__ __m512i __DEFAULT_FN_ATTRS
1388 _mm512_maskz_cvtepu8_epi16(__mmask32 __U, __m256i __A)
1389 {
1390   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1391                                              (__v32hi)_mm512_cvtepu8_epi16(__A),
1392                                              (__v32hi)_mm512_setzero_hi());
1393 }
1394
1395
1396 #define _mm512_shufflehi_epi16(A, imm) __extension__ ({ \
1397   (__m512i)__builtin_shufflevector((__v32hi)(__m512i)(A), \
1398                                    (__v32hi)_mm512_undefined_epi32(), \
1399                                    0, 1, 2, 3, \
1400                                    4  + (((imm) >> 0) & 0x3), \
1401                                    4  + (((imm) >> 2) & 0x3), \
1402                                    4  + (((imm) >> 4) & 0x3), \
1403                                    4  + (((imm) >> 6) & 0x3), \
1404                                    8, 9, 10, 11, \
1405                                    12 + (((imm) >> 0) & 0x3), \
1406                                    12 + (((imm) >> 2) & 0x3), \
1407                                    12 + (((imm) >> 4) & 0x3), \
1408                                    12 + (((imm) >> 6) & 0x3), \
1409                                    16, 17, 18, 19, \
1410                                    20 + (((imm) >> 0) & 0x3), \
1411                                    20 + (((imm) >> 2) & 0x3), \
1412                                    20 + (((imm) >> 4) & 0x3), \
1413                                    20 + (((imm) >> 6) & 0x3), \
1414                                    24, 25, 26, 27, \
1415                                    28 + (((imm) >> 0) & 0x3), \
1416                                    28 + (((imm) >> 2) & 0x3), \
1417                                    28 + (((imm) >> 4) & 0x3), \
1418                                    28 + (((imm) >> 6) & 0x3)); })
1419
1420 #define _mm512_mask_shufflehi_epi16(W, U, A, imm) __extension__ ({ \
1421   (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
1422                                       (__v32hi)_mm512_shufflehi_epi16((A), \
1423                                                                       (imm)), \
1424                                       (__v32hi)(__m512i)(W)); })
1425
1426 #define _mm512_maskz_shufflehi_epi16(U, A, imm) __extension__ ({ \
1427   (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
1428                                       (__v32hi)_mm512_shufflehi_epi16((A), \
1429                                                                       (imm)), \
1430                                       (__v32hi)_mm512_setzero_hi()); })
1431
1432 #define _mm512_shufflelo_epi16(A, imm) __extension__ ({ \
1433   (__m512i)__builtin_shufflevector((__v32hi)(__m512i)(A), \
1434                                    (__v32hi)_mm512_undefined_epi32(), \
1435                                    0 + (((imm) >> 0) & 0x3), \
1436                                    0 + (((imm) >> 2) & 0x3), \
1437                                    0 + (((imm) >> 4) & 0x3), \
1438                                    0 + (((imm) >> 6) & 0x3), \
1439                                    4, 5, 6, 7, \
1440                                    8 + (((imm) >> 0) & 0x3), \
1441                                    8 + (((imm) >> 2) & 0x3), \
1442                                    8 + (((imm) >> 4) & 0x3), \
1443                                    8 + (((imm) >> 6) & 0x3), \
1444                                    12, 13, 14, 15, \
1445                                    16 + (((imm) >> 0) & 0x3), \
1446                                    16 + (((imm) >> 2) & 0x3), \
1447                                    16 + (((imm) >> 4) & 0x3), \
1448                                    16 + (((imm) >> 6) & 0x3), \
1449                                    20, 21, 22, 23, \
1450                                    24 + (((imm) >> 0) & 0x3), \
1451                                    24 + (((imm) >> 2) & 0x3), \
1452                                    24 + (((imm) >> 4) & 0x3), \
1453                                    24 + (((imm) >> 6) & 0x3), \
1454                                    28, 29, 30, 31); })
1455
1456
1457 #define _mm512_mask_shufflelo_epi16(W, U, A, imm) __extension__ ({ \
1458   (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
1459                                       (__v32hi)_mm512_shufflelo_epi16((A), \
1460                                                                       (imm)), \
1461                                       (__v32hi)(__m512i)(W)); })
1462
1463
1464 #define _mm512_maskz_shufflelo_epi16(U, A, imm) __extension__ ({ \
1465   (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
1466                                       (__v32hi)_mm512_shufflelo_epi16((A), \
1467                                                                       (imm)), \
1468                                       (__v32hi)_mm512_setzero_hi()); })
1469
1470 static __inline__ __m512i __DEFAULT_FN_ATTRS
1471 _mm512_sllv_epi16(__m512i __A, __m512i __B)
1472 {
1473   return (__m512i)__builtin_ia32_psllv32hi((__v32hi) __A, (__v32hi) __B);
1474 }
1475
1476 static __inline__ __m512i __DEFAULT_FN_ATTRS
1477 _mm512_mask_sllv_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B)
1478 {
1479   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1480                                            (__v32hi)_mm512_sllv_epi16(__A, __B),
1481                                            (__v32hi)__W);
1482 }
1483
1484 static __inline__ __m512i __DEFAULT_FN_ATTRS
1485 _mm512_maskz_sllv_epi16(__mmask32 __U, __m512i __A, __m512i __B)
1486 {
1487   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1488                                            (__v32hi)_mm512_sllv_epi16(__A, __B),
1489                                            (__v32hi)_mm512_setzero_hi());
1490 }
1491
1492 static __inline__ __m512i __DEFAULT_FN_ATTRS
1493 _mm512_sll_epi16(__m512i __A, __m128i __B)
1494 {
1495   return (__m512i)__builtin_ia32_psllw512((__v32hi) __A, (__v8hi) __B);
1496 }
1497
1498 static __inline__ __m512i __DEFAULT_FN_ATTRS
1499 _mm512_mask_sll_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B)
1500 {
1501   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1502                                           (__v32hi)_mm512_sll_epi16(__A, __B),
1503                                           (__v32hi)__W);
1504 }
1505
1506 static __inline__ __m512i __DEFAULT_FN_ATTRS
1507 _mm512_maskz_sll_epi16(__mmask32 __U, __m512i __A, __m128i __B)
1508 {
1509   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1510                                           (__v32hi)_mm512_sll_epi16(__A, __B),
1511                                           (__v32hi)_mm512_setzero_hi());
1512 }
1513
1514 static __inline__ __m512i __DEFAULT_FN_ATTRS
1515 _mm512_slli_epi16(__m512i __A, int __B)
1516 {
1517   return (__m512i)__builtin_ia32_psllwi512((__v32hi)__A, __B);
1518 }
1519
1520 static __inline__ __m512i __DEFAULT_FN_ATTRS
1521 _mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B)
1522 {
1523   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1524                                          (__v32hi)_mm512_slli_epi16(__A, __B),
1525                                          (__v32hi)__W);
1526 }
1527
1528 static __inline__ __m512i __DEFAULT_FN_ATTRS
1529 _mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A, int __B)
1530 {
1531   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1532                                          (__v32hi)_mm512_slli_epi16(__A, __B),
1533                                          (__v32hi)_mm512_setzero_hi());
1534 }
1535
1536 #define _mm512_bslli_epi128(a, imm) __extension__ ({ \
1537   (__m512i)__builtin_shufflevector(                                          \
1538        (__v64qi)_mm512_setzero_si512(),                                      \
1539        (__v64qi)(__m512i)(a),                                                \
1540        ((char)(imm)&0xF0) ?  0 : ((char)(imm)>0x0 ? 16 :  64) - (char)(imm), \
1541        ((char)(imm)&0xF0) ?  1 : ((char)(imm)>0x1 ? 17 :  65) - (char)(imm), \
1542        ((char)(imm)&0xF0) ?  2 : ((char)(imm)>0x2 ? 18 :  66) - (char)(imm), \
1543        ((char)(imm)&0xF0) ?  3 : ((char)(imm)>0x3 ? 19 :  67) - (char)(imm), \
1544        ((char)(imm)&0xF0) ?  4 : ((char)(imm)>0x4 ? 20 :  68) - (char)(imm), \
1545        ((char)(imm)&0xF0) ?  5 : ((char)(imm)>0x5 ? 21 :  69) - (char)(imm), \
1546        ((char)(imm)&0xF0) ?  6 : ((char)(imm)>0x6 ? 22 :  70) - (char)(imm), \
1547        ((char)(imm)&0xF0) ?  7 : ((char)(imm)>0x7 ? 23 :  71) - (char)(imm), \
1548        ((char)(imm)&0xF0) ?  8 : ((char)(imm)>0x8 ? 24 :  72) - (char)(imm), \
1549        ((char)(imm)&0xF0) ?  9 : ((char)(imm)>0x9 ? 25 :  73) - (char)(imm), \
1550        ((char)(imm)&0xF0) ? 10 : ((char)(imm)>0xA ? 26 :  74) - (char)(imm), \
1551        ((char)(imm)&0xF0) ? 11 : ((char)(imm)>0xB ? 27 :  75) - (char)(imm), \
1552        ((char)(imm)&0xF0) ? 12 : ((char)(imm)>0xC ? 28 :  76) - (char)(imm), \
1553        ((char)(imm)&0xF0) ? 13 : ((char)(imm)>0xD ? 29 :  77) - (char)(imm), \
1554        ((char)(imm)&0xF0) ? 14 : ((char)(imm)>0xE ? 30 :  78) - (char)(imm), \
1555        ((char)(imm)&0xF0) ? 15 : ((char)(imm)>0xF ? 31 :  79) - (char)(imm), \
1556        ((char)(imm)&0xF0) ? 16 : ((char)(imm)>0x0 ? 32 :  80) - (char)(imm), \
1557        ((char)(imm)&0xF0) ? 17 : ((char)(imm)>0x1 ? 33 :  81) - (char)(imm), \
1558        ((char)(imm)&0xF0) ? 18 : ((char)(imm)>0x2 ? 34 :  82) - (char)(imm), \
1559        ((char)(imm)&0xF0) ? 19 : ((char)(imm)>0x3 ? 35 :  83) - (char)(imm), \
1560        ((char)(imm)&0xF0) ? 20 : ((char)(imm)>0x4 ? 36 :  84) - (char)(imm), \
1561        ((char)(imm)&0xF0) ? 21 : ((char)(imm)>0x5 ? 37 :  85) - (char)(imm), \
1562        ((char)(imm)&0xF0) ? 22 : ((char)(imm)>0x6 ? 38 :  86) - (char)(imm), \
1563        ((char)(imm)&0xF0) ? 23 : ((char)(imm)>0x7 ? 39 :  87) - (char)(imm), \
1564        ((char)(imm)&0xF0) ? 24 : ((char)(imm)>0x8 ? 40 :  88) - (char)(imm), \
1565        ((char)(imm)&0xF0) ? 25 : ((char)(imm)>0x9 ? 41 :  89) - (char)(imm), \
1566        ((char)(imm)&0xF0) ? 26 : ((char)(imm)>0xA ? 42 :  90) - (char)(imm), \
1567        ((char)(imm)&0xF0) ? 27 : ((char)(imm)>0xB ? 43 :  91) - (char)(imm), \
1568        ((char)(imm)&0xF0) ? 28 : ((char)(imm)>0xC ? 44 :  92) - (char)(imm), \
1569        ((char)(imm)&0xF0) ? 29 : ((char)(imm)>0xD ? 45 :  93) - (char)(imm), \
1570        ((char)(imm)&0xF0) ? 30 : ((char)(imm)>0xE ? 46 :  94) - (char)(imm), \
1571        ((char)(imm)&0xF0) ? 31 : ((char)(imm)>0xF ? 47 :  95) - (char)(imm), \
1572        ((char)(imm)&0xF0) ? 32 : ((char)(imm)>0x0 ? 48 :  96) - (char)(imm), \
1573        ((char)(imm)&0xF0) ? 33 : ((char)(imm)>0x1 ? 49 :  97) - (char)(imm), \
1574        ((char)(imm)&0xF0) ? 34 : ((char)(imm)>0x2 ? 50 :  98) - (char)(imm), \
1575        ((char)(imm)&0xF0) ? 35 : ((char)(imm)>0x3 ? 51 :  99) - (char)(imm), \
1576        ((char)(imm)&0xF0) ? 36 : ((char)(imm)>0x4 ? 52 : 100) - (char)(imm), \
1577        ((char)(imm)&0xF0) ? 37 : ((char)(imm)>0x5 ? 53 : 101) - (char)(imm), \
1578        ((char)(imm)&0xF0) ? 38 : ((char)(imm)>0x6 ? 54 : 102) - (char)(imm), \
1579        ((char)(imm)&0xF0) ? 39 : ((char)(imm)>0x7 ? 55 : 103) - (char)(imm), \
1580        ((char)(imm)&0xF0) ? 40 : ((char)(imm)>0x8 ? 56 : 104) - (char)(imm), \
1581        ((char)(imm)&0xF0) ? 41 : ((char)(imm)>0x9 ? 57 : 105) - (char)(imm), \
1582        ((char)(imm)&0xF0) ? 42 : ((char)(imm)>0xA ? 58 : 106) - (char)(imm), \
1583        ((char)(imm)&0xF0) ? 43 : ((char)(imm)>0xB ? 59 : 107) - (char)(imm), \
1584        ((char)(imm)&0xF0) ? 44 : ((char)(imm)>0xC ? 60 : 108) - (char)(imm), \
1585        ((char)(imm)&0xF0) ? 45 : ((char)(imm)>0xD ? 61 : 109) - (char)(imm), \
1586        ((char)(imm)&0xF0) ? 46 : ((char)(imm)>0xE ? 62 : 110) - (char)(imm), \
1587        ((char)(imm)&0xF0) ? 47 : ((char)(imm)>0xF ? 63 : 111) - (char)(imm), \
1588        ((char)(imm)&0xF0) ? 48 : ((char)(imm)>0x0 ? 64 : 112) - (char)(imm), \
1589        ((char)(imm)&0xF0) ? 49 : ((char)(imm)>0x1 ? 65 : 113) - (char)(imm), \
1590        ((char)(imm)&0xF0) ? 50 : ((char)(imm)>0x2 ? 66 : 114) - (char)(imm), \
1591        ((char)(imm)&0xF0) ? 51 : ((char)(imm)>0x3 ? 67 : 115) - (char)(imm), \
1592        ((char)(imm)&0xF0) ? 52 : ((char)(imm)>0x4 ? 68 : 116) - (char)(imm), \
1593        ((char)(imm)&0xF0) ? 53 : ((char)(imm)>0x5 ? 69 : 117) - (char)(imm), \
1594        ((char)(imm)&0xF0) ? 54 : ((char)(imm)>0x6 ? 70 : 118) - (char)(imm), \
1595        ((char)(imm)&0xF0) ? 55 : ((char)(imm)>0x7 ? 71 : 119) - (char)(imm), \
1596        ((char)(imm)&0xF0) ? 56 : ((char)(imm)>0x8 ? 72 : 120) - (char)(imm), \
1597        ((char)(imm)&0xF0) ? 57 : ((char)(imm)>0x9 ? 73 : 121) - (char)(imm), \
1598        ((char)(imm)&0xF0) ? 58 : ((char)(imm)>0xA ? 74 : 122) - (char)(imm), \
1599        ((char)(imm)&0xF0) ? 59 : ((char)(imm)>0xB ? 75 : 123) - (char)(imm), \
1600        ((char)(imm)&0xF0) ? 60 : ((char)(imm)>0xC ? 76 : 124) - (char)(imm), \
1601        ((char)(imm)&0xF0) ? 61 : ((char)(imm)>0xD ? 77 : 125) - (char)(imm), \
1602        ((char)(imm)&0xF0) ? 62 : ((char)(imm)>0xE ? 78 : 126) - (char)(imm), \
1603        ((char)(imm)&0xF0) ? 63 : ((char)(imm)>0xF ? 79 : 127) - (char)(imm)); })
1604
1605 static __inline__ __m512i __DEFAULT_FN_ATTRS
1606 _mm512_srlv_epi16(__m512i __A, __m512i __B)
1607 {
1608   return (__m512i)__builtin_ia32_psrlv32hi((__v32hi)__A, (__v32hi)__B);
1609 }
1610
1611 static __inline__ __m512i __DEFAULT_FN_ATTRS
1612 _mm512_mask_srlv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B)
1613 {
1614   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1615                                            (__v32hi)_mm512_srlv_epi16(__A, __B),
1616                                            (__v32hi)__W);
1617 }
1618
1619 static __inline__ __m512i __DEFAULT_FN_ATTRS
1620 _mm512_maskz_srlv_epi16(__mmask32 __U, __m512i __A, __m512i __B)
1621 {
1622   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1623                                            (__v32hi)_mm512_srlv_epi16(__A, __B),
1624                                            (__v32hi)_mm512_setzero_hi());
1625 }
1626
1627 static __inline__ __m512i __DEFAULT_FN_ATTRS
1628 _mm512_srav_epi16(__m512i __A, __m512i __B)
1629 {
1630   return (__m512i)__builtin_ia32_psrav32hi((__v32hi)__A, (__v32hi)__B);
1631 }
1632
1633 static __inline__ __m512i __DEFAULT_FN_ATTRS
1634 _mm512_mask_srav_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B)
1635 {
1636   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1637                                            (__v32hi)_mm512_srav_epi16(__A, __B),
1638                                            (__v32hi)__W);
1639 }
1640
1641 static __inline__ __m512i __DEFAULT_FN_ATTRS
1642 _mm512_maskz_srav_epi16(__mmask32 __U, __m512i __A, __m512i __B)
1643 {
1644   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1645                                            (__v32hi)_mm512_srav_epi16(__A, __B),
1646                                            (__v32hi)_mm512_setzero_hi());
1647 }
1648
1649 static __inline__ __m512i __DEFAULT_FN_ATTRS
1650 _mm512_sra_epi16(__m512i __A, __m128i __B)
1651 {
1652   return (__m512i)__builtin_ia32_psraw512((__v32hi) __A, (__v8hi) __B);
1653 }
1654
1655 static __inline__ __m512i __DEFAULT_FN_ATTRS
1656 _mm512_mask_sra_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B)
1657 {
1658   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1659                                           (__v32hi)_mm512_sra_epi16(__A, __B),
1660                                           (__v32hi)__W);
1661 }
1662
1663 static __inline__ __m512i __DEFAULT_FN_ATTRS
1664 _mm512_maskz_sra_epi16(__mmask32 __U, __m512i __A, __m128i __B)
1665 {
1666   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1667                                           (__v32hi)_mm512_sra_epi16(__A, __B),
1668                                           (__v32hi)_mm512_setzero_hi());
1669 }
1670
1671 static __inline__ __m512i __DEFAULT_FN_ATTRS
1672 _mm512_srai_epi16(__m512i __A, int __B)
1673 {
1674   return (__m512i)__builtin_ia32_psrawi512((__v32hi)__A, __B);
1675 }
1676
1677 static __inline__ __m512i __DEFAULT_FN_ATTRS
1678 _mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B)
1679 {
1680   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1681                                          (__v32hi)_mm512_srai_epi16(__A, __B),
1682                                          (__v32hi)__W);
1683 }
1684
1685 static __inline__ __m512i __DEFAULT_FN_ATTRS
1686 _mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A, int __B)
1687 {
1688   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1689                                          (__v32hi)_mm512_srai_epi16(__A, __B),
1690                                          (__v32hi)_mm512_setzero_hi());
1691 }
1692
1693 static __inline__ __m512i __DEFAULT_FN_ATTRS
1694 _mm512_srl_epi16(__m512i __A, __m128i __B)
1695 {
1696   return (__m512i)__builtin_ia32_psrlw512((__v32hi) __A, (__v8hi) __B);
1697 }
1698
1699 static __inline__ __m512i __DEFAULT_FN_ATTRS
1700 _mm512_mask_srl_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B)
1701 {
1702   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1703                                           (__v32hi)_mm512_srl_epi16(__A, __B),
1704                                           (__v32hi)__W);
1705 }
1706
1707 static __inline__ __m512i __DEFAULT_FN_ATTRS
1708 _mm512_maskz_srl_epi16(__mmask32 __U, __m512i __A, __m128i __B)
1709 {
1710   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1711                                           (__v32hi)_mm512_srl_epi16(__A, __B),
1712                                           (__v32hi)_mm512_setzero_hi());
1713 }
1714
1715 static __inline__ __m512i __DEFAULT_FN_ATTRS
1716 _mm512_srli_epi16(__m512i __A, int __B)
1717 {
1718   return (__m512i)__builtin_ia32_psrlwi512((__v32hi)__A, __B);
1719 }
1720
1721 static __inline__ __m512i __DEFAULT_FN_ATTRS
1722 _mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B)
1723 {
1724   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1725                                          (__v32hi)_mm512_srli_epi16(__A, __B),
1726                                          (__v32hi)__W);
1727 }
1728
1729 static __inline__ __m512i __DEFAULT_FN_ATTRS
1730 _mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A, int __B)
1731 {
1732   return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
1733                                          (__v32hi)_mm512_srli_epi16(__A, __B),
1734                                          (__v32hi)_mm512_setzero_hi());
1735 }
1736
1737 #define _mm512_bsrli_epi128(a, imm) __extension__ ({ \
1738   (__m512i)__builtin_shufflevector(                     \
1739       (__v64qi)(__m512i)(a),                      \
1740       (__v64qi)_mm512_setzero_si512(),            \
1741       ((char)(imm)&0xF0) ?  64 : (char)(imm) + ((char)(imm)>0xF ?  48 : 0),  \
1742       ((char)(imm)&0xF0) ?  65 : (char)(imm) + ((char)(imm)>0xE ?  49 : 1),  \
1743       ((char)(imm)&0xF0) ?  66 : (char)(imm) + ((char)(imm)>0xD ?  50 : 2),  \
1744       ((char)(imm)&0xF0) ?  67 : (char)(imm) + ((char)(imm)>0xC ?  51 : 3),  \
1745       ((char)(imm)&0xF0) ?  68 : (char)(imm) + ((char)(imm)>0xB ?  52 : 4),  \
1746       ((char)(imm)&0xF0) ?  69 : (char)(imm) + ((char)(imm)>0xA ?  53 : 5),  \
1747       ((char)(imm)&0xF0) ?  70 : (char)(imm) + ((char)(imm)>0x9 ?  54 : 6),  \
1748       ((char)(imm)&0xF0) ?  71 : (char)(imm) + ((char)(imm)>0x8 ?  55 : 7),  \
1749       ((char)(imm)&0xF0) ?  72 : (char)(imm) + ((char)(imm)>0x7 ?  56 : 8),  \
1750       ((char)(imm)&0xF0) ?  73 : (char)(imm) + ((char)(imm)>0x6 ?  57 : 9),  \
1751       ((char)(imm)&0xF0) ?  74 : (char)(imm) + ((char)(imm)>0x5 ?  58 : 10), \
1752       ((char)(imm)&0xF0) ?  75 : (char)(imm) + ((char)(imm)>0x4 ?  59 : 11), \
1753       ((char)(imm)&0xF0) ?  76 : (char)(imm) + ((char)(imm)>0x3 ?  60 : 12), \
1754       ((char)(imm)&0xF0) ?  77 : (char)(imm) + ((char)(imm)>0x2 ?  61 : 13), \
1755       ((char)(imm)&0xF0) ?  78 : (char)(imm) + ((char)(imm)>0x1 ?  62 : 14), \
1756       ((char)(imm)&0xF0) ?  79 : (char)(imm) + ((char)(imm)>0x0 ?  63 : 15), \
1757       ((char)(imm)&0xF0) ?  80 : (char)(imm) + ((char)(imm)>0xF ?  64 : 16), \
1758       ((char)(imm)&0xF0) ?  81 : (char)(imm) + ((char)(imm)>0xE ?  65 : 17), \
1759       ((char)(imm)&0xF0) ?  82 : (char)(imm) + ((char)(imm)>0xD ?  66 : 18), \
1760       ((char)(imm)&0xF0) ?  83 : (char)(imm) + ((char)(imm)>0xC ?  67 : 19), \
1761       ((char)(imm)&0xF0) ?  84 : (char)(imm) + ((char)(imm)>0xB ?  68 : 20), \
1762       ((char)(imm)&0xF0) ?  85 : (char)(imm) + ((char)(imm)>0xA ?  69 : 21), \
1763       ((char)(imm)&0xF0) ?  86 : (char)(imm) + ((char)(imm)>0x9 ?  70 : 22), \
1764       ((char)(imm)&0xF0) ?  87 : (char)(imm) + ((char)(imm)>0x8 ?  71 : 23), \
1765       ((char)(imm)&0xF0) ?  88 : (char)(imm) + ((char)(imm)>0x7 ?  72 : 24), \
1766       ((char)(imm)&0xF0) ?  89 : (char)(imm) + ((char)(imm)>0x6 ?  73 : 25), \
1767       ((char)(imm)&0xF0) ?  90 : (char)(imm) + ((char)(imm)>0x5 ?  74 : 26), \
1768       ((char)(imm)&0xF0) ?  91 : (char)(imm) + ((char)(imm)>0x4 ?  75 : 27), \
1769       ((char)(imm)&0xF0) ?  92 : (char)(imm) + ((char)(imm)>0x3 ?  76 : 28), \
1770       ((char)(imm)&0xF0) ?  93 : (char)(imm) + ((char)(imm)>0x2 ?  77 : 29), \
1771       ((char)(imm)&0xF0) ?  94 : (char)(imm) + ((char)(imm)>0x1 ?  78 : 30), \
1772       ((char)(imm)&0xF0) ?  95 : (char)(imm) + ((char)(imm)>0x0 ?  79 : 31), \
1773       ((char)(imm)&0xF0) ?  96 : (char)(imm) + ((char)(imm)>0xF ?  80 : 32), \
1774       ((char)(imm)&0xF0) ?  97 : (char)(imm) + ((char)(imm)>0xE ?  81 : 33), \
1775       ((char)(imm)&0xF0) ?  98 : (char)(imm) + ((char)(imm)>0xD ?  82 : 34), \
1776       ((char)(imm)&0xF0) ?  99 : (char)(imm) + ((char)(imm)>0xC ?  83 : 35), \
1777       ((char)(imm)&0xF0) ? 100 : (char)(imm) + ((char)(imm)>0xB ?  84 : 36), \
1778       ((char)(imm)&0xF0) ? 101 : (char)(imm) + ((char)(imm)>0xA ?  85 : 37), \
1779       ((char)(imm)&0xF0) ? 102 : (char)(imm) + ((char)(imm)>0x9 ?  86 : 38), \
1780       ((char)(imm)&0xF0) ? 103 : (char)(imm) + ((char)(imm)>0x8 ?  87 : 39), \
1781       ((char)(imm)&0xF0) ? 104 : (char)(imm) + ((char)(imm)>0x7 ?  88 : 40), \
1782       ((char)(imm)&0xF0) ? 105 : (char)(imm) + ((char)(imm)>0x6 ?  89 : 41), \
1783       ((char)(imm)&0xF0) ? 106 : (char)(imm) + ((char)(imm)>0x5 ?  90 : 42), \
1784       ((char)(imm)&0xF0) ? 107 : (char)(imm) + ((char)(imm)>0x4 ?  91 : 43), \
1785       ((char)(imm)&0xF0) ? 108 : (char)(imm) + ((char)(imm)>0x3 ?  92 : 44), \
1786       ((char)(imm)&0xF0) ? 109 : (char)(imm) + ((char)(imm)>0x2 ?  93 : 45), \
1787       ((char)(imm)&0xF0) ? 110 : (char)(imm) + ((char)(imm)>0x1 ?  94 : 46), \
1788       ((char)(imm)&0xF0) ? 111 : (char)(imm) + ((char)(imm)>0x0 ?  95 : 47), \
1789       ((char)(imm)&0xF0) ? 112 : (char)(imm) + ((char)(imm)>0xF ?  96 : 48), \
1790       ((char)(imm)&0xF0) ? 113 : (char)(imm) + ((char)(imm)>0xE ?  97 : 49), \
1791       ((char)(imm)&0xF0) ? 114 : (char)(imm) + ((char)(imm)>0xD ?  98 : 50), \
1792       ((char)(imm)&0xF0) ? 115 : (char)(imm) + ((char)(imm)>0xC ?  99 : 51), \
1793       ((char)(imm)&0xF0) ? 116 : (char)(imm) + ((char)(imm)>0xB ? 100 : 52), \
1794       ((char)(imm)&0xF0) ? 117 : (char)(imm) + ((char)(imm)>0xA ? 101 : 53), \
1795       ((char)(imm)&0xF0) ? 118 : (char)(imm) + ((char)(imm)>0x9 ? 102 : 54), \
1796       ((char)(imm)&0xF0) ? 119 : (char)(imm) + ((char)(imm)>0x8 ? 103 : 55), \
1797       ((char)(imm)&0xF0) ? 120 : (char)(imm) + ((char)(imm)>0x7 ? 104 : 56), \
1798       ((char)(imm)&0xF0) ? 121 : (char)(imm) + ((char)(imm)>0x6 ? 105 : 57), \
1799       ((char)(imm)&0xF0) ? 122 : (char)(imm) + ((char)(imm)>0x5 ? 106 : 58), \
1800       ((char)(imm)&0xF0) ? 123 : (char)(imm) + ((char)(imm)>0x4 ? 107 : 59), \
1801       ((char)(imm)&0xF0) ? 124 : (char)(imm) + ((char)(imm)>0x3 ? 108 : 60), \
1802       ((char)(imm)&0xF0) ? 125 : (char)(imm) + ((char)(imm)>0x2 ? 109 : 61), \
1803       ((char)(imm)&0xF0) ? 126 : (char)(imm) + ((char)(imm)>0x1 ? 110 : 62), \
1804       ((char)(imm)&0xF0) ? 127 : (char)(imm) + ((char)(imm)>0x0 ? 111 : 63)); })
1805
1806 static __inline__ __m512i __DEFAULT_FN_ATTRS
1807 _mm512_mask_mov_epi16 (__m512i __W, __mmask32 __U, __m512i __A)
1808 {
1809   return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U,
1810                 (__v32hi) __A,
1811                 (__v32hi) __W);
1812 }
1813
1814 static __inline__ __m512i __DEFAULT_FN_ATTRS
1815 _mm512_maskz_mov_epi16 (__mmask32 __U, __m512i __A)
1816 {
1817   return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U,
1818                 (__v32hi) __A,
1819                 (__v32hi) _mm512_setzero_hi ());
1820 }
1821
1822 static __inline__ __m512i __DEFAULT_FN_ATTRS
1823 _mm512_mask_mov_epi8 (__m512i __W, __mmask64 __U, __m512i __A)
1824 {
1825   return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U,
1826                 (__v64qi) __A,
1827                 (__v64qi) __W);
1828 }
1829
1830 static __inline__ __m512i __DEFAULT_FN_ATTRS
1831 _mm512_maskz_mov_epi8 (__mmask64 __U, __m512i __A)
1832 {
1833   return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U,
1834                 (__v64qi) __A,
1835                 (__v64qi) _mm512_setzero_hi ());
1836 }
1837
1838 static __inline__ __m512i __DEFAULT_FN_ATTRS
1839 _mm512_mask_set1_epi8 (__m512i __O, __mmask64 __M, char __A)
1840 {
1841   return (__m512i) __builtin_ia32_selectb_512(__M,
1842                                               (__v64qi)_mm512_set1_epi8(__A),
1843                                               (__v64qi) __O);
1844 }
1845
1846 static __inline__ __m512i __DEFAULT_FN_ATTRS
1847 _mm512_maskz_set1_epi8 (__mmask64 __M, char __A)
1848 {
1849   return (__m512i) __builtin_ia32_selectb_512(__M,
1850                                               (__v64qi) _mm512_set1_epi8(__A),
1851                                               (__v64qi) _mm512_setzero_si512());
1852 }
1853
1854 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1855 _mm512_kunpackd (__mmask64 __A, __mmask64 __B)
1856 {
1857   return (__mmask64) __builtin_ia32_kunpckdi ((__mmask64) __A,
1858                 (__mmask64) __B);
1859 }
1860
1861 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1862 _mm512_kunpackw (__mmask32 __A, __mmask32 __B)
1863 {
1864   return (__mmask32) __builtin_ia32_kunpcksi ((__mmask32) __A,
1865                 (__mmask32) __B);
1866 }
1867
1868 static __inline__ __m512i __DEFAULT_FN_ATTRS
1869 _mm512_mask_loadu_epi16 (__m512i __W, __mmask32 __U, void const *__P)
1870 {
1871   return (__m512i) __builtin_ia32_loaddquhi512_mask ((__v32hi *) __P,
1872                  (__v32hi) __W,
1873                  (__mmask32) __U);
1874 }
1875
1876 static __inline__ __m512i __DEFAULT_FN_ATTRS
1877 _mm512_maskz_loadu_epi16 (__mmask32 __U, void const *__P)
1878 {
1879   return (__m512i) __builtin_ia32_loaddquhi512_mask ((__v32hi *) __P,
1880                  (__v32hi)
1881                  _mm512_setzero_hi (),
1882                  (__mmask32) __U);
1883 }
1884
1885 static __inline__ __m512i __DEFAULT_FN_ATTRS
1886 _mm512_mask_loadu_epi8 (__m512i __W, __mmask64 __U, void const *__P)
1887 {
1888   return (__m512i) __builtin_ia32_loaddquqi512_mask ((__v64qi *) __P,
1889                  (__v64qi) __W,
1890                  (__mmask64) __U);
1891 }
1892
1893 static __inline__ __m512i __DEFAULT_FN_ATTRS
1894 _mm512_maskz_loadu_epi8 (__mmask64 __U, void const *__P)
1895 {
1896   return (__m512i) __builtin_ia32_loaddquqi512_mask ((__v64qi *) __P,
1897                  (__v64qi)
1898                  _mm512_setzero_hi (),
1899                  (__mmask64) __U);
1900 }
1901 static __inline__ void __DEFAULT_FN_ATTRS
1902 _mm512_mask_storeu_epi16 (void *__P, __mmask32 __U, __m512i __A)
1903 {
1904   __builtin_ia32_storedquhi512_mask ((__v32hi *) __P,
1905              (__v32hi) __A,
1906              (__mmask32) __U);
1907 }
1908
1909 static __inline__ void __DEFAULT_FN_ATTRS
1910 _mm512_mask_storeu_epi8 (void *__P, __mmask64 __U, __m512i __A)
1911 {
1912   __builtin_ia32_storedquqi512_mask ((__v64qi *) __P,
1913              (__v64qi) __A,
1914              (__mmask64) __U);
1915 }
1916
1917 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1918 _mm512_test_epi8_mask (__m512i __A, __m512i __B)
1919 {
1920   return _mm512_cmpneq_epi8_mask (_mm512_and_epi32 (__A, __B),
1921                                   _mm512_setzero_qi());
1922 }
1923
1924 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1925 _mm512_mask_test_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
1926 {
1927   return _mm512_mask_cmpneq_epi8_mask (__U, _mm512_and_epi32 (__A, __B),
1928                                        _mm512_setzero_qi());
1929 }
1930
1931 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1932 _mm512_test_epi16_mask (__m512i __A, __m512i __B)
1933 {
1934   return _mm512_cmpneq_epi16_mask (_mm512_and_epi32 (__A, __B),
1935                                    _mm512_setzero_qi());
1936 }
1937
1938 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1939 _mm512_mask_test_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
1940 {
1941   return _mm512_mask_cmpneq_epi16_mask (__U, _mm512_and_epi32 (__A, __B),
1942                                         _mm512_setzero_qi());
1943 }
1944
1945 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1946 _mm512_testn_epi8_mask (__m512i __A, __m512i __B)
1947 {
1948   return _mm512_cmpeq_epi8_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_qi());
1949 }
1950
1951 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1952 _mm512_mask_testn_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
1953 {
1954   return _mm512_mask_cmpeq_epi8_mask (__U, _mm512_and_epi32 (__A, __B),
1955                                       _mm512_setzero_qi());
1956 }
1957
1958 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1959 _mm512_testn_epi16_mask (__m512i __A, __m512i __B)
1960 {
1961   return _mm512_cmpeq_epi16_mask (_mm512_and_epi32 (__A, __B),
1962                                   _mm512_setzero_qi());
1963 }
1964
1965 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1966 _mm512_mask_testn_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
1967 {
1968   return _mm512_mask_cmpeq_epi16_mask (__U, _mm512_and_epi32 (__A, __B),
1969                                        _mm512_setzero_qi());
1970 }
1971
1972 static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1973 _mm512_movepi8_mask (__m512i __A)
1974 {
1975   return (__mmask64) __builtin_ia32_cvtb2mask512 ((__v64qi) __A);
1976 }
1977
1978 static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1979 _mm512_movepi16_mask (__m512i __A)
1980 {
1981   return (__mmask32) __builtin_ia32_cvtw2mask512 ((__v32hi) __A);
1982 }
1983
1984 static __inline__ __m512i __DEFAULT_FN_ATTRS
1985 _mm512_movm_epi8 (__mmask64 __A)
1986 {
1987   return (__m512i) __builtin_ia32_cvtmask2b512 (__A);
1988 }
1989
1990 static __inline__ __m512i __DEFAULT_FN_ATTRS
1991 _mm512_movm_epi16 (__mmask32 __A)
1992 {
1993   return (__m512i) __builtin_ia32_cvtmask2w512 (__A);
1994 }
1995
1996 static __inline__ __m512i __DEFAULT_FN_ATTRS
1997 _mm512_broadcastb_epi8 (__m128i __A)
1998 {
1999   return (__m512i)__builtin_shufflevector((__v16qi) __A,
2000                                           (__v16qi)_mm_undefined_si128(),
2001                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2002                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2003                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2004                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
2005 }
2006
2007 static __inline__ __m512i __DEFAULT_FN_ATTRS
2008 _mm512_mask_broadcastb_epi8 (__m512i __O, __mmask64 __M, __m128i __A)
2009 {
2010   return (__m512i)__builtin_ia32_selectb_512(__M,
2011                                              (__v64qi) _mm512_broadcastb_epi8(__A),
2012                                              (__v64qi) __O);
2013 }
2014
2015 static __inline__ __m512i __DEFAULT_FN_ATTRS
2016 _mm512_maskz_broadcastb_epi8 (__mmask64 __M, __m128i __A)
2017 {
2018   return (__m512i)__builtin_ia32_selectb_512(__M,
2019                                              (__v64qi) _mm512_broadcastb_epi8(__A),
2020                                              (__v64qi) _mm512_setzero_si512());
2021 }
2022
2023 static __inline__ __m512i __DEFAULT_FN_ATTRS
2024 _mm512_mask_set1_epi16 (__m512i __O, __mmask32 __M, short __A)
2025 {
2026   return (__m512i) __builtin_ia32_selectw_512(__M,
2027                                               (__v32hi) _mm512_set1_epi16(__A),
2028                                               (__v32hi) __O);
2029 }
2030
2031 static __inline__ __m512i __DEFAULT_FN_ATTRS
2032 _mm512_maskz_set1_epi16 (__mmask32 __M, short __A)
2033 {
2034   return (__m512i) __builtin_ia32_selectw_512(__M,
2035                                               (__v32hi) _mm512_set1_epi16(__A),
2036                                               (__v32hi) _mm512_setzero_si512());
2037 }
2038
2039 static __inline__ __m512i __DEFAULT_FN_ATTRS
2040 _mm512_broadcastw_epi16 (__m128i __A)
2041 {
2042   return (__m512i)__builtin_shufflevector((__v8hi) __A,
2043                                           (__v8hi)_mm_undefined_si128(),
2044                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2045                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
2046 }
2047
2048 static __inline__ __m512i __DEFAULT_FN_ATTRS
2049 _mm512_mask_broadcastw_epi16 (__m512i __O, __mmask32 __M, __m128i __A)
2050 {
2051   return (__m512i)__builtin_ia32_selectw_512(__M,
2052                                              (__v32hi) _mm512_broadcastw_epi16(__A),
2053                                              (__v32hi) __O);
2054 }
2055
2056 static __inline__ __m512i __DEFAULT_FN_ATTRS
2057 _mm512_maskz_broadcastw_epi16 (__mmask32 __M, __m128i __A)
2058 {
2059   return (__m512i)__builtin_ia32_selectw_512(__M,
2060                                              (__v32hi) _mm512_broadcastw_epi16(__A),
2061                                              (__v32hi) _mm512_setzero_si512());
2062 }
2063
2064 static __inline__ __m512i __DEFAULT_FN_ATTRS
2065 _mm512_permutexvar_epi16 (__m512i __A, __m512i __B)
2066 {
2067   return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
2068                  (__v32hi) __A,
2069                  (__v32hi) _mm512_undefined_epi32 (),
2070                  (__mmask32) -1);
2071 }
2072
2073 static __inline__ __m512i __DEFAULT_FN_ATTRS
2074 _mm512_maskz_permutexvar_epi16 (__mmask32 __M, __m512i __A,
2075         __m512i __B)
2076 {
2077   return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
2078                  (__v32hi) __A,
2079                  (__v32hi) _mm512_setzero_hi(),
2080                  (__mmask32) __M);
2081 }
2082
2083 static __inline__ __m512i __DEFAULT_FN_ATTRS
2084 _mm512_mask_permutexvar_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
2085              __m512i __B)
2086 {
2087   return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
2088                  (__v32hi) __A,
2089                  (__v32hi) __W,
2090                  (__mmask32) __M);
2091 }
2092
2093 #define _mm512_alignr_epi8(A, B, N) __extension__ ({\
2094   (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \
2095                                           (__v64qi)(__m512i)(B), (int)(N), \
2096                                           (__v64qi)_mm512_undefined_pd(), \
2097                                           (__mmask64)-1); })
2098
2099 #define _mm512_mask_alignr_epi8(W, U, A, B, N) __extension__({\
2100   (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \
2101                                           (__v64qi)(__m512i)(B), (int)(N), \
2102                                           (__v64qi)(__m512i)(W), \
2103                                           (__mmask64)(U)); })
2104
2105 #define _mm512_maskz_alignr_epi8(U, A, B, N) __extension__({\
2106   (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \
2107                                           (__v64qi)(__m512i)(B), (int)(N), \
2108                                           (__v64qi)_mm512_setzero_si512(), \
2109                                           (__mmask64)(U)); })
2110
2111 #define _mm512_dbsad_epu8(A, B, imm) __extension__ ({\
2112   (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \
2113                                            (__v64qi)(__m512i)(B), (int)(imm), \
2114                                            (__v32hi)_mm512_undefined_epi32(), \
2115                                            (__mmask32)-1); })
2116
2117 #define _mm512_mask_dbsad_epu8(W, U, A, B, imm) ({\
2118   (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \
2119                                            (__v64qi)(__m512i)(B), (int)(imm), \
2120                                            (__v32hi)(__m512i)(W), \
2121                                            (__mmask32)(U)); })
2122
2123 #define _mm512_maskz_dbsad_epu8(U, A, B, imm) ({\
2124   (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \
2125                                            (__v64qi)(__m512i)(B), (int)(imm), \
2126                                            (__v32hi)_mm512_setzero_hi(), \
2127                                            (__mmask32)(U)); })
2128
2129 static __inline__ __m512i __DEFAULT_FN_ATTRS
2130 _mm512_sad_epu8 (__m512i __A, __m512i __B)
2131 {
2132  return (__m512i) __builtin_ia32_psadbw512 ((__v64qi) __A,
2133                (__v64qi) __B);
2134 }
2135
2136
2137
2138 #undef __DEFAULT_FN_ATTRS
2139
2140 #endif