@cpp-linter/clang-tidy-darwin-x64 16.0.3 → 18.1.5
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 +2 -2
- package/lib/clang/{16 → 18}/include/__clang_cuda_device_functions.h +2 -2
- package/lib/clang/{16 → 18}/include/__clang_cuda_intrinsics.h +191 -0
- package/lib/clang/{16 → 18}/include/__clang_cuda_libdevice_declares.h +2 -2
- package/lib/clang/{16 → 18}/include/__clang_cuda_math.h +3 -3
- package/lib/clang/{16 → 18}/include/__clang_cuda_runtime_wrapper.h +2 -2
- package/lib/clang/{16 → 18}/include/__clang_hip_cmath.h +1 -1
- package/lib/clang/{16 → 18}/include/__clang_hip_libdevice_declares.h +32 -30
- package/lib/clang/{16 → 18}/include/__clang_hip_math.h +244 -238
- package/lib/clang/{16 → 18}/include/__clang_hip_runtime_wrapper.h +44 -23
- package/lib/clang/18/include/__stdarg___gnuc_va_list.h +13 -0
- package/lib/clang/18/include/__stdarg___va_copy.h +12 -0
- package/lib/clang/18/include/__stdarg_va_arg.h +22 -0
- package/lib/clang/18/include/__stdarg_va_copy.h +12 -0
- package/lib/clang/18/include/__stdarg_va_list.h +13 -0
- package/lib/clang/{16 → 18}/include/__stddef_max_align_t.h +1 -1
- package/lib/clang/18/include/__stddef_null.h +29 -0
- package/lib/clang/18/include/__stddef_nullptr_t.h +29 -0
- package/lib/clang/18/include/__stddef_offsetof.h +17 -0
- package/lib/clang/18/include/__stddef_ptrdiff_t.h +20 -0
- package/lib/clang/18/include/__stddef_rsize_t.h +20 -0
- package/lib/clang/18/include/__stddef_size_t.h +20 -0
- package/lib/clang/18/include/__stddef_unreachable.h +21 -0
- package/lib/clang/18/include/__stddef_wchar_t.h +28 -0
- package/lib/clang/18/include/__stddef_wint_t.h +15 -0
- package/lib/clang/18/include/adcintrin.h +160 -0
- package/lib/clang/18/include/adxintrin.h +102 -0
- package/lib/clang/{16 → 18}/include/altivec.h +167 -136
- package/lib/clang/{16 → 18}/include/ammintrin.h +4 -4
- package/lib/clang/18/include/amxcomplexintrin.h +169 -0
- package/lib/clang/{16 → 18}/include/arm_acle.h +124 -40
- package/lib/clang/{16 → 18}/include/arm_neon.h +249 -328
- package/lib/clang/18/include/arm_sme.h +2412 -0
- package/lib/clang/{16 → 18}/include/arm_sve.h +7454 -364
- package/lib/clang/18/include/arm_vector_types.h +345 -0
- package/lib/clang/18/include/avx2intrin.h +5284 -0
- package/lib/clang/{16 → 18}/include/avx512bf16intrin.h +3 -2
- package/lib/clang/{16 → 18}/include/avx512bitalgintrin.h +4 -1
- package/lib/clang/{16 → 18}/include/avx512bwintrin.h +28 -38
- package/lib/clang/{16 → 18}/include/avx512cdintrin.h +3 -1
- package/lib/clang/{16 → 18}/include/avx512dqintrin.h +4 -2
- package/lib/clang/{16 → 18}/include/avx512fintrin.h +24 -10
- package/lib/clang/{16 → 18}/include/avx512fp16intrin.h +18 -12
- package/lib/clang/{16 → 18}/include/avx512ifmaintrin.h +3 -1
- package/lib/clang/{16 → 18}/include/avx512ifmavlintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512pfintrin.h +0 -5
- package/lib/clang/{16 → 18}/include/avx512vbmi2intrin.h +1 -1
- package/lib/clang/{16 → 18}/include/avx512vbmiintrin.h +3 -2
- package/lib/clang/{16 → 18}/include/avx512vbmivlintrin.h +8 -3
- package/lib/clang/{16 → 18}/include/avx512vlbf16intrin.h +8 -6
- package/lib/clang/{16 → 18}/include/avx512vlbitalgintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlbwintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlcdintrin.h +8 -3
- package/lib/clang/{16 → 18}/include/avx512vldqintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlfp16intrin.h +2 -2
- package/lib/clang/{16 → 18}/include/avx512vlintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlvbmi2intrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlvnniintrin.h +8 -2
- package/lib/clang/{16 → 18}/include/avx512vlvp2intersectintrin.h +6 -4
- package/lib/clang/{16 → 18}/include/avx512vnniintrin.h +3 -2
- package/lib/clang/{16 → 18}/include/avx512vp2intersectintrin.h +3 -2
- package/lib/clang/{16 → 18}/include/avx512vpopcntdqintrin.h +3 -1
- package/lib/clang/{16 → 18}/include/avx512vpopcntdqvlintrin.h +6 -2
- package/lib/clang/{16 → 18}/include/avxintrin.h +29 -12
- package/lib/clang/18/include/avxvnniint16intrin.h +473 -0
- package/lib/clang/18/include/bmi2intrin.h +255 -0
- package/lib/clang/{16 → 18}/include/bmiintrin.h +231 -46
- package/lib/clang/{16 → 18}/include/clflushoptintrin.h +9 -0
- package/lib/clang/{16 → 18}/include/clzerointrin.h +7 -5
- package/lib/clang/18/include/cuda_wrappers/bits/basic_string.h +9 -0
- package/lib/clang/18/include/cuda_wrappers/bits/basic_string.tcc +9 -0
- package/lib/clang/18/include/cuda_wrappers/bits/shared_ptr_base.h +9 -0
- package/lib/clang/{16 → 18}/include/emmintrin.h +10 -10
- package/lib/clang/18/include/fmaintrin.h +780 -0
- package/lib/clang/{16 → 18}/include/gfniintrin.h +23 -6
- package/lib/clang/18/include/hlsl/hlsl_intrinsics.h +624 -0
- package/lib/clang/18/include/ia32intrin.h +863 -0
- package/lib/clang/{16 → 18}/include/immintrin.h +182 -11
- package/lib/clang/{16 → 18}/include/intrin.h +16 -0
- package/lib/clang/{16 → 18}/include/larchintrin.h +13 -1
- package/lib/clang/18/include/lasxintrin.h +3884 -0
- package/lib/clang/{16 → 18}/include/limits.h +7 -5
- package/lib/clang/18/include/llvm_libc_wrappers/assert.h +34 -0
- package/lib/clang/18/include/llvm_libc_wrappers/ctype.h +102 -0
- package/lib/clang/18/include/llvm_libc_wrappers/inttypes.h +34 -0
- package/lib/clang/18/include/llvm_libc_wrappers/stdio.h +80 -0
- package/lib/clang/18/include/llvm_libc_wrappers/stdlib.h +45 -0
- package/lib/clang/18/include/llvm_libc_wrappers/string.h +96 -0
- package/lib/clang/18/include/llvm_libc_wrappers/time.h +34 -0
- package/lib/clang/18/include/lsxintrin.h +3750 -0
- package/lib/clang/{16 → 18}/include/mmintrin.h +7 -5
- package/lib/clang/{16 → 18}/include/module.modulemap +155 -2
- package/lib/clang/18/include/mwaitxintrin.h +62 -0
- package/lib/clang/{16 → 18}/include/opencl-c-base.h +8 -0
- package/lib/clang/{16 → 18}/include/openmp_wrappers/__clang_openmp_device_functions.h +0 -1
- package/lib/clang/{16 → 18}/include/openmp_wrappers/cmath +1 -1
- package/lib/clang/{16 → 18}/include/openmp_wrappers/new +1 -1
- package/lib/clang/{16 → 18}/include/pmmintrin.h +15 -8
- package/lib/clang/{16 → 18}/include/ppc_wrappers/emmintrin.h +2 -1
- package/lib/clang/18/include/ppc_wrappers/nmmintrin.h +26 -0
- package/lib/clang/{16 → 18}/include/ppc_wrappers/smmintrin.h +37 -17
- package/lib/clang/18/include/rdseedintrin.h +105 -0
- package/lib/clang/18/include/riscv_bitmanip.h +195 -0
- package/lib/clang/18/include/riscv_crypto.h +170 -0
- package/lib/clang/18/include/riscv_ntlh.h +26 -0
- package/lib/clang/18/include/riscv_vector.h +431 -0
- package/lib/clang/18/include/sha512intrin.h +200 -0
- package/lib/clang/18/include/shaintrin.h +189 -0
- package/lib/clang/18/include/sifive_vector.h +16 -0
- package/lib/clang/18/include/sm3intrin.h +238 -0
- package/lib/clang/18/include/sm4intrin.h +269 -0
- package/lib/clang/{16 → 18}/include/smmintrin.h +3 -3
- package/lib/clang/{16 → 18}/include/stdalign.h +3 -0
- package/lib/clang/18/include/stdarg.h +79 -0
- package/lib/clang/{16 → 18}/include/stdatomic.h +7 -2
- package/lib/clang/18/include/stdckdint.h +42 -0
- package/lib/clang/18/include/stddef.h +123 -0
- package/lib/clang/{16 → 18}/include/stdint.h +19 -48
- package/lib/clang/{16 → 18}/include/stdnoreturn.h +2 -2
- package/lib/clang/{16 → 18}/include/tmmintrin.h +7 -2
- package/lib/clang/18/include/usermsrintrin.h +51 -0
- package/lib/clang/{16 → 18}/include/vaesintrin.h +4 -2
- package/lib/clang/{16 → 18}/include/vecintrin.h +217 -199
- package/lib/clang/{16 → 18}/include/wasm_simd128.h +132 -12
- package/lib/clang/{16 → 18}/include/x86gprintrin.h +5 -0
- package/lib/clang/{16 → 18}/include/xmmintrin.h +9 -5
- package/lib/clang/18/include/xsavecintrin.h +84 -0
- package/package.json +6 -6
- package/lib/clang/16/include/adxintrin.h +0 -72
- package/lib/clang/16/include/avx2intrin.h +0 -1148
- package/lib/clang/16/include/bmi2intrin.h +0 -81
- package/lib/clang/16/include/fmaintrin.h +0 -216
- package/lib/clang/16/include/hlsl/hlsl_intrinsics.h +0 -223
- package/lib/clang/16/include/ia32intrin.h +0 -441
- package/lib/clang/16/include/mwaitxintrin.h +0 -33
- package/lib/clang/16/include/rdseedintrin.h +0 -42
- package/lib/clang/16/include/riscv_vector.h +0 -211
- package/lib/clang/16/include/shaintrin.h +0 -61
- package/lib/clang/16/include/stdarg.h +0 -51
- package/lib/clang/16/include/stddef.h +0 -128
- package/lib/clang/16/include/xsavecintrin.h +0 -34
- /package/lib/clang/{16 → 18}/include/__clang_cuda_builtin_vars.h +0 -0
- /package/lib/clang/{16 → 18}/include/__clang_cuda_cmath.h +0 -0
- /package/lib/clang/{16 → 18}/include/__clang_cuda_complex_builtins.h +0 -0
- /package/lib/clang/{16 → 18}/include/__clang_cuda_math_forward_declares.h +0 -0
- /package/lib/clang/{16 → 18}/include/__clang_cuda_texture_intrinsics.h +0 -0
- /package/lib/clang/{16 → 18}/include/__clang_hip_stdlib.h +0 -0
- /package/lib/clang/{16 → 18}/include/__wmmintrin_aes.h +0 -0
- /package/lib/clang/{16 → 18}/include/__wmmintrin_pclmul.h +0 -0
- /package/lib/clang/{16 → 18}/include/amxfp16intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/amxintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm64intr.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_bf16.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_cde.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_cmse.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_fp16.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_mve.h +0 -0
- /package/lib/clang/{16 → 18}/include/arm_neon_sve_bridge.h +0 -0
- /package/lib/clang/{16 → 18}/include/armintr.h +0 -0
- /package/lib/clang/{16 → 18}/include/avx512erintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/avxifmaintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/avxneconvertintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/avxvnniint8intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/avxvnniintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/builtins.h +0 -0
- /package/lib/clang/{16 → 18}/include/cet.h +0 -0
- /package/lib/clang/{16 → 18}/include/cetintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/cldemoteintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/clwbintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/cmpccxaddintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/cpuid.h +0 -0
- /package/lib/clang/{16 → 18}/include/crc32intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/cuda_wrappers/algorithm +0 -0
- /package/lib/clang/{16 → 18}/include/cuda_wrappers/cmath +0 -0
- /package/lib/clang/{16 → 18}/include/cuda_wrappers/complex +0 -0
- /package/lib/clang/{16 → 18}/include/cuda_wrappers/new +0 -0
- /package/lib/clang/{16 → 18}/include/enqcmdintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/f16cintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/float.h +0 -0
- /package/lib/clang/{16 → 18}/include/fma4intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/fxsrintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/hexagon_circ_brev_intrinsics.h +0 -0
- /package/lib/clang/{16 → 18}/include/hexagon_protos.h +0 -0
- /package/lib/clang/{16 → 18}/include/hexagon_types.h +0 -0
- /package/lib/clang/{16 → 18}/include/hlsl/hlsl_basic_types.h +0 -0
- /package/lib/clang/{16 → 18}/include/hlsl.h +0 -0
- /package/lib/clang/{16 → 18}/include/hresetintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/htmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/htmxlintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/hvx_hexagon_protos.h +0 -0
- /package/lib/clang/{16 → 18}/include/inttypes.h +0 -0
- /package/lib/clang/{16 → 18}/include/invpcidintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/iso646.h +0 -0
- /package/lib/clang/{16 → 18}/include/keylockerintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/lwpintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/lzcntintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/mm3dnow.h +0 -0
- /package/lib/clang/{16 → 18}/include/mm_malloc.h +0 -0
- /package/lib/clang/{16 → 18}/include/movdirintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/msa.h +0 -0
- /package/lib/clang/{16 → 18}/include/nmmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/opencl-c.h +0 -0
- /package/lib/clang/{16 → 18}/include/openmp_wrappers/complex +0 -0
- /package/lib/clang/{16 → 18}/include/openmp_wrappers/complex.h +0 -0
- /package/lib/clang/{16 → 18}/include/openmp_wrappers/complex_cmath.h +0 -0
- /package/lib/clang/{16 → 18}/include/openmp_wrappers/math.h +0 -0
- /package/lib/clang/{16 → 18}/include/pconfigintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/pkuintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/popcntintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/bmi2intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/bmiintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/immintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/mm_malloc.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/mmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/pmmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/tmmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/x86gprintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/x86intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ppc_wrappers/xmmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/prfchiintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/prfchwintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/ptwriteintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/raointintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/rdpruintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/rtmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/s390intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/serializeintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/sgxintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/stdbool.h +0 -0
- /package/lib/clang/{16 → 18}/include/tbmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/tgmath.h +0 -0
- /package/lib/clang/{16 → 18}/include/tsxldtrkintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/uintrintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/unwind.h +0 -0
- /package/lib/clang/{16 → 18}/include/vadefs.h +0 -0
- /package/lib/clang/{16 → 18}/include/varargs.h +0 -0
- /package/lib/clang/{16 → 18}/include/velintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/velintrin_approx.h +0 -0
- /package/lib/clang/{16 → 18}/include/velintrin_gen.h +0 -0
- /package/lib/clang/{16 → 18}/include/vpclmulqdqintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/waitpkgintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/wbnoinvdintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/wmmintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/x86intrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/xopintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/xsaveintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/xsaveoptintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/xsavesintrin.h +0 -0
- /package/lib/clang/{16 → 18}/include/xtestintrin.h +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/*===--------- amxcomplexintrin.h - AMXCOMPLEX 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 <amxcomplexintrin.h> directly; include <immintrin.h> instead."
|
|
12
|
+
#endif // __IMMINTRIN_H
|
|
13
|
+
|
|
14
|
+
#ifndef __AMX_COMPLEXINTRIN_H
|
|
15
|
+
#define __AMX_COMPLEXINTRIN_H
|
|
16
|
+
#ifdef __x86_64__
|
|
17
|
+
|
|
18
|
+
#define __DEFAULT_FN_ATTRS_COMPLEX \
|
|
19
|
+
__attribute__((__always_inline__, __nodebug__, __target__("amx-complex")))
|
|
20
|
+
|
|
21
|
+
/// Perform matrix multiplication of two tiles containing complex elements and
|
|
22
|
+
/// accumulate the results into a packed single precision tile. Each dword
|
|
23
|
+
/// element in input tiles \a a and \a b is interpreted as a complex number
|
|
24
|
+
/// with FP16 real part and FP16 imaginary part.
|
|
25
|
+
/// Calculates the imaginary part of the result. For each possible combination
|
|
26
|
+
/// of (row of \a a, column of \a b), it performs a set of multiplication
|
|
27
|
+
/// and accumulations on all corresponding complex numbers (one from \a a
|
|
28
|
+
/// and one from \a b). The imaginary part of the \a a element is multiplied
|
|
29
|
+
/// with the real part of the corresponding \a b element, and the real part
|
|
30
|
+
/// of the \a a element is multiplied with the imaginary part of the
|
|
31
|
+
/// corresponding \a b elements. The two accumulated results are added, and
|
|
32
|
+
/// then accumulated into the corresponding row and column of \a dst.
|
|
33
|
+
///
|
|
34
|
+
/// \headerfile <x86intrin.h>
|
|
35
|
+
///
|
|
36
|
+
/// \code
|
|
37
|
+
/// void _tile_cmmimfp16ps(__tile dst, __tile a, __tile b);
|
|
38
|
+
/// \endcode
|
|
39
|
+
///
|
|
40
|
+
/// \code{.operation}
|
|
41
|
+
/// FOR m := 0 TO dst.rows - 1
|
|
42
|
+
/// tmp := dst.row[m]
|
|
43
|
+
/// FOR k := 0 TO (a.colsb / 4) - 1
|
|
44
|
+
/// FOR n := 0 TO (dst.colsb / 4) - 1
|
|
45
|
+
/// tmp.fp32[n] += FP32(a.row[m].fp16[2*k+0]) * FP32(b.row[k].fp16[2*n+1])
|
|
46
|
+
/// tmp.fp32[n] += FP32(a.row[m].fp16[2*k+1]) * FP32(b.row[k].fp16[2*n+0])
|
|
47
|
+
/// ENDFOR
|
|
48
|
+
/// ENDFOR
|
|
49
|
+
/// write_row_and_zero(dst, m, tmp, dst.colsb)
|
|
50
|
+
/// ENDFOR
|
|
51
|
+
/// zero_upper_rows(dst, dst.rows)
|
|
52
|
+
/// zero_tileconfig_start()
|
|
53
|
+
/// \endcode
|
|
54
|
+
///
|
|
55
|
+
/// This intrinsic corresponds to the \c TCMMIMFP16PS instruction.
|
|
56
|
+
///
|
|
57
|
+
/// \param dst
|
|
58
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
59
|
+
/// \param a
|
|
60
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
61
|
+
/// \param b
|
|
62
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
63
|
+
#define _tile_cmmimfp16ps(dst, a, b) __builtin_ia32_tcmmimfp16ps(dst, a, b)
|
|
64
|
+
|
|
65
|
+
/// Perform matrix multiplication of two tiles containing complex elements and
|
|
66
|
+
/// accumulate the results into a packed single precision tile. Each dword
|
|
67
|
+
/// element in input tiles \a a and \a b is interpreted as a complex number
|
|
68
|
+
/// with FP16 real part and FP16 imaginary part.
|
|
69
|
+
/// Calculates the real part of the result. For each possible combination
|
|
70
|
+
/// of (row of \a a, column of \a b), it performs a set of multiplication
|
|
71
|
+
/// and accumulations on all corresponding complex numbers (one from \a a
|
|
72
|
+
/// and one from \a b). The real part of the \a a element is multiplied
|
|
73
|
+
/// with the real part of the corresponding \a b element, and the negated
|
|
74
|
+
/// imaginary part of the \a a element is multiplied with the imaginary
|
|
75
|
+
/// part of the corresponding \a b elements. The two accumulated results
|
|
76
|
+
/// are added, and then accumulated into the corresponding row and column
|
|
77
|
+
/// of \a dst.
|
|
78
|
+
///
|
|
79
|
+
/// \headerfile <x86intrin.h>
|
|
80
|
+
///
|
|
81
|
+
/// \code
|
|
82
|
+
/// void _tile_cmmrlfp16ps(__tile dst, __tile a, __tile b);
|
|
83
|
+
/// \endcode
|
|
84
|
+
///
|
|
85
|
+
/// \code{.operation}
|
|
86
|
+
/// FOR m := 0 TO dst.rows - 1
|
|
87
|
+
/// tmp := dst.row[m]
|
|
88
|
+
/// FOR k := 0 TO (a.colsb / 4) - 1
|
|
89
|
+
/// FOR n := 0 TO (dst.colsb / 4) - 1
|
|
90
|
+
/// tmp.fp32[n] += FP32(a.row[m].fp16[2*k+0]) * FP32(b.row[k].fp16[2*n+0])
|
|
91
|
+
/// tmp.fp32[n] += FP32(-a.row[m].fp16[2*k+1]) * FP32(b.row[k].fp16[2*n+1])
|
|
92
|
+
/// ENDFOR
|
|
93
|
+
/// ENDFOR
|
|
94
|
+
/// write_row_and_zero(dst, m, tmp, dst.colsb)
|
|
95
|
+
/// ENDFOR
|
|
96
|
+
/// zero_upper_rows(dst, dst.rows)
|
|
97
|
+
/// zero_tileconfig_start()
|
|
98
|
+
/// \endcode
|
|
99
|
+
///
|
|
100
|
+
/// This intrinsic corresponds to the \c TCMMIMFP16PS instruction.
|
|
101
|
+
///
|
|
102
|
+
/// \param dst
|
|
103
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
104
|
+
/// \param a
|
|
105
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
106
|
+
/// \param b
|
|
107
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
108
|
+
#define _tile_cmmrlfp16ps(dst, a, b) __builtin_ia32_tcmmrlfp16ps(dst, a, b)
|
|
109
|
+
|
|
110
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_COMPLEX
|
|
111
|
+
_tile_cmmimfp16ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
112
|
+
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
113
|
+
return __builtin_ia32_tcmmimfp16ps_internal(m, n, k, dst, src1, src2);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_COMPLEX
|
|
117
|
+
_tile_cmmrlfp16ps_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
118
|
+
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
119
|
+
return __builtin_ia32_tcmmrlfp16ps_internal(m, n, k, dst, src1, src2);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// Perform matrix multiplication of two tiles containing complex elements and
|
|
123
|
+
/// accumulate the results into a packed single precision tile. Each dword
|
|
124
|
+
/// element in input tiles src0 and src1 is interpreted as a complex number with
|
|
125
|
+
/// FP16 real part and FP16 imaginary part.
|
|
126
|
+
/// This function calculates the imaginary part of the result.
|
|
127
|
+
///
|
|
128
|
+
/// \headerfile <immintrin.h>
|
|
129
|
+
///
|
|
130
|
+
/// This intrinsic corresponds to the <c> TCMMIMFP16PS </c> instruction.
|
|
131
|
+
///
|
|
132
|
+
/// \param dst
|
|
133
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
134
|
+
/// \param src0
|
|
135
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
136
|
+
/// \param src1
|
|
137
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
138
|
+
__DEFAULT_FN_ATTRS_COMPLEX
|
|
139
|
+
static void __tile_cmmimfp16ps(__tile1024i *dst, __tile1024i src0,
|
|
140
|
+
__tile1024i src1) {
|
|
141
|
+
dst->tile = _tile_cmmimfp16ps_internal(src0.row, src1.col, src0.col,
|
|
142
|
+
dst->tile, src0.tile, src1.tile);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// Perform matrix multiplication of two tiles containing complex elements and
|
|
146
|
+
/// accumulate the results into a packed single precision tile. Each dword
|
|
147
|
+
/// element in input tiles src0 and src1 is interpreted as a complex number with
|
|
148
|
+
/// FP16 real part and FP16 imaginary part.
|
|
149
|
+
/// This function calculates the real part of the result.
|
|
150
|
+
///
|
|
151
|
+
/// \headerfile <immintrin.h>
|
|
152
|
+
///
|
|
153
|
+
/// This intrinsic corresponds to the <c> TCMMRLFP16PS </c> instruction.
|
|
154
|
+
///
|
|
155
|
+
/// \param dst
|
|
156
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
157
|
+
/// \param src0
|
|
158
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
159
|
+
/// \param src1
|
|
160
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
161
|
+
__DEFAULT_FN_ATTRS_COMPLEX
|
|
162
|
+
static void __tile_cmmrlfp16ps(__tile1024i *dst, __tile1024i src0,
|
|
163
|
+
__tile1024i src1) {
|
|
164
|
+
dst->tile = _tile_cmmrlfp16ps_internal(src0.row, src1.col, src0.col,
|
|
165
|
+
dst->tile, src0.tile, src1.tile);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
#endif // __x86_64__
|
|
169
|
+
#endif // __AMX_COMPLEXINTRIN_H
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
* See https://llvm.org/LICENSE.txt for license information.
|
|
5
5
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6
6
|
*
|
|
7
|
+
* The Arm C Language Extensions specifications can be found in the following
|
|
8
|
+
* link: https://github.com/ARM-software/acle/releases
|
|
9
|
+
*
|
|
10
|
+
* The ACLE section numbers are subject to change. When consulting the
|
|
11
|
+
* specifications, it is recommended to search using section titles if
|
|
12
|
+
* the section numbers look outdated.
|
|
13
|
+
*
|
|
7
14
|
*===-----------------------------------------------------------------------===
|
|
8
15
|
*/
|
|
9
16
|
|
|
@@ -20,8 +27,8 @@
|
|
|
20
27
|
extern "C" {
|
|
21
28
|
#endif
|
|
22
29
|
|
|
23
|
-
/*
|
|
24
|
-
/*
|
|
30
|
+
/* 7 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */
|
|
31
|
+
/* 7.3 Memory barriers */
|
|
25
32
|
#if !__has_builtin(__dmb)
|
|
26
33
|
#define __dmb(i) __builtin_arm_dmb(i)
|
|
27
34
|
#endif
|
|
@@ -32,7 +39,7 @@ extern "C" {
|
|
|
32
39
|
#define __isb(i) __builtin_arm_isb(i)
|
|
33
40
|
#endif
|
|
34
41
|
|
|
35
|
-
/*
|
|
42
|
+
/* 7.4 Hints */
|
|
36
43
|
|
|
37
44
|
#if !__has_builtin(__wfi)
|
|
38
45
|
static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfi(void) {
|
|
@@ -68,7 +75,7 @@ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __yield(v
|
|
|
68
75
|
#define __dbg(t) __builtin_arm_dbg(t)
|
|
69
76
|
#endif
|
|
70
77
|
|
|
71
|
-
/*
|
|
78
|
+
/* 7.5 Swap */
|
|
72
79
|
static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
|
|
73
80
|
__swp(uint32_t __x, volatile uint32_t *__p) {
|
|
74
81
|
uint32_t v;
|
|
@@ -78,8 +85,8 @@ __swp(uint32_t __x, volatile uint32_t *__p) {
|
|
|
78
85
|
return v;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
/*
|
|
82
|
-
/*
|
|
88
|
+
/* 7.6 Memory prefetch intrinsics */
|
|
89
|
+
/* 7.6.1 Data prefetch */
|
|
83
90
|
#define __pld(addr) __pldx(0, 0, 0, addr)
|
|
84
91
|
|
|
85
92
|
#if defined(__ARM_32BIT_STATE) && __ARM_32BIT_STATE
|
|
@@ -90,7 +97,7 @@ __swp(uint32_t __x, volatile uint32_t *__p) {
|
|
|
90
97
|
__builtin_arm_prefetch(addr, access_kind, cache_level, retention_policy, 1)
|
|
91
98
|
#endif
|
|
92
99
|
|
|
93
|
-
/*
|
|
100
|
+
/* 7.6.2 Instruction prefetch */
|
|
94
101
|
#define __pli(addr) __plix(0, 0, addr)
|
|
95
102
|
|
|
96
103
|
#if defined(__ARM_32BIT_STATE) && __ARM_32BIT_STATE
|
|
@@ -101,15 +108,15 @@ __swp(uint32_t __x, volatile uint32_t *__p) {
|
|
|
101
108
|
__builtin_arm_prefetch(addr, 0, cache_level, retention_policy, 0)
|
|
102
109
|
#endif
|
|
103
110
|
|
|
104
|
-
/*
|
|
111
|
+
/* 7.7 NOP */
|
|
105
112
|
#if !defined(_MSC_VER) || !defined(__aarch64__)
|
|
106
113
|
static __inline__ void __attribute__((__always_inline__, __nodebug__)) __nop(void) {
|
|
107
114
|
__builtin_arm_nop();
|
|
108
115
|
}
|
|
109
116
|
#endif
|
|
110
117
|
|
|
111
|
-
/*
|
|
112
|
-
/*
|
|
118
|
+
/* 8 DATA-PROCESSING INTRINSICS */
|
|
119
|
+
/* 8.2 Miscellaneous data-processing intrinsics */
|
|
113
120
|
/* ROR */
|
|
114
121
|
static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
|
|
115
122
|
__ror(uint32_t __x, uint32_t __y) {
|
|
@@ -138,28 +145,32 @@ __rorl(unsigned long __x, uint32_t __y) {
|
|
|
138
145
|
|
|
139
146
|
|
|
140
147
|
/* CLZ */
|
|
141
|
-
static __inline__
|
|
148
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
142
149
|
__clz(uint32_t __t) {
|
|
143
|
-
return (
|
|
150
|
+
return __builtin_arm_clz(__t);
|
|
144
151
|
}
|
|
145
152
|
|
|
146
|
-
static __inline__ unsigned
|
|
153
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
147
154
|
__clzl(unsigned long __t) {
|
|
148
|
-
|
|
155
|
+
#if __SIZEOF_LONG__ == 4
|
|
156
|
+
return __builtin_arm_clz(__t);
|
|
157
|
+
#else
|
|
158
|
+
return __builtin_arm_clz64(__t);
|
|
159
|
+
#endif
|
|
149
160
|
}
|
|
150
161
|
|
|
151
|
-
static __inline__
|
|
162
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
152
163
|
__clzll(uint64_t __t) {
|
|
153
|
-
return (
|
|
164
|
+
return __builtin_arm_clz64(__t);
|
|
154
165
|
}
|
|
155
166
|
|
|
156
167
|
/* CLS */
|
|
157
|
-
static __inline__
|
|
168
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
158
169
|
__cls(uint32_t __t) {
|
|
159
170
|
return __builtin_arm_cls(__t);
|
|
160
171
|
}
|
|
161
172
|
|
|
162
|
-
static __inline__
|
|
173
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
163
174
|
__clsl(unsigned long __t) {
|
|
164
175
|
#if __SIZEOF_LONG__ == 4
|
|
165
176
|
return __builtin_arm_cls(__t);
|
|
@@ -168,7 +179,7 @@ __clsl(unsigned long __t) {
|
|
|
168
179
|
#endif
|
|
169
180
|
}
|
|
170
181
|
|
|
171
|
-
static __inline__
|
|
182
|
+
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
|
|
172
183
|
__clsll(uint64_t __t) {
|
|
173
184
|
return __builtin_arm_cls64(__t);
|
|
174
185
|
}
|
|
@@ -244,9 +255,7 @@ __rbitl(unsigned long __t) {
|
|
|
244
255
|
#endif
|
|
245
256
|
}
|
|
246
257
|
|
|
247
|
-
/*
|
|
248
|
-
* 9.3 16-bit multiplications
|
|
249
|
-
*/
|
|
258
|
+
/* 8.3 16-bit multiplications */
|
|
250
259
|
#if defined(__ARM_FEATURE_DSP) && __ARM_FEATURE_DSP
|
|
251
260
|
static __inline__ int32_t __attribute__((__always_inline__,__nodebug__))
|
|
252
261
|
__smulbb(int32_t __a, int32_t __b) {
|
|
@@ -275,18 +284,18 @@ __smulwt(int32_t __a, int32_t __b) {
|
|
|
275
284
|
#endif
|
|
276
285
|
|
|
277
286
|
/*
|
|
278
|
-
*
|
|
287
|
+
* 8.4 Saturating intrinsics
|
|
279
288
|
*
|
|
280
289
|
* FIXME: Change guard to their corresponding __ARM_FEATURE flag when Q flag
|
|
281
290
|
* intrinsics are implemented and the flag is enabled.
|
|
282
291
|
*/
|
|
283
|
-
/*
|
|
292
|
+
/* 8.4.1 Width-specified saturation intrinsics */
|
|
284
293
|
#if defined(__ARM_FEATURE_SAT) && __ARM_FEATURE_SAT
|
|
285
294
|
#define __ssat(x, y) __builtin_arm_ssat(x, y)
|
|
286
295
|
#define __usat(x, y) __builtin_arm_usat(x, y)
|
|
287
296
|
#endif
|
|
288
297
|
|
|
289
|
-
/*
|
|
298
|
+
/* 8.4.2 Saturating addition and subtraction intrinsics */
|
|
290
299
|
#if defined(__ARM_FEATURE_DSP) && __ARM_FEATURE_DSP
|
|
291
300
|
static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
|
|
292
301
|
__qadd(int32_t __t, int32_t __v) {
|
|
@@ -304,7 +313,7 @@ __qdbl(int32_t __t) {
|
|
|
304
313
|
}
|
|
305
314
|
#endif
|
|
306
315
|
|
|
307
|
-
/*
|
|
316
|
+
/* 8.4.3 Accumultating multiplications */
|
|
308
317
|
#if defined(__ARM_FEATURE_DSP) && __ARM_FEATURE_DSP
|
|
309
318
|
static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
|
|
310
319
|
__smlabb(int32_t __a, int32_t __b, int32_t __c) {
|
|
@@ -333,13 +342,13 @@ __smlawt(int32_t __a, int32_t __b, int32_t __c) {
|
|
|
333
342
|
#endif
|
|
334
343
|
|
|
335
344
|
|
|
336
|
-
/*
|
|
345
|
+
/* 8.5.4 Parallel 16-bit saturation */
|
|
337
346
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
338
347
|
#define __ssat16(x, y) __builtin_arm_ssat16(x, y)
|
|
339
348
|
#define __usat16(x, y) __builtin_arm_usat16(x, y)
|
|
340
349
|
#endif
|
|
341
350
|
|
|
342
|
-
/*
|
|
351
|
+
/* 8.5.5 Packing and unpacking */
|
|
343
352
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
344
353
|
typedef int32_t int8x4_t;
|
|
345
354
|
typedef int32_t int16x2_t;
|
|
@@ -364,7 +373,7 @@ __uxtb16(int8x4_t __a) {
|
|
|
364
373
|
}
|
|
365
374
|
#endif
|
|
366
375
|
|
|
367
|
-
/*
|
|
376
|
+
/* 8.5.6 Parallel selection */
|
|
368
377
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
369
378
|
static __inline__ uint8x4_t __attribute__((__always_inline__, __nodebug__))
|
|
370
379
|
__sel(uint8x4_t __a, uint8x4_t __b) {
|
|
@@ -372,7 +381,7 @@ __sel(uint8x4_t __a, uint8x4_t __b) {
|
|
|
372
381
|
}
|
|
373
382
|
#endif
|
|
374
383
|
|
|
375
|
-
/*
|
|
384
|
+
/* 8.5.7 Parallel 8-bit addition and subtraction */
|
|
376
385
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
377
386
|
static __inline__ int8x4_t __attribute__((__always_inline__, __nodebug__))
|
|
378
387
|
__qadd8(int8x4_t __a, int8x4_t __b) {
|
|
@@ -424,7 +433,7 @@ __usub8(uint8x4_t __a, uint8x4_t __b) {
|
|
|
424
433
|
}
|
|
425
434
|
#endif
|
|
426
435
|
|
|
427
|
-
/*
|
|
436
|
+
/* 8.5.8 Sum of 8-bit absolute differences */
|
|
428
437
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
429
438
|
static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
|
|
430
439
|
__usad8(uint8x4_t __a, uint8x4_t __b) {
|
|
@@ -436,7 +445,7 @@ __usada8(uint8x4_t __a, uint8x4_t __b, uint32_t __c) {
|
|
|
436
445
|
}
|
|
437
446
|
#endif
|
|
438
447
|
|
|
439
|
-
/*
|
|
448
|
+
/* 8.5.9 Parallel 16-bit addition and subtraction */
|
|
440
449
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
441
450
|
static __inline__ int16x2_t __attribute__((__always_inline__, __nodebug__))
|
|
442
451
|
__qadd16(int16x2_t __a, int16x2_t __b) {
|
|
@@ -536,7 +545,7 @@ __usub16(uint16x2_t __a, uint16x2_t __b) {
|
|
|
536
545
|
}
|
|
537
546
|
#endif
|
|
538
547
|
|
|
539
|
-
/*
|
|
548
|
+
/* 8.5.10 Parallel 16-bit multiplications */
|
|
540
549
|
#if defined(__ARM_FEATURE_SIMD32) && __ARM_FEATURE_SIMD32
|
|
541
550
|
static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
|
|
542
551
|
__smlad(int16x2_t __a, int16x2_t __b, int32_t __c) {
|
|
@@ -588,7 +597,22 @@ __smusdx(int16x2_t __a, int16x2_t __b) {
|
|
|
588
597
|
}
|
|
589
598
|
#endif
|
|
590
599
|
|
|
591
|
-
/*
|
|
600
|
+
/* 8.6 Floating-point data-processing intrinsics */
|
|
601
|
+
#if (defined(__ARM_FEATURE_DIRECTED_ROUNDING) && \
|
|
602
|
+
(__ARM_FEATURE_DIRECTED_ROUNDING)) && \
|
|
603
|
+
(defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE)
|
|
604
|
+
static __inline__ double __attribute__((__always_inline__, __nodebug__))
|
|
605
|
+
__rintn(double __a) {
|
|
606
|
+
return __builtin_roundeven(__a);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
static __inline__ float __attribute__((__always_inline__, __nodebug__))
|
|
610
|
+
__rintnf(float __a) {
|
|
611
|
+
return __builtin_roundevenf(__a);
|
|
612
|
+
}
|
|
613
|
+
#endif
|
|
614
|
+
|
|
615
|
+
/* 8.8 CRC32 intrinsics */
|
|
592
616
|
#if (defined(__ARM_FEATURE_CRC32) && __ARM_FEATURE_CRC32) || \
|
|
593
617
|
(defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE)
|
|
594
618
|
static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__, target("crc")))
|
|
@@ -632,6 +656,7 @@ __crc32cd(uint32_t __a, uint64_t __b) {
|
|
|
632
656
|
}
|
|
633
657
|
#endif
|
|
634
658
|
|
|
659
|
+
/* 8.6 Floating-point data-processing intrinsics */
|
|
635
660
|
/* Armv8.3-A Javascript conversion intrinsic */
|
|
636
661
|
#if defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE
|
|
637
662
|
static __inline__ int32_t __attribute__((__always_inline__, __nodebug__, target("v8.3a")))
|
|
@@ -683,7 +708,7 @@ __rint64x(double __a) {
|
|
|
683
708
|
}
|
|
684
709
|
#endif
|
|
685
710
|
|
|
686
|
-
/* Armv8.7-A load/store 64-byte intrinsics */
|
|
711
|
+
/* 8.9 Armv8.7-A load/store 64-byte intrinsics */
|
|
687
712
|
#if defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE
|
|
688
713
|
typedef struct {
|
|
689
714
|
uint64_t val[8];
|
|
@@ -709,7 +734,7 @@ __arm_st64bv0(void *__addr, data512_t __value) {
|
|
|
709
734
|
}
|
|
710
735
|
#endif
|
|
711
736
|
|
|
712
|
-
/*
|
|
737
|
+
/* 11.1 Special register intrinsics */
|
|
713
738
|
#define __arm_rsr(sysreg) __builtin_arm_rsr(sysreg)
|
|
714
739
|
#define __arm_rsr64(sysreg) __builtin_arm_rsr64(sysreg)
|
|
715
740
|
#define __arm_rsr128(sysreg) __builtin_arm_rsr128(sysreg)
|
|
@@ -723,7 +748,7 @@ __arm_st64bv0(void *__addr, data512_t __value) {
|
|
|
723
748
|
#define __arm_wsrf(sysreg, v) __arm_wsr(sysreg, __builtin_bit_cast(uint32_t, v))
|
|
724
749
|
#define __arm_wsrf64(sysreg, v) __arm_wsr64(sysreg, __builtin_bit_cast(uint64_t, v))
|
|
725
750
|
|
|
726
|
-
/* Memory Tagging Extensions (MTE) Intrinsics */
|
|
751
|
+
/* 10.3 Memory Tagging Extensions (MTE) Intrinsics */
|
|
727
752
|
#if defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE
|
|
728
753
|
#define __arm_mte_create_random_tag(__ptr, __mask) __builtin_arm_irg(__ptr, __mask)
|
|
729
754
|
#define __arm_mte_increment_tag(__ptr, __tag_offset) __builtin_arm_addg(__ptr, __tag_offset)
|
|
@@ -732,12 +757,71 @@ __arm_st64bv0(void *__addr, data512_t __value) {
|
|
|
732
757
|
#define __arm_mte_set_tag(__ptr) __builtin_arm_stg(__ptr)
|
|
733
758
|
#define __arm_mte_ptrdiff(__ptra, __ptrb) __builtin_arm_subp(__ptra, __ptrb)
|
|
734
759
|
|
|
735
|
-
/* Memory Operations Intrinsics */
|
|
760
|
+
/* 18 Memory Operations Intrinsics */
|
|
736
761
|
#define __arm_mops_memset_tag(__tagged_address, __value, __size) \
|
|
737
762
|
__builtin_arm_mops_memset_tag(__tagged_address, __value, __size)
|
|
738
763
|
#endif
|
|
739
764
|
|
|
740
|
-
/*
|
|
765
|
+
/* 11.3 Coprocessor Intrinsics */
|
|
766
|
+
#if defined(__ARM_FEATURE_COPROC)
|
|
767
|
+
|
|
768
|
+
#if (__ARM_FEATURE_COPROC & 0x1)
|
|
769
|
+
|
|
770
|
+
#if (__ARM_ARCH < 8)
|
|
771
|
+
#define __arm_cdp(coproc, opc1, CRd, CRn, CRm, opc2) \
|
|
772
|
+
__builtin_arm_cdp(coproc, opc1, CRd, CRn, CRm, opc2)
|
|
773
|
+
#endif /* __ARM_ARCH < 8 */
|
|
774
|
+
|
|
775
|
+
#define __arm_ldc(coproc, CRd, p) __builtin_arm_ldc(coproc, CRd, p)
|
|
776
|
+
#define __arm_stc(coproc, CRd, p) __builtin_arm_stc(coproc, CRd, p)
|
|
777
|
+
|
|
778
|
+
#define __arm_mcr(coproc, opc1, value, CRn, CRm, opc2) \
|
|
779
|
+
__builtin_arm_mcr(coproc, opc1, value, CRn, CRm, opc2)
|
|
780
|
+
#define __arm_mrc(coproc, opc1, CRn, CRm, opc2) \
|
|
781
|
+
__builtin_arm_mrc(coproc, opc1, CRn, CRm, opc2)
|
|
782
|
+
|
|
783
|
+
#if (__ARM_ARCH != 4) && (__ARM_ARCH < 8)
|
|
784
|
+
#define __arm_ldcl(coproc, CRd, p) __builtin_arm_ldcl(coproc, CRd, p)
|
|
785
|
+
#define __arm_stcl(coproc, CRd, p) __builtin_arm_stcl(coproc, CRd, p)
|
|
786
|
+
#endif /* (__ARM_ARCH != 4) && (__ARM_ARCH != 8) */
|
|
787
|
+
|
|
788
|
+
#if (__ARM_ARCH_8M_MAIN__) || (__ARM_ARCH_8_1M_MAIN__)
|
|
789
|
+
#define __arm_cdp(coproc, opc1, CRd, CRn, CRm, opc2) \
|
|
790
|
+
__builtin_arm_cdp(coproc, opc1, CRd, CRn, CRm, opc2)
|
|
791
|
+
#define __arm_ldcl(coproc, CRd, p) __builtin_arm_ldcl(coproc, CRd, p)
|
|
792
|
+
#define __arm_stcl(coproc, CRd, p) __builtin_arm_stcl(coproc, CRd, p)
|
|
793
|
+
#endif /* ___ARM_ARCH_8M_MAIN__ */
|
|
794
|
+
|
|
795
|
+
#endif /* __ARM_FEATURE_COPROC & 0x1 */
|
|
796
|
+
|
|
797
|
+
#if (__ARM_FEATURE_COPROC & 0x2)
|
|
798
|
+
#define __arm_cdp2(coproc, opc1, CRd, CRn, CRm, opc2) \
|
|
799
|
+
__builtin_arm_cdp2(coproc, opc1, CRd, CRn, CRm, opc2)
|
|
800
|
+
#define __arm_ldc2(coproc, CRd, p) __builtin_arm_ldc2(coproc, CRd, p)
|
|
801
|
+
#define __arm_stc2(coproc, CRd, p) __builtin_arm_stc2(coproc, CRd, p)
|
|
802
|
+
#define __arm_ldc2l(coproc, CRd, p) __builtin_arm_ldc2l(coproc, CRd, p)
|
|
803
|
+
#define __arm_stc2l(coproc, CRd, p) __builtin_arm_stc2l(coproc, CRd, p)
|
|
804
|
+
#define __arm_mcr2(coproc, opc1, value, CRn, CRm, opc2) \
|
|
805
|
+
__builtin_arm_mcr2(coproc, opc1, value, CRn, CRm, opc2)
|
|
806
|
+
#define __arm_mrc2(coproc, opc1, CRn, CRm, opc2) \
|
|
807
|
+
__builtin_arm_mrc2(coproc, opc1, CRn, CRm, opc2)
|
|
808
|
+
#endif
|
|
809
|
+
|
|
810
|
+
#if (__ARM_FEATURE_COPROC & 0x4)
|
|
811
|
+
#define __arm_mcrr(coproc, opc1, value, CRm) \
|
|
812
|
+
__builtin_arm_mcrr(coproc, opc1, value, CRm)
|
|
813
|
+
#define __arm_mrrc(coproc, opc1, CRm) __builtin_arm_mrrc(coproc, opc1, CRm)
|
|
814
|
+
#endif
|
|
815
|
+
|
|
816
|
+
#if (__ARM_FEATURE_COPROC & 0x8)
|
|
817
|
+
#define __arm_mcrr2(coproc, opc1, value, CRm) \
|
|
818
|
+
__builtin_arm_mcrr2(coproc, opc1, value, CRm)
|
|
819
|
+
#define __arm_mrrc2(coproc, opc1, CRm) __builtin_arm_mrrc2(coproc, opc1, CRm)
|
|
820
|
+
#endif
|
|
821
|
+
|
|
822
|
+
#endif // __ARM_FEATURE_COPROC
|
|
823
|
+
|
|
824
|
+
/* 17 Transactional Memory Extension (TME) Intrinsics */
|
|
741
825
|
#if defined(__ARM_FEATURE_TME) && __ARM_FEATURE_TME
|
|
742
826
|
|
|
743
827
|
#define _TMFAILURE_REASON 0x00007fffu
|
|
@@ -759,7 +843,7 @@ __arm_st64bv0(void *__addr, data512_t __value) {
|
|
|
759
843
|
|
|
760
844
|
#endif /* __ARM_FEATURE_TME */
|
|
761
845
|
|
|
762
|
-
/* Armv8.5-A Random number generation intrinsics */
|
|
846
|
+
/* 8.7 Armv8.5-A Random number generation intrinsics */
|
|
763
847
|
#if defined(__ARM_64BIT_STATE) && __ARM_64BIT_STATE
|
|
764
848
|
static __inline__ int __attribute__((__always_inline__, __nodebug__, target("rand")))
|
|
765
849
|
__rndr(uint64_t *__p) {
|