Home | History | Annotate | Download | only in Headers
      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