@@ -103,31 +103,90 @@ enum CPUFeatures {
103
103
static_assert (FEAT_MAX < 62 ,
104
104
" Number of features in CPUFeatures are limited to 62 entries" );
105
105
106
- // Each ArchExtKind correponds directly to a possible -target-feature.
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
107
109
enum ArchExtKind : unsigned {
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
-
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
129
187
};
130
188
using ExtensionBitset = Bitset<AEK_NUM_EXTENSIONS>;
189
+ // clang-format on
131
190
132
191
// Represents an extension that can be enabled with -march=<arch>+<extension>.
133
192
// Typically these correspond to Arm Architecture extensions, unlike
0 commit comments