avx512vbmi2intrin.h revision 1.1.1.3
1/* Copyright (C) 2013-2020 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__ 38extern __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 46extern __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 54extern __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 63extern __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 71extern __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 78extern __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 87extern __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 95extern __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 103extern __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 111extern __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 120extern __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 128extern __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 135extern __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 144extern __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 218extern __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 226extern __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 234extern __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 242extern __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 250extern __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 258extern __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 266extern __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} 273extern __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 281extern __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 289extern __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 297extern __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 305extern __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 313extern __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 321extern __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 341extern __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 350extern __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 359extern __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 367extern __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 375extern __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 383extern __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 391extern __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 400extern __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 408extern __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 416extern __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 424extern __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 433extern __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 441extern __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 449extern __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__ 458extern __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 467extern __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 475extern __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 484extern __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 519extern __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 527extern __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 535extern __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 543extern __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