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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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__)) 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