1 /*===---- avx512vlbwintrin.h - AVX512VL and AVX512BW intrinsics ----------===
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to deal
5  * in the Software without restriction, including without limitation the rights
6  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7  * copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19  * THE SOFTWARE.
20  *
21  *===-----------------------------------------------------------------------===
22  */
23 
24 #ifndef __IMMINTRIN_H
25 #error "Never use <avx512vlbwintrin.h> directly; include <immintrin.h> instead."
26 #endif
27 
28 #ifndef __AVX512VLBWINTRIN_H
29 #define __AVX512VLBWINTRIN_H
30 
31 /* Integer compare */
32 
33 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epi8_mask(__m128i __a,__m128i __b)34 _mm_cmpeq_epi8_mask(__m128i __a, __m128i __b) {
35   return (__mmask16)__builtin_ia32_pcmpeqb128_mask((__v16qi)__a, (__v16qi)__b,
36                                                    (__mmask16)-1);
37 }
38 
39 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)40 _mm_mask_cmpeq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
41   return (__mmask16)__builtin_ia32_pcmpeqb128_mask((__v16qi)__a, (__v16qi)__b,
42                                                    __u);
43 }
44 
45 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epu8_mask(__m128i __a,__m128i __b)46 _mm_cmpeq_epu8_mask(__m128i __a, __m128i __b) {
47   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 0,
48                                                  (__mmask16)-1);
49 }
50 
51 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)52 _mm_mask_cmpeq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
53   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 0,
54                                                  __u);
55 }
56 
57 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epi8_mask(__m256i __a,__m256i __b)58 _mm256_cmpeq_epi8_mask(__m256i __a, __m256i __b) {
59   return (__mmask32)__builtin_ia32_pcmpeqb256_mask((__v32qi)__a, (__v32qi)__b,
60                                                    (__mmask32)-1);
61 }
62 
63 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)64 _mm256_mask_cmpeq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
65   return (__mmask32)__builtin_ia32_pcmpeqb256_mask((__v32qi)__a, (__v32qi)__b,
66                                                    __u);
67 }
68 
69 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epu8_mask(__m256i __a,__m256i __b)70 _mm256_cmpeq_epu8_mask(__m256i __a, __m256i __b) {
71   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 0,
72                                                  (__mmask32)-1);
73 }
74 
75 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)76 _mm256_mask_cmpeq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
77   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 0,
78                                                  __u);
79 }
80 
81 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epi16_mask(__m128i __a,__m128i __b)82 _mm_cmpeq_epi16_mask(__m128i __a, __m128i __b) {
83   return (__mmask8)__builtin_ia32_pcmpeqw128_mask((__v8hi)__a, (__v8hi)__b,
84                                                   (__mmask8)-1);
85 }
86 
87 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)88 _mm_mask_cmpeq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
89   return (__mmask8)__builtin_ia32_pcmpeqw128_mask((__v8hi)__a, (__v8hi)__b,
90                                                   __u);
91 }
92 
93 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpeq_epu16_mask(__m128i __a,__m128i __b)94 _mm_cmpeq_epu16_mask(__m128i __a, __m128i __b) {
95   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 0,
96                                                 (__mmask8)-1);
97 }
98 
99 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpeq_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)100 _mm_mask_cmpeq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
101   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 0,
102                                                 __u);
103 }
104 
105 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epi16_mask(__m256i __a,__m256i __b)106 _mm256_cmpeq_epi16_mask(__m256i __a, __m256i __b) {
107   return (__mmask16)__builtin_ia32_pcmpeqw256_mask((__v16hi)__a, (__v16hi)__b,
108                                                    (__mmask16)-1);
109 }
110 
111 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)112 _mm256_mask_cmpeq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
113   return (__mmask16)__builtin_ia32_pcmpeqw256_mask((__v16hi)__a, (__v16hi)__b,
114                                                    __u);
115 }
116 
117 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpeq_epu16_mask(__m256i __a,__m256i __b)118 _mm256_cmpeq_epu16_mask(__m256i __a, __m256i __b) {
119   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 0,
120                                                  (__mmask16)-1);
121 }
122 
123 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpeq_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)124 _mm256_mask_cmpeq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
125   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 0,
126                                                  __u);
127 }
128 
129 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpge_epi8_mask(__m128i __a,__m128i __b)130 _mm_cmpge_epi8_mask(__m128i __a, __m128i __b) {
131   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 5,
132                                                 (__mmask16)-1);
133 }
134 
135 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpge_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)136 _mm_mask_cmpge_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
137   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 5,
138                                                 __u);
139 }
140 
141 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpge_epu8_mask(__m128i __a,__m128i __b)142 _mm_cmpge_epu8_mask(__m128i __a, __m128i __b) {
143   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 5,
144                                                  (__mmask16)-1);
145 }
146 
147 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpge_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)148 _mm_mask_cmpge_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
149   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 5,
150                                                  __u);
151 }
152 
153 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpge_epi8_mask(__m256i __a,__m256i __b)154 _mm256_cmpge_epi8_mask(__m256i __a, __m256i __b) {
155   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 5,
156                                                 (__mmask32)-1);
157 }
158 
159 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpge_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)160 _mm256_mask_cmpge_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
161   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 5,
162                                                 __u);
163 }
164 
165 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpge_epu8_mask(__m256i __a,__m256i __b)166 _mm256_cmpge_epu8_mask(__m256i __a, __m256i __b) {
167   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 5,
168                                                  (__mmask32)-1);
169 }
170 
171 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpge_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)172 _mm256_mask_cmpge_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
173   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 5,
174                                                  __u);
175 }
176 
177 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpge_epi16_mask(__m128i __a,__m128i __b)178 _mm_cmpge_epi16_mask(__m128i __a, __m128i __b) {
179   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 5,
180                                                (__mmask8)-1);
181 }
182 
183 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpge_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)184 _mm_mask_cmpge_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
185   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 5,
186                                                __u);
187 }
188 
189 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpge_epu16_mask(__m128i __a,__m128i __b)190 _mm_cmpge_epu16_mask(__m128i __a, __m128i __b) {
191   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 5,
192                                                 (__mmask8)-1);
193 }
194 
195 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpge_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)196 _mm_mask_cmpge_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
197   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 5,
198                                                 __u);
199 }
200 
201 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpge_epi16_mask(__m256i __a,__m256i __b)202 _mm256_cmpge_epi16_mask(__m256i __a, __m256i __b) {
203   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 5,
204                                                 (__mmask16)-1);
205 }
206 
207 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpge_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)208 _mm256_mask_cmpge_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
209   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 5,
210                                                 __u);
211 }
212 
213 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpge_epu16_mask(__m256i __a,__m256i __b)214 _mm256_cmpge_epu16_mask(__m256i __a, __m256i __b) {
215   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 5,
216                                                  (__mmask16)-1);
217 }
218 
219 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpge_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)220 _mm256_mask_cmpge_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
221   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 5,
222                                                  __u);
223 }
224 
225 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpgt_epi8_mask(__m128i __a,__m128i __b)226 _mm_cmpgt_epi8_mask(__m128i __a, __m128i __b) {
227   return (__mmask16)__builtin_ia32_pcmpgtb128_mask((__v16qi)__a, (__v16qi)__b,
228                                                    (__mmask16)-1);
229 }
230 
231 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpgt_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)232 _mm_mask_cmpgt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
233   return (__mmask16)__builtin_ia32_pcmpgtb128_mask((__v16qi)__a, (__v16qi)__b,
234                                                    __u);
235 }
236 
237 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpgt_epu8_mask(__m128i __a,__m128i __b)238 _mm_cmpgt_epu8_mask(__m128i __a, __m128i __b) {
239   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 6,
240                                                  (__mmask16)-1);
241 }
242 
243 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpgt_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)244 _mm_mask_cmpgt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
245   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 6,
246                                                  __u);
247 }
248 
249 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpgt_epi8_mask(__m256i __a,__m256i __b)250 _mm256_cmpgt_epi8_mask(__m256i __a, __m256i __b) {
251   return (__mmask32)__builtin_ia32_pcmpgtb256_mask((__v32qi)__a, (__v32qi)__b,
252                                                    (__mmask32)-1);
253 }
254 
255 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpgt_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)256 _mm256_mask_cmpgt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
257   return (__mmask32)__builtin_ia32_pcmpgtb256_mask((__v32qi)__a, (__v32qi)__b,
258                                                    __u);
259 }
260 
261 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpgt_epu8_mask(__m256i __a,__m256i __b)262 _mm256_cmpgt_epu8_mask(__m256i __a, __m256i __b) {
263   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 6,
264                                                  (__mmask32)-1);
265 }
266 
267 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpgt_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)268 _mm256_mask_cmpgt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
269   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 6,
270                                                  __u);
271 }
272 
273 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpgt_epi16_mask(__m128i __a,__m128i __b)274 _mm_cmpgt_epi16_mask(__m128i __a, __m128i __b) {
275   return (__mmask8)__builtin_ia32_pcmpgtw128_mask((__v8hi)__a, (__v8hi)__b,
276                                                   (__mmask8)-1);
277 }
278 
279 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpgt_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)280 _mm_mask_cmpgt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
281   return (__mmask8)__builtin_ia32_pcmpgtw128_mask((__v8hi)__a, (__v8hi)__b,
282                                                   __u);
283 }
284 
285 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpgt_epu16_mask(__m128i __a,__m128i __b)286 _mm_cmpgt_epu16_mask(__m128i __a, __m128i __b) {
287   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 6,
288                                                 (__mmask8)-1);
289 }
290 
291 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpgt_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)292 _mm_mask_cmpgt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
293   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 6,
294                                                 __u);
295 }
296 
297 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpgt_epi16_mask(__m256i __a,__m256i __b)298 _mm256_cmpgt_epi16_mask(__m256i __a, __m256i __b) {
299   return (__mmask16)__builtin_ia32_pcmpgtw256_mask((__v16hi)__a, (__v16hi)__b,
300                                                    (__mmask16)-1);
301 }
302 
303 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpgt_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)304 _mm256_mask_cmpgt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
305   return (__mmask16)__builtin_ia32_pcmpgtw256_mask((__v16hi)__a, (__v16hi)__b,
306                                                    __u);
307 }
308 
309 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpgt_epu16_mask(__m256i __a,__m256i __b)310 _mm256_cmpgt_epu16_mask(__m256i __a, __m256i __b) {
311   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 6,
312                                                  (__mmask16)-1);
313 }
314 
315 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpgt_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)316 _mm256_mask_cmpgt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
317   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 6,
318                                                  __u);
319 }
320 
321 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmple_epi8_mask(__m128i __a,__m128i __b)322 _mm_cmple_epi8_mask(__m128i __a, __m128i __b) {
323   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 2,
324                                                 (__mmask16)-1);
325 }
326 
327 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmple_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)328 _mm_mask_cmple_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
329   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 2,
330                                                 __u);
331 }
332 
333 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmple_epu8_mask(__m128i __a,__m128i __b)334 _mm_cmple_epu8_mask(__m128i __a, __m128i __b) {
335   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 2,
336                                                  (__mmask16)-1);
337 }
338 
339 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmple_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)340 _mm_mask_cmple_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
341   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 2,
342                                                  __u);
343 }
344 
345 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmple_epi8_mask(__m256i __a,__m256i __b)346 _mm256_cmple_epi8_mask(__m256i __a, __m256i __b) {
347   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 2,
348                                                 (__mmask32)-1);
349 }
350 
351 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmple_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)352 _mm256_mask_cmple_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
353   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 2,
354                                                 __u);
355 }
356 
357 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmple_epu8_mask(__m256i __a,__m256i __b)358 _mm256_cmple_epu8_mask(__m256i __a, __m256i __b) {
359   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 2,
360                                                  (__mmask32)-1);
361 }
362 
363 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmple_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)364 _mm256_mask_cmple_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
365   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 2,
366                                                  __u);
367 }
368 
369 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmple_epi16_mask(__m128i __a,__m128i __b)370 _mm_cmple_epi16_mask(__m128i __a, __m128i __b) {
371   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 2,
372                                                (__mmask8)-1);
373 }
374 
375 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmple_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)376 _mm_mask_cmple_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
377   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 2,
378                                                __u);
379 }
380 
381 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmple_epu16_mask(__m128i __a,__m128i __b)382 _mm_cmple_epu16_mask(__m128i __a, __m128i __b) {
383   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 2,
384                                                 (__mmask8)-1);
385 }
386 
387 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmple_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)388 _mm_mask_cmple_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
389   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 2,
390                                                 __u);
391 }
392 
393 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmple_epi16_mask(__m256i __a,__m256i __b)394 _mm256_cmple_epi16_mask(__m256i __a, __m256i __b) {
395   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 2,
396                                                 (__mmask16)-1);
397 }
398 
399 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmple_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)400 _mm256_mask_cmple_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
401   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 2,
402                                                 __u);
403 }
404 
405 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmple_epu16_mask(__m256i __a,__m256i __b)406 _mm256_cmple_epu16_mask(__m256i __a, __m256i __b) {
407   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 2,
408                                                  (__mmask16)-1);
409 }
410 
411 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmple_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)412 _mm256_mask_cmple_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
413   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 2,
414                                                  __u);
415 }
416 
417 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmplt_epi8_mask(__m128i __a,__m128i __b)418 _mm_cmplt_epi8_mask(__m128i __a, __m128i __b) {
419   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 1,
420                                                 (__mmask16)-1);
421 }
422 
423 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmplt_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)424 _mm_mask_cmplt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
425   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 1,
426                                                 __u);
427 }
428 
429 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmplt_epu8_mask(__m128i __a,__m128i __b)430 _mm_cmplt_epu8_mask(__m128i __a, __m128i __b) {
431   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 1,
432                                                  (__mmask16)-1);
433 }
434 
435 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmplt_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)436 _mm_mask_cmplt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
437   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 1,
438                                                  __u);
439 }
440 
441 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmplt_epi8_mask(__m256i __a,__m256i __b)442 _mm256_cmplt_epi8_mask(__m256i __a, __m256i __b) {
443   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 1,
444                                                 (__mmask32)-1);
445 }
446 
447 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmplt_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)448 _mm256_mask_cmplt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
449   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 1,
450                                                 __u);
451 }
452 
453 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmplt_epu8_mask(__m256i __a,__m256i __b)454 _mm256_cmplt_epu8_mask(__m256i __a, __m256i __b) {
455   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 1,
456                                                  (__mmask32)-1);
457 }
458 
459 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmplt_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)460 _mm256_mask_cmplt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
461   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 1,
462                                                  __u);
463 }
464 
465 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmplt_epi16_mask(__m128i __a,__m128i __b)466 _mm_cmplt_epi16_mask(__m128i __a, __m128i __b) {
467   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 1,
468                                                (__mmask8)-1);
469 }
470 
471 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmplt_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)472 _mm_mask_cmplt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
473   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 1,
474                                                __u);
475 }
476 
477 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmplt_epu16_mask(__m128i __a,__m128i __b)478 _mm_cmplt_epu16_mask(__m128i __a, __m128i __b) {
479   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 1,
480                                                 (__mmask8)-1);
481 }
482 
483 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmplt_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)484 _mm_mask_cmplt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
485   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 1,
486                                                 __u);
487 }
488 
489 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmplt_epi16_mask(__m256i __a,__m256i __b)490 _mm256_cmplt_epi16_mask(__m256i __a, __m256i __b) {
491   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 1,
492                                                 (__mmask16)-1);
493 }
494 
495 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmplt_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)496 _mm256_mask_cmplt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
497   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 1,
498                                                 __u);
499 }
500 
501 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmplt_epu16_mask(__m256i __a,__m256i __b)502 _mm256_cmplt_epu16_mask(__m256i __a, __m256i __b) {
503   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 1,
504                                                  (__mmask16)-1);
505 }
506 
507 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmplt_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)508 _mm256_mask_cmplt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
509   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 1,
510                                                  __u);
511 }
512 
513 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpneq_epi8_mask(__m128i __a,__m128i __b)514 _mm_cmpneq_epi8_mask(__m128i __a, __m128i __b) {
515   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 4,
516                                                 (__mmask16)-1);
517 }
518 
519 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpneq_epi8_mask(__mmask16 __u,__m128i __a,__m128i __b)520 _mm_mask_cmpneq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
521   return (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)__a, (__v16qi)__b, 4,
522                                                 __u);
523 }
524 
525 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_cmpneq_epu8_mask(__m128i __a,__m128i __b)526 _mm_cmpneq_epu8_mask(__m128i __a, __m128i __b) {
527   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 4,
528                                                  (__mmask16)-1);
529 }
530 
531 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpneq_epu8_mask(__mmask16 __u,__m128i __a,__m128i __b)532 _mm_mask_cmpneq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) {
533   return (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)__a, (__v16qi)__b, 4,
534                                                  __u);
535 }
536 
537 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpneq_epi8_mask(__m256i __a,__m256i __b)538 _mm256_cmpneq_epi8_mask(__m256i __a, __m256i __b) {
539   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 4,
540                                                 (__mmask32)-1);
541 }
542 
543 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpneq_epi8_mask(__mmask32 __u,__m256i __a,__m256i __b)544 _mm256_mask_cmpneq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
545   return (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)__a, (__v32qi)__b, 4,
546                                                 __u);
547 }
548 
549 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpneq_epu8_mask(__m256i __a,__m256i __b)550 _mm256_cmpneq_epu8_mask(__m256i __a, __m256i __b) {
551   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 4,
552                                                  (__mmask32)-1);
553 }
554 
555 static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpneq_epu8_mask(__mmask32 __u,__m256i __a,__m256i __b)556 _mm256_mask_cmpneq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) {
557   return (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)__a, (__v32qi)__b, 4,
558                                                  __u);
559 }
560 
561 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpneq_epi16_mask(__m128i __a,__m128i __b)562 _mm_cmpneq_epi16_mask(__m128i __a, __m128i __b) {
563   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 4,
564                                                (__mmask8)-1);
565 }
566 
567 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpneq_epi16_mask(__mmask8 __u,__m128i __a,__m128i __b)568 _mm_mask_cmpneq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
569   return (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)__a, (__v8hi)__b, 4,
570                                                __u);
571 }
572 
573 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_cmpneq_epu16_mask(__m128i __a,__m128i __b)574 _mm_cmpneq_epu16_mask(__m128i __a, __m128i __b) {
575   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 4,
576                                                 (__mmask8)-1);
577 }
578 
579 static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
_mm_mask_cmpneq_epu16_mask(__mmask8 __u,__m128i __a,__m128i __b)580 _mm_mask_cmpneq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) {
581   return (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)__a, (__v8hi)__b, 4,
582                                                 __u);
583 }
584 
585 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpneq_epi16_mask(__m256i __a,__m256i __b)586 _mm256_cmpneq_epi16_mask(__m256i __a, __m256i __b) {
587   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 4,
588                                                 (__mmask16)-1);
589 }
590 
591 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpneq_epi16_mask(__mmask16 __u,__m256i __a,__m256i __b)592 _mm256_mask_cmpneq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
593   return (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)__a, (__v16hi)__b, 4,
594                                                 __u);
595 }
596 
597 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_cmpneq_epu16_mask(__m256i __a,__m256i __b)598 _mm256_cmpneq_epu16_mask(__m256i __a, __m256i __b) {
599   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 4,
600                                                  (__mmask16)-1);
601 }
602 
603 static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
_mm256_mask_cmpneq_epu16_mask(__mmask16 __u,__m256i __a,__m256i __b)604 _mm256_mask_cmpneq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) {
605   return (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)__a, (__v16hi)__b, 4,
606                                                  __u);
607 }
608 
609 #define _mm_cmp_epi8_mask(a, b, p) __extension__ ({ \
610   (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \
611                                          (__v16qi)(__m128i)(b), \
612                                          (p), (__mmask16)-1); })
613 
614 #define _mm_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \
615   (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \
616                                          (__v16qi)(__m128i)(b), \
617                                          (p), (__mmask16)(m)); })
618 
619 #define _mm_cmp_epu8_mask(a, b, p) __extension__ ({ \
620   (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)(__m128i)(a), \
621                                           (__v16qi)(__m128i)(b), \
622                                           (p), (__mmask16)-1); })
623 
624 #define _mm_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \
625   (__mmask16)__builtin_ia32_ucmpb128_mask((__v16qi)(__m128i)(a), \
626                                           (__v16qi)(__m128i)(b), \
627                                           (p), (__mmask16)(m)); })
628 
629 #define _mm256_cmp_epi8_mask(a, b, p) __extension__ ({ \
630   (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)(__m256i)(a), \
631                                          (__v32qi)(__m256i)(b), \
632                                          (p), (__mmask32)-1); })
633 
634 #define _mm256_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \
635   (__mmask32)__builtin_ia32_cmpb256_mask((__v32qi)(__m256i)(a), \
636                                          (__v32qi)(__m256i)(b), \
637                                          (p), (__mmask32)(m)); })
638 
639 #define _mm256_cmp_epu8_mask(a, b, p) __extension__ ({ \
640   (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)(__m256i)(a), \
641                                           (__v32qi)(__m256i)(b), \
642                                           (p), (__mmask32)-1); })
643 
644 #define _mm256_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \
645   (__mmask32)__builtin_ia32_ucmpb256_mask((__v32qi)(__m256i)(a), \
646                                           (__v32qi)(__m256i)(b), \
647                                           (p), (__mmask32)(m)); })
648 
649 #define _mm_cmp_epi16_mask(a, b, p) __extension__ ({ \
650   (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)(__m128i)(a), \
651                                         (__v8hi)(__m128i)(b), \
652                                         (p), (__mmask8)-1); })
653 
654 #define _mm_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \
655   (__mmask8)__builtin_ia32_cmpw128_mask((__v8hi)(__m128i)(a), \
656                                         (__v8hi)(__m128i)(b), \
657                                         (p), (__mmask8)(m)); })
658 
659 #define _mm_cmp_epu16_mask(a, b, p) __extension__ ({ \
660   (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)(__m128i)(a), \
661                                          (__v8hi)(__m128i)(b), \
662                                          (p), (__mmask8)-1); })
663 
664 #define _mm_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \
665   (__mmask8)__builtin_ia32_ucmpw128_mask((__v8hi)(__m128i)(a), \
666                                          (__v8hi)(__m128i)(b), \
667                                          (p), (__mmask8)(m)); })
668 
669 #define _mm256_cmp_epi16_mask(a, b, p) __extension__ ({ \
670   (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)(__m256i)(a), \
671                                          (__v16hi)(__m256i)(b), \
672                                          (p), (__mmask16)-1); })
673 
674 #define _mm256_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \
675   (__mmask16)__builtin_ia32_cmpw256_mask((__v16hi)(__m256i)(a), \
676                                          (__v16hi)(__m256i)(b), \
677                                          (p), (__mmask16)(m)); })
678 
679 #define _mm256_cmp_epu16_mask(a, b, p) __extension__ ({ \
680   (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)(__m256i)(a), \
681                                           (__v16hi)(__m256i)(b), \
682                                           (p), (__mmask16)-1); })
683 
684 #define _mm256_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \
685   (__mmask16)__builtin_ia32_ucmpw256_mask((__v16hi)(__m256i)(a), \
686                                           (__v16hi)(__m256i)(b), \
687                                           (p), (__mmask16)(m)); })
688 
689 #endif /* __AVX512VLBWINTRIN_H */
690