@@ -103,90 +103,31 @@ enum CPUFeatures {
103
103
static_assert (FEAT_MAX < 62 ,
104
104
" Number of features in CPUFeatures are limited to 62 entries" );
105
105
106
- // Arch extension modifiers for CPUs. These are labelled with their Arm ARM
107
- // feature name (though the canonical reference for those is AArch64.td)
108
- // clang-format off
106
+ // Each ArchExtKind correponds directly to a possible -target-feature.
109
107
enum ArchExtKind : unsigned {
110
- AEK_NONE = 1 ,
111
- AEK_CRC = 2 , // FEAT_CRC32
112
- AEK_CRYPTO = 3 ,
113
- AEK_FP = 4 , // FEAT_FP
114
- AEK_SIMD = 5 , // FEAT_AdvSIMD
115
- AEK_FP16 = 6 , // FEAT_FP16
116
- AEK_PROFILE = 7 , // FEAT_SPE
117
- AEK_RAS = 8 , // FEAT_RAS, FEAT_RASv1p1
118
- AEK_LSE = 9 , // FEAT_LSE
119
- AEK_SVE = 10 , // FEAT_SVE
120
- AEK_DOTPROD = 11 , // FEAT_DotProd
121
- AEK_RCPC = 12 , // FEAT_LRCPC
122
- AEK_RDM = 13 , // FEAT_RDM
123
- AEK_SM4 = 14 , // FEAT_SM4, FEAT_SM3
124
- AEK_SHA3 = 15 , // FEAT_SHA3, FEAT_SHA512
125
- AEK_SHA2 = 16 , // FEAT_SHA1, FEAT_SHA256
126
- AEK_AES = 17 , // FEAT_AES, FEAT_PMULL
127
- AEK_FP16FML = 18 , // FEAT_FHM
128
- AEK_RAND = 19 , // FEAT_RNG
129
- AEK_MTE = 20 , // FEAT_MTE, FEAT_MTE2
130
- AEK_SSBS = 21 , // FEAT_SSBS, FEAT_SSBS2
131
- AEK_SB = 22 , // FEAT_SB
132
- AEK_PREDRES = 23 , // FEAT_SPECRES
133
- AEK_SVE2 = 24 , // FEAT_SVE2
134
- AEK_SVE2AES = 25 , // FEAT_SVE_AES, FEAT_SVE_PMULL128
135
- AEK_SVE2SM4 = 26 , // FEAT_SVE_SM4
136
- AEK_SVE2SHA3 = 27 , // FEAT_SVE_SHA3
137
- AEK_SVE2BITPERM = 28 , // FEAT_SVE_BitPerm
138
- AEK_TME = 29 , // FEAT_TME
139
- AEK_BF16 = 30 , // FEAT_BF16
140
- AEK_I8MM = 31 , // FEAT_I8MM
141
- AEK_F32MM = 32 , // FEAT_F32MM
142
- AEK_F64MM = 33 , // FEAT_F64MM
143
- AEK_LS64 = 34 , // FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA
144
- AEK_BRBE = 35 , // FEAT_BRBE
145
- AEK_PAUTH = 36 , // FEAT_PAuth
146
- AEK_FLAGM = 37 , // FEAT_FlagM
147
- AEK_SME = 38 , // FEAT_SME
148
- AEK_SMEF64F64 = 39 , // FEAT_SME_F64F64
149
- AEK_SMEI16I64 = 40 , // FEAT_SME_I16I64
150
- AEK_HBC = 41 , // FEAT_HBC
151
- AEK_MOPS = 42 , // FEAT_MOPS
152
- AEK_PERFMON = 43 , // FEAT_PMUv3
153
- AEK_SME2 = 44 , // FEAT_SME2
154
- AEK_SVE2p1 = 45 , // FEAT_SVE2p1
155
- AEK_SME2p1 = 46 , // FEAT_SME2p1
156
- AEK_B16B16 = 47 , // FEAT_B16B16
157
- AEK_SMEF16F16 = 48 , // FEAT_SMEF16F16
158
- AEK_CSSC = 49 , // FEAT_CSSC
159
- AEK_RCPC3 = 50 , // FEAT_LRCPC3
160
- AEK_THE = 51 , // FEAT_THE
161
- AEK_D128 = 52 , // FEAT_D128
162
- AEK_LSE128 = 53 , // FEAT_LSE128
163
- AEK_SPECRES2 = 54 , // FEAT_SPECRES2
164
- AEK_RASv2 = 55 , // FEAT_RASv2
165
- AEK_ITE = 56 , // FEAT_ITE
166
- AEK_GCS = 57 , // FEAT_GCS
167
- AEK_FPMR = 58 , // FEAT_FPMR
168
- AEK_FP8 = 59 , // FEAT_FP8
169
- AEK_FAMINMAX = 60 , // FEAT_FAMINMAX
170
- AEK_FP8FMA = 61 , // FEAT_FP8FMA
171
- AEK_SSVE_FP8FMA = 62 , // FEAT_SSVE_FP8FMA
172
- AEK_FP8DOT2 = 63 , // FEAT_FP8DOT2
173
- AEK_SSVE_FP8DOT2 = 64 , // FEAT_SSVE_FP8DOT2
174
- AEK_FP8DOT4 = 65 , // FEAT_FP8DOT4
175
- AEK_SSVE_FP8DOT4 = 66 , // FEAT_SSVE_FP8DOT4
176
- AEK_LUT = 67 , // FEAT_LUT
177
- AEK_SME_LUTv2 = 68 , // FEAT_SME_LUTv2
178
- AEK_SMEF8F16 = 69 , // FEAT_SME_F8F16
179
- AEK_SMEF8F32 = 70 , // FEAT_SME_F8F32
180
- AEK_SMEFA64 = 71 , // FEAT_SME_FA64
181
- AEK_CPA = 72 , // FEAT_CPA
182
- AEK_PAUTHLR = 73 , // FEAT_PAuth_LR
183
- AEK_TLBIW = 74 , // FEAT_TLBIW
184
- AEK_JSCVT = 75 , // FEAT_JSCVT
185
- AEK_FCMA = 76 , // FEAT_FCMA
186
- AEK_NUM_EXTENSIONS
108
+ AEK_NONE = 1 ,
109
+ #define ARM_EXTENSION (NAME, ENUM ) ENUM,
110
+ #include " llvm/TargetParser/AArch64TargetParserDef.inc"
111
+ AEK_NUM_EXTENSIONS,
112
+
113
+ // FIXME temporary fixes for inconsistent naming.
114
+ AEK_F32MM = AEK_MATMULFP32,
115
+ AEK_F64MM = AEK_MATMULFP64,
116
+ AEK_FCMA = AEK_COMPLXNUM,
117
+ AEK_FP = AEK_FPARMV8,
118
+ AEK_FP16 = AEK_FULLFP16,
119
+ AEK_I8MM = AEK_MATMULINT8,
120
+ AEK_JSCVT = AEK_JS,
121
+ AEK_PROFILE = AEK_SPE,
122
+ AEK_RASv2 = AEK_RASV2,
123
+ AEK_RAND = AEK_RANDGEN,
124
+ AEK_SIMD = AEK_NEON,
125
+ AEK_SME2p1 = AEK_SME2P1,
126
+ AEK_SVE2p1 = AEK_SVE2P1,
127
+ AEK_SME_LUTv2 = AEK_SME_LUTV2,
128
+
187
129
};
188
130
using ExtensionBitset = Bitset<AEK_NUM_EXTENSIONS>;
189
- // clang-format on
190
131
191
132
// Represents an extension that can be enabled with -march=<arch>+<extension>.
192
133
// Typically these correspond to Arm Architecture extensions, unlike
0 commit comments