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 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 45static __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} 56 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 69static __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 81static __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 93static __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} 104 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 117static __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 689#endif /* __AVX512VLBWINTRIN_H */ 690