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