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