Home | History | Annotate | Line # | Download | only in Headers
      1 /*===------------- avx512vlvbmi2intrin.h - VBMI2 intrinsics -----------------===
      2  *
      3  *
      4  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      5  * See https://llvm.org/LICENSE.txt for license information.
      6  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      7  *
      8  *===-----------------------------------------------------------------------===
      9  */
     10 #ifndef __IMMINTRIN_H
     11 #error "Never use <avx512vlvbmi2intrin.h> directly; include <immintrin.h> instead."
     12 #endif
     13 
     14 #ifndef __AVX512VLVBMI2INTRIN_H
     15 #define __AVX512VLVBMI2INTRIN_H
     16 
     17 /* Define the default attributes for the functions in this file. */
     18 #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vbmi2"), __min_vector_width__(128)))
     19 #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vbmi2"), __min_vector_width__(256)))
     20 
     21 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     22 _mm_mask_compress_epi16(__m128i __S, __mmask8 __U, __m128i __D)
     23 {
     24   return (__m128i) __builtin_ia32_compresshi128_mask ((__v8hi) __D,
     25               (__v8hi) __S,
     26               __U);
     27 }
     28 
     29 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     30 _mm_maskz_compress_epi16(__mmask8 __U, __m128i __D)
     31 {
     32   return (__m128i) __builtin_ia32_compresshi128_mask ((__v8hi) __D,
     33               (__v8hi) _mm_setzero_si128(),
     34               __U);
     35 }
     36 
     37 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     38 _mm_mask_compress_epi8(__m128i __S, __mmask16 __U, __m128i __D)
     39 {
     40   return (__m128i) __builtin_ia32_compressqi128_mask ((__v16qi) __D,
     41               (__v16qi) __S,
     42               __U);
     43 }
     44 
     45 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     46 _mm_maskz_compress_epi8(__mmask16 __U, __m128i __D)
     47 {
     48   return (__m128i) __builtin_ia32_compressqi128_mask ((__v16qi) __D,
     49               (__v16qi) _mm_setzero_si128(),
     50               __U);
     51 }
     52 
     53 static __inline__ void __DEFAULT_FN_ATTRS128
     54 _mm_mask_compressstoreu_epi16(void *__P, __mmask8 __U, __m128i __D)
     55 {
     56   __builtin_ia32_compressstorehi128_mask ((__v8hi *) __P, (__v8hi) __D,
     57               __U);
     58 }
     59 
     60 static __inline__ void __DEFAULT_FN_ATTRS128
     61 _mm_mask_compressstoreu_epi8(void *__P, __mmask16 __U, __m128i __D)
     62 {
     63   __builtin_ia32_compressstoreqi128_mask ((__v16qi *) __P, (__v16qi) __D,
     64               __U);
     65 }
     66 
     67 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     68 _mm_mask_expand_epi16(__m128i __S, __mmask8 __U, __m128i __D)
     69 {
     70   return (__m128i) __builtin_ia32_expandhi128_mask ((__v8hi) __D,
     71               (__v8hi) __S,
     72               __U);
     73 }
     74 
     75 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     76 _mm_maskz_expand_epi16(__mmask8 __U, __m128i __D)
     77 {
     78   return (__m128i) __builtin_ia32_expandhi128_mask ((__v8hi) __D,
     79               (__v8hi) _mm_setzero_si128(),
     80               __U);
     81 }
     82 
     83 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     84 _mm_mask_expand_epi8(__m128i __S, __mmask16 __U, __m128i __D)
     85 {
     86   return (__m128i) __builtin_ia32_expandqi128_mask ((__v16qi) __D,
     87               (__v16qi) __S,
     88               __U);
     89 }
     90 
     91 static __inline__ __m128i __DEFAULT_FN_ATTRS128
     92 _mm_maskz_expand_epi8(__mmask16 __U, __m128i __D)
     93 {
     94   return (__m128i) __builtin_ia32_expandqi128_mask ((__v16qi) __D,
     95               (__v16qi) _mm_setzero_si128(),
     96               __U);
     97 }
     98 
     99 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    100 _mm_mask_expandloadu_epi16(__m128i __S, __mmask8 __U, void const *__P)
    101 {
    102   return (__m128i) __builtin_ia32_expandloadhi128_mask ((const __v8hi *)__P,
    103               (__v8hi) __S,
    104               __U);
    105 }
    106 
    107 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    108 _mm_maskz_expandloadu_epi16(__mmask8 __U, void const *__P)
    109 {
    110   return (__m128i) __builtin_ia32_expandloadhi128_mask ((const __v8hi *)__P,
    111               (__v8hi) _mm_setzero_si128(),
    112               __U);
    113 }
    114 
    115 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    116 _mm_mask_expandloadu_epi8(__m128i __S, __mmask16 __U, void const *__P)
    117 {
    118   return (__m128i) __builtin_ia32_expandloadqi128_mask ((const __v16qi *)__P,
    119               (__v16qi) __S,
    120               __U);
    121 }
    122 
    123 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    124 _mm_maskz_expandloadu_epi8(__mmask16 __U, void const *__P)
    125 {
    126   return (__m128i) __builtin_ia32_expandloadqi128_mask ((const __v16qi *)__P,
    127               (__v16qi) _mm_setzero_si128(),
    128               __U);
    129 }
    130 
    131 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    132 _mm256_mask_compress_epi16(__m256i __S, __mmask16 __U, __m256i __D)
    133 {
    134   return (__m256i) __builtin_ia32_compresshi256_mask ((__v16hi) __D,
    135               (__v16hi) __S,
    136               __U);
    137 }
    138 
    139 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    140 _mm256_maskz_compress_epi16(__mmask16 __U, __m256i __D)
    141 {
    142   return (__m256i) __builtin_ia32_compresshi256_mask ((__v16hi) __D,
    143               (__v16hi) _mm256_setzero_si256(),
    144               __U);
    145 }
    146 
    147 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    148 _mm256_mask_compress_epi8(__m256i __S, __mmask32 __U, __m256i __D)
    149 {
    150   return (__m256i) __builtin_ia32_compressqi256_mask ((__v32qi) __D,
    151               (__v32qi) __S,
    152               __U);
    153 }
    154 
    155 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    156 _mm256_maskz_compress_epi8(__mmask32 __U, __m256i __D)
    157 {
    158   return (__m256i) __builtin_ia32_compressqi256_mask ((__v32qi) __D,
    159               (__v32qi) _mm256_setzero_si256(),
    160               __U);
    161 }
    162 
    163 static __inline__ void __DEFAULT_FN_ATTRS256
    164 _mm256_mask_compressstoreu_epi16(void *__P, __mmask16 __U, __m256i __D)
    165 {
    166   __builtin_ia32_compressstorehi256_mask ((__v16hi *) __P, (__v16hi) __D,
    167               __U);
    168 }
    169 
    170 static __inline__ void __DEFAULT_FN_ATTRS256
    171 _mm256_mask_compressstoreu_epi8(void *__P, __mmask32 __U, __m256i __D)
    172 {
    173   __builtin_ia32_compressstoreqi256_mask ((__v32qi *) __P, (__v32qi) __D,
    174               __U);
    175 }
    176 
    177 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    178 _mm256_mask_expand_epi16(__m256i __S, __mmask16 __U, __m256i __D)
    179 {
    180   return (__m256i) __builtin_ia32_expandhi256_mask ((__v16hi) __D,
    181               (__v16hi) __S,
    182               __U);
    183 }
    184 
    185 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    186 _mm256_maskz_expand_epi16(__mmask16 __U, __m256i __D)
    187 {
    188   return (__m256i) __builtin_ia32_expandhi256_mask ((__v16hi) __D,
    189               (__v16hi) _mm256_setzero_si256(),
    190               __U);
    191 }
    192 
    193 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    194 _mm256_mask_expand_epi8(__m256i __S, __mmask32 __U, __m256i __D)
    195 {
    196   return (__m256i) __builtin_ia32_expandqi256_mask ((__v32qi) __D,
    197               (__v32qi) __S,
    198               __U);
    199 }
    200 
    201 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    202 _mm256_maskz_expand_epi8(__mmask32 __U, __m256i __D)
    203 {
    204   return (__m256i) __builtin_ia32_expandqi256_mask ((__v32qi) __D,
    205               (__v32qi) _mm256_setzero_si256(),
    206               __U);
    207 }
    208 
    209 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    210 _mm256_mask_expandloadu_epi16(__m256i __S, __mmask16 __U, void const *__P)
    211 {
    212   return (__m256i) __builtin_ia32_expandloadhi256_mask ((const __v16hi *)__P,
    213               (__v16hi) __S,
    214               __U);
    215 }
    216 
    217 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    218 _mm256_maskz_expandloadu_epi16(__mmask16 __U, void const *__P)
    219 {
    220   return (__m256i) __builtin_ia32_expandloadhi256_mask ((const __v16hi *)__P,
    221               (__v16hi) _mm256_setzero_si256(),
    222               __U);
    223 }
    224 
    225 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    226 _mm256_mask_expandloadu_epi8(__m256i __S, __mmask32 __U, void const *__P)
    227 {
    228   return (__m256i) __builtin_ia32_expandloadqi256_mask ((const __v32qi *)__P,
    229               (__v32qi) __S,
    230               __U);
    231 }
    232 
    233 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    234 _mm256_maskz_expandloadu_epi8(__mmask32 __U, void const *__P)
    235 {
    236   return (__m256i) __builtin_ia32_expandloadqi256_mask ((const __v32qi *)__P,
    237               (__v32qi) _mm256_setzero_si256(),
    238               __U);
    239 }
    240 
    241 #define _mm256_shldi_epi64(A, B, I) \
    242   (__m256i)__builtin_ia32_vpshldq256((__v4di)(__m256i)(A), \
    243                                      (__v4di)(__m256i)(B), (int)(I))
    244 
    245 #define _mm256_mask_shldi_epi64(S, U, A, B, I) \
    246   (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
    247                                     (__v4di)_mm256_shldi_epi64((A), (B), (I)), \
    248                                     (__v4di)(__m256i)(S))
    249 
    250 #define _mm256_maskz_shldi_epi64(U, A, B, I) \
    251   (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
    252                                     (__v4di)_mm256_shldi_epi64((A), (B), (I)), \
    253                                     (__v4di)_mm256_setzero_si256())
    254 
    255 #define _mm_shldi_epi64(A, B, I) \
    256   (__m128i)__builtin_ia32_vpshldq128((__v2di)(__m128i)(A), \
    257                                      (__v2di)(__m128i)(B), (int)(I))
    258 
    259 #define _mm_mask_shldi_epi64(S, U, A, B, I) \
    260   (__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
    261                                       (__v2di)_mm_shldi_epi64((A), (B), (I)), \
    262                                       (__v2di)(__m128i)(S))
    263 
    264 #define _mm_maskz_shldi_epi64(U, A, B, I) \
    265   (__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
    266                                       (__v2di)_mm_shldi_epi64((A), (B), (I)), \
    267                                       (__v2di)_mm_setzero_si128())
    268 
    269 #define _mm256_shldi_epi32(A, B, I) \
    270   (__m256i)__builtin_ia32_vpshldd256((__v8si)(__m256i)(A), \
    271                                      (__v8si)(__m256i)(B), (int)(I))
    272 
    273 #define _mm256_mask_shldi_epi32(S, U, A, B, I) \
    274   (__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
    275                                     (__v8si)_mm256_shldi_epi32((A), (B), (I)), \
    276                                     (__v8si)(__m256i)(S))
    277 
    278 #define _mm256_maskz_shldi_epi32(U, A, B, I) \
    279   (__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
    280                                     (__v8si)_mm256_shldi_epi32((A), (B), (I)), \
    281                                     (__v8si)_mm256_setzero_si256())
    282 
    283 #define _mm_shldi_epi32(A, B, I) \
    284   (__m128i)__builtin_ia32_vpshldd128((__v4si)(__m128i)(A), \
    285                                      (__v4si)(__m128i)(B), (int)(I))
    286 
    287 #define _mm_mask_shldi_epi32(S, U, A, B, I) \
    288   (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
    289                                       (__v4si)_mm_shldi_epi32((A), (B), (I)), \
    290                                       (__v4si)(__m128i)(S))
    291 
    292 #define _mm_maskz_shldi_epi32(U, A, B, I) \
    293   (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
    294                                       (__v4si)_mm_shldi_epi32((A), (B), (I)), \
    295                                       (__v4si)_mm_setzero_si128())
    296 
    297 #define _mm256_shldi_epi16(A, B, I) \
    298   (__m256i)__builtin_ia32_vpshldw256((__v16hi)(__m256i)(A), \
    299                                      (__v16hi)(__m256i)(B), (int)(I))
    300 
    301 #define _mm256_mask_shldi_epi16(S, U, A, B, I) \
    302   (__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
    303                                    (__v16hi)_mm256_shldi_epi16((A), (B), (I)), \
    304                                    (__v16hi)(__m256i)(S))
    305 
    306 #define _mm256_maskz_shldi_epi16(U, A, B, I) \
    307   (__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
    308                                    (__v16hi)_mm256_shldi_epi16((A), (B), (I)), \
    309                                    (__v16hi)_mm256_setzero_si256())
    310 
    311 #define _mm_shldi_epi16(A, B, I) \
    312   (__m128i)__builtin_ia32_vpshldw128((__v8hi)(__m128i)(A), \
    313                                      (__v8hi)(__m128i)(B), (int)(I))
    314 
    315 #define _mm_mask_shldi_epi16(S, U, A, B, I) \
    316   (__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
    317                                       (__v8hi)_mm_shldi_epi16((A), (B), (I)), \
    318                                       (__v8hi)(__m128i)(S))
    319 
    320 #define _mm_maskz_shldi_epi16(U, A, B, I) \
    321   (__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
    322                                       (__v8hi)_mm_shldi_epi16((A), (B), (I)), \
    323                                       (__v8hi)_mm_setzero_si128())
    324 
    325 #define _mm256_shrdi_epi64(A, B, I) \
    326   (__m256i)__builtin_ia32_vpshrdq256((__v4di)(__m256i)(A), \
    327                                      (__v4di)(__m256i)(B), (int)(I))
    328 
    329 #define _mm256_mask_shrdi_epi64(S, U, A, B, I) \
    330   (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
    331                                     (__v4di)_mm256_shrdi_epi64((A), (B), (I)), \
    332                                     (__v4di)(__m256i)(S))
    333 
    334 #define _mm256_maskz_shrdi_epi64(U, A, B, I) \
    335   (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \
    336                                     (__v4di)_mm256_shrdi_epi64((A), (B), (I)), \
    337                                     (__v4di)_mm256_setzero_si256())
    338 
    339 #define _mm_shrdi_epi64(A, B, I) \
    340   (__m128i)__builtin_ia32_vpshrdq128((__v2di)(__m128i)(A), \
    341                                      (__v2di)(__m128i)(B), (int)(I))
    342 
    343 #define _mm_mask_shrdi_epi64(S, U, A, B, I) \
    344   (__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
    345                                       (__v2di)_mm_shrdi_epi64((A), (B), (I)), \
    346                                       (__v2di)(__m128i)(S))
    347 
    348 #define _mm_maskz_shrdi_epi64(U, A, B, I) \
    349   (__m128i)__builtin_ia32_selectq_128((__mmask8)(U), \
    350                                       (__v2di)_mm_shrdi_epi64((A), (B), (I)), \
    351                                       (__v2di)_mm_setzero_si128())
    352 
    353 #define _mm256_shrdi_epi32(A, B, I) \
    354   (__m256i)__builtin_ia32_vpshrdd256((__v8si)(__m256i)(A), \
    355                                      (__v8si)(__m256i)(B), (int)(I))
    356 
    357 #define _mm256_mask_shrdi_epi32(S, U, A, B, I) \
    358   (__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
    359                                     (__v8si)_mm256_shrdi_epi32((A), (B), (I)), \
    360                                     (__v8si)(__m256i)(S))
    361 
    362 #define _mm256_maskz_shrdi_epi32(U, A, B, I) \
    363   (__m256i)__builtin_ia32_selectd_256((__mmask8)(U), \
    364                                     (__v8si)_mm256_shrdi_epi32((A), (B), (I)), \
    365                                     (__v8si)_mm256_setzero_si256())
    366 
    367 #define _mm_shrdi_epi32(A, B, I) \
    368   (__m128i)__builtin_ia32_vpshrdd128((__v4si)(__m128i)(A), \
    369                                      (__v4si)(__m128i)(B), (int)(I))
    370 
    371 #define _mm_mask_shrdi_epi32(S, U, A, B, I) \
    372   (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
    373                                       (__v4si)_mm_shrdi_epi32((A), (B), (I)), \
    374                                       (__v4si)(__m128i)(S))
    375 
    376 #define _mm_maskz_shrdi_epi32(U, A, B, I) \
    377   (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \
    378                                       (__v4si)_mm_shrdi_epi32((A), (B), (I)), \
    379                                       (__v4si)_mm_setzero_si128())
    380 
    381 #define _mm256_shrdi_epi16(A, B, I) \
    382   (__m256i)__builtin_ia32_vpshrdw256((__v16hi)(__m256i)(A), \
    383                                      (__v16hi)(__m256i)(B), (int)(I))
    384 
    385 #define _mm256_mask_shrdi_epi16(S, U, A, B, I) \
    386   (__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
    387                                    (__v16hi)_mm256_shrdi_epi16((A), (B), (I)), \
    388                                    (__v16hi)(__m256i)(S))
    389 
    390 #define _mm256_maskz_shrdi_epi16(U, A, B, I) \
    391   (__m256i)__builtin_ia32_selectw_256((__mmask16)(U), \
    392                                    (__v16hi)_mm256_shrdi_epi16((A), (B), (I)), \
    393                                    (__v16hi)_mm256_setzero_si256())
    394 
    395 #define _mm_shrdi_epi16(A, B, I) \
    396   (__m128i)__builtin_ia32_vpshrdw128((__v8hi)(__m128i)(A), \
    397                                      (__v8hi)(__m128i)(B), (int)(I))
    398 
    399 #define _mm_mask_shrdi_epi16(S, U, A, B, I) \
    400   (__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
    401                                       (__v8hi)_mm_shrdi_epi16((A), (B), (I)), \
    402                                       (__v8hi)(__m128i)(S))
    403 
    404 #define _mm_maskz_shrdi_epi16(U, A, B, I) \
    405   (__m128i)__builtin_ia32_selectw_128((__mmask8)(U), \
    406                                       (__v8hi)_mm_shrdi_epi16((A), (B), (I)), \
    407                                       (__v8hi)_mm_setzero_si128())
    408 
    409 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    410 _mm256_shldv_epi64(__m256i __A, __m256i __B, __m256i __C)
    411 {
    412   return (__m256i)__builtin_ia32_vpshldvq256((__v4di)__A, (__v4di)__B,
    413                                              (__v4di)__C);
    414 }
    415 
    416 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    417 _mm256_mask_shldv_epi64(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
    418 {
    419   return (__m256i)__builtin_ia32_selectq_256(__U,
    420                                       (__v4di)_mm256_shldv_epi64(__A, __B, __C),
    421                                       (__v4di)__A);
    422 }
    423 
    424 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    425 _mm256_maskz_shldv_epi64(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
    426 {
    427   return (__m256i)__builtin_ia32_selectq_256(__U,
    428                                       (__v4di)_mm256_shldv_epi64(__A, __B, __C),
    429                                       (__v4di)_mm256_setzero_si256());
    430 }
    431 
    432 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    433 _mm_shldv_epi64(__m128i __A, __m128i __B, __m128i __C)
    434 {
    435   return (__m128i)__builtin_ia32_vpshldvq128((__v2di)__A, (__v2di)__B,
    436                                              (__v2di)__C);
    437 }
    438 
    439 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    440 _mm_mask_shldv_epi64(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    441 {
    442   return (__m128i)__builtin_ia32_selectq_128(__U,
    443                                          (__v2di)_mm_shldv_epi64(__A, __B, __C),
    444                                          (__v2di)__A);
    445 }
    446 
    447 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    448 _mm_maskz_shldv_epi64(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    449 {
    450   return (__m128i)__builtin_ia32_selectq_128(__U,
    451                                          (__v2di)_mm_shldv_epi64(__A, __B, __C),
    452                                          (__v2di)_mm_setzero_si128());
    453 }
    454 
    455 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    456 _mm256_shldv_epi32(__m256i __A, __m256i __B, __m256i __C)
    457 {
    458   return (__m256i)__builtin_ia32_vpshldvd256((__v8si)__A, (__v8si)__B,
    459                                              (__v8si)__C);
    460 }
    461 
    462 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    463 _mm256_mask_shldv_epi32(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
    464 {
    465   return (__m256i)__builtin_ia32_selectd_256(__U,
    466                                       (__v8si)_mm256_shldv_epi32(__A, __B, __C),
    467                                       (__v8si)__A);
    468 }
    469 
    470 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    471 _mm256_maskz_shldv_epi32(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
    472 {
    473   return (__m256i)__builtin_ia32_selectd_256(__U,
    474                                       (__v8si)_mm256_shldv_epi32(__A, __B, __C),
    475                                       (__v8si)_mm256_setzero_si256());
    476 }
    477 
    478 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    479 _mm_shldv_epi32(__m128i __A, __m128i __B, __m128i __C)
    480 {
    481   return (__m128i)__builtin_ia32_vpshldvd128((__v4si)__A, (__v4si)__B,
    482                                              (__v4si)__C);
    483 }
    484 
    485 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    486 _mm_mask_shldv_epi32(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    487 {
    488   return (__m128i)__builtin_ia32_selectd_128(__U,
    489                                          (__v4si)_mm_shldv_epi32(__A, __B, __C),
    490                                          (__v4si)__A);
    491 }
    492 
    493 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    494 _mm_maskz_shldv_epi32(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    495 {
    496   return (__m128i)__builtin_ia32_selectd_128(__U,
    497                                          (__v4si)_mm_shldv_epi32(__A, __B, __C),
    498                                          (__v4si)_mm_setzero_si128());
    499 }
    500 
    501 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    502 _mm256_shldv_epi16(__m256i __A, __m256i __B, __m256i __C)
    503 {
    504   return (__m256i)__builtin_ia32_vpshldvw256((__v16hi)__A, (__v16hi)__B,
    505                                              (__v16hi)__C);
    506 }
    507 
    508 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    509 _mm256_mask_shldv_epi16(__m256i __A, __mmask16 __U, __m256i __B, __m256i __C)
    510 {
    511   return (__m256i)__builtin_ia32_selectw_256(__U,
    512                                       (__v16hi)_mm256_shldv_epi16(__A, __B, __C),
    513                                       (__v16hi)__A);
    514 }
    515 
    516 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    517 _mm256_maskz_shldv_epi16(__mmask16 __U, __m256i __A, __m256i __B, __m256i __C)
    518 {
    519   return (__m256i)__builtin_ia32_selectw_256(__U,
    520                                       (__v16hi)_mm256_shldv_epi16(__A, __B, __C),
    521                                       (__v16hi)_mm256_setzero_si256());
    522 }
    523 
    524 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    525 _mm_shldv_epi16(__m128i __A, __m128i __B, __m128i __C)
    526 {
    527   return (__m128i)__builtin_ia32_vpshldvw128((__v8hi)__A, (__v8hi)__B,
    528                                              (__v8hi)__C);
    529 }
    530 
    531 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    532 _mm_mask_shldv_epi16(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    533 {
    534   return (__m128i)__builtin_ia32_selectw_128(__U,
    535                                          (__v8hi)_mm_shldv_epi16(__A, __B, __C),
    536                                          (__v8hi)__A);
    537 }
    538 
    539 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    540 _mm_maskz_shldv_epi16(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    541 {
    542   return (__m128i)__builtin_ia32_selectw_128(__U,
    543                                          (__v8hi)_mm_shldv_epi16(__A, __B, __C),
    544                                          (__v8hi)_mm_setzero_si128());
    545 }
    546 
    547 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    548 _mm256_shrdv_epi64(__m256i __A, __m256i __B, __m256i __C)
    549 {
    550   return (__m256i)__builtin_ia32_vpshrdvq256((__v4di)__A, (__v4di)__B,
    551                                              (__v4di)__C);
    552 }
    553 
    554 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    555 _mm256_mask_shrdv_epi64(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
    556 {
    557   return (__m256i)__builtin_ia32_selectq_256(__U,
    558                                       (__v4di)_mm256_shrdv_epi64(__A, __B, __C),
    559                                       (__v4di)__A);
    560 }
    561 
    562 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    563 _mm256_maskz_shrdv_epi64(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
    564 {
    565   return (__m256i)__builtin_ia32_selectq_256(__U,
    566                                       (__v4di)_mm256_shrdv_epi64(__A, __B, __C),
    567                                       (__v4di)_mm256_setzero_si256());
    568 }
    569 
    570 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    571 _mm_shrdv_epi64(__m128i __A, __m128i __B, __m128i __C)
    572 {
    573   return (__m128i)__builtin_ia32_vpshrdvq128((__v2di)__A, (__v2di)__B,
    574                                              (__v2di)__C);
    575 }
    576 
    577 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    578 _mm_mask_shrdv_epi64(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    579 {
    580   return (__m128i)__builtin_ia32_selectq_128(__U,
    581                                          (__v2di)_mm_shrdv_epi64(__A, __B, __C),
    582                                          (__v2di)__A);
    583 }
    584 
    585 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    586 _mm_maskz_shrdv_epi64(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    587 {
    588   return (__m128i)__builtin_ia32_selectq_128(__U,
    589                                          (__v2di)_mm_shrdv_epi64(__A, __B, __C),
    590                                          (__v2di)_mm_setzero_si128());
    591 }
    592 
    593 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    594 _mm256_shrdv_epi32(__m256i __A, __m256i __B, __m256i __C)
    595 {
    596   return (__m256i)__builtin_ia32_vpshrdvd256((__v8si)__A, (__v8si)__B,
    597                                              (__v8si)__C);
    598 }
    599 
    600 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    601 _mm256_mask_shrdv_epi32(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C)
    602 {
    603   return (__m256i)__builtin_ia32_selectd_256(__U,
    604                                       (__v8si)_mm256_shrdv_epi32(__A, __B, __C),
    605                                       (__v8si)__A);
    606 }
    607 
    608 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    609 _mm256_maskz_shrdv_epi32(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C)
    610 {
    611   return (__m256i)__builtin_ia32_selectd_256(__U,
    612                                       (__v8si)_mm256_shrdv_epi32(__A, __B, __C),
    613                                       (__v8si)_mm256_setzero_si256());
    614 }
    615 
    616 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    617 _mm_shrdv_epi32(__m128i __A, __m128i __B, __m128i __C)
    618 {
    619   return (__m128i)__builtin_ia32_vpshrdvd128((__v4si)__A, (__v4si)__B,
    620                                              (__v4si)__C);
    621 }
    622 
    623 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    624 _mm_mask_shrdv_epi32(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    625 {
    626   return (__m128i)__builtin_ia32_selectd_128(__U,
    627                                          (__v4si)_mm_shrdv_epi32(__A, __B, __C),
    628                                          (__v4si)__A);
    629 }
    630 
    631 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    632 _mm_maskz_shrdv_epi32(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    633 {
    634   return (__m128i)__builtin_ia32_selectd_128(__U,
    635                                          (__v4si)_mm_shrdv_epi32(__A, __B, __C),
    636                                          (__v4si)_mm_setzero_si128());
    637 }
    638 
    639 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    640 _mm256_shrdv_epi16(__m256i __A, __m256i __B, __m256i __C)
    641 {
    642   return (__m256i)__builtin_ia32_vpshrdvw256((__v16hi)__A, (__v16hi)__B,
    643                                              (__v16hi)__C);
    644 }
    645 
    646 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    647 _mm256_mask_shrdv_epi16(__m256i __A, __mmask16 __U, __m256i __B, __m256i __C)
    648 {
    649   return (__m256i)__builtin_ia32_selectw_256(__U,
    650                                      (__v16hi)_mm256_shrdv_epi16(__A, __B, __C),
    651                                      (__v16hi)__A);
    652 }
    653 
    654 static __inline__ __m256i __DEFAULT_FN_ATTRS256
    655 _mm256_maskz_shrdv_epi16(__mmask16 __U, __m256i __A, __m256i __B, __m256i __C)
    656 {
    657   return (__m256i)__builtin_ia32_selectw_256(__U,
    658                                      (__v16hi)_mm256_shrdv_epi16(__A, __B, __C),
    659                                      (__v16hi)_mm256_setzero_si256());
    660 }
    661 
    662 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    663 _mm_shrdv_epi16(__m128i __A, __m128i __B, __m128i __C)
    664 {
    665   return (__m128i)__builtin_ia32_vpshrdvw128((__v8hi)__A, (__v8hi)__B,
    666                                              (__v8hi)__C);
    667 }
    668 
    669 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    670 _mm_mask_shrdv_epi16(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C)
    671 {
    672   return (__m128i)__builtin_ia32_selectw_128(__U,
    673                                          (__v8hi)_mm_shrdv_epi16(__A, __B, __C),
    674                                          (__v8hi)__A);
    675 }
    676 
    677 static __inline__ __m128i __DEFAULT_FN_ATTRS128
    678 _mm_maskz_shrdv_epi16(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C)
    679 {
    680   return (__m128i)__builtin_ia32_selectw_128(__U,
    681                                          (__v8hi)_mm_shrdv_epi16(__A, __B, __C),
    682                                          (__v8hi)_mm_setzero_si128());
    683 }
    684 
    685 
    686 #undef __DEFAULT_FN_ATTRS128
    687 #undef __DEFAULT_FN_ATTRS256
    688 
    689 #endif
    690