╭ gfniintrin.h ─────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
.. llvm_libc_wrappers/ openmp_wrappers/ ppc_wrappers/ __clang_spirv_builtins.h __float_float.h __float_header_macro.h __float_infinity_nan.h __stdarg___gnuc_va_list.h __stdarg___va_copy.h __stdarg_header_macro.h __stdarg_va_arg.h __stdarg_va_copy.h __stdarg_va_list.h __stddef_header_macro.h __stddef_max_align_t.h __stddef_null.h __stddef_nullptr_t.h __stddef_offsetof.h __stddef_ptrdiff_t.h __stddef_rsize_t.h __stddef_size_t.h __stddef_unreachable.h __stddef_wchar_t.h __stddef_wint_t.h __wmmintrin_aes.h __wmmintrin_pclmul.h adcintrin.h adxintrin.h altivec.h ammintrin.h amo.h amxavx512intrin.h amxcomplexintrin.h amxfp16intrin.h amxfp8intrin.h amxintrin.h amxmovrsintrin.h amxtf32intrin.h andes_vector.h arm64intr.h arm_acle.h arm_bf16.h arm_cde.h arm_cmse.h arm_fp16.h arm_mve.h arm_neon.h arm_neon_sve_bridge.h arm_sme.h arm_sve.h arm_vector_types.h armintr.h avx10_2_512bf16intrin.h avx10_2_512convertintrin.h avx10_2_512minmaxintrin.h avx10_2_512niintrin.h avx10_2_512satcvtdsintrin.h avx10_2_512satcvtintrin.h avx10_2bf16intrin.h avx10_2convertintrin.h avx10_2copyintrin.h avx10_2minmaxintrin.h avx10_2niintrin.h avx10_2satcvtdsintrin.h avx10_2satcvtintrin.h avx2intrin.h avx512bf16intrin.h avx512bitalgintrin.h avx512bwintrin.h avx512cdintrin.h avx512dqintrin.h avx512fintrin.h avx512fp16intrin.h avx512ifmaintrin.h avx512ifmavlintrin.h avx512vbmi2intrin.h avx512vbmiintrin.h avx512vbmivlintrin.h avx512vlbf16intrin.h avx512vlbitalgintrin.h avx512vlbwintrin.h avx512vlcdintrin.h avx512vldqintrin.h avx512vlfp16intrin.h avx512vlintrin.h avx512vlvbmi2intrin.h avx512vlvnniintrin.h avx512vlvp2intersectintrin.h avx512vnniintrin.h avx512vp2intersectintrin.h avx512vpopcntdqintrin.h avx512vpopcntdqvlintrin.h avxifmaintrin.h avxintrin.h avxneconvertintrin.h avxvnniint16intrin.h avxvnniint8intrin.h avxvnniintrin.h bmi2intrin.h bmiintrin.h builtins.h cet.h cetintrin.h cldemoteintrin.h clflushoptintrin.h clwbintrin.h clzerointrin.h cmpccxaddintrin.h cpuid.h crc32intrin.h emmintrin.h enqcmdintrin.h f16cintrin.h float.h fma4intrin.h fmaintrin.h fxsrintrin.h ╭─────────────────────────────────╮ │gfniintrin.h │ ╰─────────────────────────────────╯ hexagon_circ_brev_intrinsics.h hexagon_protos.h hexagon_types.h hresetintrin.h htmintrin.h htmxlintrin.h hvx_hexagon_protos.h ia32intrin.h immintrin.h intrin.h intrin0.h inttypes.h invpcidintrin.h iso646.h keylockerintrin.h larchintrin.h lasxintrin.h limits.h lsxintrin.h lwpintrin.h lzcntintrin.h mm3dnow.h mm_malloc.h mmintrin.h module.modulemap movdirintrin.h movrs_avx10_2_512intrin.h movrs_avx10_2intrin.h movrsintrin.h msa.h mwaitxintrin.h nmmintrin.h pconfigintrin.h pkuintrin.h pmmintrin.h popcntintrin.h prfchiintrin.h prfchwintrin.h ptrauth.h ptwriteintrin.h raointintrin.h rdpruintrin.h rdseedintrin.h riscv_bitmanip.h riscv_corev_alu.h riscv_crypto.h riscv_mips.h riscv_nds.h riscv_ntlh.h riscv_vector.h rtmintrin.h s390intrin.h serializeintrin.h sgxintrin.h sha512intrin.h shaintrin.h sifive_vector.h sm3intrin.h sm4evexintrin.h sm4intrin.h smmintrin.h spirvintrin.h stdalign.h stdarg.h stdatomic.h stdbool.h stdckdint.h stdcountof.h stddef.h stddefer.h stdint.h stdnoreturn.h tbmintrin.h tgmath.h tmmintrin.h tsxldtrkintrin.h uintrintrin.h unwind.h usermsrintrin.h vadefs.h vaesintrin.h varargs.h vecintrin.h velintrin.h velintrin_approx.h velintrin_gen.h vpclmulqdqintrin.h waitpkgintrin.h wasm_simd128.h wbnoinvdintrin.h wmmintrin.h x86gprintrin.h x86intrin.h xmmintrin.h xopintrin.h xsavecintrin.h xsaveintrin.h xsaveoptintrin.h xsavesintrin.h xtestintrin.h yvals_core.h
1 /*===----------------- gfniintrin.h - GFNI intrinsics ----------------------=== 2 * 3 * 4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 * See https://llvm.org/LICENSE.txt for license information. 6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 * 8 *===-----------------------------------------------------------------------=== 9 */ 10 #ifndef __IMMINTRIN_H 11 #error "Never use <gfniintrin.h> directly; include <immintrin.h> instead." 12 #endif 13 14 #ifndef __GFNIINTRIN_H 15 #define __GFNIINTRIN_H 16 17 /* Default attributes for simple form (no masking). */ 18 #if defined(__cplusplus) && (__cplusplus >= 201103L) 19 #define __DEFAULT_FN_ATTRS \ 20 __attribute__((__always_inline__, __nodebug__, __target__("gfni"), \ 21 __min_vector_width__(128))) constexpr 22 23 /* Default attributes for YMM unmasked form. */ 24 #define __DEFAULT_FN_ATTRS_Y \ 25 __attribute__((__always_inline__, __nodebug__, __target__("avx,gfni"), \ 26 __min_vector_width__(256))) constexpr 27 28 /* Default attributes for VLX masked forms. */ 29 #define __DEFAULT_FN_ATTRS_VL128 \ 30 __attribute__((__always_inline__, __nodebug__, \ 31 __target__("avx512bw,avx512vl,gfni"), \ 32 __min_vector_width__(128))) constexpr 33 #define __DEFAULT_FN_ATTRS_VL256 \ 34 __attribute__((__always_inline__, __nodebug__, \ 35 __target__("avx512bw,avx512vl,gfni"), \ 36 __min_vector_width__(256))) constexpr 37 38 /* Default attributes for ZMM unmasked forms. */ 39 #define __DEFAULT_FN_ATTRS_Z \ 40 __attribute__((__always_inline__, __nodebug__, __target__("avx512f,gfni"), \ 41 __min_vector_width__(512))) constexpr 42 /* Default attributes for ZMM masked forms. */ 43 #define __DEFAULT_FN_ATTRS_Z_MASK \ 44 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,gfni"), \ 45 __min_vector_width__(512))) constexpr 46 #else 47 #define __DEFAULT_FN_ATTRS \ 48 __attribute__((__always_inline__, __nodebug__, __target__("gfni"), \ 49 __min_vector_width__(128))) 50 51 /* Default attributes for YMM unmasked form. */ 52 #define __DEFAULT_FN_ATTRS_Y \ 53 __attribute__((__always_inline__, __nodebug__, __target__("avx,gfni"), \ 54 __min_vector_width__(256))) 55 56 /* Default attributes for VLX masked forms. */ 57 #define __DEFAULT_FN_ATTRS_VL128 \ 58 __attribute__((__always_inline__, __nodebug__, \ 59 __target__("avx512bw,avx512vl,gfni"), \ 60 __min_vector_width__(128))) 61 #define __DEFAULT_FN_ATTRS_VL256 \ 62 __attribute__((__always_inline__, __nodebug__, \ 63 __target__("avx512bw,avx512vl,gfni"), \ 64 __min_vector_width__(256))) 65 66 /* Default attributes for ZMM unmasked forms. */ 67 #define __DEFAULT_FN_ATTRS_Z \ 68 __attribute__((__always_inline__, __nodebug__, __target__("avx512f,gfni"), \ 69 __min_vector_width__(512))) 70 /* Default attributes for ZMM masked forms. */ 71 #define __DEFAULT_FN_ATTRS_Z_MASK \ 72 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,gfni"), \ 73 __min_vector_width__(512))) 74 #endif 75 76 #define _mm_gf2p8affineinv_epi64_epi8(A, B, I) \ 77 ((__m128i)__builtin_ia32_vgf2p8affineinvqb_v16qi((__v16qi)(__m128i)(A), \ 78 (__v16qi)(__m128i)(B), \ 79 (char)(I))) 80 81 #define _mm_gf2p8affine_epi64_epi8(A, B, I) \ 82 ((__m128i)__builtin_ia32_vgf2p8affineqb_v16qi((__v16qi)(__m128i)(A), \ 83 (__v16qi)(__m128i)(B), \ 84 (char)(I))) 85 86 static __inline__ __m128i __DEFAULT_FN_ATTRS 87 _mm_gf2p8mul_epi8(__m128i __A, __m128i __B) 88 { 89 return (__m128i) __builtin_ia32_vgf2p8mulb_v16qi((__v16qi) __A, 90 (__v16qi) __B); 91 } 92 93 #ifdef __AVXINTRIN_H 94 #define _mm256_gf2p8affineinv_epi64_epi8(A, B, I) \ 95 ((__m256i)__builtin_ia32_vgf2p8affineinvqb_v32qi((__v32qi)(__m256i)(A), \ 96 (__v32qi)(__m256i)(B), \ 97 (char)(I))) 98 99 #define _mm256_gf2p8affine_epi64_epi8(A, B, I) \ 100 ((__m256i)__builtin_ia32_vgf2p8affineqb_v32qi((__v32qi)(__m256i)(A), \ 101 (__v32qi)(__m256i)(B), \ 102 (char)(I))) 103 104 static __inline__ __m256i __DEFAULT_FN_ATTRS_Y 105 _mm256_gf2p8mul_epi8(__m256i __A, __m256i __B) 106 { 107 return (__m256i) __builtin_ia32_vgf2p8mulb_v32qi((__v32qi) __A, 108 (__v32qi) __B); 109 } 110 #endif /* __AVXINTRIN_H */ 111 112 #ifdef __AVX512BWINTRIN_H 113 #define _mm512_gf2p8affineinv_epi64_epi8(A, B, I) \ 114 ((__m512i)__builtin_ia32_vgf2p8affineinvqb_v64qi((__v64qi)(__m512i)(A), \ 115 (__v64qi)(__m512i)(B), \ 116 (char)(I))) 117 118 #define _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \ 119 ((__m512i)__builtin_ia32_selectb_512((__mmask64)(U), \ 120 (__v64qi)_mm512_gf2p8affineinv_epi64_epi8(A, B, I), \ 121 (__v64qi)(__m512i)(S))) 122 123 #define _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \ 124 _mm512_mask_gf2p8affineinv_epi64_epi8((__m512i)_mm512_setzero_si512(), \ 125 U, A, B, I) 126 127 #define _mm512_gf2p8affine_epi64_epi8(A, B, I) \ 128 ((__m512i)__builtin_ia32_vgf2p8affineqb_v64qi((__v64qi)(__m512i)(A), \ 129 (__v64qi)(__m512i)(B), \ 130 (char)(I))) 131 132 #define _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \ 133 ((__m512i)__builtin_ia32_selectb_512((__mmask64)(U), \ 134 (__v64qi)_mm512_gf2p8affine_epi64_epi8((A), (B), (I)), \ 135 (__v64qi)(__m512i)(S))) 136 137 #define _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \ 138 _mm512_mask_gf2p8affine_epi64_epi8((__m512i)_mm512_setzero_si512(), \ 139 U, A, B, I) 140 141 static __inline__ __m512i __DEFAULT_FN_ATTRS_Z 142 _mm512_gf2p8mul_epi8(__m512i __A, __m512i __B) 143 { 144 return (__m512i) __builtin_ia32_vgf2p8mulb_v64qi((__v64qi) __A, 145 (__v64qi) __B); 146 } 147 148 static __inline__ __m512i __DEFAULT_FN_ATTRS_Z_MASK 149 _mm512_mask_gf2p8mul_epi8(__m512i __S, __mmask64 __U, __m512i __A, __m512i __B) 150 { 151 return (__m512i) __builtin_ia32_selectb_512(__U, 152 (__v64qi) _mm512_gf2p8mul_epi8(__A, __B), 153 (__v64qi) __S); 154 } 155 156 static __inline__ __m512i __DEFAULT_FN_ATTRS_Z_MASK 157 _mm512_maskz_gf2p8mul_epi8(__mmask64 __U, __m512i __A, __m512i __B) 158 { 159 return _mm512_mask_gf2p8mul_epi8((__m512i)_mm512_setzero_si512(), 160 __U, __A, __B); 161 } 162 #endif /* __AVX512BWINTRIN_H */ 163 164 #ifdef __AVX512VLBWINTRIN_H 165 #define _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \ 166 ((__m128i)__builtin_ia32_selectb_128((__mmask16)(U), \ 167 (__v16qi)_mm_gf2p8affineinv_epi64_epi8(A, B, I), \ 168 (__v16qi)(__m128i)(S))) 169 170 #define _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \ 171 _mm_mask_gf2p8affineinv_epi64_epi8((__m128i)_mm_setzero_si128(), \ 172 U, A, B, I) 173 174 #define _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \ 175 ((__m256i)__builtin_ia32_selectb_256((__mmask32)(U), \ 176 (__v32qi)_mm256_gf2p8affineinv_epi64_epi8(A, B, I), \ 177 (__v32qi)(__m256i)(S))) 178 179 #define _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \ 180 _mm256_mask_gf2p8affineinv_epi64_epi8((__m256i)_mm256_setzero_si256(), \ 181 U, A, B, I) 182 183 #define _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \ 184 ((__m128i)__builtin_ia32_selectb_128((__mmask16)(U), \ 185 (__v16qi)_mm_gf2p8affine_epi64_epi8(A, B, I), \ 186 (__v16qi)(__m128i)(S))) 187 188 #define _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \ 189 _mm_mask_gf2p8affine_epi64_epi8((__m128i)_mm_setzero_si128(), U, A, B, I) 190 191 #define _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \ 192 ((__m256i)__builtin_ia32_selectb_256((__mmask32)(U), \ 193 (__v32qi)_mm256_gf2p8affine_epi64_epi8(A, B, I), \ 194 (__v32qi)(__m256i)(S))) 195 196 #define _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \ 197 _mm256_mask_gf2p8affine_epi64_epi8((__m256i)_mm256_setzero_si256(), \ 198 U, A, B, I) 199 200 static __inline__ __m128i __DEFAULT_FN_ATTRS_VL128 201 _mm_mask_gf2p8mul_epi8(__m128i __S, __mmask16 __U, __m128i __A, __m128i __B) 202 { 203 return (__m128i) __builtin_ia32_selectb_128(__U, 204 (__v16qi) _mm_gf2p8mul_epi8(__A, __B), 205 (__v16qi) __S); 206 } 207 208 static __inline__ __m128i __DEFAULT_FN_ATTRS_VL128 209 _mm_maskz_gf2p8mul_epi8(__mmask16 __U, __m128i __A, __m128i __B) 210 { 211 return _mm_mask_gf2p8mul_epi8((__m128i)_mm_setzero_si128(), 212 __U, __A, __B); 213 } 214 215 static __inline__ __m256i __DEFAULT_FN_ATTRS_VL256 216 _mm256_mask_gf2p8mul_epi8(__m256i __S, __mmask32 __U, __m256i __A, __m256i __B) 217 { 218 return (__m256i) __builtin_ia32_selectb_256(__U, 219 (__v32qi) _mm256_gf2p8mul_epi8(__A, __B), 220 (__v32qi) __S); 221 } 222 223 static __inline__ __m256i __DEFAULT_FN_ATTRS_VL256 224 _mm256_maskz_gf2p8mul_epi8(__mmask32 __U, __m256i __A, __m256i __B) 225 { 226 return _mm256_mask_gf2p8mul_epi8((__m256i)_mm256_setzero_si256(), 227 __U, __A, __B); 228 } 229 #endif /* __AVX512VLBWINTRIN_H */ 230 231 #undef __DEFAULT_FN_ATTRS 232 #undef __DEFAULT_FN_ATTRS_Y 233 #undef __DEFAULT_FN_ATTRS_Z 234 #undef __DEFAULT_FN_ATTRS_VL128 235 #undef __DEFAULT_FN_ATTRS_VL256 236 237 #endif /* __GFNIINTRIN_H */ 238 239