@cpp-linter/clang-tidy-linux-arm64 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,269 @@
|
|
|
1
|
+
/*===--------------- sm4intrin.h - SM4 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 "Never use <sm4intrin.h> directly; include <immintrin.h> instead."
|
|
12
|
+
#endif // __IMMINTRIN_H
|
|
13
|
+
|
|
14
|
+
#ifndef __SM4INTRIN_H
|
|
15
|
+
#define __SM4INTRIN_H
|
|
16
|
+
|
|
17
|
+
/// This intrinsic performs four rounds of SM4 key expansion. The intrinsic
|
|
18
|
+
/// operates on independent 128-bit lanes. The calculated results are
|
|
19
|
+
/// stored in \a dst.
|
|
20
|
+
/// \headerfile <immintrin.h>
|
|
21
|
+
///
|
|
22
|
+
/// \code
|
|
23
|
+
/// __m128i _mm_sm4key4_epi32(__m128i __A, __m128i __B)
|
|
24
|
+
/// \endcode
|
|
25
|
+
///
|
|
26
|
+
/// This intrinsic corresponds to the \c VSM4KEY4 instruction.
|
|
27
|
+
///
|
|
28
|
+
/// \param __A
|
|
29
|
+
/// A 128-bit vector of [4 x int].
|
|
30
|
+
/// \param __B
|
|
31
|
+
/// A 128-bit vector of [4 x int].
|
|
32
|
+
/// \returns
|
|
33
|
+
/// A 128-bit vector of [4 x int].
|
|
34
|
+
///
|
|
35
|
+
/// \code{.operation}
|
|
36
|
+
/// DEFINE ROL32(dword, n) {
|
|
37
|
+
/// count := n % 32
|
|
38
|
+
/// dest := (dword << count) | (dword >> (32-count))
|
|
39
|
+
/// RETURN dest
|
|
40
|
+
/// }
|
|
41
|
+
/// DEFINE SBOX_BYTE(dword, i) {
|
|
42
|
+
/// RETURN sbox[dword.byte[i]]
|
|
43
|
+
/// }
|
|
44
|
+
/// DEFINE lower_t(dword) {
|
|
45
|
+
/// tmp.byte[0] := SBOX_BYTE(dword, 0)
|
|
46
|
+
/// tmp.byte[1] := SBOX_BYTE(dword, 1)
|
|
47
|
+
/// tmp.byte[2] := SBOX_BYTE(dword, 2)
|
|
48
|
+
/// tmp.byte[3] := SBOX_BYTE(dword, 3)
|
|
49
|
+
/// RETURN tmp
|
|
50
|
+
/// }
|
|
51
|
+
/// DEFINE L_KEY(dword) {
|
|
52
|
+
/// RETURN dword ^ ROL32(dword, 13) ^ ROL32(dword, 23)
|
|
53
|
+
/// }
|
|
54
|
+
/// DEFINE T_KEY(dword) {
|
|
55
|
+
/// RETURN L_KEY(lower_t(dword))
|
|
56
|
+
/// }
|
|
57
|
+
/// DEFINE F_KEY(X0, X1, X2, X3, round_key) {
|
|
58
|
+
/// RETURN X0 ^ T_KEY(X1 ^ X2 ^ X3 ^ round_key)
|
|
59
|
+
/// }
|
|
60
|
+
/// FOR i:= 0 to 0
|
|
61
|
+
/// P[0] := __B.xmm[i].dword[0]
|
|
62
|
+
/// P[1] := __B.xmm[i].dword[1]
|
|
63
|
+
/// P[2] := __B.xmm[i].dword[2]
|
|
64
|
+
/// P[3] := __B.xmm[i].dword[3]
|
|
65
|
+
/// C[0] := F_KEY(P[0], P[1], P[2], P[3], __A.xmm[i].dword[0])
|
|
66
|
+
/// C[1] := F_KEY(P[1], P[2], P[3], C[0], __A.xmm[i].dword[1])
|
|
67
|
+
/// C[2] := F_KEY(P[2], P[3], C[0], C[1], __A.xmm[i].dword[2])
|
|
68
|
+
/// C[3] := F_KEY(P[3], C[0], C[1], C[2], __A.xmm[i].dword[3])
|
|
69
|
+
/// DEST.xmm[i].dword[0] := C[0]
|
|
70
|
+
/// DEST.xmm[i].dword[1] := C[1]
|
|
71
|
+
/// DEST.xmm[i].dword[2] := C[2]
|
|
72
|
+
/// DEST.xmm[i].dword[3] := C[3]
|
|
73
|
+
/// ENDFOR
|
|
74
|
+
/// DEST[MAX:128] := 0
|
|
75
|
+
/// \endcode
|
|
76
|
+
#define _mm_sm4key4_epi32(A, B) \
|
|
77
|
+
(__m128i) __builtin_ia32_vsm4key4128((__v4su)A, (__v4su)B)
|
|
78
|
+
|
|
79
|
+
/// This intrinsic performs four rounds of SM4 key expansion. The intrinsic
|
|
80
|
+
/// operates on independent 128-bit lanes. The calculated results are
|
|
81
|
+
/// stored in \a dst.
|
|
82
|
+
/// \headerfile <immintrin.h>
|
|
83
|
+
///
|
|
84
|
+
/// \code
|
|
85
|
+
/// __m256i _mm256_sm4key4_epi32(__m256i __A, __m256i __B)
|
|
86
|
+
/// \endcode
|
|
87
|
+
///
|
|
88
|
+
/// This intrinsic corresponds to the \c VSM4KEY4 instruction.
|
|
89
|
+
///
|
|
90
|
+
/// \param __A
|
|
91
|
+
/// A 256-bit vector of [8 x int].
|
|
92
|
+
/// \param __B
|
|
93
|
+
/// A 256-bit vector of [8 x int].
|
|
94
|
+
/// \returns
|
|
95
|
+
/// A 256-bit vector of [8 x int].
|
|
96
|
+
///
|
|
97
|
+
/// \code{.operation}
|
|
98
|
+
/// DEFINE ROL32(dword, n) {
|
|
99
|
+
/// count := n % 32
|
|
100
|
+
/// dest := (dword << count) | (dword >> (32-count))
|
|
101
|
+
/// RETURN dest
|
|
102
|
+
/// }
|
|
103
|
+
/// DEFINE SBOX_BYTE(dword, i) {
|
|
104
|
+
/// RETURN sbox[dword.byte[i]]
|
|
105
|
+
/// }
|
|
106
|
+
/// DEFINE lower_t(dword) {
|
|
107
|
+
/// tmp.byte[0] := SBOX_BYTE(dword, 0)
|
|
108
|
+
/// tmp.byte[1] := SBOX_BYTE(dword, 1)
|
|
109
|
+
/// tmp.byte[2] := SBOX_BYTE(dword, 2)
|
|
110
|
+
/// tmp.byte[3] := SBOX_BYTE(dword, 3)
|
|
111
|
+
/// RETURN tmp
|
|
112
|
+
/// }
|
|
113
|
+
/// DEFINE L_KEY(dword) {
|
|
114
|
+
/// RETURN dword ^ ROL32(dword, 13) ^ ROL32(dword, 23)
|
|
115
|
+
/// }
|
|
116
|
+
/// DEFINE T_KEY(dword) {
|
|
117
|
+
/// RETURN L_KEY(lower_t(dword))
|
|
118
|
+
/// }
|
|
119
|
+
/// DEFINE F_KEY(X0, X1, X2, X3, round_key) {
|
|
120
|
+
/// RETURN X0 ^ T_KEY(X1 ^ X2 ^ X3 ^ round_key)
|
|
121
|
+
/// }
|
|
122
|
+
/// FOR i:= 0 to 1
|
|
123
|
+
/// P[0] := __B.xmm[i].dword[0]
|
|
124
|
+
/// P[1] := __B.xmm[i].dword[1]
|
|
125
|
+
/// P[2] := __B.xmm[i].dword[2]
|
|
126
|
+
/// P[3] := __B.xmm[i].dword[3]
|
|
127
|
+
/// C[0] := F_KEY(P[0], P[1], P[2], P[3], __A.xmm[i].dword[0])
|
|
128
|
+
/// C[1] := F_KEY(P[1], P[2], P[3], C[0], __A.xmm[i].dword[1])
|
|
129
|
+
/// C[2] := F_KEY(P[2], P[3], C[0], C[1], __A.xmm[i].dword[2])
|
|
130
|
+
/// C[3] := F_KEY(P[3], C[0], C[1], C[2], __A.xmm[i].dword[3])
|
|
131
|
+
/// DEST.xmm[i].dword[0] := C[0]
|
|
132
|
+
/// DEST.xmm[i].dword[1] := C[1]
|
|
133
|
+
/// DEST.xmm[i].dword[2] := C[2]
|
|
134
|
+
/// DEST.xmm[i].dword[3] := C[3]
|
|
135
|
+
/// ENDFOR
|
|
136
|
+
/// DEST[MAX:256] := 0
|
|
137
|
+
/// \endcode
|
|
138
|
+
#define _mm256_sm4key4_epi32(A, B) \
|
|
139
|
+
(__m256i) __builtin_ia32_vsm4key4256((__v8su)A, (__v8su)B)
|
|
140
|
+
|
|
141
|
+
/// This intrinisc performs four rounds of SM4 encryption. The intrinisc
|
|
142
|
+
/// operates on independent 128-bit lanes. The calculated results are
|
|
143
|
+
/// stored in \a dst.
|
|
144
|
+
/// \headerfile <immintrin.h>
|
|
145
|
+
///
|
|
146
|
+
/// \code
|
|
147
|
+
/// __m128i _mm_sm4rnds4_epi32(__m128i __A, __m128i __B)
|
|
148
|
+
/// \endcode
|
|
149
|
+
///
|
|
150
|
+
/// This intrinsic corresponds to the \c VSM4RNDS4 instruction.
|
|
151
|
+
///
|
|
152
|
+
/// \param __A
|
|
153
|
+
/// A 128-bit vector of [4 x int].
|
|
154
|
+
/// \param __B
|
|
155
|
+
/// A 128-bit vector of [4 x int].
|
|
156
|
+
/// \returns
|
|
157
|
+
/// A 128-bit vector of [4 x int].
|
|
158
|
+
///
|
|
159
|
+
/// \code{.operation}
|
|
160
|
+
/// DEFINE ROL32(dword, n) {
|
|
161
|
+
/// count := n % 32
|
|
162
|
+
/// dest := (dword << count) | (dword >> (32-count))
|
|
163
|
+
/// RETURN dest
|
|
164
|
+
/// }
|
|
165
|
+
/// DEFINE lower_t(dword) {
|
|
166
|
+
/// tmp.byte[0] := SBOX_BYTE(dword, 0)
|
|
167
|
+
/// tmp.byte[1] := SBOX_BYTE(dword, 1)
|
|
168
|
+
/// tmp.byte[2] := SBOX_BYTE(dword, 2)
|
|
169
|
+
/// tmp.byte[3] := SBOX_BYTE(dword, 3)
|
|
170
|
+
/// RETURN tmp
|
|
171
|
+
/// }
|
|
172
|
+
/// DEFINE L_RND(dword) {
|
|
173
|
+
/// tmp := dword
|
|
174
|
+
/// tmp := tmp ^ ROL32(dword, 2)
|
|
175
|
+
/// tmp := tmp ^ ROL32(dword, 10)
|
|
176
|
+
/// tmp := tmp ^ ROL32(dword, 18)
|
|
177
|
+
/// tmp := tmp ^ ROL32(dword, 24)
|
|
178
|
+
/// RETURN tmp
|
|
179
|
+
/// }
|
|
180
|
+
/// DEFINE T_RND(dword) {
|
|
181
|
+
/// RETURN L_RND(lower_t(dword))
|
|
182
|
+
/// }
|
|
183
|
+
/// DEFINE F_RND(X0, X1, X2, X3, round_key) {
|
|
184
|
+
/// RETURN X0 ^ T_RND(X1 ^ X2 ^ X3 ^ round_key)
|
|
185
|
+
/// }
|
|
186
|
+
/// FOR i:= 0 to 0
|
|
187
|
+
/// P[0] := __B.xmm[i].dword[0]
|
|
188
|
+
/// P[1] := __B.xmm[i].dword[1]
|
|
189
|
+
/// P[2] := __B.xmm[i].dword[2]
|
|
190
|
+
/// P[3] := __B.xmm[i].dword[3]
|
|
191
|
+
/// C[0] := F_RND(P[0], P[1], P[2], P[3], __A.xmm[i].dword[0])
|
|
192
|
+
/// C[1] := F_RND(P[1], P[2], P[3], C[0], __A.xmm[i].dword[1])
|
|
193
|
+
/// C[2] := F_RND(P[2], P[3], C[0], C[1], __A.xmm[i].dword[2])
|
|
194
|
+
/// C[3] := F_RND(P[3], C[0], C[1], C[2], __A.xmm[i].dword[3])
|
|
195
|
+
/// DEST.xmm[i].dword[0] := C[0]
|
|
196
|
+
/// DEST.xmm[i].dword[1] := C[1]
|
|
197
|
+
/// DEST.xmm[i].dword[2] := C[2]
|
|
198
|
+
/// DEST.xmm[i].dword[3] := C[3]
|
|
199
|
+
/// ENDFOR
|
|
200
|
+
/// DEST[MAX:128] := 0
|
|
201
|
+
/// \endcode
|
|
202
|
+
#define _mm_sm4rnds4_epi32(A, B) \
|
|
203
|
+
(__m128i) __builtin_ia32_vsm4rnds4128((__v4su)A, (__v4su)B)
|
|
204
|
+
|
|
205
|
+
/// This intrinisc performs four rounds of SM4 encryption. The intrinisc
|
|
206
|
+
/// operates on independent 128-bit lanes. The calculated results are
|
|
207
|
+
/// stored in \a dst.
|
|
208
|
+
/// \headerfile <immintrin.h>
|
|
209
|
+
///
|
|
210
|
+
/// \code
|
|
211
|
+
/// __m256i _mm256_sm4rnds4_epi32(__m256i __A, __m256i __B)
|
|
212
|
+
/// \endcode
|
|
213
|
+
///
|
|
214
|
+
/// This intrinsic corresponds to the \c VSM4RNDS4 instruction.
|
|
215
|
+
///
|
|
216
|
+
/// \param __A
|
|
217
|
+
/// A 256-bit vector of [8 x int].
|
|
218
|
+
/// \param __B
|
|
219
|
+
/// A 256-bit vector of [8 x int].
|
|
220
|
+
/// \returns
|
|
221
|
+
/// A 256-bit vector of [8 x int].
|
|
222
|
+
///
|
|
223
|
+
/// \code{.operation}
|
|
224
|
+
/// DEFINE ROL32(dword, n) {
|
|
225
|
+
/// count := n % 32
|
|
226
|
+
/// dest := (dword << count) | (dword >> (32-count))
|
|
227
|
+
/// RETURN dest
|
|
228
|
+
/// }
|
|
229
|
+
/// DEFINE lower_t(dword) {
|
|
230
|
+
/// tmp.byte[0] := SBOX_BYTE(dword, 0)
|
|
231
|
+
/// tmp.byte[1] := SBOX_BYTE(dword, 1)
|
|
232
|
+
/// tmp.byte[2] := SBOX_BYTE(dword, 2)
|
|
233
|
+
/// tmp.byte[3] := SBOX_BYTE(dword, 3)
|
|
234
|
+
/// RETURN tmp
|
|
235
|
+
/// }
|
|
236
|
+
/// DEFINE L_RND(dword) {
|
|
237
|
+
/// tmp := dword
|
|
238
|
+
/// tmp := tmp ^ ROL32(dword, 2)
|
|
239
|
+
/// tmp := tmp ^ ROL32(dword, 10)
|
|
240
|
+
/// tmp := tmp ^ ROL32(dword, 18)
|
|
241
|
+
/// tmp := tmp ^ ROL32(dword, 24)
|
|
242
|
+
/// RETURN tmp
|
|
243
|
+
/// }
|
|
244
|
+
/// DEFINE T_RND(dword) {
|
|
245
|
+
/// RETURN L_RND(lower_t(dword))
|
|
246
|
+
/// }
|
|
247
|
+
/// DEFINE F_RND(X0, X1, X2, X3, round_key) {
|
|
248
|
+
/// RETURN X0 ^ T_RND(X1 ^ X2 ^ X3 ^ round_key)
|
|
249
|
+
/// }
|
|
250
|
+
/// FOR i:= 0 to 0
|
|
251
|
+
/// P[0] := __B.xmm[i].dword[0]
|
|
252
|
+
/// P[1] := __B.xmm[i].dword[1]
|
|
253
|
+
/// P[2] := __B.xmm[i].dword[2]
|
|
254
|
+
/// P[3] := __B.xmm[i].dword[3]
|
|
255
|
+
/// C[0] := F_RND(P[0], P[1], P[2], P[3], __A.xmm[i].dword[0])
|
|
256
|
+
/// C[1] := F_RND(P[1], P[2], P[3], C[0], __A.xmm[i].dword[1])
|
|
257
|
+
/// C[2] := F_RND(P[2], P[3], C[0], C[1], __A.xmm[i].dword[2])
|
|
258
|
+
/// C[3] := F_RND(P[3], C[0], C[1], C[2], __A.xmm[i].dword[3])
|
|
259
|
+
/// DEST.xmm[i].dword[0] := C[0]
|
|
260
|
+
/// DEST.xmm[i].dword[1] := C[1]
|
|
261
|
+
/// DEST.xmm[i].dword[2] := C[2]
|
|
262
|
+
/// DEST.xmm[i].dword[3] := C[3]
|
|
263
|
+
/// ENDFOR
|
|
264
|
+
/// DEST[MAX:256] := 0
|
|
265
|
+
/// \endcode
|
|
266
|
+
#define _mm256_sm4rnds4_epi32(A, B) \
|
|
267
|
+
(__m256i) __builtin_ia32_vsm4rnds4256((__v8su)A, (__v8su)B)
|
|
268
|
+
|
|
269
|
+
#endif // __SM4INTRIN_H
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
/* Define the default attributes for the functions in this file. */
|
|
20
20
|
#define __DEFAULT_FN_ATTRS \
|
|
21
|
-
__attribute__((__always_inline__, __nodebug__,
|
|
22
|
-
__min_vector_width__(128)))
|
|
21
|
+
__attribute__((__always_inline__, __nodebug__, \
|
|
22
|
+
__target__("sse4.1,no-evex512"), __min_vector_width__(128)))
|
|
23
23
|
|
|
24
24
|
/* SSE4 Rounding macros. */
|
|
25
25
|
#define _MM_FROUND_TO_NEAREST_INT 0x00
|
|
@@ -645,7 +645,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mul_epi32(__m128i __V1,
|
|
|
645
645
|
/// \returns A 128-bit integer vector containing the data stored at the
|
|
646
646
|
/// specified memory location.
|
|
647
647
|
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
|
648
|
-
_mm_stream_load_si128(
|
|
648
|
+
_mm_stream_load_si128(const void *__V) {
|
|
649
649
|
return (__m128i)__builtin_nontemporal_load((const __v2di *)__V);
|
|
650
650
|
}
|
|
651
651
|
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
#ifndef __STDALIGN_H
|
|
11
11
|
#define __STDALIGN_H
|
|
12
12
|
|
|
13
|
+
#if defined(__cplusplus) || \
|
|
14
|
+
(defined(__STDC_VERSION__) && __STDC_VERSION__ < 202311L)
|
|
13
15
|
#ifndef __cplusplus
|
|
14
16
|
#define alignas _Alignas
|
|
15
17
|
#define alignof _Alignof
|
|
@@ -17,5 +19,6 @@
|
|
|
17
19
|
|
|
18
20
|
#define __alignas_is_defined 1
|
|
19
21
|
#define __alignof_is_defined 1
|
|
22
|
+
#endif /* __STDC_VERSION__ */
|
|
20
23
|
|
|
21
24
|
#endif /* __STDALIGN_H */
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*===---- stdarg.h - Variable argument handling ----------------------------===
|
|
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
|
+
/*
|
|
11
|
+
* This header is designed to be included multiple times. If any of the __need_
|
|
12
|
+
* macros are defined, then only that subset of interfaces are provided. This
|
|
13
|
+
* can be useful for POSIX headers that need to not expose all of stdarg.h, but
|
|
14
|
+
* need to use some of its interfaces. Otherwise this header provides all of
|
|
15
|
+
* the expected interfaces.
|
|
16
|
+
*
|
|
17
|
+
* When clang modules are enabled, this header is a textual header. It ignores
|
|
18
|
+
* its header guard so that multiple submodules can export its interfaces.
|
|
19
|
+
* Take module SM with submodules A and B, whose headers both include stdarg.h
|
|
20
|
+
* When SM.A builds, __STDARG_H will be defined. When SM.B builds, the
|
|
21
|
+
* definition from SM.A will leak when building without local submodule
|
|
22
|
+
* visibility. stdarg.h wouldn't include any of its implementation headers, and
|
|
23
|
+
* SM.B wouldn't import any of the stdarg modules, and SM.B's `export *`
|
|
24
|
+
* wouldn't export any stdarg interfaces as expected. However, since stdarg.h
|
|
25
|
+
* ignores its header guard when building with modules, it all works as
|
|
26
|
+
* expected.
|
|
27
|
+
*
|
|
28
|
+
* When clang modules are not enabled, the header guards can function in the
|
|
29
|
+
* normal simple fashion.
|
|
30
|
+
*/
|
|
31
|
+
#if !defined(__STDARG_H) || __has_feature(modules) || \
|
|
32
|
+
defined(__need___va_list) || defined(__need_va_list) || \
|
|
33
|
+
defined(__need_va_arg) || defined(__need___va_copy) || \
|
|
34
|
+
defined(__need_va_copy)
|
|
35
|
+
|
|
36
|
+
#if !defined(__need___va_list) && !defined(__need_va_list) && \
|
|
37
|
+
!defined(__need_va_arg) && !defined(__need___va_copy) && \
|
|
38
|
+
!defined(__need_va_copy)
|
|
39
|
+
#define __STDARG_H
|
|
40
|
+
#define __need___va_list
|
|
41
|
+
#define __need_va_list
|
|
42
|
+
#define __need_va_arg
|
|
43
|
+
#define __need___va_copy
|
|
44
|
+
/* GCC always defines __va_copy, but does not define va_copy unless in c99 mode
|
|
45
|
+
* or -ansi is not specified, since it was not part of C90.
|
|
46
|
+
*/
|
|
47
|
+
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
|
48
|
+
(defined(__cplusplus) && __cplusplus >= 201103L) || \
|
|
49
|
+
!defined(__STRICT_ANSI__)
|
|
50
|
+
#define __need_va_copy
|
|
51
|
+
#endif
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
#ifdef __need___va_list
|
|
55
|
+
#include <__stdarg___gnuc_va_list.h>
|
|
56
|
+
#undef __need___va_list
|
|
57
|
+
#endif /* defined(__need___va_list) */
|
|
58
|
+
|
|
59
|
+
#ifdef __need_va_list
|
|
60
|
+
#include <__stdarg_va_list.h>
|
|
61
|
+
#undef __need_va_list
|
|
62
|
+
#endif /* defined(__need_va_list) */
|
|
63
|
+
|
|
64
|
+
#ifdef __need_va_arg
|
|
65
|
+
#include <__stdarg_va_arg.h>
|
|
66
|
+
#undef __need_va_arg
|
|
67
|
+
#endif /* defined(__need_va_arg) */
|
|
68
|
+
|
|
69
|
+
#ifdef __need___va_copy
|
|
70
|
+
#include <__stdarg___va_copy.h>
|
|
71
|
+
#undef __need___va_copy
|
|
72
|
+
#endif /* defined(__need___va_copy) */
|
|
73
|
+
|
|
74
|
+
#ifdef __need_va_copy
|
|
75
|
+
#include <__stdarg_va_copy.h>
|
|
76
|
+
#undef __need_va_copy
|
|
77
|
+
#endif /* defined(__need_va_copy) */
|
|
78
|
+
|
|
79
|
+
#endif
|
|
@@ -45,9 +45,14 @@ extern "C" {
|
|
|
45
45
|
#define ATOMIC_POINTER_LOCK_FREE __CLANG_ATOMIC_POINTER_LOCK_FREE
|
|
46
46
|
|
|
47
47
|
/* 7.17.2 Initialization */
|
|
48
|
-
|
|
48
|
+
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ < 202311L) || \
|
|
49
|
+
defined(__cplusplus)
|
|
50
|
+
/* ATOMIC_VAR_INIT was removed in C23, but still remains in C++23. */
|
|
49
51
|
#define ATOMIC_VAR_INIT(value) (value)
|
|
50
|
-
#
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
#if ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201710L && \
|
|
55
|
+
__STDC_VERSION__ < 202311L) || \
|
|
51
56
|
(defined(__cplusplus) && __cplusplus >= 202002L)) && \
|
|
52
57
|
!defined(_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS)
|
|
53
58
|
/* ATOMIC_VAR_INIT was deprecated in C17 and C++20. */
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*===---- stdckdint.h - Standard header for checking integer----------------===
|
|
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 __STDCKDINT_H
|
|
11
|
+
#define __STDCKDINT_H
|
|
12
|
+
|
|
13
|
+
/* If we're hosted, fall back to the system's stdckdint.h. FreeBSD, for
|
|
14
|
+
* example, already has a Clang-compatible stdckdint.h header.
|
|
15
|
+
*
|
|
16
|
+
* The `stdckdint.h` header requires C 23 or newer.
|
|
17
|
+
*/
|
|
18
|
+
#if __STDC_HOSTED__ && __has_include_next(<stdckdint.h>)
|
|
19
|
+
#include_next <stdckdint.h>
|
|
20
|
+
#else
|
|
21
|
+
|
|
22
|
+
/* C23 7.20.1 Defines several macros for performing checked integer arithmetic*/
|
|
23
|
+
|
|
24
|
+
#define __STDC_VERSION_STDCKDINT_H__ 202311L
|
|
25
|
+
|
|
26
|
+
// Both A and B shall be any integer type other than "plain" char, bool, a bit-
|
|
27
|
+
// precise integer type, or an enumerated type, and they need not be the same.
|
|
28
|
+
|
|
29
|
+
// R shall be a modifiable lvalue of any integer type other than "plain" char,
|
|
30
|
+
// bool, a bit-precise integer type, or an enumerated type. It shouldn't be
|
|
31
|
+
// short type, either. Otherwise, it may be unable to hold two the result of
|
|
32
|
+
// operating two 'int's.
|
|
33
|
+
|
|
34
|
+
// A diagnostic message will be produced if A or B are not suitable integer
|
|
35
|
+
// types, or if R is not a modifiable lvalue of a suitable integer type or R
|
|
36
|
+
// is short type.
|
|
37
|
+
#define ckd_add(R, A, B) __builtin_add_overflow((A), (B), (R))
|
|
38
|
+
#define ckd_sub(R, A, B) __builtin_sub_overflow((A), (B), (R))
|
|
39
|
+
#define ckd_mul(R, A, B) __builtin_mul_overflow((A), (B), (R))
|
|
40
|
+
|
|
41
|
+
#endif /* __STDC_HOSTED__ */
|
|
42
|
+
#endif /* __STDCKDINT_H */
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/*===---- stddef.h - Basic type definitions --------------------------------===
|
|
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
|
+
/*
|
|
11
|
+
* This header is designed to be included multiple times. If any of the __need_
|
|
12
|
+
* macros are defined, then only that subset of interfaces are provided. This
|
|
13
|
+
* can be useful for POSIX headers that need to not expose all of stddef.h, but
|
|
14
|
+
* need to use some of its interfaces. Otherwise this header provides all of
|
|
15
|
+
* the expected interfaces.
|
|
16
|
+
*
|
|
17
|
+
* When clang modules are enabled, this header is a textual header. It ignores
|
|
18
|
+
* its header guard so that multiple submodules can export its interfaces.
|
|
19
|
+
* Take module SM with submodules A and B, whose headers both include stddef.h
|
|
20
|
+
* When SM.A builds, __STDDEF_H will be defined. When SM.B builds, the
|
|
21
|
+
* definition from SM.A will leak when building without local submodule
|
|
22
|
+
* visibility. stddef.h wouldn't include any of its implementation headers, and
|
|
23
|
+
* SM.B wouldn't import any of the stddef modules, and SM.B's `export *`
|
|
24
|
+
* wouldn't export any stddef interfaces as expected. However, since stddef.h
|
|
25
|
+
* ignores its header guard when building with modules, it all works as
|
|
26
|
+
* expected.
|
|
27
|
+
*
|
|
28
|
+
* When clang modules are not enabled, the header guards can function in the
|
|
29
|
+
* normal simple fashion.
|
|
30
|
+
*/
|
|
31
|
+
#if !defined(__STDDEF_H) || __has_feature(modules) || \
|
|
32
|
+
(defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1) || \
|
|
33
|
+
defined(__need_ptrdiff_t) || defined(__need_size_t) || \
|
|
34
|
+
defined(__need_rsize_t) || defined(__need_wchar_t) || \
|
|
35
|
+
defined(__need_NULL) || defined(__need_nullptr_t) || \
|
|
36
|
+
defined(__need_unreachable) || defined(__need_max_align_t) || \
|
|
37
|
+
defined(__need_offsetof) || defined(__need_wint_t)
|
|
38
|
+
|
|
39
|
+
#if !defined(__need_ptrdiff_t) && !defined(__need_size_t) && \
|
|
40
|
+
!defined(__need_rsize_t) && !defined(__need_wchar_t) && \
|
|
41
|
+
!defined(__need_NULL) && !defined(__need_nullptr_t) && \
|
|
42
|
+
!defined(__need_unreachable) && !defined(__need_max_align_t) && \
|
|
43
|
+
!defined(__need_offsetof) && !defined(__need_wint_t)
|
|
44
|
+
#define __STDDEF_H
|
|
45
|
+
#define __need_ptrdiff_t
|
|
46
|
+
#define __need_size_t
|
|
47
|
+
/* ISO9899:2011 7.20 (C11 Annex K): Define rsize_t if __STDC_WANT_LIB_EXT1__ is
|
|
48
|
+
* enabled. */
|
|
49
|
+
#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
|
|
50
|
+
#define __need_rsize_t
|
|
51
|
+
#endif
|
|
52
|
+
#define __need_wchar_t
|
|
53
|
+
#define __need_NULL
|
|
54
|
+
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || \
|
|
55
|
+
defined(__cplusplus)
|
|
56
|
+
#define __need_nullptr_t
|
|
57
|
+
#endif
|
|
58
|
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
|
|
59
|
+
#define __need_unreachable
|
|
60
|
+
#endif
|
|
61
|
+
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \
|
|
62
|
+
(defined(__cplusplus) && __cplusplus >= 201103L)
|
|
63
|
+
#define __need_max_align_t
|
|
64
|
+
#endif
|
|
65
|
+
#define __need_offsetof
|
|
66
|
+
/* wint_t is provided by <wchar.h> and not <stddef.h>. It's here
|
|
67
|
+
* for compatibility, but must be explicitly requested. Therefore
|
|
68
|
+
* __need_wint_t is intentionally not defined here. */
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
#if defined(__need_ptrdiff_t)
|
|
72
|
+
#include <__stddef_ptrdiff_t.h>
|
|
73
|
+
#undef __need_ptrdiff_t
|
|
74
|
+
#endif /* defined(__need_ptrdiff_t) */
|
|
75
|
+
|
|
76
|
+
#if defined(__need_size_t)
|
|
77
|
+
#include <__stddef_size_t.h>
|
|
78
|
+
#undef __need_size_t
|
|
79
|
+
#endif /*defined(__need_size_t) */
|
|
80
|
+
|
|
81
|
+
#if defined(__need_rsize_t)
|
|
82
|
+
#include <__stddef_rsize_t.h>
|
|
83
|
+
#undef __need_rsize_t
|
|
84
|
+
#endif /* defined(__need_rsize_t) */
|
|
85
|
+
|
|
86
|
+
#if defined(__need_wchar_t)
|
|
87
|
+
#include <__stddef_wchar_t.h>
|
|
88
|
+
#undef __need_wchar_t
|
|
89
|
+
#endif /* defined(__need_wchar_t) */
|
|
90
|
+
|
|
91
|
+
#if defined(__need_NULL)
|
|
92
|
+
#include <__stddef_null.h>
|
|
93
|
+
#undef __need_NULL
|
|
94
|
+
#endif /* defined(__need_NULL) */
|
|
95
|
+
|
|
96
|
+
#if defined(__need_nullptr_t)
|
|
97
|
+
#include <__stddef_nullptr_t.h>
|
|
98
|
+
#undef __need_nullptr_t
|
|
99
|
+
#endif /* defined(__need_nullptr_t) */
|
|
100
|
+
|
|
101
|
+
#if defined(__need_unreachable)
|
|
102
|
+
#include <__stddef_unreachable.h>
|
|
103
|
+
#undef __need_unreachable
|
|
104
|
+
#endif /* defined(__need_unreachable) */
|
|
105
|
+
|
|
106
|
+
#if defined(__need_max_align_t)
|
|
107
|
+
#include <__stddef_max_align_t.h>
|
|
108
|
+
#undef __need_max_align_t
|
|
109
|
+
#endif /* defined(__need_max_align_t) */
|
|
110
|
+
|
|
111
|
+
#if defined(__need_offsetof)
|
|
112
|
+
#include <__stddef_offsetof.h>
|
|
113
|
+
#undef __need_offsetof
|
|
114
|
+
#endif /* defined(__need_offsetof) */
|
|
115
|
+
|
|
116
|
+
/* Some C libraries expect to see a wint_t here. Others (notably MinGW) will use
|
|
117
|
+
__WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */
|
|
118
|
+
#if defined(__need_wint_t)
|
|
119
|
+
#include <__stddef_wint_t.h>
|
|
120
|
+
#undef __need_wint_t
|
|
121
|
+
#endif /* __need_wint_t */
|
|
122
|
+
|
|
123
|
+
#endif
|