avx512bwintrin.h revision 329410
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
31typedef unsigned int __mmask32;
32typedef 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
37static  __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
49static  __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
199static __inline__ __m512i __DEFAULT_FN_ATTRS
200_mm512_add_epi8 (__m512i __A, __m512i __B) {
201  return (__m512i) ((__v64qu) __A + (__v64qu) __B);
202}
203
204static __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
211static __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
218static __inline__ __m512i __DEFAULT_FN_ATTRS
219_mm512_sub_epi8 (__m512i __A, __m512i __B) {
220  return (__m512i) ((__v64qu) __A - (__v64qu) __B);
221}
222
223static __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
230static __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
237static __inline__ __m512i __DEFAULT_FN_ATTRS
238_mm512_add_epi16 (__m512i __A, __m512i __B) {
239  return (__m512i) ((__v32hu) __A + (__v32hu) __B);
240}
241
242static __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
249static __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
256static __inline__ __m512i __DEFAULT_FN_ATTRS
257_mm512_sub_epi16 (__m512i __A, __m512i __B) {
258  return (__m512i) ((__v32hu) __A - (__v32hu) __B);
259}
260
261static __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
268static __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
275static __inline__ __m512i __DEFAULT_FN_ATTRS
276_mm512_mullo_epi16 (__m512i __A, __m512i __B) {
277  return (__m512i) ((__v32hu) __A * (__v32hu) __B);
278}
279
280static __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
287static __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
294static __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
302static __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
310static __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
318static __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
326static __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
334static __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
342static __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
350static __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
358static __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
364static __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
372static __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
380static __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
386static __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
394static __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
402static __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
408static __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
416static __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
424static __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
430static __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
438static __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
446static __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
455static __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
465static __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
474static __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
483static __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
493static __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
502static __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
511static __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
521static __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
530static __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
539static __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
549static __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
558static __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
568static __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
577static __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
585static __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
595static __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
604static __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
612static __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
621static __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
630static __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
640static __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
649static __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
658static __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
668static __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
677static __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
686static __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
696static __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
705static __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
714static __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
724static __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
733static __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
742static __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
752static __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
761static __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
770static __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
780static __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
789static __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
798static __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
808static __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
817static __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
826static __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
836static __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
842static __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
850static __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
858static __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
867static __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
877static __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
886static __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
895static __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
905static __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
914static __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
923static __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
933static __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
942static __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
951static __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
961static __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
970static __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
980static __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
989static __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
999static __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
1010static __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
1019static __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
1029static __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
1038static __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
1047static __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
1057static __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
1066static __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
1075static __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
1085static __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
1094static __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
1102static __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
1111static __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
1119static __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
1127static __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
1136static __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
1144static __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
1151static __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
1158static __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
1165static __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
1172static __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
1179static __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
1186static __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
1193static __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
1200static __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
1207static __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
1213static __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
1219static __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
1225static __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
1246static __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
1253static __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
1260static __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
1273static __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
1280static __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
1287static __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
1308static __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
1315static __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
1322static __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
1335static __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
1342static __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
1349static __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
1357static __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
1365static __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
1373static __inline__ __m512i __DEFAULT_FN_ATTRS
1374_mm512_cvtepu8_epi16(__m256i __A)
1375{
1376  return (__m512i)__builtin_convertvector((__v32qu)__A, __v32hi);
1377}
1378
1379static __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
1387static __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
1470static __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
1476static __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
1484static __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
1492static __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
1498static __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
1506static __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
1514static __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
1520static __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
1528static __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
1605static __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
1611static __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
1619static __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
1627static __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
1633static __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
1641static __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
1649static __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
1655static __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
1663static __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
1671static __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
1677static __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
1685static __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
1693static __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
1699static __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
1707static __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
1715static __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
1721static __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
1729static __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
1806static __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
1814static __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
1822static __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
1830static __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
1838static __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
1846static __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
1854static __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
1861static __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
1868static __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
1876static __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
1885static __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
1893static __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}
1901static __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
1909static __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
1917static __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
1924static __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
1931static __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
1938static __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
1945static __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
1951static __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
1958static __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
1965static __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
1972static __inline__ __mmask64 __DEFAULT_FN_ATTRS
1973_mm512_movepi8_mask (__m512i __A)
1974{
1975  return (__mmask64) __builtin_ia32_cvtb2mask512 ((__v64qi) __A);
1976}
1977
1978static __inline__ __mmask32 __DEFAULT_FN_ATTRS
1979_mm512_movepi16_mask (__m512i __A)
1980{
1981  return (__mmask32) __builtin_ia32_cvtw2mask512 ((__v32hi) __A);
1982}
1983
1984static __inline__ __m512i __DEFAULT_FN_ATTRS
1985_mm512_movm_epi8 (__mmask64 __A)
1986{
1987  return (__m512i) __builtin_ia32_cvtmask2b512 (__A);
1988}
1989
1990static __inline__ __m512i __DEFAULT_FN_ATTRS
1991_mm512_movm_epi16 (__mmask32 __A)
1992{
1993  return (__m512i) __builtin_ia32_cvtmask2w512 (__A);
1994}
1995
1996static __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
2007static __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
2015static __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
2023static __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
2031static __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
2039static __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
2048static __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
2056static __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
2064static __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
2073static __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
2083static __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
2129static __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
2141