Home | History | Annotate | Line # | Download | only in i386
avx512vbmi2intrin.h revision 1.1.1.4
      1 /* Copyright (C) 2013-2022 Free Software Foundation, Inc.
      2 
      3    This file is part of GCC.
      4 
      5    GCC is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 3, or (at your option)
      8    any later version.
      9 
     10    GCC is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU General Public License for more details.
     14 
     15    Under Section 7 of GPL version 3, you are granted additional
     16    permissions described in the GCC Runtime Library Exception, version
     17    3.1, as published by the Free Software Foundation.
     18 
     19    You should have received a copy of the GNU General Public License and
     20    a copy of the GCC Runtime Library Exception along with this program;
     21    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     22    <http://www.gnu.org/licenses/>.  */
     23 
     24 #ifndef _IMMINTRIN_H_INCLUDED
     25 #error "Never use <avx512vbmi2intrin.h> directly; include <immintrin.h> instead."
     26 #endif
     27 
     28 #ifndef __AVX512VBMI2INTRIN_H_INCLUDED
     29 #define __AVX512VBMI2INTRIN_H_INCLUDED
     30 
     31 #if !defined(__AVX512VBMI2__)
     32 #pragma GCC push_options
     33 #pragma GCC target("avx512vbmi2")
     34 #define __DISABLE_AVX512VBMI2__
     35 #endif /* __AVX512VBMI2__ */
     36 
     37 #ifdef __OPTIMIZE__
     38 extern __inline __m512i
     39 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     40 _mm512_shrdi_epi16 (__m512i __A, __m512i __B, int __C)
     41 {
     42   return (__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)__A, (__v32hi) __B,
     43 									__C);
     44 }
     45 
     46 extern __inline __m512i
     47 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     48 _mm512_shrdi_epi32 (__m512i __A, __m512i __B, int __C)
     49 {
     50   return (__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)__A, (__v16si) __B,
     51 									__C);
     52 }
     53 
     54 extern __inline __m512i
     55 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     56 _mm512_mask_shrdi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
     57 								int __E)
     58 {
     59   return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__C,
     60 			(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
     61 }
     62 
     63 extern __inline __m512i
     64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     65 _mm512_maskz_shrdi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
     66 {
     67   return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__B,
     68 	(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
     69 }
     70 
     71 extern __inline __m512i
     72 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     73 _mm512_shrdi_epi64 (__m512i __A, __m512i __B, int __C)
     74 {
     75   return (__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)__A, (__v8di) __B, __C);
     76 }
     77 
     78 extern __inline __m512i
     79 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     80 _mm512_mask_shrdi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
     81 								int __E)
     82 {
     83   return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__C, (__v8di) __D,
     84 					__E, (__v8di) __A, (__mmask8)__B);
     85 }
     86 
     87 extern __inline __m512i
     88 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     89 _mm512_maskz_shrdi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
     90 {
     91   return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__B, (__v8di) __C,
     92 			__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
     93 }
     94 
     95 extern __inline __m512i
     96 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     97 _mm512_shldi_epi16 (__m512i __A, __m512i __B, int __C)
     98 {
     99   return (__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)__A, (__v32hi) __B,
    100 									__C);
    101 }
    102 
    103 extern __inline __m512i
    104 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    105 _mm512_shldi_epi32 (__m512i __A, __m512i __B, int __C)
    106 {
    107   return (__m512i) __builtin_ia32_vpshld_v16si ((__v16si)__A, (__v16si) __B,
    108 									__C);
    109 }
    110 
    111 extern __inline __m512i
    112 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    113 _mm512_mask_shldi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
    114 								int __E)
    115 {
    116   return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__C,
    117 			(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
    118 }
    119 
    120 extern __inline __m512i
    121 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    122 _mm512_maskz_shldi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
    123 {
    124   return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__B,
    125 	(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
    126 }
    127 
    128 extern __inline __m512i
    129 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    130 _mm512_shldi_epi64 (__m512i __A, __m512i __B, int __C)
    131 {
    132   return (__m512i) __builtin_ia32_vpshld_v8di ((__v8di)__A, (__v8di) __B, __C);
    133 }
    134 
    135 extern __inline __m512i
    136 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    137 _mm512_mask_shldi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
    138 								int __E)
    139 {
    140   return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__C, (__v8di) __D,
    141 					__E, (__v8di) __A, (__mmask8)__B);
    142 }
    143 
    144 extern __inline __m512i
    145 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    146 _mm512_maskz_shldi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
    147 {
    148   return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__B, (__v8di) __C,
    149 			__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
    150 }
    151 #else
    152 #define _mm512_shrdi_epi16(A, B, C) \
    153   ((__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)(__m512i)(A), \
    154 					  (__v32hi)(__m512i)(B),(int)(C)))
    155 #define _mm512_shrdi_epi32(A, B, C) \
    156   ((__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)(__m512i)(A), \
    157 					  (__v16si)(__m512i)(B),(int)(C)))
    158 #define _mm512_mask_shrdi_epi32(A, B, C, D, E) \
    159   ((__m512i) __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(C), \
    160 					       (__v16si)(__m512i)(D), \
    161 					       (int)(E),		\
    162 					       (__v16si)(__m512i)(A),	\
    163 					       (__mmask16)(B)))
    164 #define _mm512_maskz_shrdi_epi32(A, B, C, D) \
    165   ((__m512i) \
    166    __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(B),		\
    167 				     (__v16si)(__m512i)(C),(int)(D),	\
    168 				     (__v16si)(__m512i)_mm512_setzero_si512 (), \
    169 				     (__mmask16)(A)))
    170 #define _mm512_shrdi_epi64(A, B, C) \
    171   ((__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)(__m512i)(A), \
    172 					 (__v8di)(__m512i)(B),(int)(C)))
    173 #define _mm512_mask_shrdi_epi64(A, B, C, D, E) \
    174   ((__m512i) __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(C), \
    175 					      (__v8di)(__m512i)(D), (int)(E), \
    176 					      (__v8di)(__m512i)(A), \
    177 					      (__mmask8)(B)))
    178 #define _mm512_maskz_shrdi_epi64(A, B, C, D) \
    179   ((__m512i) \
    180    __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(B),		\
    181 				    (__v8di)(__m512i)(C),(int)(D),	\
    182 				    (__v8di)(__m512i)_mm512_setzero_si512 (), \
    183 				    (__mmask8)(A)))
    184 #define _mm512_shldi_epi16(A, B, C) \
    185   ((__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)(__m512i)(A), \
    186 					  (__v32hi)(__m512i)(B),(int)(C)))
    187 #define _mm512_shldi_epi32(A, B, C) \
    188   ((__m512i) __builtin_ia32_vpshld_v16si ((__v16si)(__m512i)(A),	\
    189 					  (__v16si)(__m512i)(B),(int)(C)))
    190 #define _mm512_mask_shldi_epi32(A, B, C, D, E) \
    191   ((__m512i) __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(C), \
    192 					       (__v16si)(__m512i)(D), \
    193 					       (int)(E),		\
    194 					       (__v16si)(__m512i)(A), \
    195 					       (__mmask16)(B)))
    196 #define _mm512_maskz_shldi_epi32(A, B, C, D) \
    197   ((__m512i) \
    198    __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(B),		\
    199 				     (__v16si)(__m512i)(C),(int)(D),	\
    200 				     (__v16si)(__m512i)_mm512_setzero_si512 (), \
    201 				     (__mmask16)(A)))
    202 #define _mm512_shldi_epi64(A, B, C) \
    203   ((__m512i) __builtin_ia32_vpshld_v8di ((__v8di)(__m512i)(A), \
    204 					 (__v8di)(__m512i)(B), (int)(C)))
    205 #define _mm512_mask_shldi_epi64(A, B, C, D, E) \
    206   ((__m512i) __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(C), \
    207 					      (__v8di)(__m512i)(D), (int)(E), \
    208 					      (__v8di)(__m512i)(A), \
    209 					      (__mmask8)(B)))
    210 #define _mm512_maskz_shldi_epi64(A, B, C, D) \
    211   ((__m512i) \
    212    __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(B),		\
    213 				    (__v8di)(__m512i)(C),(int)(D),	\
    214 				    (__v8di)(__m512i)_mm512_setzero_si512 (), \
    215 				    (__mmask8)(A)))
    216 #endif
    217 
    218 extern __inline __m512i
    219 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    220 _mm512_shrdv_epi16 (__m512i __A, __m512i __B, __m512i __C)
    221 {
    222   return (__m512i) __builtin_ia32_vpshrdv_v32hi ((__v32hi)__A, (__v32hi) __B,
    223 								(__v32hi) __C);
    224 }
    225 
    226 extern __inline __m512i
    227 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    228 _mm512_shrdv_epi32 (__m512i __A, __m512i __B, __m512i __C)
    229 {
    230   return (__m512i) __builtin_ia32_vpshrdv_v16si ((__v16si)__A, (__v16si) __B,
    231 								(__v16si) __C);
    232 }
    233 
    234 extern __inline __m512i
    235 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    236 _mm512_mask_shrdv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
    237 {
    238   return (__m512i)__builtin_ia32_vpshrdv_v16si_mask ((__v16si)__A,
    239 				(__v16si) __C, (__v16si) __D, (__mmask16)__B);
    240 }
    241 
    242 extern __inline __m512i
    243 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    244 _mm512_maskz_shrdv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
    245 {
    246   return (__m512i)__builtin_ia32_vpshrdv_v16si_maskz ((__v16si)__B,
    247 				(__v16si) __C, (__v16si) __D, (__mmask16)__A);
    248 }
    249 
    250 extern __inline __m512i
    251 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    252 _mm512_shrdv_epi64 (__m512i __A, __m512i __B, __m512i __C)
    253 {
    254   return (__m512i) __builtin_ia32_vpshrdv_v8di ((__v8di)__A, (__v8di) __B,
    255 								(__v8di) __C);
    256 }
    257 
    258 extern __inline __m512i
    259 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    260 _mm512_mask_shrdv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
    261 {
    262   return (__m512i)__builtin_ia32_vpshrdv_v8di_mask ((__v8di)__A, (__v8di) __C,
    263 						(__v8di) __D, (__mmask8)__B);
    264 }
    265 
    266 extern __inline __m512i
    267 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    268 _mm512_maskz_shrdv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
    269 {
    270   return (__m512i)__builtin_ia32_vpshrdv_v8di_maskz ((__v8di)__B, (__v8di) __C,
    271 						 (__v8di) __D, (__mmask8)__A);
    272 }
    273 extern __inline __m512i
    274 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    275 _mm512_shldv_epi16 (__m512i __A, __m512i __B, __m512i __C)
    276 {
    277   return (__m512i) __builtin_ia32_vpshldv_v32hi ((__v32hi)__A, (__v32hi) __B,
    278 							 (__v32hi) __C);
    279 }
    280 
    281 extern __inline __m512i
    282 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    283 _mm512_shldv_epi32 (__m512i __A, __m512i __B, __m512i __C)
    284 {
    285   return (__m512i) __builtin_ia32_vpshldv_v16si ((__v16si)__A, (__v16si) __B,
    286 								(__v16si) __C);
    287 }
    288 
    289 extern __inline __m512i
    290 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    291 _mm512_mask_shldv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
    292 {
    293   return (__m512i)__builtin_ia32_vpshldv_v16si_mask ((__v16si)__A,
    294 				(__v16si) __C, (__v16si) __D, (__mmask16)__B);
    295 }
    296 
    297 extern __inline __m512i
    298 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    299 _mm512_maskz_shldv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
    300 {
    301   return (__m512i)__builtin_ia32_vpshldv_v16si_maskz ((__v16si)__B,
    302 				(__v16si) __C, (__v16si) __D, (__mmask16)__A);
    303 }
    304 
    305 extern __inline __m512i
    306 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    307 _mm512_shldv_epi64 (__m512i __A, __m512i __B, __m512i __C)
    308 {
    309   return (__m512i) __builtin_ia32_vpshldv_v8di ((__v8di)__A, (__v8di) __B,
    310 								(__v8di) __C);
    311 }
    312 
    313 extern __inline __m512i
    314 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    315 _mm512_mask_shldv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
    316 {
    317   return (__m512i)__builtin_ia32_vpshldv_v8di_mask ((__v8di)__A, (__v8di) __C,
    318 						(__v8di) __D, (__mmask8)__B);
    319 }
    320 
    321 extern __inline __m512i
    322 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    323 _mm512_maskz_shldv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
    324 {
    325   return (__m512i)__builtin_ia32_vpshldv_v8di_maskz ((__v8di)__B, (__v8di) __C,
    326 						(__v8di) __D, (__mmask8)__A);
    327 }
    328 
    329 #ifdef __DISABLE_AVX512VBMI2__
    330 #undef __DISABLE_AVX512VBMI2__
    331 
    332 #pragma GCC pop_options
    333 #endif /* __DISABLE_AVX512VBMI2__ */
    334 
    335 #if !defined(__AVX512VBMI2__) || !defined(__AVX512BW__)
    336 #pragma GCC push_options
    337 #pragma GCC target("avx512vbmi2,avx512bw")
    338 #define __DISABLE_AVX512VBMI2BW__
    339 #endif /* __AVX512VBMI2BW__ */
    340 
    341 extern __inline __m512i
    342 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    343 _mm512_mask_compress_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
    344 {
    345   return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__C,
    346 						(__v64qi)__A, (__mmask64)__B);
    347 }
    348 
    349 
    350 extern __inline __m512i
    351 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    352 _mm512_maskz_compress_epi8 (__mmask64 __A, __m512i __B)
    353 {
    354   return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__B,
    355 			(__v64qi)_mm512_setzero_si512 (), (__mmask64)__A);
    356 }
    357 
    358 
    359 extern __inline void
    360 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    361 _mm512_mask_compressstoreu_epi8 (void * __A, __mmask64 __B, __m512i __C)
    362 {
    363   __builtin_ia32_compressstoreuqi512_mask ((__v64qi *) __A, (__v64qi) __C,
    364 							(__mmask64) __B);
    365 }
    366 
    367 extern __inline __m512i
    368 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    369 _mm512_mask_compress_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
    370 {
    371   return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__C,
    372 						(__v32hi)__A, (__mmask32)__B);
    373 }
    374 
    375 extern __inline __m512i
    376 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    377 _mm512_maskz_compress_epi16 (__mmask32 __A, __m512i __B)
    378 {
    379   return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__B,
    380 			(__v32hi)_mm512_setzero_si512 (), (__mmask32)__A);
    381 }
    382 
    383 extern __inline void
    384 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    385 _mm512_mask_compressstoreu_epi16 (void * __A, __mmask32 __B, __m512i __C)
    386 {
    387   __builtin_ia32_compressstoreuhi512_mask ((__v32hi *) __A, (__v32hi) __C,
    388 							(__mmask32) __B);
    389 }
    390 
    391 extern __inline __m512i
    392 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    393 _mm512_mask_expand_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
    394 {
    395   return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __C,
    396 						    (__v64qi) __A,
    397 						    (__mmask64) __B);
    398 }
    399 
    400 extern __inline __m512i
    401 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    402 _mm512_maskz_expand_epi8 (__mmask64 __A, __m512i __B)
    403 {
    404   return (__m512i) __builtin_ia32_expandqi512_maskz ((__v64qi) __B,
    405 			(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
    406 }
    407 
    408 extern __inline __m512i
    409 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    410 _mm512_mask_expandloadu_epi8 (__m512i __A, __mmask64 __B, const void * __C)
    411 {
    412   return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *) __C,
    413 					(__v64qi) __A, (__mmask64) __B);
    414 }
    415 
    416 extern __inline __m512i
    417 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    418 _mm512_maskz_expandloadu_epi8 (__mmask64 __A, const void * __B)
    419 {
    420   return (__m512i) __builtin_ia32_expandloadqi512_maskz ((const __v64qi *) __B,
    421 			(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
    422 }
    423 
    424 extern __inline __m512i
    425 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    426 _mm512_mask_expand_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
    427 {
    428   return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __C,
    429 						    (__v32hi) __A,
    430 						    (__mmask32) __B);
    431 }
    432 
    433 extern __inline __m512i
    434 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    435 _mm512_maskz_expand_epi16 (__mmask32 __A, __m512i __B)
    436 {
    437   return (__m512i) __builtin_ia32_expandhi512_maskz ((__v32hi) __B,
    438 			(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
    439 }
    440 
    441 extern __inline __m512i
    442 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    443 _mm512_mask_expandloadu_epi16 (__m512i __A, __mmask32 __B, const void * __C)
    444 {
    445   return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *) __C,
    446 					(__v32hi) __A, (__mmask32) __B);
    447 }
    448 
    449 extern __inline __m512i
    450 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    451 _mm512_maskz_expandloadu_epi16 (__mmask32 __A, const void * __B)
    452 {
    453   return (__m512i) __builtin_ia32_expandloadhi512_maskz ((const __v32hi *) __B,
    454 			(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
    455 }
    456 
    457 #ifdef __OPTIMIZE__
    458 extern __inline __m512i
    459 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    460 _mm512_mask_shrdi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
    461 								int __E)
    462 {
    463   return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__C,
    464 			(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
    465 }
    466 
    467 extern __inline __m512i
    468 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    469 _mm512_maskz_shrdi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
    470 {
    471   return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__B,
    472 	(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
    473 }
    474 
    475 extern __inline __m512i
    476 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    477 _mm512_mask_shldi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
    478 								int __E)
    479 {
    480   return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__C,
    481 			(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
    482 }
    483 
    484 extern __inline __m512i
    485 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    486 _mm512_maskz_shldi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
    487 {
    488   return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__B,
    489 	(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
    490 }
    491 
    492 #else
    493 #define _mm512_mask_shrdi_epi16(A, B, C, D, E) \
    494   ((__m512i) __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(C), \
    495 					       (__v32hi)(__m512i)(D), \
    496 					       (int)(E),		\
    497 					       (__v32hi)(__m512i)(A),	\
    498 					       (__mmask32)(B)))
    499 #define _mm512_maskz_shrdi_epi16(A, B, C, D) \
    500   ((__m512i) \
    501    __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(B),		\
    502 				     (__v32hi)(__m512i)(C),(int)(D),	\
    503 				     (__v32hi)(__m512i)_mm512_setzero_si512 (), \
    504 				     (__mmask32)(A)))
    505 #define _mm512_mask_shldi_epi16(A, B, C, D, E) \
    506   ((__m512i) __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(C), \
    507 					       (__v32hi)(__m512i)(D), \
    508 					       (int)(E), \
    509 					       (__v32hi)(__m512i)(A),	\
    510 					       (__mmask32)(B)))
    511 #define _mm512_maskz_shldi_epi16(A, B, C, D) \
    512   ((__m512i) \
    513    __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(B),		\
    514 				     (__v32hi)(__m512i)(C),(int)(D),	\
    515 				     (__v32hi)(__m512i)_mm512_setzero_si512 (), \
    516 				     (__mmask32)(A)))
    517 #endif
    518 
    519 extern __inline __m512i
    520 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    521 _mm512_mask_shrdv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
    522 {
    523   return (__m512i)__builtin_ia32_vpshrdv_v32hi_mask ((__v32hi)__A,
    524 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
    525 }
    526 
    527 extern __inline __m512i
    528 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    529 _mm512_maskz_shrdv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
    530 {
    531   return (__m512i)__builtin_ia32_vpshrdv_v32hi_maskz ((__v32hi)__B,
    532 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
    533 }
    534 
    535 extern __inline __m512i
    536 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    537 _mm512_mask_shldv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
    538 {
    539   return (__m512i)__builtin_ia32_vpshldv_v32hi_mask ((__v32hi)__A,
    540 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
    541 }
    542 
    543 extern __inline __m512i
    544 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    545 _mm512_maskz_shldv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
    546 {
    547   return (__m512i)__builtin_ia32_vpshldv_v32hi_maskz ((__v32hi)__B,
    548 				(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
    549 }
    550 
    551 #ifdef __DISABLE_AVX512VBMI2BW__
    552 #undef __DISABLE_AVX512VBMI2BW__
    553 
    554 #pragma GCC pop_options
    555 #endif /* __DISABLE_AVX512VBMI2BW__ */
    556 
    557 #endif /* __AVX512VBMI2INTRIN_H_INCLUDED */
    558