blob: 0746f4394a7c4cf865ed8135e93e620982adbc63 [file] [log] [blame]
Stephen Hinesee4ca282014-12-02 17:05:12 -08001/*===---- 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
33static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
39static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesb4d9c8b2015-03-30 16:04:04 -070045static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
51static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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}
Stephen Hinesee4ca282014-12-02 17:05:12 -080056
57static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
63static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesb4d9c8b2015-03-30 16:04:04 -070069static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
75static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesee4ca282014-12-02 17:05:12 -080081static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
87static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesb4d9c8b2015-03-30 16:04:04 -070093static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
99static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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}
Stephen Hinesee4ca282014-12-02 17:05:12 -0800104
105static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
111static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesb4d9c8b2015-03-30 16:04:04 -0700117static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
123static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
129static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
135static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
141static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
147static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
153static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
159static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
165static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
171static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
177static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
183static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
189static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
195static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
201static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
207static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
213static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
219static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
225static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
231static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
237static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
243static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
249static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
255static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
261static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
267static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
273static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
279static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
285static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
291static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
297static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
303static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
309static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
315static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
321static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
327static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
333static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
339static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
345static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
351static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
357static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
363static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
369static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
375static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
381static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
387static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
393static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
399static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
405static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
411static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
417static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
423static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
429static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
435static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
441static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
447static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
453static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
459static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
465static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
471static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
477static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
483static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
489static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
495static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
501static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
507static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
513static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
519static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
525static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
531static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
537static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
543static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
549static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
555static __inline__ __mmask32 __attribute__((__always_inline__, __nodebug__))
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
561static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
567static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
573static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
579static __inline__ __mmask8 __attribute__((__always_inline__, __nodebug__))
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
585static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
591static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
597static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
603static __inline__ __mmask16 __attribute__((__always_inline__, __nodebug__))
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
Stephen Hinesee4ca282014-12-02 17:05:12 -0800689#endif /* __AVX512VLBWINTRIN_H */