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