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