@@ -103,31 +103,90 @@ enum CPUFeatures {
103103static_assert (FEAT_MAX < 62 ,
104104 " Number of features in CPUFeatures are limited to 62 entries" );
105105
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
107109enum 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
129187};
130188using ExtensionBitset = Bitset<AEK_NUM_EXTENSIONS>;
189+ // clang-format on
131190
132191// Represents an extension that can be enabled with -march=<arch>+<extension>.
133192// Typically these correspond to Arm Architecture extensions, unlike
0 commit comments