@cpp-linter/clang-tidy-win32-x64 12.0.1
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/LICENSE.TXT +279 -0
- package/README.md +7 -0
- package/bin/clang-tidy.exe +4 -0
- package/lib/clang/12.0.1/include/__clang_cuda_builtin_vars.h +121 -0
- package/lib/clang/12.0.1/include/__clang_cuda_cmath.h +512 -0
- package/lib/clang/12.0.1/include/__clang_cuda_complex_builtins.h +285 -0
- package/lib/clang/12.0.1/include/__clang_cuda_device_functions.h +1486 -0
- package/lib/clang/12.0.1/include/__clang_cuda_intrinsics.h +486 -0
- package/lib/clang/12.0.1/include/__clang_cuda_libdevice_declares.h +462 -0
- package/lib/clang/12.0.1/include/__clang_cuda_math.h +348 -0
- package/lib/clang/12.0.1/include/__clang_cuda_math_forward_declares.h +284 -0
- package/lib/clang/12.0.1/include/__clang_cuda_runtime_wrapper.h +443 -0
- package/lib/clang/12.0.1/include/__clang_hip_cmath.h +664 -0
- package/lib/clang/12.0.1/include/__clang_hip_libdevice_declares.h +334 -0
- package/lib/clang/12.0.1/include/__clang_hip_math.h +1275 -0
- package/lib/clang/12.0.1/include/__clang_hip_runtime_wrapper.h +69 -0
- package/lib/clang/12.0.1/include/__stddef_max_align_t.h +27 -0
- package/lib/clang/12.0.1/include/__wmmintrin_aes.h +140 -0
- package/lib/clang/12.0.1/include/__wmmintrin_pclmul.h +48 -0
- package/lib/clang/12.0.1/include/adxintrin.h +72 -0
- package/lib/clang/12.0.1/include/altivec.h +18239 -0
- package/lib/clang/12.0.1/include/ammintrin.h +179 -0
- package/lib/clang/12.0.1/include/amxintrin.h +278 -0
- package/lib/clang/12.0.1/include/arm64intr.h +35 -0
- package/lib/clang/12.0.1/include/arm_acle.h +716 -0
- package/lib/clang/12.0.1/include/arm_bf16.h +20 -0
- package/lib/clang/12.0.1/include/arm_cde.h +410 -0
- package/lib/clang/12.0.1/include/arm_cmse.h +217 -0
- package/lib/clang/12.0.1/include/arm_fp16.h +596 -0
- package/lib/clang/12.0.1/include/arm_mve.h +19187 -0
- package/lib/clang/12.0.1/include/arm_neon.h +68982 -0
- package/lib/clang/12.0.1/include/arm_sve.h +18148 -0
- package/lib/clang/12.0.1/include/armintr.h +31 -0
- package/lib/clang/12.0.1/include/avx2intrin.h +1148 -0
- package/lib/clang/12.0.1/include/avx512bf16intrin.h +279 -0
- package/lib/clang/12.0.1/include/avx512bitalgintrin.h +83 -0
- package/lib/clang/12.0.1/include/avx512bwintrin.h +2024 -0
- package/lib/clang/12.0.1/include/avx512cdintrin.h +123 -0
- package/lib/clang/12.0.1/include/avx512dqintrin.h +1377 -0
- package/lib/clang/12.0.1/include/avx512erintrin.h +271 -0
- package/lib/clang/12.0.1/include/avx512fintrin.h +9618 -0
- package/lib/clang/12.0.1/include/avx512ifmaintrin.h +68 -0
- package/lib/clang/12.0.1/include/avx512ifmavlintrin.h +119 -0
- package/lib/clang/12.0.1/include/avx512pfintrin.h +97 -0
- package/lib/clang/12.0.1/include/avx512vbmi2intrin.h +357 -0
- package/lib/clang/12.0.1/include/avx512vbmiintrin.h +105 -0
- package/lib/clang/12.0.1/include/avx512vbmivlintrin.h +188 -0
- package/lib/clang/12.0.1/include/avx512vlbf16intrin.h +474 -0
- package/lib/clang/12.0.1/include/avx512vlbitalgintrin.h +145 -0
- package/lib/clang/12.0.1/include/avx512vlbwintrin.h +2809 -0
- package/lib/clang/12.0.1/include/avx512vlcdintrin.h +225 -0
- package/lib/clang/12.0.1/include/avx512vldqintrin.h +1167 -0
- package/lib/clang/12.0.1/include/avx512vlintrin.h +8445 -0
- package/lib/clang/12.0.1/include/avx512vlvbmi2intrin.h +689 -0
- package/lib/clang/12.0.1/include/avx512vlvnniintrin.h +304 -0
- package/lib/clang/12.0.1/include/avx512vlvp2intersectintrin.h +121 -0
- package/lib/clang/12.0.1/include/avx512vnniintrin.h +115 -0
- package/lib/clang/12.0.1/include/avx512vp2intersectintrin.h +77 -0
- package/lib/clang/12.0.1/include/avx512vpopcntdqintrin.h +54 -0
- package/lib/clang/12.0.1/include/avx512vpopcntdqvlintrin.h +91 -0
- package/lib/clang/12.0.1/include/avxintrin.h +5053 -0
- package/lib/clang/12.0.1/include/avxvnniintrin.h +225 -0
- package/lib/clang/12.0.1/include/bmi2intrin.h +81 -0
- package/lib/clang/12.0.1/include/bmiintrin.h +427 -0
- package/lib/clang/12.0.1/include/cet.h +66 -0
- package/lib/clang/12.0.1/include/cetintrin.h +99 -0
- package/lib/clang/12.0.1/include/cldemoteintrin.h +36 -0
- package/lib/clang/12.0.1/include/clflushoptintrin.h +27 -0
- package/lib/clang/12.0.1/include/clwbintrin.h +38 -0
- package/lib/clang/12.0.1/include/clzerointrin.h +36 -0
- package/lib/clang/12.0.1/include/cpuid.h +319 -0
- package/lib/clang/12.0.1/include/cuda_wrappers/algorithm +116 -0
- package/lib/clang/12.0.1/include/cuda_wrappers/complex +82 -0
- package/lib/clang/12.0.1/include/cuda_wrappers/new +106 -0
- package/lib/clang/12.0.1/include/emmintrin.h +4981 -0
- package/lib/clang/12.0.1/include/enqcmdintrin.h +63 -0
- package/lib/clang/12.0.1/include/f16cintrin.h +162 -0
- package/lib/clang/12.0.1/include/float.h +152 -0
- package/lib/clang/12.0.1/include/fma4intrin.h +218 -0
- package/lib/clang/12.0.1/include/fmaintrin.h +216 -0
- package/lib/clang/12.0.1/include/fxsrintrin.h +91 -0
- package/lib/clang/12.0.1/include/gfniintrin.h +193 -0
- package/lib/clang/12.0.1/include/hresetintrin.h +49 -0
- package/lib/clang/12.0.1/include/htmintrin.h +212 -0
- package/lib/clang/12.0.1/include/htmxlintrin.h +345 -0
- package/lib/clang/12.0.1/include/ia32intrin.h +441 -0
- package/lib/clang/12.0.1/include/immintrin.h +600 -0
- package/lib/clang/12.0.1/include/intrin.h +585 -0
- package/lib/clang/12.0.1/include/inttypes.h +97 -0
- package/lib/clang/12.0.1/include/invpcidintrin.h +23 -0
- package/lib/clang/12.0.1/include/iso646.h +27 -0
- package/lib/clang/12.0.1/include/keylockerintrin.h +506 -0
- package/lib/clang/12.0.1/include/limits.h +102 -0
- package/lib/clang/12.0.1/include/lwpintrin.h +136 -0
- package/lib/clang/12.0.1/include/lzcntintrin.h +104 -0
- package/lib/clang/12.0.1/include/mm3dnow.h +157 -0
- package/lib/clang/12.0.1/include/mm_malloc.h +67 -0
- package/lib/clang/12.0.1/include/mmintrin.h +1558 -0
- package/lib/clang/12.0.1/include/module.modulemap +164 -0
- package/lib/clang/12.0.1/include/movdirintrin.h +49 -0
- package/lib/clang/12.0.1/include/msa.h +573 -0
- package/lib/clang/12.0.1/include/mwaitxintrin.h +33 -0
- package/lib/clang/12.0.1/include/nmmintrin.h +16 -0
- package/lib/clang/12.0.1/include/opencl-c-base.h +589 -0
- package/lib/clang/12.0.1/include/opencl-c.h +17162 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/__clang_openmp_device_functions.h +42 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/cmath +78 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/complex +52 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/complex.h +27 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/complex_cmath.h +388 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/math.h +51 -0
- package/lib/clang/12.0.1/include/openmp_wrappers/new +70 -0
- package/lib/clang/12.0.1/include/pconfigintrin.h +40 -0
- package/lib/clang/12.0.1/include/pkuintrin.h +34 -0
- package/lib/clang/12.0.1/include/pmmintrin.h +290 -0
- package/lib/clang/12.0.1/include/popcntintrin.h +59 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/emmintrin.h +2324 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/mm_malloc.h +50 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/mmintrin.h +1450 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/pmmintrin.h +150 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/smmintrin.h +109 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/tmmintrin.h +495 -0
- package/lib/clang/12.0.1/include/ppc_wrappers/xmmintrin.h +1843 -0
- package/lib/clang/12.0.1/include/prfchwintrin.h +55 -0
- package/lib/clang/12.0.1/include/ptwriteintrin.h +37 -0
- package/lib/clang/12.0.1/include/rdseedintrin.h +42 -0
- package/lib/clang/12.0.1/include/rtmintrin.h +45 -0
- package/lib/clang/12.0.1/include/s390intrin.h +25 -0
- package/lib/clang/12.0.1/include/serializeintrin.h +30 -0
- package/lib/clang/12.0.1/include/sgxintrin.h +60 -0
- package/lib/clang/12.0.1/include/shaintrin.h +61 -0
- package/lib/clang/12.0.1/include/smmintrin.h +2430 -0
- package/lib/clang/12.0.1/include/stdalign.h +21 -0
- package/lib/clang/12.0.1/include/stdarg.h +35 -0
- package/lib/clang/12.0.1/include/stdatomic.h +176 -0
- package/lib/clang/12.0.1/include/stdbool.h +31 -0
- package/lib/clang/12.0.1/include/stddef.h +121 -0
- package/lib/clang/12.0.1/include/stdint.h +693 -0
- package/lib/clang/12.0.1/include/stdnoreturn.h +16 -0
- package/lib/clang/12.0.1/include/tbmintrin.h +140 -0
- package/lib/clang/12.0.1/include/tgmath.h +1368 -0
- package/lib/clang/12.0.1/include/tmmintrin.h +771 -0
- package/lib/clang/12.0.1/include/tsxldtrkintrin.h +56 -0
- package/lib/clang/12.0.1/include/uintrintrin.h +150 -0
- package/lib/clang/12.0.1/include/unwind.h +327 -0
- package/lib/clang/12.0.1/include/vadefs.h +51 -0
- package/lib/clang/12.0.1/include/vaesintrin.h +84 -0
- package/lib/clang/12.0.1/include/varargs.h +12 -0
- package/lib/clang/12.0.1/include/vecintrin.h +10998 -0
- package/lib/clang/12.0.1/include/vpclmulqdqintrin.h +28 -0
- package/lib/clang/12.0.1/include/waitpkgintrin.h +42 -0
- package/lib/clang/12.0.1/include/wasm_simd128.h +1167 -0
- package/lib/clang/12.0.1/include/wbnoinvdintrin.h +24 -0
- package/lib/clang/12.0.1/include/wmmintrin.h +19 -0
- package/lib/clang/12.0.1/include/x86gprintrin.h +23 -0
- package/lib/clang/12.0.1/include/x86intrin.h +63 -0
- package/lib/clang/12.0.1/include/xmmintrin.h +3008 -0
- package/lib/clang/12.0.1/include/xopintrin.h +770 -0
- package/lib/clang/12.0.1/include/xsavecintrin.h +34 -0
- package/lib/clang/12.0.1/include/xsaveintrin.h +63 -0
- package/lib/clang/12.0.1/include/xsaveoptintrin.h +34 -0
- package/lib/clang/12.0.1/include/xsavesintrin.h +44 -0
- package/lib/clang/12.0.1/include/xtestintrin.h +27 -0
- package/package.json +32 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/*===---- ammintrin.h - SSE4a 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 __AMMINTRIN_H
|
|
11
|
+
#define __AMMINTRIN_H
|
|
12
|
+
|
|
13
|
+
#include <pmmintrin.h>
|
|
14
|
+
|
|
15
|
+
/* Define the default attributes for the functions in this file. */
|
|
16
|
+
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4a"), __min_vector_width__(128)))
|
|
17
|
+
|
|
18
|
+
/// Extracts the specified bits from the lower 64 bits of the 128-bit
|
|
19
|
+
/// integer vector operand at the index \a idx and of the length \a len.
|
|
20
|
+
///
|
|
21
|
+
/// \headerfile <x86intrin.h>
|
|
22
|
+
///
|
|
23
|
+
/// \code
|
|
24
|
+
/// __m128i _mm_extracti_si64(__m128i x, const int len, const int idx);
|
|
25
|
+
/// \endcode
|
|
26
|
+
///
|
|
27
|
+
/// This intrinsic corresponds to the <c> EXTRQ </c> instruction.
|
|
28
|
+
///
|
|
29
|
+
/// \param x
|
|
30
|
+
/// The value from which bits are extracted.
|
|
31
|
+
/// \param len
|
|
32
|
+
/// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0]
|
|
33
|
+
/// are zero, the length is interpreted as 64.
|
|
34
|
+
/// \param idx
|
|
35
|
+
/// Bits [5:0] specify the index of the least significant bit; the other
|
|
36
|
+
/// bits are ignored. If the sum of the index and length is greater than 64,
|
|
37
|
+
/// the result is undefined. If the length and index are both zero, bits
|
|
38
|
+
/// [63:0] of parameter \a x are extracted. If the length is zero but the
|
|
39
|
+
/// index is non-zero, the result is undefined.
|
|
40
|
+
/// \returns A 128-bit integer vector whose lower 64 bits contain the bits
|
|
41
|
+
/// extracted from the source operand.
|
|
42
|
+
#define _mm_extracti_si64(x, len, idx) \
|
|
43
|
+
((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \
|
|
44
|
+
(char)(len), (char)(idx)))
|
|
45
|
+
|
|
46
|
+
/// Extracts the specified bits from the lower 64 bits of the 128-bit
|
|
47
|
+
/// integer vector operand at the index and of the length specified by
|
|
48
|
+
/// \a __y.
|
|
49
|
+
///
|
|
50
|
+
/// \headerfile <x86intrin.h>
|
|
51
|
+
///
|
|
52
|
+
/// This intrinsic corresponds to the <c> EXTRQ </c> instruction.
|
|
53
|
+
///
|
|
54
|
+
/// \param __x
|
|
55
|
+
/// The value from which bits are extracted.
|
|
56
|
+
/// \param __y
|
|
57
|
+
/// Specifies the index of the least significant bit at [13:8] and the
|
|
58
|
+
/// length at [5:0]; all other bits are ignored. If bits [5:0] are zero, the
|
|
59
|
+
/// length is interpreted as 64. If the sum of the index and length is
|
|
60
|
+
/// greater than 64, the result is undefined. If the length and index are
|
|
61
|
+
/// both zero, bits [63:0] of parameter \a __x are extracted. If the length
|
|
62
|
+
/// is zero but the index is non-zero, the result is undefined.
|
|
63
|
+
/// \returns A 128-bit vector whose lower 64 bits contain the bits extracted
|
|
64
|
+
/// from the source operand.
|
|
65
|
+
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
|
66
|
+
_mm_extract_si64(__m128i __x, __m128i __y)
|
|
67
|
+
{
|
|
68
|
+
return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// Inserts bits of a specified length from the source integer vector
|
|
72
|
+
/// \a y into the lower 64 bits of the destination integer vector \a x at
|
|
73
|
+
/// the index \a idx and of the length \a len.
|
|
74
|
+
///
|
|
75
|
+
/// \headerfile <x86intrin.h>
|
|
76
|
+
///
|
|
77
|
+
/// \code
|
|
78
|
+
/// __m128i _mm_inserti_si64(__m128i x, __m128i y, const int len,
|
|
79
|
+
/// const int idx);
|
|
80
|
+
/// \endcode
|
|
81
|
+
///
|
|
82
|
+
/// This intrinsic corresponds to the <c> INSERTQ </c> instruction.
|
|
83
|
+
///
|
|
84
|
+
/// \param x
|
|
85
|
+
/// The destination operand where bits will be inserted. The inserted bits
|
|
86
|
+
/// are defined by the length \a len and by the index \a idx specifying the
|
|
87
|
+
/// least significant bit.
|
|
88
|
+
/// \param y
|
|
89
|
+
/// The source operand containing the bits to be extracted. The extracted
|
|
90
|
+
/// bits are the least significant bits of operand \a y of length \a len.
|
|
91
|
+
/// \param len
|
|
92
|
+
/// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0]
|
|
93
|
+
/// are zero, the length is interpreted as 64.
|
|
94
|
+
/// \param idx
|
|
95
|
+
/// Bits [5:0] specify the index of the least significant bit; the other
|
|
96
|
+
/// bits are ignored. If the sum of the index and length is greater than 64,
|
|
97
|
+
/// the result is undefined. If the length and index are both zero, bits
|
|
98
|
+
/// [63:0] of parameter \a y are inserted into parameter \a x. If the length
|
|
99
|
+
/// is zero but the index is non-zero, the result is undefined.
|
|
100
|
+
/// \returns A 128-bit integer vector containing the original lower 64-bits of
|
|
101
|
+
/// destination operand \a x with the specified bitfields replaced by the
|
|
102
|
+
/// lower bits of source operand \a y. The upper 64 bits of the return value
|
|
103
|
+
/// are undefined.
|
|
104
|
+
#define _mm_inserti_si64(x, y, len, idx) \
|
|
105
|
+
((__m128i)__builtin_ia32_insertqi((__v2di)(__m128i)(x), \
|
|
106
|
+
(__v2di)(__m128i)(y), \
|
|
107
|
+
(char)(len), (char)(idx)))
|
|
108
|
+
|
|
109
|
+
/// Inserts bits of a specified length from the source integer vector
|
|
110
|
+
/// \a __y into the lower 64 bits of the destination integer vector \a __x
|
|
111
|
+
/// at the index and of the length specified by \a __y.
|
|
112
|
+
///
|
|
113
|
+
/// \headerfile <x86intrin.h>
|
|
114
|
+
///
|
|
115
|
+
/// This intrinsic corresponds to the <c> INSERTQ </c> instruction.
|
|
116
|
+
///
|
|
117
|
+
/// \param __x
|
|
118
|
+
/// The destination operand where bits will be inserted. The inserted bits
|
|
119
|
+
/// are defined by the length and by the index of the least significant bit
|
|
120
|
+
/// specified by operand \a __y.
|
|
121
|
+
/// \param __y
|
|
122
|
+
/// The source operand containing the bits to be extracted. The extracted
|
|
123
|
+
/// bits are the least significant bits of operand \a __y with length
|
|
124
|
+
/// specified by bits [69:64]. These are inserted into the destination at the
|
|
125
|
+
/// index specified by bits [77:72]; all other bits are ignored. If bits
|
|
126
|
+
/// [69:64] are zero, the length is interpreted as 64. If the sum of the
|
|
127
|
+
/// index and length is greater than 64, the result is undefined. If the
|
|
128
|
+
/// length and index are both zero, bits [63:0] of parameter \a __y are
|
|
129
|
+
/// inserted into parameter \a __x. If the length is zero but the index is
|
|
130
|
+
/// non-zero, the result is undefined.
|
|
131
|
+
/// \returns A 128-bit integer vector containing the original lower 64-bits of
|
|
132
|
+
/// destination operand \a __x with the specified bitfields replaced by the
|
|
133
|
+
/// lower bits of source operand \a __y. The upper 64 bits of the return
|
|
134
|
+
/// value are undefined.
|
|
135
|
+
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
|
136
|
+
_mm_insert_si64(__m128i __x, __m128i __y)
|
|
137
|
+
{
|
|
138
|
+
return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// Stores a 64-bit double-precision value in a 64-bit memory location.
|
|
142
|
+
/// To minimize caching, the data is flagged as non-temporal (unlikely to be
|
|
143
|
+
/// used again soon).
|
|
144
|
+
///
|
|
145
|
+
/// \headerfile <x86intrin.h>
|
|
146
|
+
///
|
|
147
|
+
/// This intrinsic corresponds to the <c> MOVNTSD </c> instruction.
|
|
148
|
+
///
|
|
149
|
+
/// \param __p
|
|
150
|
+
/// The 64-bit memory location used to store the register value.
|
|
151
|
+
/// \param __a
|
|
152
|
+
/// The 64-bit double-precision floating-point register value to be stored.
|
|
153
|
+
static __inline__ void __DEFAULT_FN_ATTRS
|
|
154
|
+
_mm_stream_sd(double *__p, __m128d __a)
|
|
155
|
+
{
|
|
156
|
+
__builtin_ia32_movntsd(__p, (__v2df)__a);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Stores a 32-bit single-precision floating-point value in a 32-bit
|
|
160
|
+
/// memory location. To minimize caching, the data is flagged as
|
|
161
|
+
/// non-temporal (unlikely to be used again soon).
|
|
162
|
+
///
|
|
163
|
+
/// \headerfile <x86intrin.h>
|
|
164
|
+
///
|
|
165
|
+
/// This intrinsic corresponds to the <c> MOVNTSS </c> instruction.
|
|
166
|
+
///
|
|
167
|
+
/// \param __p
|
|
168
|
+
/// The 32-bit memory location used to store the register value.
|
|
169
|
+
/// \param __a
|
|
170
|
+
/// The 32-bit single-precision floating-point register value to be stored.
|
|
171
|
+
static __inline__ void __DEFAULT_FN_ATTRS
|
|
172
|
+
_mm_stream_ss(float *__p, __m128 __a)
|
|
173
|
+
{
|
|
174
|
+
__builtin_ia32_movntss(__p, (__v4sf)__a);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
#undef __DEFAULT_FN_ATTRS
|
|
178
|
+
|
|
179
|
+
#endif /* __AMMINTRIN_H */
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/*===--------------- amxintrin.h - AMX intrinsics -*- C/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 <amxintrin.h> directly; include <immintrin.h> instead."
|
|
12
|
+
#endif /* __IMMINTRIN_H */
|
|
13
|
+
|
|
14
|
+
#ifndef __AMXINTRIN_H
|
|
15
|
+
#define __AMXINTRIN_H
|
|
16
|
+
#ifdef __x86_64__
|
|
17
|
+
|
|
18
|
+
#define __DEFAULT_FN_ATTRS_TILE \
|
|
19
|
+
__attribute__((__always_inline__, __nodebug__, __target__("amx-tile")))
|
|
20
|
+
|
|
21
|
+
/// Load tile configuration from a 64-byte memory location specified by
|
|
22
|
+
/// "mem_addr". The tile configuration includes the tile type palette, the
|
|
23
|
+
/// number of bytes per row, and the number of rows. If the specified
|
|
24
|
+
/// palette_id is zero, that signifies the init state for both the tile
|
|
25
|
+
/// config and the tile data, and the tiles are zeroed. Any invalid
|
|
26
|
+
/// configurations will result in #GP fault.
|
|
27
|
+
///
|
|
28
|
+
/// \headerfile <x86intrin.h>
|
|
29
|
+
///
|
|
30
|
+
/// This intrinsic corresponds to the <c> LDTILECFG </c> instruction.
|
|
31
|
+
///
|
|
32
|
+
/// \param __config
|
|
33
|
+
/// A pointer to 512-bits configuration
|
|
34
|
+
static __inline__ void __DEFAULT_FN_ATTRS_TILE
|
|
35
|
+
_tile_loadconfig(const void *__config) {
|
|
36
|
+
__builtin_ia32_tile_loadconfig(__config);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Stores the current tile configuration to a 64-byte memory location
|
|
40
|
+
/// specified by "mem_addr". The tile configuration includes the tile type
|
|
41
|
+
/// palette, the number of bytes per row, and the number of rows. If tiles
|
|
42
|
+
/// are not configured, all zeroes will be stored to memory.
|
|
43
|
+
///
|
|
44
|
+
/// \headerfile <x86intrin.h>
|
|
45
|
+
///
|
|
46
|
+
/// This intrinsic corresponds to the <c> STTILECFG </c> instruction.
|
|
47
|
+
///
|
|
48
|
+
/// \param __config
|
|
49
|
+
/// A pointer to 512-bits configuration
|
|
50
|
+
static __inline__ void __DEFAULT_FN_ATTRS_TILE
|
|
51
|
+
_tile_storeconfig(void *__config) {
|
|
52
|
+
__builtin_ia32_tile_storeconfig(__config);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Release the tile configuration to return to the init state, which
|
|
56
|
+
/// releases all storage it currently holds.
|
|
57
|
+
///
|
|
58
|
+
/// \headerfile <x86intrin.h>
|
|
59
|
+
///
|
|
60
|
+
/// This intrinsic corresponds to the <c> TILERELEASE </c> instruction.
|
|
61
|
+
static __inline__ void __DEFAULT_FN_ATTRS_TILE _tile_release(void) {
|
|
62
|
+
__builtin_ia32_tilerelease();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// Load tile rows from memory specifieid by "base" address and "stride" into
|
|
66
|
+
/// destination tile "dst" using the tile configuration previously configured
|
|
67
|
+
/// via "_tile_loadconfig".
|
|
68
|
+
///
|
|
69
|
+
/// \headerfile <x86intrin.h>
|
|
70
|
+
///
|
|
71
|
+
/// This intrinsic corresponds to the <c> TILELOADD </c> instruction.
|
|
72
|
+
///
|
|
73
|
+
/// \param dst
|
|
74
|
+
/// A destination tile. Max size is 1024 Bytes.
|
|
75
|
+
/// \param base
|
|
76
|
+
/// A pointer to base address.
|
|
77
|
+
/// \param stride
|
|
78
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
79
|
+
#define _tile_loadd(dst, base, stride) \
|
|
80
|
+
__builtin_ia32_tileloadd64((dst), ((const void *)(base)), \
|
|
81
|
+
(__SIZE_TYPE__)(stride))
|
|
82
|
+
|
|
83
|
+
/// Load tile rows from memory specifieid by "base" address and "stride" into
|
|
84
|
+
/// destination tile "dst" using the tile configuration previously configured
|
|
85
|
+
/// via "_tile_loadconfig". This intrinsic provides a hint to the implementation
|
|
86
|
+
/// that the data will likely not be reused in the near future and the data
|
|
87
|
+
/// caching can be optimized accordingly.
|
|
88
|
+
///
|
|
89
|
+
/// \headerfile <x86intrin.h>
|
|
90
|
+
///
|
|
91
|
+
/// This intrinsic corresponds to the <c> TILELOADDT1 </c> instruction.
|
|
92
|
+
///
|
|
93
|
+
/// \param dst
|
|
94
|
+
/// A destination tile. Max size is 1024 Bytes.
|
|
95
|
+
/// \param base
|
|
96
|
+
/// A pointer to base address.
|
|
97
|
+
/// \param stride
|
|
98
|
+
/// The stride between the rows' data to be loaded in memory.
|
|
99
|
+
#define _tile_stream_loadd(dst, base, stride) \
|
|
100
|
+
__builtin_ia32_tileloaddt164((dst), ((const void *)(base)), \
|
|
101
|
+
(__SIZE_TYPE__)(stride))
|
|
102
|
+
|
|
103
|
+
/// Store the tile specified by "src" to memory specifieid by "base" address and
|
|
104
|
+
/// "stride" using the tile configuration previously configured via
|
|
105
|
+
/// "_tile_loadconfig".
|
|
106
|
+
///
|
|
107
|
+
/// \headerfile <x86intrin.h>
|
|
108
|
+
///
|
|
109
|
+
/// This intrinsic corresponds to the <c> TILESTORED </c> instruction.
|
|
110
|
+
///
|
|
111
|
+
/// \param dst
|
|
112
|
+
/// A destination tile. Max size is 1024 Bytes.
|
|
113
|
+
/// \param base
|
|
114
|
+
/// A pointer to base address.
|
|
115
|
+
/// \param stride
|
|
116
|
+
/// The stride between the rows' data to be stored in memory.
|
|
117
|
+
#define _tile_stored(dst, base, stride) \
|
|
118
|
+
__builtin_ia32_tilestored64((dst), ((void *)(base)), (__SIZE_TYPE__)(stride))
|
|
119
|
+
|
|
120
|
+
/// Zero the tile specified by "tdest".
|
|
121
|
+
///
|
|
122
|
+
/// \headerfile <x86intrin.h>
|
|
123
|
+
///
|
|
124
|
+
/// This intrinsic corresponds to the <c> TILEZERO </c> instruction.
|
|
125
|
+
///
|
|
126
|
+
/// \param tile
|
|
127
|
+
/// The destination tile to be zero. Max size is 1024 Bytes.
|
|
128
|
+
#define _tile_zero(tile) __builtin_ia32_tilezero((tile))
|
|
129
|
+
|
|
130
|
+
/// Compute dot-product of bytes in tiles with a source/destination accumulator.
|
|
131
|
+
/// Multiply groups of 4 adjacent pairs of signed 8-bit integers in src0 with
|
|
132
|
+
/// corresponding signed 8-bit integers in src1, producing 4 intermediate 32-bit
|
|
133
|
+
/// results. Sum these 4 results with the corresponding 32-bit integer in "dst",
|
|
134
|
+
/// and store the 32-bit result back to tile "dst".
|
|
135
|
+
///
|
|
136
|
+
/// \headerfile <x86intrin.h>
|
|
137
|
+
///
|
|
138
|
+
/// This intrinsic corresponds to the <c> TDPBSSD </c> instruction.
|
|
139
|
+
///
|
|
140
|
+
/// \param dst
|
|
141
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
142
|
+
/// \param src0
|
|
143
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
144
|
+
/// \param src1
|
|
145
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
146
|
+
#define _tile_dpbssd(dst, src0, src1) \
|
|
147
|
+
__builtin_ia32_tdpbssd((dst), (src0), (src1))
|
|
148
|
+
|
|
149
|
+
/// Compute dot-product of bytes in tiles with a source/destination accumulator.
|
|
150
|
+
/// Multiply groups of 4 adjacent pairs of signed 8-bit integers in src0 with
|
|
151
|
+
/// corresponding unsigned 8-bit integers in src1, producing 4 intermediate
|
|
152
|
+
/// 32-bit results. Sum these 4 results with the corresponding 32-bit integer
|
|
153
|
+
/// in "dst", and store the 32-bit result back to tile "dst".
|
|
154
|
+
///
|
|
155
|
+
/// \headerfile <x86intrin.h>
|
|
156
|
+
///
|
|
157
|
+
/// This intrinsic corresponds to the <c> TDPBSUD </c> instruction.
|
|
158
|
+
///
|
|
159
|
+
/// \param dst
|
|
160
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
161
|
+
/// \param src0
|
|
162
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
163
|
+
/// \param src1
|
|
164
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
165
|
+
#define _tile_dpbsud(dst, src0, src1) \
|
|
166
|
+
__builtin_ia32_tdpbsud((dst), (src0), (src1))
|
|
167
|
+
|
|
168
|
+
/// Compute dot-product of bytes in tiles with a source/destination accumulator.
|
|
169
|
+
/// Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in src0 with
|
|
170
|
+
/// corresponding signed 8-bit integers in src1, producing 4 intermediate 32-bit
|
|
171
|
+
/// results. Sum these 4 results with the corresponding 32-bit integer in "dst",
|
|
172
|
+
/// and store the 32-bit result back to tile "dst".
|
|
173
|
+
///
|
|
174
|
+
/// \headerfile <x86intrin.h>
|
|
175
|
+
///
|
|
176
|
+
/// This intrinsic corresponds to the <c> TDPBUSD </c> instruction.
|
|
177
|
+
///
|
|
178
|
+
/// \param dst
|
|
179
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
180
|
+
/// \param src0
|
|
181
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
182
|
+
/// \param src1
|
|
183
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
184
|
+
#define _tile_dpbusd(dst, src0, src1) \
|
|
185
|
+
__builtin_ia32_tdpbusd((dst), (src0), (src1))
|
|
186
|
+
|
|
187
|
+
/// Compute dot-product of bytes in tiles with a source/destination accumulator.
|
|
188
|
+
/// Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in src0 with
|
|
189
|
+
/// corresponding unsigned 8-bit integers in src1, producing 4 intermediate
|
|
190
|
+
/// 32-bit results. Sum these 4 results with the corresponding 32-bit integer in
|
|
191
|
+
/// "dst", and store the 32-bit result back to tile "dst".
|
|
192
|
+
///
|
|
193
|
+
/// \headerfile <x86intrin.h>
|
|
194
|
+
///
|
|
195
|
+
/// This intrinsic corresponds to the <c> TDPBUUD </c> instruction.
|
|
196
|
+
///
|
|
197
|
+
/// \param dst
|
|
198
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
199
|
+
/// \param src0
|
|
200
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
201
|
+
/// \param src1
|
|
202
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
203
|
+
#define _tile_dpbuud(dst, src0, src1) \
|
|
204
|
+
__builtin_ia32_tdpbuud((dst), (src0), (src1))
|
|
205
|
+
|
|
206
|
+
/// Compute dot-product of BF16 (16-bit) floating-point pairs in tiles src0 and
|
|
207
|
+
/// src1, accumulating the intermediate single-precision (32-bit) floating-point
|
|
208
|
+
/// elements with elements in "dst", and store the 32-bit result back to tile
|
|
209
|
+
/// "dst".
|
|
210
|
+
///
|
|
211
|
+
/// \headerfile <x86intrin.h>
|
|
212
|
+
///
|
|
213
|
+
/// This intrinsic corresponds to the <c> TDPBF16PS </c> instruction.
|
|
214
|
+
///
|
|
215
|
+
/// \param dst
|
|
216
|
+
/// The destination tile. Max size is 1024 Bytes.
|
|
217
|
+
/// \param src0
|
|
218
|
+
/// The 1st source tile. Max size is 1024 Bytes.
|
|
219
|
+
/// \param src1
|
|
220
|
+
/// The 2nd source tile. Max size is 1024 Bytes.
|
|
221
|
+
#define _tile_dpbf16ps(dst, src0, src1) \
|
|
222
|
+
__builtin_ia32_tdpbf16ps((dst), (src0), (src1))
|
|
223
|
+
|
|
224
|
+
#define __DEFAULT_FN_ATTRS_INT8 \
|
|
225
|
+
__attribute__((__always_inline__, __nodebug__, __target__("amx-int8")))
|
|
226
|
+
|
|
227
|
+
typedef int _tile1024i __attribute__((__vector_size__(1024), __aligned__(64)));
|
|
228
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_INT8
|
|
229
|
+
_tile_loadd_internal(unsigned short m, unsigned short n, const void *base,
|
|
230
|
+
__SIZE_TYPE__ stride) {
|
|
231
|
+
return __builtin_ia32_tileloadd64_internal(m, n, base,
|
|
232
|
+
(__SIZE_TYPE__)(stride));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
static __inline__ _tile1024i __DEFAULT_FN_ATTRS_INT8
|
|
236
|
+
_tile_dpbssd_internal(unsigned short m, unsigned short n, unsigned short k,
|
|
237
|
+
_tile1024i dst, _tile1024i src1, _tile1024i src2) {
|
|
238
|
+
return __builtin_ia32_tdpbssd_internal(m, n, k, dst, src1, src2);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
static __inline__ void __DEFAULT_FN_ATTRS_INT8
|
|
242
|
+
_tile_stored_internal(unsigned short m, unsigned short n, void *base,
|
|
243
|
+
__SIZE_TYPE__ stride, _tile1024i tile) {
|
|
244
|
+
return __builtin_ia32_tilestored64_internal(m, n, base,
|
|
245
|
+
(__SIZE_TYPE__)(stride), tile);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
typedef struct __tile1024i_str {
|
|
249
|
+
const unsigned short row;
|
|
250
|
+
const unsigned short col;
|
|
251
|
+
_tile1024i tile;
|
|
252
|
+
} __tile1024i;
|
|
253
|
+
|
|
254
|
+
__DEFAULT_FN_ATTRS_TILE
|
|
255
|
+
static void __tile_loadd(__tile1024i *dst, const void *base,
|
|
256
|
+
__SIZE_TYPE__ stride) {
|
|
257
|
+
dst->tile = _tile_loadd_internal(dst->row, dst->col, base, stride);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
__DEFAULT_FN_ATTRS_INT8
|
|
261
|
+
static void __tile_dpbssd(__tile1024i *dst, __tile1024i src1,
|
|
262
|
+
__tile1024i src2) {
|
|
263
|
+
dst->tile = _tile_dpbssd_internal(src1.row, src2.col, src1.col, dst->tile,
|
|
264
|
+
src1.tile, src2.tile);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
__DEFAULT_FN_ATTRS_TILE
|
|
268
|
+
static void __tile_stored(void *base, __SIZE_TYPE__ stride, __tile1024i src) {
|
|
269
|
+
_tile_stored_internal(src.row, src.col, base, stride, src.tile);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
__DEFAULT_FN_ATTRS_TILE
|
|
273
|
+
static void __tile_zero(__tile1024i *dst) {
|
|
274
|
+
dst->tile = __builtin_ia32_tilezero_internal(dst->row, dst->col);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
#endif /* __x86_64__ */
|
|
278
|
+
#endif /* __AMXINTRIN_H */
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*===---- arm64intr.h - ARM64 Windows 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
|
+
/* Only include this if we're compiling for the windows platform. */
|
|
11
|
+
#ifndef _MSC_VER
|
|
12
|
+
#include_next <arm64intr.h>
|
|
13
|
+
#else
|
|
14
|
+
|
|
15
|
+
#ifndef __ARM64INTR_H
|
|
16
|
+
#define __ARM64INTR_H
|
|
17
|
+
|
|
18
|
+
typedef enum
|
|
19
|
+
{
|
|
20
|
+
_ARM64_BARRIER_SY = 0xF,
|
|
21
|
+
_ARM64_BARRIER_ST = 0xE,
|
|
22
|
+
_ARM64_BARRIER_LD = 0xD,
|
|
23
|
+
_ARM64_BARRIER_ISH = 0xB,
|
|
24
|
+
_ARM64_BARRIER_ISHST = 0xA,
|
|
25
|
+
_ARM64_BARRIER_ISHLD = 0x9,
|
|
26
|
+
_ARM64_BARRIER_NSH = 0x7,
|
|
27
|
+
_ARM64_BARRIER_NSHST = 0x6,
|
|
28
|
+
_ARM64_BARRIER_NSHLD = 0x5,
|
|
29
|
+
_ARM64_BARRIER_OSH = 0x3,
|
|
30
|
+
_ARM64_BARRIER_OSHST = 0x2,
|
|
31
|
+
_ARM64_BARRIER_OSHLD = 0x1
|
|
32
|
+
} _ARM64INTR_BARRIER_TYPE;
|
|
33
|
+
|
|
34
|
+
#endif /* __ARM64INTR_H */
|
|
35
|
+
#endif /* _MSC_VER */
|