@cpp-linter/clang-tidy-win32-x64 19.1.0 → 20.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/clang-tidy.exe +2 -2
- package/lib/clang/{19 → 20}/include/__clang_cuda_device_functions.h +14 -0
- package/lib/clang/{19 → 20}/include/__clang_cuda_math.h +5 -0
- package/lib/clang/{19 → 20}/include/__clang_hip_cmath.h +6 -1
- package/lib/clang/{19 → 20}/include/__clang_hip_math.h +5 -0
- package/lib/clang/{19 → 20}/include/adcintrin.h +5 -0
- package/lib/clang/{19 → 20}/include/adxintrin.h +5 -0
- package/lib/clang/{19 → 20}/include/altivec.h +8 -8
- package/lib/clang/20/include/amdgpuintrin.h +194 -0
- package/lib/clang/20/include/amxavx512intrin.h +382 -0
- package/lib/clang/20/include/amxbf16transposeintrin.h +94 -0
- package/lib/clang/20/include/amxcomplextransposeintrin.h +303 -0
- package/lib/clang/{19 → 20}/include/amxfp16intrin.h +35 -0
- package/lib/clang/20/include/amxfp16transposeintrin.h +94 -0
- package/lib/clang/20/include/amxfp8intrin.h +230 -0
- package/lib/clang/{19 → 20}/include/amxintrin.h +5 -35
- package/lib/clang/20/include/amxmovrsintrin.h +48 -0
- package/lib/clang/20/include/amxmovrstransposeintrin.h +200 -0
- package/lib/clang/20/include/amxtf32intrin.h +108 -0
- package/lib/clang/20/include/amxtf32transposeintrin.h +105 -0
- package/lib/clang/20/include/amxtransposeintrin.h +248 -0
- package/lib/clang/{19 → 20}/include/arm_acle.h +18 -21
- package/lib/clang/{19 → 20}/include/arm_neon.h +3587 -1696
- package/lib/clang/{19 → 20}/include/arm_sme.h +322 -94
- package/lib/clang/{19 → 20}/include/arm_sve.h +1105 -84
- package/lib/clang/{19 → 20}/include/arm_vector_types.h +87 -0
- package/lib/clang/20/include/avx10_2_512bf16intrin.h +561 -0
- package/lib/clang/20/include/avx10_2_512convertintrin.h +320 -0
- package/lib/clang/20/include/avx10_2_512minmaxintrin.h +127 -0
- package/lib/clang/20/include/avx10_2_512niintrin.h +314 -0
- package/lib/clang/20/include/avx10_2_512satcvtdsintrin.h +303 -0
- package/lib/clang/20/include/avx10_2_512satcvtintrin.h +301 -0
- package/lib/clang/20/include/avx10_2bf16intrin.h +1085 -0
- package/lib/clang/20/include/avx10_2convertintrin.h +589 -0
- package/lib/clang/20/include/avx10_2copyintrin.h +66 -0
- package/lib/clang/20/include/avx10_2minmaxintrin.h +277 -0
- package/lib/clang/20/include/avx10_2niintrin.h +2075 -0
- package/lib/clang/20/include/avx10_2satcvtdsintrin.h +496 -0
- package/lib/clang/20/include/avx10_2satcvtintrin.h +444 -0
- package/lib/clang/{19 → 20}/include/avx2intrin.h +9 -0
- package/lib/clang/{19 → 20}/include/avx512bitalgintrin.h +2 -2
- package/lib/clang/{19 → 20}/include/avx512fintrin.h +22 -14
- package/lib/clang/{19 → 20}/include/avx512vlbitalgintrin.h +4 -4
- package/lib/clang/{19 → 20}/include/avx512vpopcntdqintrin.h +12 -4
- package/lib/clang/{19 → 20}/include/avx512vpopcntdqvlintrin.h +16 -8
- package/lib/clang/{19 → 20}/include/avxintrin.h +30 -16
- package/lib/clang/{19 → 20}/include/avxvnniint16intrin.h +36 -77
- package/lib/clang/{19 → 20}/include/avxvnniint8intrin.h +36 -77
- package/lib/clang/{19 → 20}/include/bmi2intrin.h +15 -17
- package/lib/clang/{19 → 20}/include/bmiintrin.h +31 -37
- package/lib/clang/{19 → 20}/include/cmpccxaddintrin.h +1 -1
- package/lib/clang/{19 → 20}/include/cpuid.h +12 -11
- package/lib/clang/{19 → 20}/include/cuda_wrappers/cmath +4 -0
- package/lib/clang/{19 → 20}/include/cuda_wrappers/new +2 -0
- package/lib/clang/{19 → 20}/include/emmintrin.h +141 -107
- package/lib/clang/{19 → 20}/include/gfniintrin.h +32 -10
- package/lib/clang/20/include/gpuintrin.h +224 -0
- package/lib/clang/{19 → 20}/include/hexagon_types.h +8 -4
- package/lib/clang/{19 → 20}/include/hlsl/hlsl_basic_types.h +47 -1
- package/lib/clang/20/include/hlsl/hlsl_detail.h +84 -0
- package/lib/clang/{19 → 20}/include/hlsl/hlsl_intrinsics.h +1199 -82
- package/lib/clang/{19 → 20}/include/hlsl.h +11 -0
- package/lib/clang/{19 → 20}/include/hvx_hexagon_protos.h +427 -0
- package/lib/clang/{19 → 20}/include/immintrin.h +87 -3
- package/lib/clang/{19 → 20}/include/intrin.h +20 -10
- package/lib/clang/{19 → 20}/include/intrin0.h +10 -1
- package/lib/clang/{19 → 20}/include/larchintrin.h +22 -8
- package/lib/clang/{19 → 20}/include/lasxintrin.h +27 -25
- package/lib/clang/{19 → 20}/include/limits.h +7 -4
- package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/ctype.h +38 -0
- package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/stdlib.h +8 -0
- package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload.h +31 -0
- package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload_device.h +10 -0
- package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload_host.h +15 -0
- package/lib/clang/{19 → 20}/include/lsxintrin.h +27 -25
- package/lib/clang/{19 → 20}/include/lzcntintrin.h +10 -7
- package/lib/clang/{19 → 20}/include/mmintrin.h +209 -155
- package/lib/clang/{19 → 20}/include/module.modulemap +2 -4
- package/lib/clang/20/include/movrs_avx10_2_512intrin.h +98 -0
- package/lib/clang/20/include/movrs_avx10_2intrin.h +174 -0
- package/lib/clang/20/include/movrsintrin.h +59 -0
- package/lib/clang/20/include/nvptxintrin.h +202 -0
- package/lib/clang/{19 → 20}/include/opencl-c-base.h +4 -0
- package/lib/clang/{19 → 20}/include/openmp_wrappers/__clang_openmp_device_functions.h +4 -5
- package/lib/clang/{19 → 20}/include/openmp_wrappers/complex_cmath.h +7 -2
- package/lib/clang/{19 → 20}/include/pmmintrin.h +16 -3
- package/lib/clang/{19 → 20}/include/popcntintrin.h +7 -7
- package/lib/clang/{19 → 20}/include/ptrauth.h +6 -0
- package/lib/clang/20/include/riscv_corev_alu.h +128 -0
- package/lib/clang/{19 → 20}/include/riscv_vector.h +0 -1
- package/lib/clang/20/include/sm4evexintrin.h +32 -0
- package/lib/clang/{19 → 20}/include/smmintrin.h +6 -0
- package/lib/clang/{19 → 20}/include/stdalign.h +0 -5
- package/lib/clang/{19 → 20}/include/tbmintrin.h +25 -37
- package/lib/clang/{19 → 20}/include/tmmintrin.h +64 -38
- package/lib/clang/{19 → 20}/include/vecintrin.h +1778 -60
- package/lib/clang/{19 → 20}/include/wasm_simd128.h +167 -21
- package/lib/clang/{19 → 20}/include/xmmintrin.h +170 -177
- package/package.json +6 -6
- /package/lib/clang/{19 → 20}/include/__clang_cuda_builtin_vars.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_cmath.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_complex_builtins.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_intrinsics.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_libdevice_declares.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_math_forward_declares.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_runtime_wrapper.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_cuda_texture_intrinsics.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_hip_libdevice_declares.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_hip_runtime_wrapper.h +0 -0
- /package/lib/clang/{19 → 20}/include/__clang_hip_stdlib.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg___gnuc_va_list.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg___va_copy.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg_header_macro.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg_va_arg.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg_va_copy.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stdarg_va_list.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_header_macro.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_max_align_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_null.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_nullptr_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_offsetof.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_ptrdiff_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_rsize_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_size_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_unreachable.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_wchar_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__stddef_wint_t.h +0 -0
- /package/lib/clang/{19 → 20}/include/__wmmintrin_aes.h +0 -0
- /package/lib/clang/{19 → 20}/include/__wmmintrin_pclmul.h +0 -0
- /package/lib/clang/{19 → 20}/include/ammintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/amxcomplexintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm64intr.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_bf16.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_cde.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_cmse.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_fp16.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_mve.h +0 -0
- /package/lib/clang/{19 → 20}/include/arm_neon_sve_bridge.h +0 -0
- /package/lib/clang/{19 → 20}/include/armintr.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512bf16intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512bwintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512cdintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512dqintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512fp16intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512ifmaintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512ifmavlintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vbmi2intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vbmiintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vbmivlintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlbf16intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlbwintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlcdintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vldqintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlfp16intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlvbmi2intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlvnniintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vlvp2intersectintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vnniintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avx512vp2intersectintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avxifmaintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avxneconvertintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/avxvnniintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/builtins.h +0 -0
- /package/lib/clang/{19 → 20}/include/cet.h +0 -0
- /package/lib/clang/{19 → 20}/include/cetintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/cldemoteintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/clflushoptintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/clwbintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/clzerointrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/crc32intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/cuda_wrappers/algorithm +0 -0
- /package/lib/clang/{19 → 20}/include/cuda_wrappers/bits/basic_string.h +0 -0
- /package/lib/clang/{19 → 20}/include/cuda_wrappers/bits/basic_string.tcc +0 -0
- /package/lib/clang/{19 → 20}/include/cuda_wrappers/bits/shared_ptr_base.h +0 -0
- /package/lib/clang/{19 → 20}/include/cuda_wrappers/complex +0 -0
- /package/lib/clang/{19 → 20}/include/enqcmdintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/f16cintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/float.h +0 -0
- /package/lib/clang/{19 → 20}/include/fma4intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/fmaintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/fxsrintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/hexagon_circ_brev_intrinsics.h +0 -0
- /package/lib/clang/{19 → 20}/include/hexagon_protos.h +0 -0
- /package/lib/clang/{19 → 20}/include/hresetintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/htmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/htmxlintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ia32intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/inttypes.h +0 -0
- /package/lib/clang/{19 → 20}/include/invpcidintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/iso646.h +0 -0
- /package/lib/clang/{19 → 20}/include/keylockerintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/assert.h +0 -0
- /package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/inttypes.h +0 -0
- /package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/stdio.h +0 -0
- /package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/string.h +0 -0
- /package/lib/clang/{19 → 20}/include/llvm_libc_wrappers/time.h +0 -0
- /package/lib/clang/{19 → 20}/include/lwpintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/mm3dnow.h +0 -0
- /package/lib/clang/{19 → 20}/include/mm_malloc.h +0 -0
- /package/lib/clang/{19 → 20}/include/movdirintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/msa.h +0 -0
- /package/lib/clang/{19 → 20}/include/mwaitxintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/nmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/opencl-c.h +0 -0
- /package/lib/clang/{19 → 20}/include/openmp_wrappers/cmath +0 -0
- /package/lib/clang/{19 → 20}/include/openmp_wrappers/complex +0 -0
- /package/lib/clang/{19 → 20}/include/openmp_wrappers/complex.h +0 -0
- /package/lib/clang/{19 → 20}/include/openmp_wrappers/math.h +0 -0
- /package/lib/clang/{19 → 20}/include/openmp_wrappers/new +0 -0
- /package/lib/clang/{19 → 20}/include/pconfigintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/pkuintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/bmi2intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/bmiintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/emmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/immintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/mm_malloc.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/mmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/nmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/pmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/smmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/tmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/x86gprintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/x86intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ppc_wrappers/xmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/prfchiintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/prfchwintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/ptwriteintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/raointintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/rdpruintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/rdseedintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/riscv_bitmanip.h +0 -0
- /package/lib/clang/{19 → 20}/include/riscv_crypto.h +0 -0
- /package/lib/clang/{19 → 20}/include/riscv_ntlh.h +0 -0
- /package/lib/clang/{19 → 20}/include/rtmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/s390intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/serializeintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/sgxintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/sha512intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/shaintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/sifive_vector.h +0 -0
- /package/lib/clang/{19 → 20}/include/sm3intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/sm4intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdarg.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdatomic.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdbool.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdckdint.h +0 -0
- /package/lib/clang/{19 → 20}/include/stddef.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdint.h +0 -0
- /package/lib/clang/{19 → 20}/include/stdnoreturn.h +0 -0
- /package/lib/clang/{19 → 20}/include/tgmath.h +0 -0
- /package/lib/clang/{19 → 20}/include/tsxldtrkintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/uintrintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/unwind.h +0 -0
- /package/lib/clang/{19 → 20}/include/usermsrintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/vadefs.h +0 -0
- /package/lib/clang/{19 → 20}/include/vaesintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/varargs.h +0 -0
- /package/lib/clang/{19 → 20}/include/velintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/velintrin_approx.h +0 -0
- /package/lib/clang/{19 → 20}/include/velintrin_gen.h +0 -0
- /package/lib/clang/{19 → 20}/include/vpclmulqdqintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/waitpkgintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/wbnoinvdintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/wmmintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/x86gprintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/x86intrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xopintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xsavecintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xsaveintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xsaveoptintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xsavesintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/xtestintrin.h +0 -0
- /package/lib/clang/{19 → 20}/include/yvals_core.h +0 -0
- /package/lib/clang/{19 → 20}/include/zos_wrappers/builtins.h +0 -0
|
@@ -22,8 +22,6 @@
|
|
|
22
22
|
__attribute__((__always_inline__, __nodebug__, __target__("amx-int8")))
|
|
23
23
|
#define __DEFAULT_FN_ATTRS_BF16 \
|
|
24
24
|
__attribute__((__always_inline__, __nodebug__, __target__("amx-bf16")))
|
|
25
|
-
#define __DEFAULT_FN_ATTRS_FP16 \
|
|
26
|
-
__attribute__((__always_inline__, __nodebug__, __target__("amx-fp16")))
|
|
27
25
|
|
|
28
26
|
/// Load tile configuration from a 64-byte memory location specified by
|
|
29
27
|
/// "mem_addr". The tile configuration includes the tile type palette, the
|
|
@@ -232,9 +230,11 @@ static __inline__ void __DEFAULT_FN_ATTRS_TILE _tile_release(void) {
|
|
|
232
230
|
/// bytes. Since there is no 2D type in llvm IR, we use vector type to
|
|
233
231
|
/// represent 2D tile and the fixed size is maximum amx tile register size.
|
|
234
232
|
typedef int _tile1024i __attribute__((__vector_size__(1024), __aligned__(64)));
|
|
233
|
+
typedef int _tile1024i_1024a
|
|
234
|
+
__attribute__((__vector_size__(1024), __aligned__(1024)));
|
|
235
235
|
|
|
236
236
|
/// This is internal intrinsic. C/C++ user should avoid calling it directly.
|
|
237
|
-
static __inline__ _tile1024i
|
|
237
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_TILE
|
|
238
238
|
_tile_loadd_internal(unsigned short m, unsigned short n, const void *base,
|
|
239
239
|
__SIZE_TYPE__ stride) {
|
|
240
240
|
return __builtin_ia32_tileloadd64_internal(m, n, base,
|
|
@@ -242,7 +242,7 @@ _tile_loadd_internal(unsigned short m, unsigned short n, const void *base,
|
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
/// This is internal intrinsic. C/C++ user should avoid calling it directly.
|
|
245
|
-
static __inline__ _tile1024i
|
|
245
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_TILE
|
|
246
246
|
_tile_loaddt1_internal(unsigned short m, unsigned short n, const void *base,
|
|
247
247
|
__SIZE_TYPE__ stride) {
|
|
248
248
|
return __builtin_ia32_tileloaddt164_internal(m, n, base,
|
|
@@ -278,7 +278,7 @@ _tile_dpbuud_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
/// This is internal intrinsic. C/C++ user should avoid calling it directly.
|
|
281
|
-
static __inline__ void
|
|
281
|
+
static __inline__ void __DEFAULT_FN_ATTRS_TILE
|
|
282
282
|
_tile_stored_internal(unsigned short m, unsigned short n, void *base,
|
|
283
283
|
__SIZE_TYPE__ stride, _tile1024i tile) {
|
|
284
284
|
return __builtin_ia32_tilestored64_internal(m, n, base,
|
|
@@ -292,13 +292,6 @@ _tile_dpbf16ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
|
292
292
|
return __builtin_ia32_tdpbf16ps_internal(m, n, k, dst, src1, src2);
|
|
293
293
|
}
|
|
294
294
|
|
|
295
|
-
/// This is internal intrinsic. C/C++ user should avoid calling it directly.
|
|
296
|
-
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_FP16
|
|
297
|
-
_tile_dpfp16ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
298
|
-
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
299
|
-
return __builtin_ia32_tdpfp16ps_internal(m, n, k, dst, src1, src2);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
295
|
/// This struct pack the shape and tile data together for user. We suggest
|
|
303
296
|
/// initializing the struct as early as possible, because compiler depends
|
|
304
297
|
/// on the shape information to do configure. The constant value is preferred
|
|
@@ -493,32 +486,9 @@ static __inline__ void __tile_dpbf16ps(__tile1024i *dst, __tile1024i src0,
|
|
|
493
486
|
src0.tile, src1.tile);
|
|
494
487
|
}
|
|
495
488
|
|
|
496
|
-
/// Compute dot-product of FP16 (16-bit) floating-point pairs in tiles src0 and
|
|
497
|
-
/// src1, accumulating the intermediate single-precision (32-bit) floating-point
|
|
498
|
-
/// elements with elements in "dst", and store the 32-bit result back to tile
|
|
499
|
-
/// "dst".
|
|
500
|
-
///
|
|
501
|
-
/// \headerfile <immintrin.h>
|
|
502
|
-
///
|
|
503
|
-
/// This intrinsic corresponds to the <c> TDPFP16PS </c> instruction.
|
|
504
|
-
///
|
|
505
|
-
/// \param dst
|
|
506
|
-
/// The destination tile. Max size is 1024 Bytes.
|
|
507
|
-
/// \param src0
|
|
508
|
-
/// The 1st source tile. Max size is 1024 Bytes.
|
|
509
|
-
/// \param src1
|
|
510
|
-
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
511
|
-
__DEFAULT_FN_ATTRS_FP16
|
|
512
|
-
static __inline__ void __tile_dpfp16ps(__tile1024i *dst, __tile1024i src0,
|
|
513
|
-
__tile1024i src1) {
|
|
514
|
-
dst->tile = _tile_dpfp16ps_internal(src0.row, src1.col, src0.col, dst->tile,
|
|
515
|
-
src0.tile, src1.tile);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
489
|
#undef __DEFAULT_FN_ATTRS_TILE
|
|
519
490
|
#undef __DEFAULT_FN_ATTRS_INT8
|
|
520
491
|
#undef __DEFAULT_FN_ATTRS_BF16
|
|
521
|
-
#undef __DEFAULT_FN_ATTRS_FP16
|
|
522
492
|
|
|
523
493
|
#endif /* __x86_64__ */
|
|
524
494
|
#endif /* __AMXINTRIN_H */
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*===-------- amxmovrsintrin.h - AMX MOVRS intrinsics -*- C++ -*---------===
|
|
2
|
+
*
|
|
3
|
+
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4
|
+
* See https://llvm.org/LICENSE.txt for license information.
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6
|
+
*
|
|
7
|
+
* ===-------------------------------------------------------------------=== */
|
|
8
|
+
|
|
9
|
+
#ifndef __IMMINTRIN_H
|
|
10
|
+
#error "Never use <amxmovrsintrin.h> directly; include <immintrin.h> instead."
|
|
11
|
+
#endif /* __IMMINTRIN_H */
|
|
12
|
+
|
|
13
|
+
#ifndef __AMXMOVRSINTRIN_H
|
|
14
|
+
#define __AMXMOVRSINTRIN_H
|
|
15
|
+
#ifdef __x86_64__
|
|
16
|
+
|
|
17
|
+
#define __DEFAULT_FN_ATTRS_MOVRS \
|
|
18
|
+
__attribute__((__always_inline__, __nodebug__, __target__("amx-movrs")))
|
|
19
|
+
|
|
20
|
+
#define _tile_loaddrs(dst, base, stride) \
|
|
21
|
+
__builtin_ia32_tileloaddrs64((dst), ((const void *)(base)), \
|
|
22
|
+
(__SIZE_TYPE__)(stride))
|
|
23
|
+
#define _tile_stream_loaddrs(dst, base, stride) \
|
|
24
|
+
__builtin_ia32_tileloaddrst164((dst), ((const void *)(base)), \
|
|
25
|
+
(__SIZE_TYPE__)(stride))
|
|
26
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_MOVRS
|
|
27
|
+
_tile_loaddrs_internal(unsigned short m, unsigned short n, const void *base,
|
|
28
|
+
__SIZE_TYPE__ stride) {
|
|
29
|
+
return __builtin_ia32_tileloaddrs64_internal(m, n, base,
|
|
30
|
+
(__SIZE_TYPE__)(stride));
|
|
31
|
+
}
|
|
32
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_MOVRS
|
|
33
|
+
_tile_loaddrst1_internal(unsigned short m, unsigned short n, const void *base,
|
|
34
|
+
__SIZE_TYPE__ stride) {
|
|
35
|
+
return __builtin_ia32_tileloaddrst164_internal(m, n, base,
|
|
36
|
+
(__SIZE_TYPE__)(stride));
|
|
37
|
+
}
|
|
38
|
+
static __inline__ void __DEFAULT_FN_ATTRS_MOVRS
|
|
39
|
+
__tile_loaddrs(__tile1024i *dst, const void *base, __SIZE_TYPE__ stride) {
|
|
40
|
+
dst->tile = _tile_loaddrs_internal(dst->row, dst->col, base, stride);
|
|
41
|
+
}
|
|
42
|
+
static __inline__ void __DEFAULT_FN_ATTRS_MOVRS __tile_stream_loaddrs(
|
|
43
|
+
__tile1024i *dst, const void *base, __SIZE_TYPE__ stride) {
|
|
44
|
+
dst->tile = _tile_loaddrst1_internal(dst->row, dst->col, base, stride);
|
|
45
|
+
}
|
|
46
|
+
#undef __DEFAULT_FN_ATTRS_MOVRS
|
|
47
|
+
#endif /* __x86_64__ */
|
|
48
|
+
#endif /* __AMXMOVRSINTRIN_H */
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/* ===--- amxmovrstransposeintrin.h - AMX_MOVRS_TRANSPOSE intrinsics --------===
|
|
2
|
+
*
|
|
3
|
+
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4
|
+
* See https://llvm.org/LICENSE.txt for license information.
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6
|
+
*
|
|
7
|
+
* ===-----------------------------------------------------------------------===
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef __IMMINTRIN_H
|
|
11
|
+
#error \
|
|
12
|
+
"Never use <amxmovrstransposeintrin.h> directly; use <immintrin.h> instead."
|
|
13
|
+
#endif /* __IMMINTRIN_H */
|
|
14
|
+
|
|
15
|
+
#ifndef __AMX_MOVRS_TRANSPOSEINTRIN_H
|
|
16
|
+
#define __AMX_MOVRS_TRANSPOSEINTRIN_H
|
|
17
|
+
#ifdef __x86_64__
|
|
18
|
+
|
|
19
|
+
#define __DEFAULT_FN_ATTRS \
|
|
20
|
+
__attribute__((__always_inline__, __nodebug__, \
|
|
21
|
+
__target__("amx-transpose,amx-movrs")))
|
|
22
|
+
|
|
23
|
+
#define _tile_2rpntlvwz0rs(tdst, base, stride) \
|
|
24
|
+
__builtin_ia32_t2rpntlvwz0rs(tdst, base, stride)
|
|
25
|
+
#define _tile_2rpntlvwz0rst1(tdst, base, stride) \
|
|
26
|
+
__builtin_ia32_t2rpntlvwz0rst1(tdst, base, stride)
|
|
27
|
+
#define _tile_2rpntlvwz1rs(tdst, base, stride) \
|
|
28
|
+
__builtin_ia32_t2rpntlvwz1rs(tdst, base, stride)
|
|
29
|
+
#define _tile_2rpntlvwz1rst1(tdst, base, stride) \
|
|
30
|
+
__builtin_ia32_t2rpntlvwz1rst1(tdst, base, stride)
|
|
31
|
+
|
|
32
|
+
static __inline__ void __DEFAULT_FN_ATTRS _tile_2rpntlvwz0rs_internal(
|
|
33
|
+
unsigned short row, unsigned short col0, unsigned short col1,
|
|
34
|
+
_tile1024i *dst0, _tile1024i *dst1, const void *base,
|
|
35
|
+
__SIZE_TYPE__ stride) {
|
|
36
|
+
// Use __tile1024i_1024a* to escape the alignment check in
|
|
37
|
+
// clang/test/Headers/x86-intrinsics-headers-clean.cpp
|
|
38
|
+
__builtin_ia32_t2rpntlvwz0rs_internal(
|
|
39
|
+
row, col0, col1, (_tile1024i_1024a *)dst0, (_tile1024i_1024a *)dst1, base,
|
|
40
|
+
(__SIZE_TYPE__)(stride));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static __inline__ void __DEFAULT_FN_ATTRS _tile_2rpntlvwz0rst1_internal(
|
|
44
|
+
unsigned short row, unsigned short col0, unsigned short col1,
|
|
45
|
+
_tile1024i *dst0, _tile1024i *dst1, const void *base,
|
|
46
|
+
__SIZE_TYPE__ stride) {
|
|
47
|
+
__builtin_ia32_t2rpntlvwz0rst1_internal(
|
|
48
|
+
row, col0, col1, (_tile1024i_1024a *)dst0, (_tile1024i_1024a *)dst1, base,
|
|
49
|
+
(__SIZE_TYPE__)(stride));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static __inline__ void __DEFAULT_FN_ATTRS _tile_2rpntlvwz1rs_internal(
|
|
53
|
+
unsigned short row, unsigned short col0, unsigned short col1,
|
|
54
|
+
_tile1024i *dst0, _tile1024i *dst1, const void *base,
|
|
55
|
+
__SIZE_TYPE__ stride) {
|
|
56
|
+
__builtin_ia32_t2rpntlvwz1rs_internal(
|
|
57
|
+
row, col0, col1, (_tile1024i_1024a *)dst0, (_tile1024i_1024a *)dst1, base,
|
|
58
|
+
(__SIZE_TYPE__)(stride));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static __inline__ void __DEFAULT_FN_ATTRS _tile_2rpntlvwz1rst1_internal(
|
|
62
|
+
unsigned short row, unsigned short col0, unsigned short col1,
|
|
63
|
+
_tile1024i *dst0, _tile1024i *dst1, const void *base,
|
|
64
|
+
__SIZE_TYPE__ stride) {
|
|
65
|
+
__builtin_ia32_t2rpntlvwz1rst1_internal(
|
|
66
|
+
row, col0, col1, (_tile1024i_1024a *)dst0, (_tile1024i_1024a *)dst1, base,
|
|
67
|
+
(__SIZE_TYPE__)(stride));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// Converts a pair of tiles from memory into VNNI format, and places the
|
|
71
|
+
/// results in a pair of destinations specified by dst. The pair of tiles
|
|
72
|
+
/// in memory is specified via a tsib; the second tile is after the first
|
|
73
|
+
/// one, separated by the same stride that separates each row.
|
|
74
|
+
/// The tile configuration for the destination tiles indicates the amount
|
|
75
|
+
/// of data to read from memory. The instruction will load a number of rows
|
|
76
|
+
/// that is equal to twice the number of rows in tmm1. The size of each row
|
|
77
|
+
/// is equal to the average width of the destination tiles. If the second
|
|
78
|
+
/// tile is configured with zero rows and columns, only the first tile will
|
|
79
|
+
/// be written.
|
|
80
|
+
/// Provides a hint to the implementation that the data will likely become
|
|
81
|
+
/// read shared in the near future and the data caching can be optimized.
|
|
82
|
+
///
|
|
83
|
+
/// \headerfile <immintrin.h>
|
|
84
|
+
///
|
|
85
|
+
/// This intrinsic corresponds to the <c> T2RPNTLVWZ0RS </c> instruction.
|
|
86
|
+
///
|
|
87
|
+
/// \param dst0
|
|
88
|
+
/// First tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
89
|
+
/// \param dst1
|
|
90
|
+
/// Second tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
91
|
+
/// \param base
|
|
92
|
+
/// A pointer to base address.
|
|
93
|
+
/// \param stride
|
|
94
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
95
|
+
__DEFAULT_FN_ATTRS
|
|
96
|
+
static void __tile_2rpntlvwz0rs(__tile1024i *dst0, __tile1024i *dst1,
|
|
97
|
+
const void *base, __SIZE_TYPE__ stride) {
|
|
98
|
+
_tile_2rpntlvwz0rs_internal(dst0->row, dst0->col, dst1->col, &dst0->tile,
|
|
99
|
+
&dst1->tile, base, stride);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Converts a pair of tiles from memory into VNNI format, and places the
|
|
103
|
+
/// results in a pair of destinations specified by dst. The pair of tiles
|
|
104
|
+
/// in memory is specified via a tsib; the second tile is after the first
|
|
105
|
+
/// one, separated by the same stride that separates each row.
|
|
106
|
+
/// The tile configuration for the destination tiles indicates the amount
|
|
107
|
+
/// of data to read from memory. The instruction will load a number of rows
|
|
108
|
+
/// that is equal to twice the number of rows in tmm1. The size of each row
|
|
109
|
+
/// is equal to the average width of the destination tiles. If the second
|
|
110
|
+
/// tile is configured with zero rows and columns, only the first tile will
|
|
111
|
+
/// be written.
|
|
112
|
+
///
|
|
113
|
+
/// \headerfile <immintrin.h>
|
|
114
|
+
///
|
|
115
|
+
/// This intrinsic corresponds to the <c> T2RPNTLVWZ0T1RS </c> instruction.
|
|
116
|
+
///
|
|
117
|
+
/// \param dst0
|
|
118
|
+
/// First tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
119
|
+
/// \param dst1
|
|
120
|
+
/// Second tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
121
|
+
/// \param base
|
|
122
|
+
/// A pointer to base address.
|
|
123
|
+
/// \param stride
|
|
124
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
125
|
+
__DEFAULT_FN_ATTRS
|
|
126
|
+
static void __tile_2rpntlvwz0rst1(__tile1024i *dst0, __tile1024i *dst1,
|
|
127
|
+
const void *base, __SIZE_TYPE__ stride) {
|
|
128
|
+
_tile_2rpntlvwz0rst1_internal(dst0->row, dst0->col, dst1->col, &dst0->tile,
|
|
129
|
+
&dst1->tile, base, stride);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// Converts a pair of tiles from memory into VNNI format, and places the
|
|
133
|
+
/// results in a pair of destinations specified by dst. The pair of tiles
|
|
134
|
+
/// in memory is specified via a tsib; the second tile is after the first
|
|
135
|
+
/// one, separated by the same stride that separates each row.
|
|
136
|
+
/// The tile configuration for the destination tiles indicates the amount
|
|
137
|
+
/// of data to read from memory. The instruction will load a number of rows
|
|
138
|
+
/// that is equal to twice the number of rows in tmm1. The size of each row
|
|
139
|
+
/// is equal to the average width of the destination tiles. If the second
|
|
140
|
+
/// tile is configured with zero rows and columns, only the first tile will
|
|
141
|
+
/// be written. The last row will be not be read from memory but instead
|
|
142
|
+
/// filled with zeros.
|
|
143
|
+
/// Provides a hint to the implementation that the data will likely become
|
|
144
|
+
/// read shared in the near future and the data caching can be optimized.
|
|
145
|
+
///
|
|
146
|
+
/// \headerfile <immintrin.h>
|
|
147
|
+
///
|
|
148
|
+
/// This intrinsic corresponds to the <c> T2RPNTLVWZ1 </c> instruction.
|
|
149
|
+
///
|
|
150
|
+
/// \param dst0
|
|
151
|
+
/// First tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
152
|
+
/// \param dst1
|
|
153
|
+
/// Second tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
154
|
+
/// \param base
|
|
155
|
+
/// A pointer to base address.
|
|
156
|
+
/// \param stride
|
|
157
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
158
|
+
__DEFAULT_FN_ATTRS
|
|
159
|
+
static void __tile_2rpntlvwz1rs(__tile1024i *dst0, __tile1024i *dst1,
|
|
160
|
+
const void *base, __SIZE_TYPE__ stride) {
|
|
161
|
+
_tile_2rpntlvwz1rs_internal(dst0->row, dst0->col, dst1->col, &dst0->tile,
|
|
162
|
+
&dst1->tile, base, stride);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// Converts a pair of tiles from memory into VNNI format, and places the
|
|
166
|
+
/// results in a pair of destinations specified by dst. The pair of tiles
|
|
167
|
+
/// in memory is specified via a tsib; the second tile is after the first
|
|
168
|
+
/// one, separated by the same stride that separates each row.
|
|
169
|
+
/// The tile configuration for the destination tiles indicates the amount
|
|
170
|
+
/// of data to read from memory. The instruction will load a number of rows
|
|
171
|
+
/// that is equal to twice the number of rows in tmm1. The size of each row
|
|
172
|
+
/// is equal to the average width of the destination tiles. If the second
|
|
173
|
+
/// tile is configured with zero rows and columns, only the first tile will
|
|
174
|
+
/// be written. The last row will be not be read from memory but instead
|
|
175
|
+
/// filled with zeros.
|
|
176
|
+
/// Provides a hint to the implementation that the data will likely become
|
|
177
|
+
/// read shared in the near future and the data caching can be optimized.
|
|
178
|
+
///
|
|
179
|
+
/// \headerfile <immintrin.h>
|
|
180
|
+
///
|
|
181
|
+
/// This intrinsic corresponds to the <c> T2RPNTLVWZ1T1RS </c> instruction.
|
|
182
|
+
///
|
|
183
|
+
/// \param dst0
|
|
184
|
+
/// First tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
185
|
+
/// \param dst1
|
|
186
|
+
/// Second tile of destination tile pair. Max size is 1024i*2 Bytes.
|
|
187
|
+
/// \param base
|
|
188
|
+
/// A pointer to base address.
|
|
189
|
+
/// \param stride
|
|
190
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
191
|
+
__DEFAULT_FN_ATTRS
|
|
192
|
+
static void __tile_2rpntlvwz1rst1(__tile1024i *dst0, __tile1024i *dst1,
|
|
193
|
+
const void *base, __SIZE_TYPE__ stride) {
|
|
194
|
+
_tile_2rpntlvwz1rst1_internal(dst0->row, dst0->col, dst1->col, &dst0->tile,
|
|
195
|
+
&dst1->tile, base, stride);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
#undef __DEFAULT_FN_ATTRS
|
|
199
|
+
#endif /* __x86_64__ */
|
|
200
|
+
#endif /* __AMX_MOVRS_TRANSPOSEINTRIN_H */
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/*===------------- amxtf32intrin.h - AMX_TF32 intrinsics -*- C++ -*---------===
|
|
2
|
+
*
|
|
3
|
+
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4
|
+
* See https://llvm.org/LICENSE.txt for license information.
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6
|
+
*
|
|
7
|
+
*===------------------------------------------------------------------------===
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef __IMMINTRIN_H
|
|
11
|
+
#error "Never use <amxtf32intrin.h> directly; include <immintrin.h> instead."
|
|
12
|
+
#endif // __IMMINTRIN_H
|
|
13
|
+
|
|
14
|
+
#ifndef __AMX_TF32INTRIN_H
|
|
15
|
+
#define __AMX_TF32INTRIN_H
|
|
16
|
+
#ifdef __x86_64__
|
|
17
|
+
|
|
18
|
+
#define __DEFAULT_FN_ATTRS_TF32 \
|
|
19
|
+
__attribute__((__always_inline__, __nodebug__, __target__("amx-tf32")))
|
|
20
|
+
|
|
21
|
+
/// Do Matrix Multiplication of \a a and \a b, and then do Matrix Plus
|
|
22
|
+
/// with \a srcdst.
|
|
23
|
+
/// All the calculation is base on float32 but with the lower 13-bit set to 0.
|
|
24
|
+
///
|
|
25
|
+
/// \headerfile <immintrin.h>
|
|
26
|
+
///
|
|
27
|
+
/// \code
|
|
28
|
+
/// void _tile_mmultf32ps(constexpr int srcdst, constexpr int a, \
|
|
29
|
+
/// constexpr int b);
|
|
30
|
+
/// \endcode
|
|
31
|
+
///
|
|
32
|
+
/// This intrinsic corresponds to the <c> TMMULTF32PS </c> instruction.
|
|
33
|
+
///
|
|
34
|
+
/// \param srcdst
|
|
35
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
36
|
+
/// \param a
|
|
37
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
38
|
+
/// \param b
|
|
39
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
40
|
+
///
|
|
41
|
+
/// \code{.operation}
|
|
42
|
+
/// DEFINE zero_lower_mantissa_bits_fp32(x[31:0]) {
|
|
43
|
+
/// dword[12:0] := 0
|
|
44
|
+
/// dword[31:13] := x[31:13]
|
|
45
|
+
/// return dword
|
|
46
|
+
/// }
|
|
47
|
+
///
|
|
48
|
+
/// DEFINE silence_snan_fp32(x[31:0]) {
|
|
49
|
+
/// IF (x.exponent == 255 and x.fraction != 0 and x.fraction[22] == 0)
|
|
50
|
+
/// x.fraction[22] := 1
|
|
51
|
+
/// return x
|
|
52
|
+
/// }
|
|
53
|
+
///
|
|
54
|
+
/// elements_a := a.colsb / 4
|
|
55
|
+
/// elements_dest := srcdst.colsb / 4
|
|
56
|
+
///
|
|
57
|
+
/// FOR m = 0 TO (srcdst.rows-1)
|
|
58
|
+
/// tmp[511:0] := 0
|
|
59
|
+
/// FOR k = 0 TO (elements_a-1)
|
|
60
|
+
/// FOR n = 0 TO (elements_dest-1)
|
|
61
|
+
/// af := silence_snan_fp32(a.row[m].fp32[k])
|
|
62
|
+
/// bf := silence_snan_fp32(b.row[k].fp32[n])
|
|
63
|
+
/// tmp.fp32[n] += zero_lower_mantissa_bits_fp32(af)
|
|
64
|
+
/// * zero_lower_mantissa_bits_fp32(bf)
|
|
65
|
+
/// ENDFOR
|
|
66
|
+
/// ENDFOR
|
|
67
|
+
///
|
|
68
|
+
/// FOR n = 0 TO (elements_dest-1)
|
|
69
|
+
/// tmp.fp32[n] += srcdst.row[m].fp32[n]
|
|
70
|
+
/// ENDFOR
|
|
71
|
+
/// write_row_and_zero(srcdst, m, tmp, srcdst.colsb)
|
|
72
|
+
///
|
|
73
|
+
/// ENDFOR
|
|
74
|
+
///
|
|
75
|
+
/// zero_upper_rows(srcdst, srcdst.rows)
|
|
76
|
+
/// zero_tileconfig_start()
|
|
77
|
+
/// \endcode
|
|
78
|
+
#define _tile_mmultf32ps(srcdst, a, b) \
|
|
79
|
+
__builtin_ia32_tmmultf32ps((srcdst), (a), (b))
|
|
80
|
+
|
|
81
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_TF32
|
|
82
|
+
_tile_mmultf32ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
83
|
+
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
84
|
+
return __builtin_ia32_tmmultf32ps_internal(m, n, k, dst, src1, src2);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// Do Matrix Multiplication of src0 and src1, and then do Matrix Plus with dst.
|
|
88
|
+
/// All the calculation is base on float32 but with the lower 13-bit set to 0.
|
|
89
|
+
///
|
|
90
|
+
/// \headerfile <immintrin.h>
|
|
91
|
+
///
|
|
92
|
+
/// This intrinsic corresponds to the <c> TMMULTF32PS </c> instruction.
|
|
93
|
+
///
|
|
94
|
+
/// \param dst
|
|
95
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
96
|
+
/// \param src0
|
|
97
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
98
|
+
/// \param src1
|
|
99
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
100
|
+
__DEFAULT_FN_ATTRS_TF32
|
|
101
|
+
static void __tile_mmultf32ps(__tile1024i *dst, __tile1024i src0,
|
|
102
|
+
__tile1024i src1) {
|
|
103
|
+
dst->tile = _tile_mmultf32ps_internal(src0.row, src1.col, src0.col, dst->tile,
|
|
104
|
+
src0.tile, src1.tile);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#endif // __x86_64__
|
|
108
|
+
#endif // __AMX_TF32INTRIN_H
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*===--------- amxtf32transposeintrin.h - AMX-TF32 and AMX-TRANSPOSE --------===
|
|
2
|
+
*
|
|
3
|
+
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4
|
+
* See https://llvm.org/LICENSE.txt for license information.
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6
|
+
*
|
|
7
|
+
*===------------------------------------------------------------------------===
|
|
8
|
+
*/
|
|
9
|
+
#ifndef __IMMINTRIN_H
|
|
10
|
+
#error \
|
|
11
|
+
"Never use <amxtf32tranposeintrin.h> directly; include <immintrin.h> instead."
|
|
12
|
+
#endif // __IMMINTRIN_H
|
|
13
|
+
|
|
14
|
+
#ifndef __AMX_TF32TRANSPOSEINTRIN_H
|
|
15
|
+
#define __AMX_TF32TRANSPOSEINTRIN_H
|
|
16
|
+
#ifdef __x86_64__
|
|
17
|
+
|
|
18
|
+
#define __DEFAULT_FN_ATTRS_TF32_TRANSPOSE \
|
|
19
|
+
__attribute__((__always_inline__, __nodebug__, \
|
|
20
|
+
__target__("amx-tf32,amx-transpose")))
|
|
21
|
+
|
|
22
|
+
/// \code
|
|
23
|
+
/// void _tile_tmmultf32ps(constexpr int srcdst, constexpr int a, \
|
|
24
|
+
/// constexpr int b);
|
|
25
|
+
/// \endcode
|
|
26
|
+
///
|
|
27
|
+
/// This intrinsic corresponds to the <c> TTMMULTF32PS </c> instruction.
|
|
28
|
+
///
|
|
29
|
+
/// \param srcdst
|
|
30
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
31
|
+
/// \param a
|
|
32
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
33
|
+
/// \param b
|
|
34
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
35
|
+
///
|
|
36
|
+
/// \code{.operation}
|
|
37
|
+
/// DEFINE zero_lower_mantissa_bits_fp32(x[31:0]) {
|
|
38
|
+
/// dword[12:0] := 0
|
|
39
|
+
/// dword[31:13] := x[31:13]
|
|
40
|
+
/// return dword
|
|
41
|
+
/// }
|
|
42
|
+
///
|
|
43
|
+
/// DEFINE silence_snan_fp32(x[31:0]) {
|
|
44
|
+
/// IF (x.exponent == 255 and x.fraction != 0 and x.fraction[22] == 0)
|
|
45
|
+
/// x.fraction[22] := 1
|
|
46
|
+
/// return x
|
|
47
|
+
/// }
|
|
48
|
+
///
|
|
49
|
+
/// elements_dest:= srcdst.colsb/4
|
|
50
|
+
///
|
|
51
|
+
/// FOR m := 0 TO (srcdst.rows-1)
|
|
52
|
+
/// tmp[511:0] := 0
|
|
53
|
+
/// FOR k := 0 TO (a.rows-1)
|
|
54
|
+
/// FOR n := 0 TO (elements_dest-1)
|
|
55
|
+
/// a1e := silence_snan_fp32(a.row[k].fp32[m])
|
|
56
|
+
/// a2e := silence_snan_fp32(b.row[k].fp32[n])
|
|
57
|
+
/// s1e := zero_lower_mantissa_bits_fp32(a1e)
|
|
58
|
+
/// s2e := zero_lower_mantissa_bits_fp32(a2e)
|
|
59
|
+
/// tmp.fp32[n] += s1e * s2e
|
|
60
|
+
/// ENDFOR
|
|
61
|
+
/// ENDFOR
|
|
62
|
+
///
|
|
63
|
+
/// FOR n := 0 TO (elements_dest-1)
|
|
64
|
+
/// tmp.fp32[n] += srcdst.row[m].fp32[n]
|
|
65
|
+
/// ENDFOR
|
|
66
|
+
/// write_row_and_zero(srcdst, m, tmp, srcdst.colsb)
|
|
67
|
+
///
|
|
68
|
+
/// ENDFOR
|
|
69
|
+
///
|
|
70
|
+
/// zero_upper_rows(srcdst, srcdst.rows)
|
|
71
|
+
/// zero_tileconfig_start()
|
|
72
|
+
/// \endcode
|
|
73
|
+
#define _tile_tmmultf32ps(srcdst, a, b) \
|
|
74
|
+
__builtin_ia32_ttmmultf32ps((srcdst), (a), (b))
|
|
75
|
+
|
|
76
|
+
// dst = m x n (srcdest), src1 = k x m, src2 = k x n
|
|
77
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_TF32_TRANSPOSE
|
|
78
|
+
_tile_tmmultf32ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
79
|
+
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
80
|
+
return __builtin_ia32_ttmmultf32ps_internal(m, n, k, dst, src1, src2);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// Compute transpose and do Matrix Multiplication of src0 and src1, and then do
|
|
84
|
+
/// Matrix Plus with dst. All the calculation is base on float32 but with the
|
|
85
|
+
/// lower 13-bit set to 0.
|
|
86
|
+
///
|
|
87
|
+
/// \headerfile <immintrin.h>
|
|
88
|
+
///
|
|
89
|
+
/// This intrinsic corresponds to the <c> TTMMULTF32PS </c> instruction.
|
|
90
|
+
///
|
|
91
|
+
/// \param dst
|
|
92
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
93
|
+
/// \param src0
|
|
94
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
95
|
+
/// \param src1
|
|
96
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
97
|
+
__DEFAULT_FN_ATTRS_TF32_TRANSPOSE
|
|
98
|
+
static void __tile_tmmultf32ps(__tile1024i *dst, __tile1024i src0,
|
|
99
|
+
__tile1024i src1) {
|
|
100
|
+
dst->tile = _tile_tmmultf32ps_internal(src0.row, src1.col, src0.col,
|
|
101
|
+
dst->tile, src0.tile, src1.tile);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
#endif // __x86_64__
|
|
105
|
+
#endif // __AMX_TF32TRANSPOSEINTRIN_H
|