1 /*===------------- avx512vbmiintrin.h - VBMI 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 <avx512vbmiintrin.h> directly; include <immintrin.h> instead." 26 #endif 27 28 #ifndef __VBMIINTRIN_H 29 #define __VBMIINTRIN_H 30 31 /* Define the default attributes for the functions in this file. */ 32 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi"))) 33 34 35 static __inline__ __m512i __DEFAULT_FN_ATTRS 36 _mm512_mask2_permutex2var_epi8 (__m512i __A, __m512i __I, 37 __mmask64 __U, __m512i __B) 38 { 39 return (__m512i) __builtin_ia32_vpermi2varqi512_mask ((__v64qi) __A, 40 (__v64qi) __I 41 /* idx */ , 42 (__v64qi) __B, 43 (__mmask64) __U); 44 } 45 46 static __inline__ __m512i __DEFAULT_FN_ATTRS 47 _mm512_permutex2var_epi8 (__m512i __A, __m512i __I, __m512i __B) 48 { 49 return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I 50 /* idx */ , 51 (__v64qi) __A, 52 (__v64qi) __B, 53 (__mmask64) -1); 54 } 55 56 static __inline__ __m512i __DEFAULT_FN_ATTRS 57 _mm512_mask_permutex2var_epi8 (__m512i __A, __mmask64 __U, 58 __m512i __I, __m512i __B) 59 { 60 return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I 61 /* idx */ , 62 (__v64qi) __A, 63 (__v64qi) __B, 64 (__mmask64) __U); 65 } 66 67 static __inline__ __m512i __DEFAULT_FN_ATTRS 68 _mm512_maskz_permutex2var_epi8 (__mmask64 __U, __m512i __A, 69 __m512i __I, __m512i __B) 70 { 71 return (__m512i) __builtin_ia32_vpermt2varqi512_maskz ((__v64qi) __I 72 /* idx */ , 73 (__v64qi) __A, 74 (__v64qi) __B, 75 (__mmask64) __U); 76 } 77 78 static __inline__ __m512i __DEFAULT_FN_ATTRS 79 _mm512_permutexvar_epi8 (__m512i __A, __m512i __B) 80 { 81 return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B, 82 (__v64qi) __A, 83 (__v64qi) _mm512_undefined_epi32 (), 84 (__mmask64) -1); 85 } 86 87 static __inline__ __m512i __DEFAULT_FN_ATTRS 88 _mm512_maskz_permutexvar_epi8 (__mmask64 __M, __m512i __A, 89 __m512i __B) 90 { 91 return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B, 92 (__v64qi) __A, 93 (__v64qi) _mm512_setzero_si512(), 94 (__mmask64) __M); 95 } 96 97 static __inline__ __m512i __DEFAULT_FN_ATTRS 98 _mm512_mask_permutexvar_epi8 (__m512i __W, __mmask64 __M, __m512i __A, 99 __m512i __B) 100 { 101 return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B, 102 (__v64qi) __A, 103 (__v64qi) __W, 104 (__mmask64) __M); 105 } 106 107 static __inline__ __m512i __DEFAULT_FN_ATTRS 108 _mm512_mask_multishift_epi64_epi8 (__m512i __W, __mmask64 __M, __m512i __X, __m512i __Y) 109 { 110 return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X, 111 (__v64qi) __Y, 112 (__v64qi) __W, 113 (__mmask64) __M); 114 } 115 116 static __inline__ __m512i __DEFAULT_FN_ATTRS 117 _mm512_maskz_multishift_epi64_epi8 (__mmask64 __M, __m512i __X, __m512i __Y) 118 { 119 return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X, 120 (__v64qi) __Y, 121 (__v64qi) _mm512_setzero_si512 (), 122 (__mmask64) __M); 123 } 124 125 static __inline__ __m512i __DEFAULT_FN_ATTRS 126 _mm512_multishift_epi64_epi8 (__m512i __X, __m512i __Y) 127 { 128 return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X, 129 (__v64qi) __Y, 130 (__v64qi) _mm512_undefined_epi32 (), 131 (__mmask64) -1); 132 } 133 134 135 #undef __DEFAULT_FN_ATTRS 136 137 #endif 138