1 /*===------------- avx512bwintrin.h - AVX512BW intrinsics ------------------===
2  *
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  *
22  *===-----------------------------------------------------------------------===
23  */
24 #ifndef __IMMINTRIN_H
25 #error "Never use <avx512bwintrin.h> directly; include <immintrin.h> instead."
26 #endif
27 
28 #ifndef __AVX512BWINTRIN_H
29 #define __AVX512BWINTRIN_H
30 
31 typedef unsigned int __mmask32;
32 typedef unsigned long long __mmask64;
33 typedef char __v64qi __attribute__ ((__vector_size__ (64)));
34 typedef short __v32hi __attribute__ ((__vector_size__ (64)));
35 
36 
37 /* Integer compare */
38 
39 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi8_mask(__m512i __a,__m512i __b)40 _mm512_cmpeq_epi8_mask(__m512i __a, __m512i __b) {
41   return (__mmask64)__builtin_ia32_pcmpeqb512_mask((__v64qi)__a, (__v64qi)__b,
42                                                    (__mmask64)-1);
43 }
44 
45 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)46 _mm512_mask_cmpeq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
47   return (__mmask64)__builtin_ia32_pcmpeqb512_mask((__v64qi)__a, (__v64qi)__b,
48                                                    __u);
49 }
50 
51 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epu8_mask(__m512i __a,__m512i __b)52 _mm512_cmpeq_epu8_mask(__m512i __a, __m512i __b) {
53   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 0,
54                                                  (__mmask64)-1);
55 }
56 
57 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)58 _mm512_mask_cmpeq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
59   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 0,
60                                                  __u);
61 }
62 
63 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epi16_mask(__m512i __a,__m512i __b)64 _mm512_cmpeq_epi16_mask(__m512i __a, __m512i __b) {
65   return (__mmask32)__builtin_ia32_pcmpeqw512_mask((__v32hi)__a, (__v32hi)__b,
66                                                    (__mmask32)-1);
67 }
68 
69 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)70 _mm512_mask_cmpeq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
71   return (__mmask32)__builtin_ia32_pcmpeqw512_mask((__v32hi)__a, (__v32hi)__b,
72                                                    __u);
73 }
74 
75 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpeq_epu16_mask(__m512i __a,__m512i __b)76 _mm512_cmpeq_epu16_mask(__m512i __a, __m512i __b) {
77   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 0,
78                                                  (__mmask32)-1);
79 }
80 
81 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpeq_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)82 _mm512_mask_cmpeq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
83   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 0,
84                                                  __u);
85 }
86 
87 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epi8_mask(__m512i __a,__m512i __b)88 _mm512_cmpge_epi8_mask(__m512i __a, __m512i __b) {
89   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 5,
90                                                 (__mmask64)-1);
91 }
92 
93 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)94 _mm512_mask_cmpge_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
95   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 5,
96                                                 __u);
97 }
98 
99 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epu8_mask(__m512i __a,__m512i __b)100 _mm512_cmpge_epu8_mask(__m512i __a, __m512i __b) {
101   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 5,
102                                                  (__mmask64)-1);
103 }
104 
105 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)106 _mm512_mask_cmpge_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
107   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 5,
108                                                  __u);
109 }
110 
111 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epi16_mask(__m512i __a,__m512i __b)112 _mm512_cmpge_epi16_mask(__m512i __a, __m512i __b) {
113   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 5,
114                                                 (__mmask32)-1);
115 }
116 
117 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)118 _mm512_mask_cmpge_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
119   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 5,
120                                                 __u);
121 }
122 
123 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpge_epu16_mask(__m512i __a,__m512i __b)124 _mm512_cmpge_epu16_mask(__m512i __a, __m512i __b) {
125   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 5,
126                                                  (__mmask32)-1);
127 }
128 
129 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpge_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)130 _mm512_mask_cmpge_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
131   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 5,
132                                                  __u);
133 }
134 
135 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epi8_mask(__m512i __a,__m512i __b)136 _mm512_cmpgt_epi8_mask(__m512i __a, __m512i __b) {
137   return (__mmask64)__builtin_ia32_pcmpgtb512_mask((__v64qi)__a, (__v64qi)__b,
138                                                    (__mmask64)-1);
139 }
140 
141 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)142 _mm512_mask_cmpgt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
143   return (__mmask64)__builtin_ia32_pcmpgtb512_mask((__v64qi)__a, (__v64qi)__b,
144                                                    __u);
145 }
146 
147 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epu8_mask(__m512i __a,__m512i __b)148 _mm512_cmpgt_epu8_mask(__m512i __a, __m512i __b) {
149   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 6,
150                                                  (__mmask64)-1);
151 }
152 
153 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)154 _mm512_mask_cmpgt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
155   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 6,
156                                                  __u);
157 }
158 
159 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epi16_mask(__m512i __a,__m512i __b)160 _mm512_cmpgt_epi16_mask(__m512i __a, __m512i __b) {
161   return (__mmask32)__builtin_ia32_pcmpgtw512_mask((__v32hi)__a, (__v32hi)__b,
162                                                    (__mmask32)-1);
163 }
164 
165 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)166 _mm512_mask_cmpgt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
167   return (__mmask32)__builtin_ia32_pcmpgtw512_mask((__v32hi)__a, (__v32hi)__b,
168                                                    __u);
169 }
170 
171 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpgt_epu16_mask(__m512i __a,__m512i __b)172 _mm512_cmpgt_epu16_mask(__m512i __a, __m512i __b) {
173   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 6,
174                                                  (__mmask32)-1);
175 }
176 
177 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpgt_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)178 _mm512_mask_cmpgt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
179   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 6,
180                                                  __u);
181 }
182 
183 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epi8_mask(__m512i __a,__m512i __b)184 _mm512_cmple_epi8_mask(__m512i __a, __m512i __b) {
185   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 2,
186                                                 (__mmask64)-1);
187 }
188 
189 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)190 _mm512_mask_cmple_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
191   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 2,
192                                                 __u);
193 }
194 
195 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epu8_mask(__m512i __a,__m512i __b)196 _mm512_cmple_epu8_mask(__m512i __a, __m512i __b) {
197   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 2,
198                                                  (__mmask64)-1);
199 }
200 
201 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)202 _mm512_mask_cmple_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
203   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 2,
204                                                  __u);
205 }
206 
207 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epi16_mask(__m512i __a,__m512i __b)208 _mm512_cmple_epi16_mask(__m512i __a, __m512i __b) {
209   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 2,
210                                                 (__mmask32)-1);
211 }
212 
213 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)214 _mm512_mask_cmple_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
215   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 2,
216                                                 __u);
217 }
218 
219 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmple_epu16_mask(__m512i __a,__m512i __b)220 _mm512_cmple_epu16_mask(__m512i __a, __m512i __b) {
221   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 2,
222                                                  (__mmask32)-1);
223 }
224 
225 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmple_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)226 _mm512_mask_cmple_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
227   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 2,
228                                                  __u);
229 }
230 
231 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epi8_mask(__m512i __a,__m512i __b)232 _mm512_cmplt_epi8_mask(__m512i __a, __m512i __b) {
233   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 1,
234                                                 (__mmask64)-1);
235 }
236 
237 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)238 _mm512_mask_cmplt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
239   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 1,
240                                                 __u);
241 }
242 
243 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epu8_mask(__m512i __a,__m512i __b)244 _mm512_cmplt_epu8_mask(__m512i __a, __m512i __b) {
245   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 1,
246                                                  (__mmask64)-1);
247 }
248 
249 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)250 _mm512_mask_cmplt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
251   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 1,
252                                                  __u);
253 }
254 
255 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epi16_mask(__m512i __a,__m512i __b)256 _mm512_cmplt_epi16_mask(__m512i __a, __m512i __b) {
257   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 1,
258                                                 (__mmask32)-1);
259 }
260 
261 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)262 _mm512_mask_cmplt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
263   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 1,
264                                                 __u);
265 }
266 
267 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmplt_epu16_mask(__m512i __a,__m512i __b)268 _mm512_cmplt_epu16_mask(__m512i __a, __m512i __b) {
269   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 1,
270                                                  (__mmask32)-1);
271 }
272 
273 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmplt_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)274 _mm512_mask_cmplt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
275   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 1,
276                                                  __u);
277 }
278 
279 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epi8_mask(__m512i __a,__m512i __b)280 _mm512_cmpneq_epi8_mask(__m512i __a, __m512i __b) {
281   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 4,
282                                                 (__mmask64)-1);
283 }
284 
285 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epi8_mask(__mmask64 __u,__m512i __a,__m512i __b)286 _mm512_mask_cmpneq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
287   return (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)__a, (__v64qi)__b, 4,
288                                                 __u);
289 }
290 
291 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epu8_mask(__m512i __a,__m512i __b)292 _mm512_cmpneq_epu8_mask(__m512i __a, __m512i __b) {
293   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 4,
294                                                  (__mmask64)-1);
295 }
296 
297 static __inline__ __mmask64 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epu8_mask(__mmask64 __u,__m512i __a,__m512i __b)298 _mm512_mask_cmpneq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) {
299   return (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)__a, (__v64qi)__b, 4,
300                                                  __u);
301 }
302 
303 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epi16_mask(__m512i __a,__m512i __b)304 _mm512_cmpneq_epi16_mask(__m512i __a, __m512i __b) {
305   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 4,
306                                                 (__mmask32)-1);
307 }
308 
309 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epi16_mask(__mmask32 __u,__m512i __a,__m512i __b)310 _mm512_mask_cmpneq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
311   return (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)__a, (__v32hi)__b, 4,
312                                                 __u);
313 }
314 
315 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_cmpneq_epu16_mask(__m512i __a,__m512i __b)316 _mm512_cmpneq_epu16_mask(__m512i __a, __m512i __b) {
317   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 4,
318                                                  (__mmask32)-1);
319 }
320 
321 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm512_mask_cmpneq_epu16_mask(__mmask32 __u,__m512i __a,__m512i __b)322 _mm512_mask_cmpneq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) {
323   return (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)__a, (__v32hi)__b, 4,
324                                                  __u);
325 }
326 
327 #define _mm512_cmp_epi8_mask(a, b, p) __extension__ ({ \
328   (__mmask16)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \
329                                          (__v64qi)(__m512i)(b), \
330                                          (p), (__mmask64)-1); })
331 
332 #define _mm512_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \
333   (__mmask16)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \
334                                          (__v64qi)(__m512i)(b), \
335                                          (p), (__mmask64)(m)); })
336 
337 #define _mm512_cmp_epu8_mask(a, b, p) __extension__ ({ \
338   (__mmask16)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \
339                                           (__v64qi)(__m512i)(b), \
340                                           (p), (__mmask64)-1); })
341 
342 #define _mm512_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \
343   (__mmask16)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \
344                                           (__v64qi)(__m512i)(b), \
345                                           (p), (__mmask64)(m)); })
346 
347 #define _mm512_cmp_epi16_mask(a, b, p) __extension__ ({ \
348   (__mmask16)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \
349                                          (__v32hi)(__m512i)(b), \
350                                          (p), (__mmask32)-1); })
351 
352 #define _mm512_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \
353   (__mmask16)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \
354                                          (__v32hi)(__m512i)(b), \
355                                          (p), (__mmask32)(m)); })
356 
357 #define _mm512_cmp_epu16_mask(a, b, p) __extension__ ({ \
358   (__mmask16)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
359                                           (__v32hi)(__m512i)(b), \
360                                           (p), (__mmask32)-1); })
361 
362 #define _mm512_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \
363   (__mmask16)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \
364                                           (__v32hi)(__m512i)(b), \
365                                           (p), (__mmask32)(m)); })
366 
367 #endif
368