avx512bwintrin.h revision 329410
1/*===------------- avx512bwintrin.h - AVX512BW intrinsics ------------------=== 2 * 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 * THE SOFTWARE. 21 * 22 *===-----------------------------------------------------------------------=== 23 */ 24#ifndef __IMMINTRIN_H 25#error "Never use <avx512bwintrin.h> directly; include <immintrin.h> instead." 26#endif 27 28#ifndef __AVX512BWINTRIN_H 29#define __AVX512BWINTRIN_H 30 31typedef unsigned int __mmask32; 32typedef unsigned long long __mmask64; 33 34/* Define the default attributes for the functions in this file. */ 35#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bw"))) 36 37static __inline __m512i __DEFAULT_FN_ATTRS 38_mm512_setzero_qi(void) { 39 return (__m512i)(__v64qi){ 0, 0, 0, 0, 0, 0, 0, 0, 40 0, 0, 0, 0, 0, 0, 0, 0, 41 0, 0, 0, 0, 0, 0, 0, 0, 42 0, 0, 0, 0, 0, 0, 0, 0, 43 0, 0, 0, 0, 0, 0, 0, 0, 44 0, 0, 0, 0, 0, 0, 0, 0, 45 0, 0, 0, 0, 0, 0, 0, 0, 46 0, 0, 0, 0, 0, 0, 0, 0 }; 47} 48 49static __inline __m512i __DEFAULT_FN_ATTRS 50_mm512_setzero_hi(void) { 51 return (__m512i)(__v32hi){ 0, 0, 0, 0, 0, 0, 0, 0, 52 0, 0, 0, 0, 0, 0, 0, 0, 53 0, 0, 0, 0, 0, 0, 0, 0, 54 0, 0, 0, 0, 0, 0, 0, 0 }; 55} 56 57/* Integer compare */ 58 59#define _mm512_cmp_epi8_mask(a, b, p) __extension__ ({ \ 60 (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \ 61 (__v64qi)(__m512i)(b), (int)(p), \ 62 (__mmask64)-1); }) 63 64#define _mm512_mask_cmp_epi8_mask(m, a, b, p) __extension__ ({ \ 65 (__mmask64)__builtin_ia32_cmpb512_mask((__v64qi)(__m512i)(a), \ 66 (__v64qi)(__m512i)(b), (int)(p), \ 67 (__mmask64)(m)); }) 68 69#define _mm512_cmp_epu8_mask(a, b, p) __extension__ ({ \ 70 (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \ 71 (__v64qi)(__m512i)(b), (int)(p), \ 72 (__mmask64)-1); }) 73 74#define _mm512_mask_cmp_epu8_mask(m, a, b, p) __extension__ ({ \ 75 (__mmask64)__builtin_ia32_ucmpb512_mask((__v64qi)(__m512i)(a), \ 76 (__v64qi)(__m512i)(b), (int)(p), \ 77 (__mmask64)(m)); }) 78 79#define _mm512_cmp_epi16_mask(a, b, p) __extension__ ({ \ 80 (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \ 81 (__v32hi)(__m512i)(b), (int)(p), \ 82 (__mmask32)-1); }) 83 84#define _mm512_mask_cmp_epi16_mask(m, a, b, p) __extension__ ({ \ 85 (__mmask32)__builtin_ia32_cmpw512_mask((__v32hi)(__m512i)(a), \ 86 (__v32hi)(__m512i)(b), (int)(p), \ 87 (__mmask32)(m)); }) 88 89#define _mm512_cmp_epu16_mask(a, b, p) __extension__ ({ \ 90 (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \ 91 (__v32hi)(__m512i)(b), (int)(p), \ 92 (__mmask32)-1); }) 93 94#define _mm512_mask_cmp_epu16_mask(m, a, b, p) __extension__ ({ \ 95 (__mmask32)__builtin_ia32_ucmpw512_mask((__v32hi)(__m512i)(a), \ 96 (__v32hi)(__m512i)(b), (int)(p), \ 97 (__mmask32)(m)); }) 98 99#define _mm512_cmpeq_epi8_mask(A, B) \ 100 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_EQ) 101#define _mm512_mask_cmpeq_epi8_mask(k, A, B) \ 102 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_EQ) 103#define _mm512_cmpge_epi8_mask(A, B) \ 104 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_GE) 105#define _mm512_mask_cmpge_epi8_mask(k, A, B) \ 106 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_GE) 107#define _mm512_cmpgt_epi8_mask(A, B) \ 108 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_GT) 109#define _mm512_mask_cmpgt_epi8_mask(k, A, B) \ 110 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_GT) 111#define _mm512_cmple_epi8_mask(A, B) \ 112 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_LE) 113#define _mm512_mask_cmple_epi8_mask(k, A, B) \ 114 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_LE) 115#define _mm512_cmplt_epi8_mask(A, B) \ 116 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_LT) 117#define _mm512_mask_cmplt_epi8_mask(k, A, B) \ 118 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_LT) 119#define _mm512_cmpneq_epi8_mask(A, B) \ 120 _mm512_cmp_epi8_mask((A), (B), _MM_CMPINT_NE) 121#define _mm512_mask_cmpneq_epi8_mask(k, A, B) \ 122 _mm512_mask_cmp_epi8_mask((k), (A), (B), _MM_CMPINT_NE) 123 124#define _mm512_cmpeq_epu8_mask(A, B) \ 125 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_EQ) 126#define _mm512_mask_cmpeq_epu8_mask(k, A, B) \ 127 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_EQ) 128#define _mm512_cmpge_epu8_mask(A, B) \ 129 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_GE) 130#define _mm512_mask_cmpge_epu8_mask(k, A, B) \ 131 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_GE) 132#define _mm512_cmpgt_epu8_mask(A, B) \ 133 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_GT) 134#define _mm512_mask_cmpgt_epu8_mask(k, A, B) \ 135 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_GT) 136#define _mm512_cmple_epu8_mask(A, B) \ 137 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_LE) 138#define _mm512_mask_cmple_epu8_mask(k, A, B) \ 139 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_LE) 140#define _mm512_cmplt_epu8_mask(A, B) \ 141 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_LT) 142#define _mm512_mask_cmplt_epu8_mask(k, A, B) \ 143 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_LT) 144#define _mm512_cmpneq_epu8_mask(A, B) \ 145 _mm512_cmp_epu8_mask((A), (B), _MM_CMPINT_NE) 146#define _mm512_mask_cmpneq_epu8_mask(k, A, B) \ 147 _mm512_mask_cmp_epu8_mask((k), (A), (B), _MM_CMPINT_NE) 148 149#define _mm512_cmpeq_epi16_mask(A, B) \ 150 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_EQ) 151#define _mm512_mask_cmpeq_epi16_mask(k, A, B) \ 152 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_EQ) 153#define _mm512_cmpge_epi16_mask(A, B) \ 154 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_GE) 155#define _mm512_mask_cmpge_epi16_mask(k, A, B) \ 156 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_GE) 157#define _mm512_cmpgt_epi16_mask(A, B) \ 158 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_GT) 159#define _mm512_mask_cmpgt_epi16_mask(k, A, B) \ 160 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_GT) 161#define _mm512_cmple_epi16_mask(A, B) \ 162 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_LE) 163#define _mm512_mask_cmple_epi16_mask(k, A, B) \ 164 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_LE) 165#define _mm512_cmplt_epi16_mask(A, B) \ 166 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_LT) 167#define _mm512_mask_cmplt_epi16_mask(k, A, B) \ 168 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_LT) 169#define _mm512_cmpneq_epi16_mask(A, B) \ 170 _mm512_cmp_epi16_mask((A), (B), _MM_CMPINT_NE) 171#define _mm512_mask_cmpneq_epi16_mask(k, A, B) \ 172 _mm512_mask_cmp_epi16_mask((k), (A), (B), _MM_CMPINT_NE) 173 174#define _mm512_cmpeq_epu16_mask(A, B) \ 175 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_EQ) 176#define _mm512_mask_cmpeq_epu16_mask(k, A, B) \ 177 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_EQ) 178#define _mm512_cmpge_epu16_mask(A, B) \ 179 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_GE) 180#define _mm512_mask_cmpge_epu16_mask(k, A, B) \ 181 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_GE) 182#define _mm512_cmpgt_epu16_mask(A, B) \ 183 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_GT) 184#define _mm512_mask_cmpgt_epu16_mask(k, A, B) \ 185 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_GT) 186#define _mm512_cmple_epu16_mask(A, B) \ 187 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LE) 188#define _mm512_mask_cmple_epu16_mask(k, A, B) \ 189 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_LE) 190#define _mm512_cmplt_epu16_mask(A, B) \ 191 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_LT) 192#define _mm512_mask_cmplt_epu16_mask(k, A, B) \ 193 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_LT) 194#define _mm512_cmpneq_epu16_mask(A, B) \ 195 _mm512_cmp_epu16_mask((A), (B), _MM_CMPINT_NE) 196#define _mm512_mask_cmpneq_epu16_mask(k, A, B) \ 197 _mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_NE) 198 199static __inline__ __m512i __DEFAULT_FN_ATTRS 200_mm512_add_epi8 (__m512i __A, __m512i __B) { 201 return (__m512i) ((__v64qu) __A + (__v64qu) __B); 202} 203 204static __inline__ __m512i __DEFAULT_FN_ATTRS 205_mm512_mask_add_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { 206 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 207 (__v64qi)_mm512_add_epi8(__A, __B), 208 (__v64qi)__W); 209} 210 211static __inline__ __m512i __DEFAULT_FN_ATTRS 212_mm512_maskz_add_epi8(__mmask64 __U, __m512i __A, __m512i __B) { 213 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 214 (__v64qi)_mm512_add_epi8(__A, __B), 215 (__v64qi)_mm512_setzero_qi()); 216} 217 218static __inline__ __m512i __DEFAULT_FN_ATTRS 219_mm512_sub_epi8 (__m512i __A, __m512i __B) { 220 return (__m512i) ((__v64qu) __A - (__v64qu) __B); 221} 222 223static __inline__ __m512i __DEFAULT_FN_ATTRS 224_mm512_mask_sub_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { 225 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 226 (__v64qi)_mm512_sub_epi8(__A, __B), 227 (__v64qi)__W); 228} 229 230static __inline__ __m512i __DEFAULT_FN_ATTRS 231_mm512_maskz_sub_epi8(__mmask64 __U, __m512i __A, __m512i __B) { 232 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 233 (__v64qi)_mm512_sub_epi8(__A, __B), 234 (__v64qi)_mm512_setzero_qi()); 235} 236 237static __inline__ __m512i __DEFAULT_FN_ATTRS 238_mm512_add_epi16 (__m512i __A, __m512i __B) { 239 return (__m512i) ((__v32hu) __A + (__v32hu) __B); 240} 241 242static __inline__ __m512i __DEFAULT_FN_ATTRS 243_mm512_mask_add_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 244 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 245 (__v32hi)_mm512_add_epi16(__A, __B), 246 (__v32hi)__W); 247} 248 249static __inline__ __m512i __DEFAULT_FN_ATTRS 250_mm512_maskz_add_epi16(__mmask32 __U, __m512i __A, __m512i __B) { 251 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 252 (__v32hi)_mm512_add_epi16(__A, __B), 253 (__v32hi)_mm512_setzero_hi()); 254} 255 256static __inline__ __m512i __DEFAULT_FN_ATTRS 257_mm512_sub_epi16 (__m512i __A, __m512i __B) { 258 return (__m512i) ((__v32hu) __A - (__v32hu) __B); 259} 260 261static __inline__ __m512i __DEFAULT_FN_ATTRS 262_mm512_mask_sub_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 263 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 264 (__v32hi)_mm512_sub_epi16(__A, __B), 265 (__v32hi)__W); 266} 267 268static __inline__ __m512i __DEFAULT_FN_ATTRS 269_mm512_maskz_sub_epi16(__mmask32 __U, __m512i __A, __m512i __B) { 270 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 271 (__v32hi)_mm512_sub_epi16(__A, __B), 272 (__v32hi)_mm512_setzero_hi()); 273} 274 275static __inline__ __m512i __DEFAULT_FN_ATTRS 276_mm512_mullo_epi16 (__m512i __A, __m512i __B) { 277 return (__m512i) ((__v32hu) __A * (__v32hu) __B); 278} 279 280static __inline__ __m512i __DEFAULT_FN_ATTRS 281_mm512_mask_mullo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 282 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 283 (__v32hi)_mm512_mullo_epi16(__A, __B), 284 (__v32hi)__W); 285} 286 287static __inline__ __m512i __DEFAULT_FN_ATTRS 288_mm512_maskz_mullo_epi16(__mmask32 __U, __m512i __A, __m512i __B) { 289 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 290 (__v32hi)_mm512_mullo_epi16(__A, __B), 291 (__v32hi)_mm512_setzero_hi()); 292} 293 294static __inline__ __m512i __DEFAULT_FN_ATTRS 295_mm512_mask_blend_epi8 (__mmask64 __U, __m512i __A, __m512i __W) 296{ 297 return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U, 298 (__v64qi) __W, 299 (__v64qi) __A); 300} 301 302static __inline__ __m512i __DEFAULT_FN_ATTRS 303_mm512_mask_blend_epi16 (__mmask32 __U, __m512i __A, __m512i __W) 304{ 305 return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U, 306 (__v32hi) __W, 307 (__v32hi) __A); 308} 309 310static __inline__ __m512i __DEFAULT_FN_ATTRS 311_mm512_abs_epi8 (__m512i __A) 312{ 313 return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, 314 (__v64qi) _mm512_setzero_qi(), 315 (__mmask64) -1); 316} 317 318static __inline__ __m512i __DEFAULT_FN_ATTRS 319_mm512_mask_abs_epi8 (__m512i __W, __mmask64 __U, __m512i __A) 320{ 321 return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, 322 (__v64qi) __W, 323 (__mmask64) __U); 324} 325 326static __inline__ __m512i __DEFAULT_FN_ATTRS 327_mm512_maskz_abs_epi8 (__mmask64 __U, __m512i __A) 328{ 329 return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A, 330 (__v64qi) _mm512_setzero_qi(), 331 (__mmask64) __U); 332} 333 334static __inline__ __m512i __DEFAULT_FN_ATTRS 335_mm512_abs_epi16 (__m512i __A) 336{ 337 return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, 338 (__v32hi) _mm512_setzero_hi(), 339 (__mmask32) -1); 340} 341 342static __inline__ __m512i __DEFAULT_FN_ATTRS 343_mm512_mask_abs_epi16 (__m512i __W, __mmask32 __U, __m512i __A) 344{ 345 return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, 346 (__v32hi) __W, 347 (__mmask32) __U); 348} 349 350static __inline__ __m512i __DEFAULT_FN_ATTRS 351_mm512_maskz_abs_epi16 (__mmask32 __U, __m512i __A) 352{ 353 return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A, 354 (__v32hi) _mm512_setzero_hi(), 355 (__mmask32) __U); 356} 357 358static __inline__ __m512i __DEFAULT_FN_ATTRS 359_mm512_packs_epi32(__m512i __A, __m512i __B) 360{ 361 return (__m512i)__builtin_ia32_packssdw512((__v16si)__A, (__v16si)__B); 362} 363 364static __inline__ __m512i __DEFAULT_FN_ATTRS 365_mm512_maskz_packs_epi32(__mmask32 __M, __m512i __A, __m512i __B) 366{ 367 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M, 368 (__v32hi)_mm512_packs_epi32(__A, __B), 369 (__v32hi)_mm512_setzero_hi()); 370} 371 372static __inline__ __m512i __DEFAULT_FN_ATTRS 373_mm512_mask_packs_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) 374{ 375 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M, 376 (__v32hi)_mm512_packs_epi32(__A, __B), 377 (__v32hi)__W); 378} 379 380static __inline__ __m512i __DEFAULT_FN_ATTRS 381_mm512_packs_epi16(__m512i __A, __m512i __B) 382{ 383 return (__m512i)__builtin_ia32_packsswb512((__v32hi)__A, (__v32hi) __B); 384} 385 386static __inline__ __m512i __DEFAULT_FN_ATTRS 387_mm512_mask_packs_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) 388{ 389 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M, 390 (__v64qi)_mm512_packs_epi16(__A, __B), 391 (__v64qi)__W); 392} 393 394static __inline__ __m512i __DEFAULT_FN_ATTRS 395_mm512_maskz_packs_epi16(__mmask64 __M, __m512i __A, __m512i __B) 396{ 397 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M, 398 (__v64qi)_mm512_packs_epi16(__A, __B), 399 (__v64qi)_mm512_setzero_qi()); 400} 401 402static __inline__ __m512i __DEFAULT_FN_ATTRS 403_mm512_packus_epi32(__m512i __A, __m512i __B) 404{ 405 return (__m512i)__builtin_ia32_packusdw512((__v16si) __A, (__v16si) __B); 406} 407 408static __inline__ __m512i __DEFAULT_FN_ATTRS 409_mm512_maskz_packus_epi32(__mmask32 __M, __m512i __A, __m512i __B) 410{ 411 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M, 412 (__v32hi)_mm512_packus_epi32(__A, __B), 413 (__v32hi)_mm512_setzero_hi()); 414} 415 416static __inline__ __m512i __DEFAULT_FN_ATTRS 417_mm512_mask_packus_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) 418{ 419 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M, 420 (__v32hi)_mm512_packus_epi32(__A, __B), 421 (__v32hi)__W); 422} 423 424static __inline__ __m512i __DEFAULT_FN_ATTRS 425_mm512_packus_epi16(__m512i __A, __m512i __B) 426{ 427 return (__m512i)__builtin_ia32_packuswb512((__v32hi) __A, (__v32hi) __B); 428} 429 430static __inline__ __m512i __DEFAULT_FN_ATTRS 431_mm512_mask_packus_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) 432{ 433 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M, 434 (__v64qi)_mm512_packus_epi16(__A, __B), 435 (__v64qi)__W); 436} 437 438static __inline__ __m512i __DEFAULT_FN_ATTRS 439_mm512_maskz_packus_epi16(__mmask64 __M, __m512i __A, __m512i __B) 440{ 441 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M, 442 (__v64qi)_mm512_packus_epi16(__A, __B), 443 (__v64qi)_mm512_setzero_qi()); 444} 445 446static __inline__ __m512i __DEFAULT_FN_ATTRS 447_mm512_adds_epi8 (__m512i __A, __m512i __B) 448{ 449 return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, 450 (__v64qi) __B, 451 (__v64qi) _mm512_setzero_qi(), 452 (__mmask64) -1); 453} 454 455static __inline__ __m512i __DEFAULT_FN_ATTRS 456_mm512_mask_adds_epi8 (__m512i __W, __mmask64 __U, __m512i __A, 457 __m512i __B) 458{ 459 return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, 460 (__v64qi) __B, 461 (__v64qi) __W, 462 (__mmask64) __U); 463} 464 465static __inline__ __m512i __DEFAULT_FN_ATTRS 466_mm512_maskz_adds_epi8 (__mmask64 __U, __m512i __A, __m512i __B) 467{ 468 return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A, 469 (__v64qi) __B, 470 (__v64qi) _mm512_setzero_qi(), 471 (__mmask64) __U); 472} 473 474static __inline__ __m512i __DEFAULT_FN_ATTRS 475_mm512_adds_epi16 (__m512i __A, __m512i __B) 476{ 477 return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, 478 (__v32hi) __B, 479 (__v32hi) _mm512_setzero_hi(), 480 (__mmask32) -1); 481} 482 483static __inline__ __m512i __DEFAULT_FN_ATTRS 484_mm512_mask_adds_epi16 (__m512i __W, __mmask32 __U, __m512i __A, 485 __m512i __B) 486{ 487 return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, 488 (__v32hi) __B, 489 (__v32hi) __W, 490 (__mmask32) __U); 491} 492 493static __inline__ __m512i __DEFAULT_FN_ATTRS 494_mm512_maskz_adds_epi16 (__mmask32 __U, __m512i __A, __m512i __B) 495{ 496 return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A, 497 (__v32hi) __B, 498 (__v32hi) _mm512_setzero_hi(), 499 (__mmask32) __U); 500} 501 502static __inline__ __m512i __DEFAULT_FN_ATTRS 503_mm512_adds_epu8 (__m512i __A, __m512i __B) 504{ 505 return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, 506 (__v64qi) __B, 507 (__v64qi) _mm512_setzero_qi(), 508 (__mmask64) -1); 509} 510 511static __inline__ __m512i __DEFAULT_FN_ATTRS 512_mm512_mask_adds_epu8 (__m512i __W, __mmask64 __U, __m512i __A, 513 __m512i __B) 514{ 515 return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, 516 (__v64qi) __B, 517 (__v64qi) __W, 518 (__mmask64) __U); 519} 520 521static __inline__ __m512i __DEFAULT_FN_ATTRS 522_mm512_maskz_adds_epu8 (__mmask64 __U, __m512i __A, __m512i __B) 523{ 524 return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A, 525 (__v64qi) __B, 526 (__v64qi) _mm512_setzero_qi(), 527 (__mmask64) __U); 528} 529 530static __inline__ __m512i __DEFAULT_FN_ATTRS 531_mm512_adds_epu16 (__m512i __A, __m512i __B) 532{ 533 return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, 534 (__v32hi) __B, 535 (__v32hi) _mm512_setzero_hi(), 536 (__mmask32) -1); 537} 538 539static __inline__ __m512i __DEFAULT_FN_ATTRS 540_mm512_mask_adds_epu16 (__m512i __W, __mmask32 __U, __m512i __A, 541 __m512i __B) 542{ 543 return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, 544 (__v32hi) __B, 545 (__v32hi) __W, 546 (__mmask32) __U); 547} 548 549static __inline__ __m512i __DEFAULT_FN_ATTRS 550_mm512_maskz_adds_epu16 (__mmask32 __U, __m512i __A, __m512i __B) 551{ 552 return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A, 553 (__v32hi) __B, 554 (__v32hi) _mm512_setzero_hi(), 555 (__mmask32) __U); 556} 557 558static __inline__ __m512i __DEFAULT_FN_ATTRS 559_mm512_avg_epu8 (__m512i __A, __m512i __B) 560{ 561 typedef unsigned short __v64hu __attribute__((__vector_size__(128))); 562 return (__m512i)__builtin_convertvector( 563 ((__builtin_convertvector((__v64qu) __A, __v64hu) + 564 __builtin_convertvector((__v64qu) __B, __v64hu)) + 1) 565 >> 1, __v64qu); 566} 567 568static __inline__ __m512i __DEFAULT_FN_ATTRS 569_mm512_mask_avg_epu8 (__m512i __W, __mmask64 __U, __m512i __A, 570 __m512i __B) 571{ 572 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 573 (__v64qi)_mm512_avg_epu8(__A, __B), 574 (__v64qi)__W); 575} 576 577static __inline__ __m512i __DEFAULT_FN_ATTRS 578_mm512_maskz_avg_epu8 (__mmask64 __U, __m512i __A, __m512i __B) 579{ 580 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 581 (__v64qi)_mm512_avg_epu8(__A, __B), 582 (__v64qi)_mm512_setzero_qi()); 583} 584 585static __inline__ __m512i __DEFAULT_FN_ATTRS 586_mm512_avg_epu16 (__m512i __A, __m512i __B) 587{ 588 typedef unsigned int __v32su __attribute__((__vector_size__(128))); 589 return (__m512i)__builtin_convertvector( 590 ((__builtin_convertvector((__v32hu) __A, __v32su) + 591 __builtin_convertvector((__v32hu) __B, __v32su)) + 1) 592 >> 1, __v32hu); 593} 594 595static __inline__ __m512i __DEFAULT_FN_ATTRS 596_mm512_mask_avg_epu16 (__m512i __W, __mmask32 __U, __m512i __A, 597 __m512i __B) 598{ 599 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 600 (__v32hi)_mm512_avg_epu16(__A, __B), 601 (__v32hi)__W); 602} 603 604static __inline__ __m512i __DEFAULT_FN_ATTRS 605_mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B) 606{ 607 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 608 (__v32hi)_mm512_avg_epu16(__A, __B), 609 (__v32hi) _mm512_setzero_hi()); 610} 611 612static __inline__ __m512i __DEFAULT_FN_ATTRS 613_mm512_max_epi8 (__m512i __A, __m512i __B) 614{ 615 return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, 616 (__v64qi) __B, 617 (__v64qi) _mm512_setzero_qi(), 618 (__mmask64) -1); 619} 620 621static __inline__ __m512i __DEFAULT_FN_ATTRS 622_mm512_maskz_max_epi8 (__mmask64 __M, __m512i __A, __m512i __B) 623{ 624 return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, 625 (__v64qi) __B, 626 (__v64qi) _mm512_setzero_qi(), 627 (__mmask64) __M); 628} 629 630static __inline__ __m512i __DEFAULT_FN_ATTRS 631_mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A, 632 __m512i __B) 633{ 634 return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A, 635 (__v64qi) __B, 636 (__v64qi) __W, 637 (__mmask64) __M); 638} 639 640static __inline__ __m512i __DEFAULT_FN_ATTRS 641_mm512_max_epi16 (__m512i __A, __m512i __B) 642{ 643 return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, 644 (__v32hi) __B, 645 (__v32hi) _mm512_setzero_hi(), 646 (__mmask32) -1); 647} 648 649static __inline__ __m512i __DEFAULT_FN_ATTRS 650_mm512_maskz_max_epi16 (__mmask32 __M, __m512i __A, __m512i __B) 651{ 652 return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, 653 (__v32hi) __B, 654 (__v32hi) _mm512_setzero_hi(), 655 (__mmask32) __M); 656} 657 658static __inline__ __m512i __DEFAULT_FN_ATTRS 659_mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A, 660 __m512i __B) 661{ 662 return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A, 663 (__v32hi) __B, 664 (__v32hi) __W, 665 (__mmask32) __M); 666} 667 668static __inline__ __m512i __DEFAULT_FN_ATTRS 669_mm512_max_epu8 (__m512i __A, __m512i __B) 670{ 671 return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, 672 (__v64qi) __B, 673 (__v64qi) _mm512_setzero_qi(), 674 (__mmask64) -1); 675} 676 677static __inline__ __m512i __DEFAULT_FN_ATTRS 678_mm512_maskz_max_epu8 (__mmask64 __M, __m512i __A, __m512i __B) 679{ 680 return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, 681 (__v64qi) __B, 682 (__v64qi) _mm512_setzero_qi(), 683 (__mmask64) __M); 684} 685 686static __inline__ __m512i __DEFAULT_FN_ATTRS 687_mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A, 688 __m512i __B) 689{ 690 return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A, 691 (__v64qi) __B, 692 (__v64qi) __W, 693 (__mmask64) __M); 694} 695 696static __inline__ __m512i __DEFAULT_FN_ATTRS 697_mm512_max_epu16 (__m512i __A, __m512i __B) 698{ 699 return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, 700 (__v32hi) __B, 701 (__v32hi) _mm512_setzero_hi(), 702 (__mmask32) -1); 703} 704 705static __inline__ __m512i __DEFAULT_FN_ATTRS 706_mm512_maskz_max_epu16 (__mmask32 __M, __m512i __A, __m512i __B) 707{ 708 return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, 709 (__v32hi) __B, 710 (__v32hi) _mm512_setzero_hi(), 711 (__mmask32) __M); 712} 713 714static __inline__ __m512i __DEFAULT_FN_ATTRS 715_mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A, 716 __m512i __B) 717{ 718 return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A, 719 (__v32hi) __B, 720 (__v32hi) __W, 721 (__mmask32) __M); 722} 723 724static __inline__ __m512i __DEFAULT_FN_ATTRS 725_mm512_min_epi8 (__m512i __A, __m512i __B) 726{ 727 return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, 728 (__v64qi) __B, 729 (__v64qi) _mm512_setzero_qi(), 730 (__mmask64) -1); 731} 732 733static __inline__ __m512i __DEFAULT_FN_ATTRS 734_mm512_maskz_min_epi8 (__mmask64 __M, __m512i __A, __m512i __B) 735{ 736 return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, 737 (__v64qi) __B, 738 (__v64qi) _mm512_setzero_qi(), 739 (__mmask64) __M); 740} 741 742static __inline__ __m512i __DEFAULT_FN_ATTRS 743_mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A, 744 __m512i __B) 745{ 746 return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A, 747 (__v64qi) __B, 748 (__v64qi) __W, 749 (__mmask64) __M); 750} 751 752static __inline__ __m512i __DEFAULT_FN_ATTRS 753_mm512_min_epi16 (__m512i __A, __m512i __B) 754{ 755 return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, 756 (__v32hi) __B, 757 (__v32hi) _mm512_setzero_hi(), 758 (__mmask32) -1); 759} 760 761static __inline__ __m512i __DEFAULT_FN_ATTRS 762_mm512_maskz_min_epi16 (__mmask32 __M, __m512i __A, __m512i __B) 763{ 764 return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, 765 (__v32hi) __B, 766 (__v32hi) _mm512_setzero_hi(), 767 (__mmask32) __M); 768} 769 770static __inline__ __m512i __DEFAULT_FN_ATTRS 771_mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A, 772 __m512i __B) 773{ 774 return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A, 775 (__v32hi) __B, 776 (__v32hi) __W, 777 (__mmask32) __M); 778} 779 780static __inline__ __m512i __DEFAULT_FN_ATTRS 781_mm512_min_epu8 (__m512i __A, __m512i __B) 782{ 783 return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, 784 (__v64qi) __B, 785 (__v64qi) _mm512_setzero_qi(), 786 (__mmask64) -1); 787} 788 789static __inline__ __m512i __DEFAULT_FN_ATTRS 790_mm512_maskz_min_epu8 (__mmask64 __M, __m512i __A, __m512i __B) 791{ 792 return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, 793 (__v64qi) __B, 794 (__v64qi) _mm512_setzero_qi(), 795 (__mmask64) __M); 796} 797 798static __inline__ __m512i __DEFAULT_FN_ATTRS 799_mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A, 800 __m512i __B) 801{ 802 return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A, 803 (__v64qi) __B, 804 (__v64qi) __W, 805 (__mmask64) __M); 806} 807 808static __inline__ __m512i __DEFAULT_FN_ATTRS 809_mm512_min_epu16 (__m512i __A, __m512i __B) 810{ 811 return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, 812 (__v32hi) __B, 813 (__v32hi) _mm512_setzero_hi(), 814 (__mmask32) -1); 815} 816 817static __inline__ __m512i __DEFAULT_FN_ATTRS 818_mm512_maskz_min_epu16 (__mmask32 __M, __m512i __A, __m512i __B) 819{ 820 return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, 821 (__v32hi) __B, 822 (__v32hi) _mm512_setzero_hi(), 823 (__mmask32) __M); 824} 825 826static __inline__ __m512i __DEFAULT_FN_ATTRS 827_mm512_mask_min_epu16 (__m512i __W, __mmask32 __M, __m512i __A, 828 __m512i __B) 829{ 830 return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A, 831 (__v32hi) __B, 832 (__v32hi) __W, 833 (__mmask32) __M); 834} 835 836static __inline__ __m512i __DEFAULT_FN_ATTRS 837_mm512_shuffle_epi8(__m512i __A, __m512i __B) 838{ 839 return (__m512i)__builtin_ia32_pshufb512((__v64qi)__A,(__v64qi)__B); 840} 841 842static __inline__ __m512i __DEFAULT_FN_ATTRS 843_mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) 844{ 845 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 846 (__v64qi)_mm512_shuffle_epi8(__A, __B), 847 (__v64qi)__W); 848} 849 850static __inline__ __m512i __DEFAULT_FN_ATTRS 851_mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B) 852{ 853 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 854 (__v64qi)_mm512_shuffle_epi8(__A, __B), 855 (__v64qi)_mm512_setzero_qi()); 856} 857 858static __inline__ __m512i __DEFAULT_FN_ATTRS 859_mm512_subs_epi8 (__m512i __A, __m512i __B) 860{ 861 return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, 862 (__v64qi) __B, 863 (__v64qi) _mm512_setzero_qi(), 864 (__mmask64) -1); 865} 866 867static __inline__ __m512i __DEFAULT_FN_ATTRS 868_mm512_mask_subs_epi8 (__m512i __W, __mmask64 __U, __m512i __A, 869 __m512i __B) 870{ 871 return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, 872 (__v64qi) __B, 873 (__v64qi) __W, 874 (__mmask64) __U); 875} 876 877static __inline__ __m512i __DEFAULT_FN_ATTRS 878_mm512_maskz_subs_epi8 (__mmask64 __U, __m512i __A, __m512i __B) 879{ 880 return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A, 881 (__v64qi) __B, 882 (__v64qi) _mm512_setzero_qi(), 883 (__mmask64) __U); 884} 885 886static __inline__ __m512i __DEFAULT_FN_ATTRS 887_mm512_subs_epi16 (__m512i __A, __m512i __B) 888{ 889 return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, 890 (__v32hi) __B, 891 (__v32hi) _mm512_setzero_hi(), 892 (__mmask32) -1); 893} 894 895static __inline__ __m512i __DEFAULT_FN_ATTRS 896_mm512_mask_subs_epi16 (__m512i __W, __mmask32 __U, __m512i __A, 897 __m512i __B) 898{ 899 return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, 900 (__v32hi) __B, 901 (__v32hi) __W, 902 (__mmask32) __U); 903} 904 905static __inline__ __m512i __DEFAULT_FN_ATTRS 906_mm512_maskz_subs_epi16 (__mmask32 __U, __m512i __A, __m512i __B) 907{ 908 return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A, 909 (__v32hi) __B, 910 (__v32hi) _mm512_setzero_hi(), 911 (__mmask32) __U); 912} 913 914static __inline__ __m512i __DEFAULT_FN_ATTRS 915_mm512_subs_epu8 (__m512i __A, __m512i __B) 916{ 917 return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, 918 (__v64qi) __B, 919 (__v64qi) _mm512_setzero_qi(), 920 (__mmask64) -1); 921} 922 923static __inline__ __m512i __DEFAULT_FN_ATTRS 924_mm512_mask_subs_epu8 (__m512i __W, __mmask64 __U, __m512i __A, 925 __m512i __B) 926{ 927 return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, 928 (__v64qi) __B, 929 (__v64qi) __W, 930 (__mmask64) __U); 931} 932 933static __inline__ __m512i __DEFAULT_FN_ATTRS 934_mm512_maskz_subs_epu8 (__mmask64 __U, __m512i __A, __m512i __B) 935{ 936 return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A, 937 (__v64qi) __B, 938 (__v64qi) _mm512_setzero_qi(), 939 (__mmask64) __U); 940} 941 942static __inline__ __m512i __DEFAULT_FN_ATTRS 943_mm512_subs_epu16 (__m512i __A, __m512i __B) 944{ 945 return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, 946 (__v32hi) __B, 947 (__v32hi) _mm512_setzero_hi(), 948 (__mmask32) -1); 949} 950 951static __inline__ __m512i __DEFAULT_FN_ATTRS 952_mm512_mask_subs_epu16 (__m512i __W, __mmask32 __U, __m512i __A, 953 __m512i __B) 954{ 955 return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, 956 (__v32hi) __B, 957 (__v32hi) __W, 958 (__mmask32) __U); 959} 960 961static __inline__ __m512i __DEFAULT_FN_ATTRS 962_mm512_maskz_subs_epu16 (__mmask32 __U, __m512i __A, __m512i __B) 963{ 964 return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A, 965 (__v32hi) __B, 966 (__v32hi) _mm512_setzero_hi(), 967 (__mmask32) __U); 968} 969 970static __inline__ __m512i __DEFAULT_FN_ATTRS 971_mm512_mask2_permutex2var_epi16 (__m512i __A, __m512i __I, 972 __mmask32 __U, __m512i __B) 973{ 974 return (__m512i) __builtin_ia32_vpermi2varhi512_mask ((__v32hi) __A, 975 (__v32hi) __I /* idx */ , 976 (__v32hi) __B, 977 (__mmask32) __U); 978} 979 980static __inline__ __m512i __DEFAULT_FN_ATTRS 981_mm512_permutex2var_epi16 (__m512i __A, __m512i __I, __m512i __B) 982{ 983 return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */, 984 (__v32hi) __A, 985 (__v32hi) __B, 986 (__mmask32) -1); 987} 988 989static __inline__ __m512i __DEFAULT_FN_ATTRS 990_mm512_mask_permutex2var_epi16 (__m512i __A, __mmask32 __U, 991 __m512i __I, __m512i __B) 992{ 993 return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I /* idx */, 994 (__v32hi) __A, 995 (__v32hi) __B, 996 (__mmask32) __U); 997} 998 999static __inline__ __m512i __DEFAULT_FN_ATTRS 1000_mm512_maskz_permutex2var_epi16 (__mmask32 __U, __m512i __A, 1001 __m512i __I, __m512i __B) 1002{ 1003 return (__m512i) __builtin_ia32_vpermt2varhi512_maskz ((__v32hi) __I 1004 /* idx */ , 1005 (__v32hi) __A, 1006 (__v32hi) __B, 1007 (__mmask32) __U); 1008} 1009 1010static __inline__ __m512i __DEFAULT_FN_ATTRS 1011_mm512_mulhrs_epi16 (__m512i __A, __m512i __B) 1012{ 1013 return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, 1014 (__v32hi) __B, 1015 (__v32hi) _mm512_setzero_hi(), 1016 (__mmask32) -1); 1017} 1018 1019static __inline__ __m512i __DEFAULT_FN_ATTRS 1020_mm512_mask_mulhrs_epi16 (__m512i __W, __mmask32 __U, __m512i __A, 1021 __m512i __B) 1022{ 1023 return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, 1024 (__v32hi) __B, 1025 (__v32hi) __W, 1026 (__mmask32) __U); 1027} 1028 1029static __inline__ __m512i __DEFAULT_FN_ATTRS 1030_mm512_maskz_mulhrs_epi16 (__mmask32 __U, __m512i __A, __m512i __B) 1031{ 1032 return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, 1033 (__v32hi) __B, 1034 (__v32hi) _mm512_setzero_hi(), 1035 (__mmask32) __U); 1036} 1037 1038static __inline__ __m512i __DEFAULT_FN_ATTRS 1039_mm512_mulhi_epi16 (__m512i __A, __m512i __B) 1040{ 1041 return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, 1042 (__v32hi) __B, 1043 (__v32hi) _mm512_setzero_hi(), 1044 (__mmask32) -1); 1045} 1046 1047static __inline__ __m512i __DEFAULT_FN_ATTRS 1048_mm512_mask_mulhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A, 1049 __m512i __B) 1050{ 1051 return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, 1052 (__v32hi) __B, 1053 (__v32hi) __W, 1054 (__mmask32) __U); 1055} 1056 1057static __inline__ __m512i __DEFAULT_FN_ATTRS 1058_mm512_maskz_mulhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B) 1059{ 1060 return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A, 1061 (__v32hi) __B, 1062 (__v32hi) _mm512_setzero_hi(), 1063 (__mmask32) __U); 1064} 1065 1066static __inline__ __m512i __DEFAULT_FN_ATTRS 1067_mm512_mulhi_epu16 (__m512i __A, __m512i __B) 1068{ 1069 return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, 1070 (__v32hi) __B, 1071 (__v32hi) _mm512_setzero_hi(), 1072 (__mmask32) -1); 1073} 1074 1075static __inline__ __m512i __DEFAULT_FN_ATTRS 1076_mm512_mask_mulhi_epu16 (__m512i __W, __mmask32 __U, __m512i __A, 1077 __m512i __B) 1078{ 1079 return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, 1080 (__v32hi) __B, 1081 (__v32hi) __W, 1082 (__mmask32) __U); 1083} 1084 1085static __inline__ __m512i __DEFAULT_FN_ATTRS 1086_mm512_maskz_mulhi_epu16 (__mmask32 __U, __m512i __A, __m512i __B) 1087{ 1088 return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A, 1089 (__v32hi) __B, 1090 (__v32hi) _mm512_setzero_hi(), 1091 (__mmask32) __U); 1092} 1093 1094static __inline__ __m512i __DEFAULT_FN_ATTRS 1095_mm512_maddubs_epi16 (__m512i __X, __m512i __Y) { 1096 return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, 1097 (__v64qi) __Y, 1098 (__v32hi) _mm512_setzero_hi(), 1099 (__mmask32) -1); 1100} 1101 1102static __inline__ __m512i __DEFAULT_FN_ATTRS 1103_mm512_mask_maddubs_epi16 (__m512i __W, __mmask32 __U, __m512i __X, 1104 __m512i __Y) { 1105 return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, 1106 (__v64qi) __Y, 1107 (__v32hi) __W, 1108 (__mmask32) __U); 1109} 1110 1111static __inline__ __m512i __DEFAULT_FN_ATTRS 1112_mm512_maskz_maddubs_epi16 (__mmask32 __U, __m512i __X, __m512i __Y) { 1113 return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X, 1114 (__v64qi) __Y, 1115 (__v32hi) _mm512_setzero_hi(), 1116 (__mmask32) __U); 1117} 1118 1119static __inline__ __m512i __DEFAULT_FN_ATTRS 1120_mm512_madd_epi16 (__m512i __A, __m512i __B) { 1121 return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, 1122 (__v32hi) __B, 1123 (__v16si) _mm512_setzero_si512(), 1124 (__mmask16) -1); 1125} 1126 1127static __inline__ __m512i __DEFAULT_FN_ATTRS 1128_mm512_mask_madd_epi16 (__m512i __W, __mmask16 __U, __m512i __A, 1129 __m512i __B) { 1130 return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, 1131 (__v32hi) __B, 1132 (__v16si) __W, 1133 (__mmask16) __U); 1134} 1135 1136static __inline__ __m512i __DEFAULT_FN_ATTRS 1137_mm512_maskz_madd_epi16 (__mmask16 __U, __m512i __A, __m512i __B) { 1138 return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A, 1139 (__v32hi) __B, 1140 (__v16si) _mm512_setzero_si512(), 1141 (__mmask16) __U); 1142} 1143 1144static __inline__ __m256i __DEFAULT_FN_ATTRS 1145_mm512_cvtsepi16_epi8 (__m512i __A) { 1146 return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, 1147 (__v32qi)_mm256_setzero_si256(), 1148 (__mmask32) -1); 1149} 1150 1151static __inline__ __m256i __DEFAULT_FN_ATTRS 1152_mm512_mask_cvtsepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { 1153 return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, 1154 (__v32qi)__O, 1155 __M); 1156} 1157 1158static __inline__ __m256i __DEFAULT_FN_ATTRS 1159_mm512_maskz_cvtsepi16_epi8 (__mmask32 __M, __m512i __A) { 1160 return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A, 1161 (__v32qi) _mm256_setzero_si256(), 1162 __M); 1163} 1164 1165static __inline__ __m256i __DEFAULT_FN_ATTRS 1166_mm512_cvtusepi16_epi8 (__m512i __A) { 1167 return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, 1168 (__v32qi) _mm256_setzero_si256(), 1169 (__mmask32) -1); 1170} 1171 1172static __inline__ __m256i __DEFAULT_FN_ATTRS 1173_mm512_mask_cvtusepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { 1174 return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, 1175 (__v32qi) __O, 1176 __M); 1177} 1178 1179static __inline__ __m256i __DEFAULT_FN_ATTRS 1180_mm512_maskz_cvtusepi16_epi8 (__mmask32 __M, __m512i __A) { 1181 return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A, 1182 (__v32qi) _mm256_setzero_si256(), 1183 __M); 1184} 1185 1186static __inline__ __m256i __DEFAULT_FN_ATTRS 1187_mm512_cvtepi16_epi8 (__m512i __A) { 1188 return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, 1189 (__v32qi) _mm256_setzero_si256(), 1190 (__mmask32) -1); 1191} 1192 1193static __inline__ __m256i __DEFAULT_FN_ATTRS 1194_mm512_mask_cvtepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A) { 1195 return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, 1196 (__v32qi) __O, 1197 __M); 1198} 1199 1200static __inline__ __m256i __DEFAULT_FN_ATTRS 1201_mm512_maskz_cvtepi16_epi8 (__mmask32 __M, __m512i __A) { 1202 return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A, 1203 (__v32qi) _mm256_setzero_si256(), 1204 __M); 1205} 1206 1207static __inline__ void __DEFAULT_FN_ATTRS 1208_mm512_mask_cvtepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) 1209{ 1210 __builtin_ia32_pmovwb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M); 1211} 1212 1213static __inline__ void __DEFAULT_FN_ATTRS 1214_mm512_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) 1215{ 1216 __builtin_ia32_pmovswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M); 1217} 1218 1219static __inline__ void __DEFAULT_FN_ATTRS 1220_mm512_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) 1221{ 1222 __builtin_ia32_pmovuswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M); 1223} 1224 1225static __inline__ __m512i __DEFAULT_FN_ATTRS 1226_mm512_unpackhi_epi8(__m512i __A, __m512i __B) { 1227 return (__m512i)__builtin_shufflevector((__v64qi)__A, (__v64qi)__B, 1228 8, 64+8, 9, 64+9, 1229 10, 64+10, 11, 64+11, 1230 12, 64+12, 13, 64+13, 1231 14, 64+14, 15, 64+15, 1232 24, 64+24, 25, 64+25, 1233 26, 64+26, 27, 64+27, 1234 28, 64+28, 29, 64+29, 1235 30, 64+30, 31, 64+31, 1236 40, 64+40, 41, 64+41, 1237 42, 64+42, 43, 64+43, 1238 44, 64+44, 45, 64+45, 1239 46, 64+46, 47, 64+47, 1240 56, 64+56, 57, 64+57, 1241 58, 64+58, 59, 64+59, 1242 60, 64+60, 61, 64+61, 1243 62, 64+62, 63, 64+63); 1244} 1245 1246static __inline__ __m512i __DEFAULT_FN_ATTRS 1247_mm512_mask_unpackhi_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { 1248 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 1249 (__v64qi)_mm512_unpackhi_epi8(__A, __B), 1250 (__v64qi)__W); 1251} 1252 1253static __inline__ __m512i __DEFAULT_FN_ATTRS 1254_mm512_maskz_unpackhi_epi8(__mmask64 __U, __m512i __A, __m512i __B) { 1255 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 1256 (__v64qi)_mm512_unpackhi_epi8(__A, __B), 1257 (__v64qi)_mm512_setzero_qi()); 1258} 1259 1260static __inline__ __m512i __DEFAULT_FN_ATTRS 1261_mm512_unpackhi_epi16(__m512i __A, __m512i __B) { 1262 return (__m512i)__builtin_shufflevector((__v32hi)__A, (__v32hi)__B, 1263 4, 32+4, 5, 32+5, 1264 6, 32+6, 7, 32+7, 1265 12, 32+12, 13, 32+13, 1266 14, 32+14, 15, 32+15, 1267 20, 32+20, 21, 32+21, 1268 22, 32+22, 23, 32+23, 1269 28, 32+28, 29, 32+29, 1270 30, 32+30, 31, 32+31); 1271} 1272 1273static __inline__ __m512i __DEFAULT_FN_ATTRS 1274_mm512_mask_unpackhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 1275 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1276 (__v32hi)_mm512_unpackhi_epi16(__A, __B), 1277 (__v32hi)__W); 1278} 1279 1280static __inline__ __m512i __DEFAULT_FN_ATTRS 1281_mm512_maskz_unpackhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { 1282 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1283 (__v32hi)_mm512_unpackhi_epi16(__A, __B), 1284 (__v32hi)_mm512_setzero_hi()); 1285} 1286 1287static __inline__ __m512i __DEFAULT_FN_ATTRS 1288_mm512_unpacklo_epi8(__m512i __A, __m512i __B) { 1289 return (__m512i)__builtin_shufflevector((__v64qi)__A, (__v64qi)__B, 1290 0, 64+0, 1, 64+1, 1291 2, 64+2, 3, 64+3, 1292 4, 64+4, 5, 64+5, 1293 6, 64+6, 7, 64+7, 1294 16, 64+16, 17, 64+17, 1295 18, 64+18, 19, 64+19, 1296 20, 64+20, 21, 64+21, 1297 22, 64+22, 23, 64+23, 1298 32, 64+32, 33, 64+33, 1299 34, 64+34, 35, 64+35, 1300 36, 64+36, 37, 64+37, 1301 38, 64+38, 39, 64+39, 1302 48, 64+48, 49, 64+49, 1303 50, 64+50, 51, 64+51, 1304 52, 64+52, 53, 64+53, 1305 54, 64+54, 55, 64+55); 1306} 1307 1308static __inline__ __m512i __DEFAULT_FN_ATTRS 1309_mm512_mask_unpacklo_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { 1310 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 1311 (__v64qi)_mm512_unpacklo_epi8(__A, __B), 1312 (__v64qi)__W); 1313} 1314 1315static __inline__ __m512i __DEFAULT_FN_ATTRS 1316_mm512_maskz_unpacklo_epi8(__mmask64 __U, __m512i __A, __m512i __B) { 1317 return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, 1318 (__v64qi)_mm512_unpacklo_epi8(__A, __B), 1319 (__v64qi)_mm512_setzero_qi()); 1320} 1321 1322static __inline__ __m512i __DEFAULT_FN_ATTRS 1323_mm512_unpacklo_epi16(__m512i __A, __m512i __B) { 1324 return (__m512i)__builtin_shufflevector((__v32hi)__A, (__v32hi)__B, 1325 0, 32+0, 1, 32+1, 1326 2, 32+2, 3, 32+3, 1327 8, 32+8, 9, 32+9, 1328 10, 32+10, 11, 32+11, 1329 16, 32+16, 17, 32+17, 1330 18, 32+18, 19, 32+19, 1331 24, 32+24, 25, 32+25, 1332 26, 32+26, 27, 32+27); 1333} 1334 1335static __inline__ __m512i __DEFAULT_FN_ATTRS 1336_mm512_mask_unpacklo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 1337 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1338 (__v32hi)_mm512_unpacklo_epi16(__A, __B), 1339 (__v32hi)__W); 1340} 1341 1342static __inline__ __m512i __DEFAULT_FN_ATTRS 1343_mm512_maskz_unpacklo_epi16(__mmask32 __U, __m512i __A, __m512i __B) { 1344 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1345 (__v32hi)_mm512_unpacklo_epi16(__A, __B), 1346 (__v32hi)_mm512_setzero_hi()); 1347} 1348 1349static __inline__ __m512i __DEFAULT_FN_ATTRS 1350_mm512_cvtepi8_epi16(__m256i __A) 1351{ 1352 /* This function always performs a signed extension, but __v32qi is a char 1353 which may be signed or unsigned, so use __v32qs. */ 1354 return (__m512i)__builtin_convertvector((__v32qs)__A, __v32hi); 1355} 1356 1357static __inline__ __m512i __DEFAULT_FN_ATTRS 1358_mm512_mask_cvtepi8_epi16(__m512i __W, __mmask32 __U, __m256i __A) 1359{ 1360 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1361 (__v32hi)_mm512_cvtepi8_epi16(__A), 1362 (__v32hi)__W); 1363} 1364 1365static __inline__ __m512i __DEFAULT_FN_ATTRS 1366_mm512_maskz_cvtepi8_epi16(__mmask32 __U, __m256i __A) 1367{ 1368 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1369 (__v32hi)_mm512_cvtepi8_epi16(__A), 1370 (__v32hi)_mm512_setzero_hi()); 1371} 1372 1373static __inline__ __m512i __DEFAULT_FN_ATTRS 1374_mm512_cvtepu8_epi16(__m256i __A) 1375{ 1376 return (__m512i)__builtin_convertvector((__v32qu)__A, __v32hi); 1377} 1378 1379static __inline__ __m512i __DEFAULT_FN_ATTRS 1380_mm512_mask_cvtepu8_epi16(__m512i __W, __mmask32 __U, __m256i __A) 1381{ 1382 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1383 (__v32hi)_mm512_cvtepu8_epi16(__A), 1384 (__v32hi)__W); 1385} 1386 1387static __inline__ __m512i __DEFAULT_FN_ATTRS 1388_mm512_maskz_cvtepu8_epi16(__mmask32 __U, __m256i __A) 1389{ 1390 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1391 (__v32hi)_mm512_cvtepu8_epi16(__A), 1392 (__v32hi)_mm512_setzero_hi()); 1393} 1394 1395 1396#define _mm512_shufflehi_epi16(A, imm) __extension__ ({ \ 1397 (__m512i)__builtin_shufflevector((__v32hi)(__m512i)(A), \ 1398 (__v32hi)_mm512_undefined_epi32(), \ 1399 0, 1, 2, 3, \ 1400 4 + (((imm) >> 0) & 0x3), \ 1401 4 + (((imm) >> 2) & 0x3), \ 1402 4 + (((imm) >> 4) & 0x3), \ 1403 4 + (((imm) >> 6) & 0x3), \ 1404 8, 9, 10, 11, \ 1405 12 + (((imm) >> 0) & 0x3), \ 1406 12 + (((imm) >> 2) & 0x3), \ 1407 12 + (((imm) >> 4) & 0x3), \ 1408 12 + (((imm) >> 6) & 0x3), \ 1409 16, 17, 18, 19, \ 1410 20 + (((imm) >> 0) & 0x3), \ 1411 20 + (((imm) >> 2) & 0x3), \ 1412 20 + (((imm) >> 4) & 0x3), \ 1413 20 + (((imm) >> 6) & 0x3), \ 1414 24, 25, 26, 27, \ 1415 28 + (((imm) >> 0) & 0x3), \ 1416 28 + (((imm) >> 2) & 0x3), \ 1417 28 + (((imm) >> 4) & 0x3), \ 1418 28 + (((imm) >> 6) & 0x3)); }) 1419 1420#define _mm512_mask_shufflehi_epi16(W, U, A, imm) __extension__ ({ \ 1421 (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \ 1422 (__v32hi)_mm512_shufflehi_epi16((A), \ 1423 (imm)), \ 1424 (__v32hi)(__m512i)(W)); }) 1425 1426#define _mm512_maskz_shufflehi_epi16(U, A, imm) __extension__ ({ \ 1427 (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \ 1428 (__v32hi)_mm512_shufflehi_epi16((A), \ 1429 (imm)), \ 1430 (__v32hi)_mm512_setzero_hi()); }) 1431 1432#define _mm512_shufflelo_epi16(A, imm) __extension__ ({ \ 1433 (__m512i)__builtin_shufflevector((__v32hi)(__m512i)(A), \ 1434 (__v32hi)_mm512_undefined_epi32(), \ 1435 0 + (((imm) >> 0) & 0x3), \ 1436 0 + (((imm) >> 2) & 0x3), \ 1437 0 + (((imm) >> 4) & 0x3), \ 1438 0 + (((imm) >> 6) & 0x3), \ 1439 4, 5, 6, 7, \ 1440 8 + (((imm) >> 0) & 0x3), \ 1441 8 + (((imm) >> 2) & 0x3), \ 1442 8 + (((imm) >> 4) & 0x3), \ 1443 8 + (((imm) >> 6) & 0x3), \ 1444 12, 13, 14, 15, \ 1445 16 + (((imm) >> 0) & 0x3), \ 1446 16 + (((imm) >> 2) & 0x3), \ 1447 16 + (((imm) >> 4) & 0x3), \ 1448 16 + (((imm) >> 6) & 0x3), \ 1449 20, 21, 22, 23, \ 1450 24 + (((imm) >> 0) & 0x3), \ 1451 24 + (((imm) >> 2) & 0x3), \ 1452 24 + (((imm) >> 4) & 0x3), \ 1453 24 + (((imm) >> 6) & 0x3), \ 1454 28, 29, 30, 31); }) 1455 1456 1457#define _mm512_mask_shufflelo_epi16(W, U, A, imm) __extension__ ({ \ 1458 (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \ 1459 (__v32hi)_mm512_shufflelo_epi16((A), \ 1460 (imm)), \ 1461 (__v32hi)(__m512i)(W)); }) 1462 1463 1464#define _mm512_maskz_shufflelo_epi16(U, A, imm) __extension__ ({ \ 1465 (__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \ 1466 (__v32hi)_mm512_shufflelo_epi16((A), \ 1467 (imm)), \ 1468 (__v32hi)_mm512_setzero_hi()); }) 1469 1470static __inline__ __m512i __DEFAULT_FN_ATTRS 1471_mm512_sllv_epi16(__m512i __A, __m512i __B) 1472{ 1473 return (__m512i)__builtin_ia32_psllv32hi((__v32hi) __A, (__v32hi) __B); 1474} 1475 1476static __inline__ __m512i __DEFAULT_FN_ATTRS 1477_mm512_mask_sllv_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) 1478{ 1479 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1480 (__v32hi)_mm512_sllv_epi16(__A, __B), 1481 (__v32hi)__W); 1482} 1483 1484static __inline__ __m512i __DEFAULT_FN_ATTRS 1485_mm512_maskz_sllv_epi16(__mmask32 __U, __m512i __A, __m512i __B) 1486{ 1487 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1488 (__v32hi)_mm512_sllv_epi16(__A, __B), 1489 (__v32hi)_mm512_setzero_hi()); 1490} 1491 1492static __inline__ __m512i __DEFAULT_FN_ATTRS 1493_mm512_sll_epi16(__m512i __A, __m128i __B) 1494{ 1495 return (__m512i)__builtin_ia32_psllw512((__v32hi) __A, (__v8hi) __B); 1496} 1497 1498static __inline__ __m512i __DEFAULT_FN_ATTRS 1499_mm512_mask_sll_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) 1500{ 1501 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1502 (__v32hi)_mm512_sll_epi16(__A, __B), 1503 (__v32hi)__W); 1504} 1505 1506static __inline__ __m512i __DEFAULT_FN_ATTRS 1507_mm512_maskz_sll_epi16(__mmask32 __U, __m512i __A, __m128i __B) 1508{ 1509 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1510 (__v32hi)_mm512_sll_epi16(__A, __B), 1511 (__v32hi)_mm512_setzero_hi()); 1512} 1513 1514static __inline__ __m512i __DEFAULT_FN_ATTRS 1515_mm512_slli_epi16(__m512i __A, int __B) 1516{ 1517 return (__m512i)__builtin_ia32_psllwi512((__v32hi)__A, __B); 1518} 1519 1520static __inline__ __m512i __DEFAULT_FN_ATTRS 1521_mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B) 1522{ 1523 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1524 (__v32hi)_mm512_slli_epi16(__A, __B), 1525 (__v32hi)__W); 1526} 1527 1528static __inline__ __m512i __DEFAULT_FN_ATTRS 1529_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A, int __B) 1530{ 1531 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1532 (__v32hi)_mm512_slli_epi16(__A, __B), 1533 (__v32hi)_mm512_setzero_hi()); 1534} 1535 1536#define _mm512_bslli_epi128(a, imm) __extension__ ({ \ 1537 (__m512i)__builtin_shufflevector( \ 1538 (__v64qi)_mm512_setzero_si512(), \ 1539 (__v64qi)(__m512i)(a), \ 1540 ((char)(imm)&0xF0) ? 0 : ((char)(imm)>0x0 ? 16 : 64) - (char)(imm), \ 1541 ((char)(imm)&0xF0) ? 1 : ((char)(imm)>0x1 ? 17 : 65) - (char)(imm), \ 1542 ((char)(imm)&0xF0) ? 2 : ((char)(imm)>0x2 ? 18 : 66) - (char)(imm), \ 1543 ((char)(imm)&0xF0) ? 3 : ((char)(imm)>0x3 ? 19 : 67) - (char)(imm), \ 1544 ((char)(imm)&0xF0) ? 4 : ((char)(imm)>0x4 ? 20 : 68) - (char)(imm), \ 1545 ((char)(imm)&0xF0) ? 5 : ((char)(imm)>0x5 ? 21 : 69) - (char)(imm), \ 1546 ((char)(imm)&0xF0) ? 6 : ((char)(imm)>0x6 ? 22 : 70) - (char)(imm), \ 1547 ((char)(imm)&0xF0) ? 7 : ((char)(imm)>0x7 ? 23 : 71) - (char)(imm), \ 1548 ((char)(imm)&0xF0) ? 8 : ((char)(imm)>0x8 ? 24 : 72) - (char)(imm), \ 1549 ((char)(imm)&0xF0) ? 9 : ((char)(imm)>0x9 ? 25 : 73) - (char)(imm), \ 1550 ((char)(imm)&0xF0) ? 10 : ((char)(imm)>0xA ? 26 : 74) - (char)(imm), \ 1551 ((char)(imm)&0xF0) ? 11 : ((char)(imm)>0xB ? 27 : 75) - (char)(imm), \ 1552 ((char)(imm)&0xF0) ? 12 : ((char)(imm)>0xC ? 28 : 76) - (char)(imm), \ 1553 ((char)(imm)&0xF0) ? 13 : ((char)(imm)>0xD ? 29 : 77) - (char)(imm), \ 1554 ((char)(imm)&0xF0) ? 14 : ((char)(imm)>0xE ? 30 : 78) - (char)(imm), \ 1555 ((char)(imm)&0xF0) ? 15 : ((char)(imm)>0xF ? 31 : 79) - (char)(imm), \ 1556 ((char)(imm)&0xF0) ? 16 : ((char)(imm)>0x0 ? 32 : 80) - (char)(imm), \ 1557 ((char)(imm)&0xF0) ? 17 : ((char)(imm)>0x1 ? 33 : 81) - (char)(imm), \ 1558 ((char)(imm)&0xF0) ? 18 : ((char)(imm)>0x2 ? 34 : 82) - (char)(imm), \ 1559 ((char)(imm)&0xF0) ? 19 : ((char)(imm)>0x3 ? 35 : 83) - (char)(imm), \ 1560 ((char)(imm)&0xF0) ? 20 : ((char)(imm)>0x4 ? 36 : 84) - (char)(imm), \ 1561 ((char)(imm)&0xF0) ? 21 : ((char)(imm)>0x5 ? 37 : 85) - (char)(imm), \ 1562 ((char)(imm)&0xF0) ? 22 : ((char)(imm)>0x6 ? 38 : 86) - (char)(imm), \ 1563 ((char)(imm)&0xF0) ? 23 : ((char)(imm)>0x7 ? 39 : 87) - (char)(imm), \ 1564 ((char)(imm)&0xF0) ? 24 : ((char)(imm)>0x8 ? 40 : 88) - (char)(imm), \ 1565 ((char)(imm)&0xF0) ? 25 : ((char)(imm)>0x9 ? 41 : 89) - (char)(imm), \ 1566 ((char)(imm)&0xF0) ? 26 : ((char)(imm)>0xA ? 42 : 90) - (char)(imm), \ 1567 ((char)(imm)&0xF0) ? 27 : ((char)(imm)>0xB ? 43 : 91) - (char)(imm), \ 1568 ((char)(imm)&0xF0) ? 28 : ((char)(imm)>0xC ? 44 : 92) - (char)(imm), \ 1569 ((char)(imm)&0xF0) ? 29 : ((char)(imm)>0xD ? 45 : 93) - (char)(imm), \ 1570 ((char)(imm)&0xF0) ? 30 : ((char)(imm)>0xE ? 46 : 94) - (char)(imm), \ 1571 ((char)(imm)&0xF0) ? 31 : ((char)(imm)>0xF ? 47 : 95) - (char)(imm), \ 1572 ((char)(imm)&0xF0) ? 32 : ((char)(imm)>0x0 ? 48 : 96) - (char)(imm), \ 1573 ((char)(imm)&0xF0) ? 33 : ((char)(imm)>0x1 ? 49 : 97) - (char)(imm), \ 1574 ((char)(imm)&0xF0) ? 34 : ((char)(imm)>0x2 ? 50 : 98) - (char)(imm), \ 1575 ((char)(imm)&0xF0) ? 35 : ((char)(imm)>0x3 ? 51 : 99) - (char)(imm), \ 1576 ((char)(imm)&0xF0) ? 36 : ((char)(imm)>0x4 ? 52 : 100) - (char)(imm), \ 1577 ((char)(imm)&0xF0) ? 37 : ((char)(imm)>0x5 ? 53 : 101) - (char)(imm), \ 1578 ((char)(imm)&0xF0) ? 38 : ((char)(imm)>0x6 ? 54 : 102) - (char)(imm), \ 1579 ((char)(imm)&0xF0) ? 39 : ((char)(imm)>0x7 ? 55 : 103) - (char)(imm), \ 1580 ((char)(imm)&0xF0) ? 40 : ((char)(imm)>0x8 ? 56 : 104) - (char)(imm), \ 1581 ((char)(imm)&0xF0) ? 41 : ((char)(imm)>0x9 ? 57 : 105) - (char)(imm), \ 1582 ((char)(imm)&0xF0) ? 42 : ((char)(imm)>0xA ? 58 : 106) - (char)(imm), \ 1583 ((char)(imm)&0xF0) ? 43 : ((char)(imm)>0xB ? 59 : 107) - (char)(imm), \ 1584 ((char)(imm)&0xF0) ? 44 : ((char)(imm)>0xC ? 60 : 108) - (char)(imm), \ 1585 ((char)(imm)&0xF0) ? 45 : ((char)(imm)>0xD ? 61 : 109) - (char)(imm), \ 1586 ((char)(imm)&0xF0) ? 46 : ((char)(imm)>0xE ? 62 : 110) - (char)(imm), \ 1587 ((char)(imm)&0xF0) ? 47 : ((char)(imm)>0xF ? 63 : 111) - (char)(imm), \ 1588 ((char)(imm)&0xF0) ? 48 : ((char)(imm)>0x0 ? 64 : 112) - (char)(imm), \ 1589 ((char)(imm)&0xF0) ? 49 : ((char)(imm)>0x1 ? 65 : 113) - (char)(imm), \ 1590 ((char)(imm)&0xF0) ? 50 : ((char)(imm)>0x2 ? 66 : 114) - (char)(imm), \ 1591 ((char)(imm)&0xF0) ? 51 : ((char)(imm)>0x3 ? 67 : 115) - (char)(imm), \ 1592 ((char)(imm)&0xF0) ? 52 : ((char)(imm)>0x4 ? 68 : 116) - (char)(imm), \ 1593 ((char)(imm)&0xF0) ? 53 : ((char)(imm)>0x5 ? 69 : 117) - (char)(imm), \ 1594 ((char)(imm)&0xF0) ? 54 : ((char)(imm)>0x6 ? 70 : 118) - (char)(imm), \ 1595 ((char)(imm)&0xF0) ? 55 : ((char)(imm)>0x7 ? 71 : 119) - (char)(imm), \ 1596 ((char)(imm)&0xF0) ? 56 : ((char)(imm)>0x8 ? 72 : 120) - (char)(imm), \ 1597 ((char)(imm)&0xF0) ? 57 : ((char)(imm)>0x9 ? 73 : 121) - (char)(imm), \ 1598 ((char)(imm)&0xF0) ? 58 : ((char)(imm)>0xA ? 74 : 122) - (char)(imm), \ 1599 ((char)(imm)&0xF0) ? 59 : ((char)(imm)>0xB ? 75 : 123) - (char)(imm), \ 1600 ((char)(imm)&0xF0) ? 60 : ((char)(imm)>0xC ? 76 : 124) - (char)(imm), \ 1601 ((char)(imm)&0xF0) ? 61 : ((char)(imm)>0xD ? 77 : 125) - (char)(imm), \ 1602 ((char)(imm)&0xF0) ? 62 : ((char)(imm)>0xE ? 78 : 126) - (char)(imm), \ 1603 ((char)(imm)&0xF0) ? 63 : ((char)(imm)>0xF ? 79 : 127) - (char)(imm)); }) 1604 1605static __inline__ __m512i __DEFAULT_FN_ATTRS 1606_mm512_srlv_epi16(__m512i __A, __m512i __B) 1607{ 1608 return (__m512i)__builtin_ia32_psrlv32hi((__v32hi)__A, (__v32hi)__B); 1609} 1610 1611static __inline__ __m512i __DEFAULT_FN_ATTRS 1612_mm512_mask_srlv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) 1613{ 1614 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1615 (__v32hi)_mm512_srlv_epi16(__A, __B), 1616 (__v32hi)__W); 1617} 1618 1619static __inline__ __m512i __DEFAULT_FN_ATTRS 1620_mm512_maskz_srlv_epi16(__mmask32 __U, __m512i __A, __m512i __B) 1621{ 1622 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1623 (__v32hi)_mm512_srlv_epi16(__A, __B), 1624 (__v32hi)_mm512_setzero_hi()); 1625} 1626 1627static __inline__ __m512i __DEFAULT_FN_ATTRS 1628_mm512_srav_epi16(__m512i __A, __m512i __B) 1629{ 1630 return (__m512i)__builtin_ia32_psrav32hi((__v32hi)__A, (__v32hi)__B); 1631} 1632 1633static __inline__ __m512i __DEFAULT_FN_ATTRS 1634_mm512_mask_srav_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) 1635{ 1636 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1637 (__v32hi)_mm512_srav_epi16(__A, __B), 1638 (__v32hi)__W); 1639} 1640 1641static __inline__ __m512i __DEFAULT_FN_ATTRS 1642_mm512_maskz_srav_epi16(__mmask32 __U, __m512i __A, __m512i __B) 1643{ 1644 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1645 (__v32hi)_mm512_srav_epi16(__A, __B), 1646 (__v32hi)_mm512_setzero_hi()); 1647} 1648 1649static __inline__ __m512i __DEFAULT_FN_ATTRS 1650_mm512_sra_epi16(__m512i __A, __m128i __B) 1651{ 1652 return (__m512i)__builtin_ia32_psraw512((__v32hi) __A, (__v8hi) __B); 1653} 1654 1655static __inline__ __m512i __DEFAULT_FN_ATTRS 1656_mm512_mask_sra_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) 1657{ 1658 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1659 (__v32hi)_mm512_sra_epi16(__A, __B), 1660 (__v32hi)__W); 1661} 1662 1663static __inline__ __m512i __DEFAULT_FN_ATTRS 1664_mm512_maskz_sra_epi16(__mmask32 __U, __m512i __A, __m128i __B) 1665{ 1666 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1667 (__v32hi)_mm512_sra_epi16(__A, __B), 1668 (__v32hi)_mm512_setzero_hi()); 1669} 1670 1671static __inline__ __m512i __DEFAULT_FN_ATTRS 1672_mm512_srai_epi16(__m512i __A, int __B) 1673{ 1674 return (__m512i)__builtin_ia32_psrawi512((__v32hi)__A, __B); 1675} 1676 1677static __inline__ __m512i __DEFAULT_FN_ATTRS 1678_mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B) 1679{ 1680 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1681 (__v32hi)_mm512_srai_epi16(__A, __B), 1682 (__v32hi)__W); 1683} 1684 1685static __inline__ __m512i __DEFAULT_FN_ATTRS 1686_mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A, int __B) 1687{ 1688 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1689 (__v32hi)_mm512_srai_epi16(__A, __B), 1690 (__v32hi)_mm512_setzero_hi()); 1691} 1692 1693static __inline__ __m512i __DEFAULT_FN_ATTRS 1694_mm512_srl_epi16(__m512i __A, __m128i __B) 1695{ 1696 return (__m512i)__builtin_ia32_psrlw512((__v32hi) __A, (__v8hi) __B); 1697} 1698 1699static __inline__ __m512i __DEFAULT_FN_ATTRS 1700_mm512_mask_srl_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) 1701{ 1702 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1703 (__v32hi)_mm512_srl_epi16(__A, __B), 1704 (__v32hi)__W); 1705} 1706 1707static __inline__ __m512i __DEFAULT_FN_ATTRS 1708_mm512_maskz_srl_epi16(__mmask32 __U, __m512i __A, __m128i __B) 1709{ 1710 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1711 (__v32hi)_mm512_srl_epi16(__A, __B), 1712 (__v32hi)_mm512_setzero_hi()); 1713} 1714 1715static __inline__ __m512i __DEFAULT_FN_ATTRS 1716_mm512_srli_epi16(__m512i __A, int __B) 1717{ 1718 return (__m512i)__builtin_ia32_psrlwi512((__v32hi)__A, __B); 1719} 1720 1721static __inline__ __m512i __DEFAULT_FN_ATTRS 1722_mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A, int __B) 1723{ 1724 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1725 (__v32hi)_mm512_srli_epi16(__A, __B), 1726 (__v32hi)__W); 1727} 1728 1729static __inline__ __m512i __DEFAULT_FN_ATTRS 1730_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A, int __B) 1731{ 1732 return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U, 1733 (__v32hi)_mm512_srli_epi16(__A, __B), 1734 (__v32hi)_mm512_setzero_hi()); 1735} 1736 1737#define _mm512_bsrli_epi128(a, imm) __extension__ ({ \ 1738 (__m512i)__builtin_shufflevector( \ 1739 (__v64qi)(__m512i)(a), \ 1740 (__v64qi)_mm512_setzero_si512(), \ 1741 ((char)(imm)&0xF0) ? 64 : (char)(imm) + ((char)(imm)>0xF ? 48 : 0), \ 1742 ((char)(imm)&0xF0) ? 65 : (char)(imm) + ((char)(imm)>0xE ? 49 : 1), \ 1743 ((char)(imm)&0xF0) ? 66 : (char)(imm) + ((char)(imm)>0xD ? 50 : 2), \ 1744 ((char)(imm)&0xF0) ? 67 : (char)(imm) + ((char)(imm)>0xC ? 51 : 3), \ 1745 ((char)(imm)&0xF0) ? 68 : (char)(imm) + ((char)(imm)>0xB ? 52 : 4), \ 1746 ((char)(imm)&0xF0) ? 69 : (char)(imm) + ((char)(imm)>0xA ? 53 : 5), \ 1747 ((char)(imm)&0xF0) ? 70 : (char)(imm) + ((char)(imm)>0x9 ? 54 : 6), \ 1748 ((char)(imm)&0xF0) ? 71 : (char)(imm) + ((char)(imm)>0x8 ? 55 : 7), \ 1749 ((char)(imm)&0xF0) ? 72 : (char)(imm) + ((char)(imm)>0x7 ? 56 : 8), \ 1750 ((char)(imm)&0xF0) ? 73 : (char)(imm) + ((char)(imm)>0x6 ? 57 : 9), \ 1751 ((char)(imm)&0xF0) ? 74 : (char)(imm) + ((char)(imm)>0x5 ? 58 : 10), \ 1752 ((char)(imm)&0xF0) ? 75 : (char)(imm) + ((char)(imm)>0x4 ? 59 : 11), \ 1753 ((char)(imm)&0xF0) ? 76 : (char)(imm) + ((char)(imm)>0x3 ? 60 : 12), \ 1754 ((char)(imm)&0xF0) ? 77 : (char)(imm) + ((char)(imm)>0x2 ? 61 : 13), \ 1755 ((char)(imm)&0xF0) ? 78 : (char)(imm) + ((char)(imm)>0x1 ? 62 : 14), \ 1756 ((char)(imm)&0xF0) ? 79 : (char)(imm) + ((char)(imm)>0x0 ? 63 : 15), \ 1757 ((char)(imm)&0xF0) ? 80 : (char)(imm) + ((char)(imm)>0xF ? 64 : 16), \ 1758 ((char)(imm)&0xF0) ? 81 : (char)(imm) + ((char)(imm)>0xE ? 65 : 17), \ 1759 ((char)(imm)&0xF0) ? 82 : (char)(imm) + ((char)(imm)>0xD ? 66 : 18), \ 1760 ((char)(imm)&0xF0) ? 83 : (char)(imm) + ((char)(imm)>0xC ? 67 : 19), \ 1761 ((char)(imm)&0xF0) ? 84 : (char)(imm) + ((char)(imm)>0xB ? 68 : 20), \ 1762 ((char)(imm)&0xF0) ? 85 : (char)(imm) + ((char)(imm)>0xA ? 69 : 21), \ 1763 ((char)(imm)&0xF0) ? 86 : (char)(imm) + ((char)(imm)>0x9 ? 70 : 22), \ 1764 ((char)(imm)&0xF0) ? 87 : (char)(imm) + ((char)(imm)>0x8 ? 71 : 23), \ 1765 ((char)(imm)&0xF0) ? 88 : (char)(imm) + ((char)(imm)>0x7 ? 72 : 24), \ 1766 ((char)(imm)&0xF0) ? 89 : (char)(imm) + ((char)(imm)>0x6 ? 73 : 25), \ 1767 ((char)(imm)&0xF0) ? 90 : (char)(imm) + ((char)(imm)>0x5 ? 74 : 26), \ 1768 ((char)(imm)&0xF0) ? 91 : (char)(imm) + ((char)(imm)>0x4 ? 75 : 27), \ 1769 ((char)(imm)&0xF0) ? 92 : (char)(imm) + ((char)(imm)>0x3 ? 76 : 28), \ 1770 ((char)(imm)&0xF0) ? 93 : (char)(imm) + ((char)(imm)>0x2 ? 77 : 29), \ 1771 ((char)(imm)&0xF0) ? 94 : (char)(imm) + ((char)(imm)>0x1 ? 78 : 30), \ 1772 ((char)(imm)&0xF0) ? 95 : (char)(imm) + ((char)(imm)>0x0 ? 79 : 31), \ 1773 ((char)(imm)&0xF0) ? 96 : (char)(imm) + ((char)(imm)>0xF ? 80 : 32), \ 1774 ((char)(imm)&0xF0) ? 97 : (char)(imm) + ((char)(imm)>0xE ? 81 : 33), \ 1775 ((char)(imm)&0xF0) ? 98 : (char)(imm) + ((char)(imm)>0xD ? 82 : 34), \ 1776 ((char)(imm)&0xF0) ? 99 : (char)(imm) + ((char)(imm)>0xC ? 83 : 35), \ 1777 ((char)(imm)&0xF0) ? 100 : (char)(imm) + ((char)(imm)>0xB ? 84 : 36), \ 1778 ((char)(imm)&0xF0) ? 101 : (char)(imm) + ((char)(imm)>0xA ? 85 : 37), \ 1779 ((char)(imm)&0xF0) ? 102 : (char)(imm) + ((char)(imm)>0x9 ? 86 : 38), \ 1780 ((char)(imm)&0xF0) ? 103 : (char)(imm) + ((char)(imm)>0x8 ? 87 : 39), \ 1781 ((char)(imm)&0xF0) ? 104 : (char)(imm) + ((char)(imm)>0x7 ? 88 : 40), \ 1782 ((char)(imm)&0xF0) ? 105 : (char)(imm) + ((char)(imm)>0x6 ? 89 : 41), \ 1783 ((char)(imm)&0xF0) ? 106 : (char)(imm) + ((char)(imm)>0x5 ? 90 : 42), \ 1784 ((char)(imm)&0xF0) ? 107 : (char)(imm) + ((char)(imm)>0x4 ? 91 : 43), \ 1785 ((char)(imm)&0xF0) ? 108 : (char)(imm) + ((char)(imm)>0x3 ? 92 : 44), \ 1786 ((char)(imm)&0xF0) ? 109 : (char)(imm) + ((char)(imm)>0x2 ? 93 : 45), \ 1787 ((char)(imm)&0xF0) ? 110 : (char)(imm) + ((char)(imm)>0x1 ? 94 : 46), \ 1788 ((char)(imm)&0xF0) ? 111 : (char)(imm) + ((char)(imm)>0x0 ? 95 : 47), \ 1789 ((char)(imm)&0xF0) ? 112 : (char)(imm) + ((char)(imm)>0xF ? 96 : 48), \ 1790 ((char)(imm)&0xF0) ? 113 : (char)(imm) + ((char)(imm)>0xE ? 97 : 49), \ 1791 ((char)(imm)&0xF0) ? 114 : (char)(imm) + ((char)(imm)>0xD ? 98 : 50), \ 1792 ((char)(imm)&0xF0) ? 115 : (char)(imm) + ((char)(imm)>0xC ? 99 : 51), \ 1793 ((char)(imm)&0xF0) ? 116 : (char)(imm) + ((char)(imm)>0xB ? 100 : 52), \ 1794 ((char)(imm)&0xF0) ? 117 : (char)(imm) + ((char)(imm)>0xA ? 101 : 53), \ 1795 ((char)(imm)&0xF0) ? 118 : (char)(imm) + ((char)(imm)>0x9 ? 102 : 54), \ 1796 ((char)(imm)&0xF0) ? 119 : (char)(imm) + ((char)(imm)>0x8 ? 103 : 55), \ 1797 ((char)(imm)&0xF0) ? 120 : (char)(imm) + ((char)(imm)>0x7 ? 104 : 56), \ 1798 ((char)(imm)&0xF0) ? 121 : (char)(imm) + ((char)(imm)>0x6 ? 105 : 57), \ 1799 ((char)(imm)&0xF0) ? 122 : (char)(imm) + ((char)(imm)>0x5 ? 106 : 58), \ 1800 ((char)(imm)&0xF0) ? 123 : (char)(imm) + ((char)(imm)>0x4 ? 107 : 59), \ 1801 ((char)(imm)&0xF0) ? 124 : (char)(imm) + ((char)(imm)>0x3 ? 108 : 60), \ 1802 ((char)(imm)&0xF0) ? 125 : (char)(imm) + ((char)(imm)>0x2 ? 109 : 61), \ 1803 ((char)(imm)&0xF0) ? 126 : (char)(imm) + ((char)(imm)>0x1 ? 110 : 62), \ 1804 ((char)(imm)&0xF0) ? 127 : (char)(imm) + ((char)(imm)>0x0 ? 111 : 63)); }) 1805 1806static __inline__ __m512i __DEFAULT_FN_ATTRS 1807_mm512_mask_mov_epi16 (__m512i __W, __mmask32 __U, __m512i __A) 1808{ 1809 return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U, 1810 (__v32hi) __A, 1811 (__v32hi) __W); 1812} 1813 1814static __inline__ __m512i __DEFAULT_FN_ATTRS 1815_mm512_maskz_mov_epi16 (__mmask32 __U, __m512i __A) 1816{ 1817 return (__m512i) __builtin_ia32_selectw_512 ((__mmask32) __U, 1818 (__v32hi) __A, 1819 (__v32hi) _mm512_setzero_hi ()); 1820} 1821 1822static __inline__ __m512i __DEFAULT_FN_ATTRS 1823_mm512_mask_mov_epi8 (__m512i __W, __mmask64 __U, __m512i __A) 1824{ 1825 return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U, 1826 (__v64qi) __A, 1827 (__v64qi) __W); 1828} 1829 1830static __inline__ __m512i __DEFAULT_FN_ATTRS 1831_mm512_maskz_mov_epi8 (__mmask64 __U, __m512i __A) 1832{ 1833 return (__m512i) __builtin_ia32_selectb_512 ((__mmask64) __U, 1834 (__v64qi) __A, 1835 (__v64qi) _mm512_setzero_hi ()); 1836} 1837 1838static __inline__ __m512i __DEFAULT_FN_ATTRS 1839_mm512_mask_set1_epi8 (__m512i __O, __mmask64 __M, char __A) 1840{ 1841 return (__m512i) __builtin_ia32_selectb_512(__M, 1842 (__v64qi)_mm512_set1_epi8(__A), 1843 (__v64qi) __O); 1844} 1845 1846static __inline__ __m512i __DEFAULT_FN_ATTRS 1847_mm512_maskz_set1_epi8 (__mmask64 __M, char __A) 1848{ 1849 return (__m512i) __builtin_ia32_selectb_512(__M, 1850 (__v64qi) _mm512_set1_epi8(__A), 1851 (__v64qi) _mm512_setzero_si512()); 1852} 1853 1854static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1855_mm512_kunpackd (__mmask64 __A, __mmask64 __B) 1856{ 1857 return (__mmask64) __builtin_ia32_kunpckdi ((__mmask64) __A, 1858 (__mmask64) __B); 1859} 1860 1861static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1862_mm512_kunpackw (__mmask32 __A, __mmask32 __B) 1863{ 1864 return (__mmask32) __builtin_ia32_kunpcksi ((__mmask32) __A, 1865 (__mmask32) __B); 1866} 1867 1868static __inline__ __m512i __DEFAULT_FN_ATTRS 1869_mm512_mask_loadu_epi16 (__m512i __W, __mmask32 __U, void const *__P) 1870{ 1871 return (__m512i) __builtin_ia32_loaddquhi512_mask ((__v32hi *) __P, 1872 (__v32hi) __W, 1873 (__mmask32) __U); 1874} 1875 1876static __inline__ __m512i __DEFAULT_FN_ATTRS 1877_mm512_maskz_loadu_epi16 (__mmask32 __U, void const *__P) 1878{ 1879 return (__m512i) __builtin_ia32_loaddquhi512_mask ((__v32hi *) __P, 1880 (__v32hi) 1881 _mm512_setzero_hi (), 1882 (__mmask32) __U); 1883} 1884 1885static __inline__ __m512i __DEFAULT_FN_ATTRS 1886_mm512_mask_loadu_epi8 (__m512i __W, __mmask64 __U, void const *__P) 1887{ 1888 return (__m512i) __builtin_ia32_loaddquqi512_mask ((__v64qi *) __P, 1889 (__v64qi) __W, 1890 (__mmask64) __U); 1891} 1892 1893static __inline__ __m512i __DEFAULT_FN_ATTRS 1894_mm512_maskz_loadu_epi8 (__mmask64 __U, void const *__P) 1895{ 1896 return (__m512i) __builtin_ia32_loaddquqi512_mask ((__v64qi *) __P, 1897 (__v64qi) 1898 _mm512_setzero_hi (), 1899 (__mmask64) __U); 1900} 1901static __inline__ void __DEFAULT_FN_ATTRS 1902_mm512_mask_storeu_epi16 (void *__P, __mmask32 __U, __m512i __A) 1903{ 1904 __builtin_ia32_storedquhi512_mask ((__v32hi *) __P, 1905 (__v32hi) __A, 1906 (__mmask32) __U); 1907} 1908 1909static __inline__ void __DEFAULT_FN_ATTRS 1910_mm512_mask_storeu_epi8 (void *__P, __mmask64 __U, __m512i __A) 1911{ 1912 __builtin_ia32_storedquqi512_mask ((__v64qi *) __P, 1913 (__v64qi) __A, 1914 (__mmask64) __U); 1915} 1916 1917static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1918_mm512_test_epi8_mask (__m512i __A, __m512i __B) 1919{ 1920 return _mm512_cmpneq_epi8_mask (_mm512_and_epi32 (__A, __B), 1921 _mm512_setzero_qi()); 1922} 1923 1924static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1925_mm512_mask_test_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B) 1926{ 1927 return _mm512_mask_cmpneq_epi8_mask (__U, _mm512_and_epi32 (__A, __B), 1928 _mm512_setzero_qi()); 1929} 1930 1931static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1932_mm512_test_epi16_mask (__m512i __A, __m512i __B) 1933{ 1934 return _mm512_cmpneq_epi16_mask (_mm512_and_epi32 (__A, __B), 1935 _mm512_setzero_qi()); 1936} 1937 1938static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1939_mm512_mask_test_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B) 1940{ 1941 return _mm512_mask_cmpneq_epi16_mask (__U, _mm512_and_epi32 (__A, __B), 1942 _mm512_setzero_qi()); 1943} 1944 1945static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1946_mm512_testn_epi8_mask (__m512i __A, __m512i __B) 1947{ 1948 return _mm512_cmpeq_epi8_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_qi()); 1949} 1950 1951static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1952_mm512_mask_testn_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B) 1953{ 1954 return _mm512_mask_cmpeq_epi8_mask (__U, _mm512_and_epi32 (__A, __B), 1955 _mm512_setzero_qi()); 1956} 1957 1958static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1959_mm512_testn_epi16_mask (__m512i __A, __m512i __B) 1960{ 1961 return _mm512_cmpeq_epi16_mask (_mm512_and_epi32 (__A, __B), 1962 _mm512_setzero_qi()); 1963} 1964 1965static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1966_mm512_mask_testn_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B) 1967{ 1968 return _mm512_mask_cmpeq_epi16_mask (__U, _mm512_and_epi32 (__A, __B), 1969 _mm512_setzero_qi()); 1970} 1971 1972static __inline__ __mmask64 __DEFAULT_FN_ATTRS 1973_mm512_movepi8_mask (__m512i __A) 1974{ 1975 return (__mmask64) __builtin_ia32_cvtb2mask512 ((__v64qi) __A); 1976} 1977 1978static __inline__ __mmask32 __DEFAULT_FN_ATTRS 1979_mm512_movepi16_mask (__m512i __A) 1980{ 1981 return (__mmask32) __builtin_ia32_cvtw2mask512 ((__v32hi) __A); 1982} 1983 1984static __inline__ __m512i __DEFAULT_FN_ATTRS 1985_mm512_movm_epi8 (__mmask64 __A) 1986{ 1987 return (__m512i) __builtin_ia32_cvtmask2b512 (__A); 1988} 1989 1990static __inline__ __m512i __DEFAULT_FN_ATTRS 1991_mm512_movm_epi16 (__mmask32 __A) 1992{ 1993 return (__m512i) __builtin_ia32_cvtmask2w512 (__A); 1994} 1995 1996static __inline__ __m512i __DEFAULT_FN_ATTRS 1997_mm512_broadcastb_epi8 (__m128i __A) 1998{ 1999 return (__m512i)__builtin_shufflevector((__v16qi) __A, 2000 (__v16qi)_mm_undefined_si128(), 2001 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2002 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2003 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2004 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 2005} 2006 2007static __inline__ __m512i __DEFAULT_FN_ATTRS 2008_mm512_mask_broadcastb_epi8 (__m512i __O, __mmask64 __M, __m128i __A) 2009{ 2010 return (__m512i)__builtin_ia32_selectb_512(__M, 2011 (__v64qi) _mm512_broadcastb_epi8(__A), 2012 (__v64qi) __O); 2013} 2014 2015static __inline__ __m512i __DEFAULT_FN_ATTRS 2016_mm512_maskz_broadcastb_epi8 (__mmask64 __M, __m128i __A) 2017{ 2018 return (__m512i)__builtin_ia32_selectb_512(__M, 2019 (__v64qi) _mm512_broadcastb_epi8(__A), 2020 (__v64qi) _mm512_setzero_si512()); 2021} 2022 2023static __inline__ __m512i __DEFAULT_FN_ATTRS 2024_mm512_mask_set1_epi16 (__m512i __O, __mmask32 __M, short __A) 2025{ 2026 return (__m512i) __builtin_ia32_selectw_512(__M, 2027 (__v32hi) _mm512_set1_epi16(__A), 2028 (__v32hi) __O); 2029} 2030 2031static __inline__ __m512i __DEFAULT_FN_ATTRS 2032_mm512_maskz_set1_epi16 (__mmask32 __M, short __A) 2033{ 2034 return (__m512i) __builtin_ia32_selectw_512(__M, 2035 (__v32hi) _mm512_set1_epi16(__A), 2036 (__v32hi) _mm512_setzero_si512()); 2037} 2038 2039static __inline__ __m512i __DEFAULT_FN_ATTRS 2040_mm512_broadcastw_epi16 (__m128i __A) 2041{ 2042 return (__m512i)__builtin_shufflevector((__v8hi) __A, 2043 (__v8hi)_mm_undefined_si128(), 2044 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2045 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 2046} 2047 2048static __inline__ __m512i __DEFAULT_FN_ATTRS 2049_mm512_mask_broadcastw_epi16 (__m512i __O, __mmask32 __M, __m128i __A) 2050{ 2051 return (__m512i)__builtin_ia32_selectw_512(__M, 2052 (__v32hi) _mm512_broadcastw_epi16(__A), 2053 (__v32hi) __O); 2054} 2055 2056static __inline__ __m512i __DEFAULT_FN_ATTRS 2057_mm512_maskz_broadcastw_epi16 (__mmask32 __M, __m128i __A) 2058{ 2059 return (__m512i)__builtin_ia32_selectw_512(__M, 2060 (__v32hi) _mm512_broadcastw_epi16(__A), 2061 (__v32hi) _mm512_setzero_si512()); 2062} 2063 2064static __inline__ __m512i __DEFAULT_FN_ATTRS 2065_mm512_permutexvar_epi16 (__m512i __A, __m512i __B) 2066{ 2067 return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B, 2068 (__v32hi) __A, 2069 (__v32hi) _mm512_undefined_epi32 (), 2070 (__mmask32) -1); 2071} 2072 2073static __inline__ __m512i __DEFAULT_FN_ATTRS 2074_mm512_maskz_permutexvar_epi16 (__mmask32 __M, __m512i __A, 2075 __m512i __B) 2076{ 2077 return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B, 2078 (__v32hi) __A, 2079 (__v32hi) _mm512_setzero_hi(), 2080 (__mmask32) __M); 2081} 2082 2083static __inline__ __m512i __DEFAULT_FN_ATTRS 2084_mm512_mask_permutexvar_epi16 (__m512i __W, __mmask32 __M, __m512i __A, 2085 __m512i __B) 2086{ 2087 return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B, 2088 (__v32hi) __A, 2089 (__v32hi) __W, 2090 (__mmask32) __M); 2091} 2092 2093#define _mm512_alignr_epi8(A, B, N) __extension__ ({\ 2094 (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \ 2095 (__v64qi)(__m512i)(B), (int)(N), \ 2096 (__v64qi)_mm512_undefined_pd(), \ 2097 (__mmask64)-1); }) 2098 2099#define _mm512_mask_alignr_epi8(W, U, A, B, N) __extension__({\ 2100 (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \ 2101 (__v64qi)(__m512i)(B), (int)(N), \ 2102 (__v64qi)(__m512i)(W), \ 2103 (__mmask64)(U)); }) 2104 2105#define _mm512_maskz_alignr_epi8(U, A, B, N) __extension__({\ 2106 (__m512i)__builtin_ia32_palignr512_mask((__v64qi)(__m512i)(A), \ 2107 (__v64qi)(__m512i)(B), (int)(N), \ 2108 (__v64qi)_mm512_setzero_si512(), \ 2109 (__mmask64)(U)); }) 2110 2111#define _mm512_dbsad_epu8(A, B, imm) __extension__ ({\ 2112 (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \ 2113 (__v64qi)(__m512i)(B), (int)(imm), \ 2114 (__v32hi)_mm512_undefined_epi32(), \ 2115 (__mmask32)-1); }) 2116 2117#define _mm512_mask_dbsad_epu8(W, U, A, B, imm) ({\ 2118 (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \ 2119 (__v64qi)(__m512i)(B), (int)(imm), \ 2120 (__v32hi)(__m512i)(W), \ 2121 (__mmask32)(U)); }) 2122 2123#define _mm512_maskz_dbsad_epu8(U, A, B, imm) ({\ 2124 (__m512i)__builtin_ia32_dbpsadbw512_mask((__v64qi)(__m512i)(A), \ 2125 (__v64qi)(__m512i)(B), (int)(imm), \ 2126 (__v32hi)_mm512_setzero_hi(), \ 2127 (__mmask32)(U)); }) 2128 2129static __inline__ __m512i __DEFAULT_FN_ATTRS 2130_mm512_sad_epu8 (__m512i __A, __m512i __B) 2131{ 2132 return (__m512i) __builtin_ia32_psadbw512 ((__v64qi) __A, 2133 (__v64qi) __B); 2134} 2135 2136 2137 2138#undef __DEFAULT_FN_ATTRS 2139 2140#endif 2141