1// Autogenerated by ARMTargetDefEmitter.cpp
2
3#ifndef ARM_PROCESSOR_FAMILY
4#define ARM_PROCESSOR_FAMILY(ENUM)
5#endif
6
7ARM_PROCESSOR_FAMILY(TSV110)
8ARM_PROCESSOR_FAMILY(CortexR82)
9ARM_PROCESSOR_FAMILY(ThunderX2T99)
10ARM_PROCESSOR_FAMILY(AppleA17)
11ARM_PROCESSOR_FAMILY(Neoverse512TVB)
12ARM_PROCESSOR_FAMILY(ThunderXT81)
13ARM_PROCESSOR_FAMILY(CortexA725)
14ARM_PROCESSOR_FAMILY(CortexA55)
15ARM_PROCESSOR_FAMILY(CortexX4)
16ARM_PROCESSOR_FAMILY(CortexA78AE)
17ARM_PROCESSOR_FAMILY(CortexA520)
18ARM_PROCESSOR_FAMILY(AppleA13)
19ARM_PROCESSOR_FAMILY(CortexA76)
20ARM_PROCESSOR_FAMILY(NeoverseN1)
21ARM_PROCESSOR_FAMILY(Kryo)
22ARM_PROCESSOR_FAMILY(AppleA11)
23ARM_PROCESSOR_FAMILY(AppleA14)
24ARM_PROCESSOR_FAMILY(NeoverseN2)
25ARM_PROCESSOR_FAMILY(AppleA16)
26ARM_PROCESSOR_FAMILY(CortexA73)
27ARM_PROCESSOR_FAMILY(CortexX2)
28ARM_PROCESSOR_FAMILY(AppleA7)
29ARM_PROCESSOR_FAMILY(CortexA77)
30ARM_PROCESSOR_FAMILY(CortexA53)
31ARM_PROCESSOR_FAMILY(Ampere1B)
32ARM_PROCESSOR_FAMILY(Ampere1A)
33ARM_PROCESSOR_FAMILY(CortexA35)
34ARM_PROCESSOR_FAMILY(CortexA510)
35ARM_PROCESSOR_FAMILY(ExynosM3)
36ARM_PROCESSOR_FAMILY(NeoverseV1)
37ARM_PROCESSOR_FAMILY(ThunderX)
38ARM_PROCESSOR_FAMILY(CortexA710)
39ARM_PROCESSOR_FAMILY(AppleM4)
40ARM_PROCESSOR_FAMILY(Oryon)
41ARM_PROCESSOR_FAMILY(Ampere1)
42ARM_PROCESSOR_FAMILY(CortexA78C)
43ARM_PROCESSOR_FAMILY(AppleA12)
44ARM_PROCESSOR_FAMILY(A64FX)
45ARM_PROCESSOR_FAMILY(NeoverseN3)
46ARM_PROCESSOR_FAMILY(NeoverseV2)
47ARM_PROCESSOR_FAMILY(ThunderX3T110)
48ARM_PROCESSOR_FAMILY(CortexA57)
49ARM_PROCESSOR_FAMILY(CortexA75)
50ARM_PROCESSOR_FAMILY(Saphira)
51ARM_PROCESSOR_FAMILY(Carmel)
52ARM_PROCESSOR_FAMILY(CortexA72)
53ARM_PROCESSOR_FAMILY(ThunderXT83)
54ARM_PROCESSOR_FAMILY(NeoverseV3)
55ARM_PROCESSOR_FAMILY(ThunderXT88)
56ARM_PROCESSOR_FAMILY(Falkor)
57ARM_PROCESSOR_FAMILY(CortexX3)
58ARM_PROCESSOR_FAMILY(CortexA720)
59ARM_PROCESSOR_FAMILY(CortexX1)
60ARM_PROCESSOR_FAMILY(CortexA78)
61ARM_PROCESSOR_FAMILY(NeoverseE1)
62ARM_PROCESSOR_FAMILY(CortexA715)
63ARM_PROCESSOR_FAMILY(AppleA15)
64ARM_PROCESSOR_FAMILY(CortexR82AE)
65ARM_PROCESSOR_FAMILY(AppleA10)
66ARM_PROCESSOR_FAMILY(CortexX925)
67ARM_PROCESSOR_FAMILY(CortexA65)
68
69#undef ARM_PROCESSOR_FAMILY
70
71#ifndef ARM_ARCHITECTURE
72#define ARM_ARCHITECTURE(ENUM)
73#endif
74
75
76#undef ARM_ARCHITECTURE
77
78#ifdef EMIT_ARCHEXTKIND_ENUM
79enum ArchExtKind : unsigned {
80 AEK_AES,
81 AEK_ALTERNATIVENZCV,
82 AEK_AM,
83 AEK_AMVS,
84 AEK_B16B16,
85 AEK_BF16,
86 AEK_BRBE,
87 AEK_BTI,
88 AEK_CCDP,
89 AEK_CCIDX,
90 AEK_CCPP,
91 AEK_CHK,
92 AEK_CLRBHB,
93 AEK_FCMA,
94 AEK_CPA,
95 AEK_CRC,
96 AEK_CRYPTO,
97 AEK_CSSC,
98 AEK_D128,
99 AEK_DIT,
100 AEK_DOTPROD,
101 AEK_ENHANCEDCOUNTERVIRTUALIZATION,
102 AEK_ETE,
103 AEK_F32MM,
104 AEK_F64MM,
105 AEK_FAMINMAX,
106 AEK_FINEGRAINEDTRAPS,
107 AEK_FLAGM,
108 AEK_FP,
109 AEK_FP16FML,
110 AEK_FP8,
111 AEK_FP8DOT2,
112 AEK_FP8DOT4,
113 AEK_FP8FMA,
114 AEK_FPAC,
115 AEK_FRINT3264,
116 AEK_FP16,
117 AEK_GCS,
118 AEK_HBC,
119 AEK_HCX,
120 AEK_I8MM,
121 AEK_ITE,
122 AEK_JSCVT,
123 AEK_LOR,
124 AEK_LS64,
125 AEK_LSE,
126 AEK_LSE128,
127 AEK_LSE2,
128 AEK_LUT,
129 AEK_MEC,
130 AEK_MOPS,
131 AEK_MPAM,
132 AEK_MTE,
133 AEK_SIMD,
134 AEK_NMI,
135 AEK_NV,
136 AEK_PAN,
137 AEK_PAN_RWV,
138 AEK_PAUTH,
139 AEK_PAUTHLR,
140 AEK_PERFMON,
141 AEK_PREDRES,
142 AEK_PRFM_SLC,
143 AEK_RAND,
144 AEK_RAS,
145 AEK_RASV2,
146 AEK_RCPC,
147 AEK_RCPC_IMMO,
148 AEK_RCPC3,
149 AEK_RDM,
150 AEK_RME,
151 AEK_SB,
152 AEK_SEL2,
153 AEK_SHA2,
154 AEK_SHA3,
155 AEK_SM4,
156 AEK_SME,
157 AEK_SMEB16B16,
158 AEK_SMEF16F16,
159 AEK_SMEF64F64,
160 AEK_SMEF8F16,
161 AEK_SMEF8F32,
162 AEK_SMEFA64,
163 AEK_SMEI16I64,
164 AEK_SME_LUTV2,
165 AEK_SME2,
166 AEK_SME2P1,
167 AEK_PROFILE,
168 AEK_SPE_EEF,
169 AEK_SPECRES2,
170 AEK_SPECRESTRICT,
171 AEK_SSBS,
172 AEK_SSVE_FP8DOT2,
173 AEK_SSVE_FP8DOT4,
174 AEK_SSVE_FP8FMA,
175 AEK_SVE,
176 AEK_SVEB16B16,
177 AEK_SVE2,
178 AEK_SVE2AES,
179 AEK_SVE2BITPERM,
180 AEK_SVE2SHA3,
181 AEK_SVE2SM4,
182 AEK_SVE2P1,
183 AEK_THE,
184 AEK_TLB_RMI,
185 AEK_TLBIW,
186 AEK_TME,
187 AEK_TRACEV8_4,
188 AEK_TRBE,
189 AEK_PSUAO,
190 AEK_VH,
191 AEK_WFXT,
192 AEK_XS,
193 AEK_NUM_EXTENSIONS
194};
195#undef EMIT_ARCHEXTKIND_ENUM
196#endif // EMIT_ARCHEXTKIND_ENUM
197#ifdef EMIT_EXTENSIONS
198inline constexpr ExtensionInfo Extensions[] = {
199 {"aes", {}, AArch64::AEK_AES, "FEAT_AES, FEAT_PMULL", "Enable AES support", "+aes", "-aes"},
200 {"", {}, AArch64::AEK_ALTERNATIVENZCV, "FEAT_FlagM2", "Enable alternative NZCV format for floating point comparisons", "+altnzcv", "-altnzcv"},
201 {"", {}, AArch64::AEK_AM, "FEAT_AMUv1", "Enable Armv8.4-A Activity Monitors extension", "+am", "-am"},
202 {"", {}, AArch64::AEK_AMVS, "FEAT_AMUv1p1", "Enable Armv8.6-A Activity Monitors Virtualization support", "+amvs", "-amvs"},
203 {"b16b16", {}, AArch64::AEK_B16B16, "FEAT_SVE_B16B16", "Enable SVE2.1 or SME2.1 non-widening BFloat16 to BFloat16 instructions", "+b16b16", "-b16b16"},
204 {"bf16", {}, AArch64::AEK_BF16, "FEAT_BF16", "Enable BFloat16 Extension", "+bf16", "-bf16"},
205 {"brbe", {}, AArch64::AEK_BRBE, "FEAT_BRBE", "Enable Branch Record Buffer Extension", "+brbe", "-brbe"},
206 {"bti", {}, AArch64::AEK_BTI, "FEAT_BTI", "Enable Branch Target Identification", "+bti", "-bti"},
207 {"", {}, AArch64::AEK_CCDP, "FEAT_DPB2", "Enable Armv8.5-A Cache Clean to Point of Deep Persistence", "+ccdp", "-ccdp"},
208 {"", {}, AArch64::AEK_CCIDX, "FEAT_CCIDX", "Enable Armv8.3-A Extend of the CCSIDR number of sets", "+ccidx", "-ccidx"},
209 {"", {}, AArch64::AEK_CCPP, "FEAT_DPB", "Enable Armv8.2-A data Cache Clean to Point of Persistence", "+ccpp", "-ccpp"},
210 {"", {}, AArch64::AEK_CHK, "FEAT_CHK", "Enable Armv8.0-A Check Feature Status Extension", "+chk", "-chk"},
211 {"", {}, AArch64::AEK_CLRBHB, "FEAT_CLRBHB", "Enable Clear BHB instruction", "+clrbhb", "-clrbhb"},
212 {"fcma", {}, AArch64::AEK_FCMA, "FEAT_FCMA", "Enable Armv8.3-A Floating-point complex number support", "+complxnum", "-complxnum"},
213 {"cpa", {}, AArch64::AEK_CPA, "FEAT_CPA", "Enable Armv9.5-A Checked Pointer Arithmetic", "+cpa", "-cpa"},
214 {"crc", {}, AArch64::AEK_CRC, "FEAT_CRC32", "Enable Armv8.0-A CRC-32 checksum instructions", "+crc", "-crc"},
215 {"crypto", {}, AArch64::AEK_CRYPTO, "FEAT_Crypto", "Enable cryptographic instructions", "+crypto", "-crypto"},
216 {"cssc", {}, AArch64::AEK_CSSC, "FEAT_CSSC", "Enable Common Short Sequence Compression (CSSC) instructions", "+cssc", "-cssc"},
217 {"d128", {}, AArch64::AEK_D128, "FEAT_D128, FEAT_LVA3, FEAT_SYSREG128, FEAT_SYSINSTR128", "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and instructions", "+d128", "-d128"},
218 {"dit", {}, AArch64::AEK_DIT, "FEAT_DIT", "Enable Armv8.4-A Data Independent Timing instructions", "+dit", "-dit"},
219 {"dotprod", {}, AArch64::AEK_DOTPROD, "FEAT_DotProd", "Enable dot product support", "+dotprod", "-dotprod"},
220 {"", {}, AArch64::AEK_ENHANCEDCOUNTERVIRTUALIZATION, "FEAT_ECV", "Enable enhanced counter virtualization extension", "+ecv", "-ecv"},
221 {"", {}, AArch64::AEK_ETE, "FEAT_ETE", "Enable Embedded Trace Extension", "+ete", "-ete"},
222 {"f32mm", {}, AArch64::AEK_F32MM, "FEAT_F32MM", "Enable Matrix Multiply FP32 Extension", "+f32mm", "-f32mm"},
223 {"f64mm", {}, AArch64::AEK_F64MM, "FEAT_F64MM", "Enable Matrix Multiply FP64 Extension", "+f64mm", "-f64mm"},
224 {"faminmax", {}, AArch64::AEK_FAMINMAX, "FEAT_FAMINMAX", "Enable FAMIN and FAMAX instructions", "+faminmax", "-faminmax"},
225 {"", {}, AArch64::AEK_FINEGRAINEDTRAPS, "FEAT_FGT", "Enable fine grained virtualization traps extension", "+fgt", "-fgt"},
226 {"flagm", {}, AArch64::AEK_FLAGM, "FEAT_FlagM", "Enable Armv8.4-A Flag Manipulation instructions", "+flagm", "-flagm"},
227 {"fp", {}, AArch64::AEK_FP, "FEAT_FP", "Enable Armv8.0-A Floating Point Extensions", "+fp-armv8", "-fp-armv8"},
228 {"fp16fml", {}, AArch64::AEK_FP16FML, "FEAT_FHM", "Enable FP16 FML instructions", "+fp16fml", "-fp16fml"},
229 {"fp8", {}, AArch64::AEK_FP8, "FEAT_FP8", "Enable FP8 instructions", "+fp8", "-fp8"},
230 {"fp8dot2", {}, AArch64::AEK_FP8DOT2, "FEAT_FP8DOT2", "Enable FP8 2-way dot instructions", "+fp8dot2", "-fp8dot2"},
231 {"fp8dot4", {}, AArch64::AEK_FP8DOT4, "FEAT_FP8DOT4", "Enable FP8 4-way dot instructions", "+fp8dot4", "-fp8dot4"},
232 {"fp8fma", {}, AArch64::AEK_FP8FMA, "FEAT_FP8FMA", "Enable Armv9.5-A FP8 multiply-add instructions", "+fp8fma", "-fp8fma"},
233 {"", {}, AArch64::AEK_FPAC, "FEAT_FPAC", "Enable v8.3-A Pointer Authentication Faulting enhancement", "+fpac", "-fpac"},
234 {"", {}, AArch64::AEK_FRINT3264, "FEAT_FRINTTS", "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int", "+fptoint", "-fptoint"},
235 {"fp16", {}, AArch64::AEK_FP16, "FEAT_FP16", "Enable half-precision floating-point data processing", "+fullfp16", "-fullfp16"},
236 {"gcs", {}, AArch64::AEK_GCS, "FEAT_GCS", "Enable Armv9.4-A Guarded Call Stack Extension", "+gcs", "-gcs"},
237 {"hbc", {}, AArch64::AEK_HBC, "FEAT_HBC", "Enable Armv8.8-A Hinted Conditional Branches Extension", "+hbc", "-hbc"},
238 {"", {}, AArch64::AEK_HCX, "FEAT_HCX", "Enable Armv8.7-A HCRX_EL2 system register", "+hcx", "-hcx"},
239 {"i8mm", {}, AArch64::AEK_I8MM, "FEAT_I8MM", "Enable Matrix Multiply Int8 Extension", "+i8mm", "-i8mm"},
240 {"ite", {}, AArch64::AEK_ITE, "FEAT_ITE", "Enable Armv9.4-A Instrumentation Extension", "+ite", "-ite"},
241 {"jscvt", {}, AArch64::AEK_JSCVT, "FEAT_JSCVT", "Enable Armv8.3-A JavaScript FP conversion instructions", "+jsconv", "-jsconv"},
242 {"", {}, AArch64::AEK_LOR, "FEAT_LOR", "Enable Armv8.1-A Limited Ordering Regions extension", "+lor", "-lor"},
243 {"ls64", {}, AArch64::AEK_LS64, "FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA", "Enable Armv8.7-A LD64B/ST64B Accelerator Extension", "+ls64", "-ls64"},
244 {"lse", {}, AArch64::AEK_LSE, "FEAT_LSE", "Enable Armv8.1-A Large System Extension (LSE) atomic instructions", "+lse", "-lse"},
245 {"lse128", {}, AArch64::AEK_LSE128, "FEAT_LSE128", "Enable Armv9.4-A 128-bit Atomic instructions", "+lse128", "-lse128"},
246 {"", {}, AArch64::AEK_LSE2, "FEAT_LSE2", "Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules", "+lse2", "-lse2"},
247 {"lut", {}, AArch64::AEK_LUT, "FEAT_LUT", "Enable Lookup Table instructions", "+lut", "-lut"},
248 {"", {}, AArch64::AEK_MEC, "FEAT_MEC", "Enable Memory Encryption Contexts Extension", "+mec", "-mec"},
249 {"mops", {}, AArch64::AEK_MOPS, "FEAT_MOPS", "Enable Armv8.8-A memcpy and memset acceleration instructions", "+mops", "-mops"},
250 {"", {}, AArch64::AEK_MPAM, "FEAT_MPAM", "Enable Armv8.4-A Memory system Partitioning and Monitoring extension", "+mpam", "-mpam"},
251 {"memtag", {}, AArch64::AEK_MTE, "FEAT_MTE, FEAT_MTE2", "Enable Memory Tagging Extension", "+mte", "-mte"},
252 {"simd", {}, AArch64::AEK_SIMD, "FEAT_AdvSIMD", "Enable Advanced SIMD instructions", "+neon", "-neon"},
253 {"", {}, AArch64::AEK_NMI, "FEAT_NMI, FEAT_GICv3_NMI", "Enable Armv8.8-A Non-maskable Interrupts", "+nmi", "-nmi"},
254 {"", {}, AArch64::AEK_NV, "FEAT_NV, FEAT_NV2", "Enable Armv8.4-A Nested Virtualization Enchancement", "+nv", "-nv"},
255 {"", {}, AArch64::AEK_PAN, "FEAT_PAN", "Enable Armv8.1-A Privileged Access-Never extension", "+pan", "-pan"},
256 {"", {}, AArch64::AEK_PAN_RWV, "FEAT_PAN2", "Enable Armv8.2-A PAN s1e1R and s1e1W Variants", "+pan-rwv", "-pan-rwv"},
257 {"pauth", {}, AArch64::AEK_PAUTH, "FEAT_PAuth", "Enable Armv8.3-A Pointer Authentication extension", "+pauth", "-pauth"},
258 {"pauth-lr", {}, AArch64::AEK_PAUTHLR, "FEAT_PAuth_LR", "Enable Armv9.5-A PAC enhancements", "+pauth-lr", "-pauth-lr"},
259 {"pmuv3", {}, AArch64::AEK_PERFMON, "FEAT_PMUv3", "Enable Armv8.0-A PMUv3 Performance Monitors extension", "+perfmon", "-perfmon"},
260 {"predres", {}, AArch64::AEK_PREDRES, "FEAT_SPECRES", "Enable Armv8.5-A execution and data prediction invalidation instructions", "+predres", "-predres"},
261 {"", {}, AArch64::AEK_PRFM_SLC, "FEAT_PRFMSLC", "Enable SLC target for PRFM instruction", "+prfm-slc-target", "-prfm-slc-target"},
262 {"rng", {}, AArch64::AEK_RAND, "FEAT_RNG", "Enable Random Number generation instructions", "+rand", "-rand"},
263 {"ras", {}, AArch64::AEK_RAS, "FEAT_RAS, FEAT_RASv1p1", "Enable Armv8.0-A Reliability, Availability and Serviceability Extensions", "+ras", "-ras"},
264 {"rasv2", {}, AArch64::AEK_RASV2, "FEAT_RASv2", "Enable Armv8.9-A Reliability, Availability and Serviceability Extensions", "+rasv2", "-rasv2"},
265 {"rcpc", {}, AArch64::AEK_RCPC, "FEAT_LRCPC", "Enable support for RCPC extension", "+rcpc", "-rcpc"},
266 {"", {}, AArch64::AEK_RCPC_IMMO, "FEAT_LRCPC2", "Enable Armv8.4-A RCPC instructions with Immediate Offsets", "+rcpc-immo", "-rcpc-immo"},
267 {"rcpc3", {}, AArch64::AEK_RCPC3, "FEAT_LRCPC3", "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set", "+rcpc3", "-rcpc3"},
268 {"rdm", "rdma", AArch64::AEK_RDM, "FEAT_RDM", "Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions", "+rdm", "-rdm"},
269 {"", {}, AArch64::AEK_RME, "FEAT_RME", "Enable Realm Management Extension", "+rme", "-rme"},
270 {"sb", {}, AArch64::AEK_SB, "FEAT_SB", "Enable Armv8.5-A Speculation Barrier", "+sb", "-sb"},
271 {"", {}, AArch64::AEK_SEL2, "FEAT_SEL2", "Enable Armv8.4-A Secure Exception Level 2 extension", "+sel2", "-sel2"},
272 {"sha2", {}, AArch64::AEK_SHA2, "FEAT_SHA1, FEAT_SHA256", "Enable SHA1 and SHA256 support", "+sha2", "-sha2"},
273 {"sha3", {}, AArch64::AEK_SHA3, "FEAT_SHA3, FEAT_SHA512", "Enable SHA512 and SHA3 support", "+sha3", "-sha3"},
274 {"sm4", {}, AArch64::AEK_SM4, "FEAT_SM4, FEAT_SM3", "Enable SM3 and SM4 support", "+sm4", "-sm4"},
275 {"sme", {}, AArch64::AEK_SME, "FEAT_SME", "Enable Scalable Matrix Extension (SME)", "+sme", "-sme"},
276 {"sme-b16b16", {}, AArch64::AEK_SMEB16B16, "FEAT_SME_B16B16", "Enable SME2.1 ZA-targeting non-widening BFloat16 instructions", "+sme-b16b16", "-sme-b16b16"},
277 {"sme-f16f16", {}, AArch64::AEK_SMEF16F16, "FEAT_SME_F16F16", "Enable SME non-widening Float16 instructions", "+sme-f16f16", "-sme-f16f16"},
278 {"sme-f64f64", {}, AArch64::AEK_SMEF64F64, "FEAT_SME_F64F64", "Enable Scalable Matrix Extension (SME) F64F64 instructions", "+sme-f64f64", "-sme-f64f64"},
279 {"sme-f8f16", {}, AArch64::AEK_SMEF8F16, "FEAT_SME_F8F16", "Enable Scalable Matrix Extension (SME) F8F16 instructions", "+sme-f8f16", "-sme-f8f16"},
280 {"sme-f8f32", {}, AArch64::AEK_SMEF8F32, "FEAT_SME_F8F32", "Enable Scalable Matrix Extension (SME) F8F32 instructions", "+sme-f8f32", "-sme-f8f32"},
281 {"sme-fa64", {}, AArch64::AEK_SMEFA64, "FEAT_SME_FA64", "Enable the full A64 instruction set in streaming SVE mode", "+sme-fa64", "-sme-fa64"},
282 {"sme-i16i64", {}, AArch64::AEK_SMEI16I64, "FEAT_SME_I16I64", "Enable Scalable Matrix Extension (SME) I16I64 instructions", "+sme-i16i64", "-sme-i16i64"},
283 {"sme-lutv2", {}, AArch64::AEK_SME_LUTV2, "FEAT_SME_LUTv2", "Enable Scalable Matrix Extension (SME) LUTv2 instructions", "+sme-lutv2", "-sme-lutv2"},
284 {"sme2", {}, AArch64::AEK_SME2, "FEAT_SME2", "Enable Scalable Matrix Extension 2 (SME2) instructions", "+sme2", "-sme2"},
285 {"sme2p1", {}, AArch64::AEK_SME2P1, "FEAT_SME2p1", "Enable Scalable Matrix Extension 2.1 instructions", "+sme2p1", "-sme2p1"},
286 {"profile", {}, AArch64::AEK_PROFILE, "FEAT_SPE", "Enable Statistical Profiling extension", "+spe", "-spe"},
287 {"", {}, AArch64::AEK_SPE_EEF, "FEAT_SPEv1p2", "Enable extra register in the Statistical Profiling Extension", "+spe-eef", "-spe-eef"},
288 {"predres2", {}, AArch64::AEK_SPECRES2, "FEAT_SPECRES2", "Enable Speculation Restriction Instruction", "+specres2", "-specres2"},
289 {"", {}, AArch64::AEK_SPECRESTRICT, "FEAT_CSV2_2", "Enable architectural speculation restriction", "+specrestrict", "-specrestrict"},
290 {"ssbs", {}, AArch64::AEK_SSBS, "FEAT_SSBS, FEAT_SSBS2", "Enable Speculative Store Bypass Safe bit", "+ssbs", "-ssbs"},
291 {"ssve-fp8dot2", {}, AArch64::AEK_SSVE_FP8DOT2, "FEAT_SSVE_FP8DOT2", "Enable SVE2 FP8 2-way dot product instructions", "+ssve-fp8dot2", "-ssve-fp8dot2"},
292 {"ssve-fp8dot4", {}, AArch64::AEK_SSVE_FP8DOT4, "FEAT_SSVE_FP8DOT4", "Enable SVE2 FP8 4-way dot product instructions", "+ssve-fp8dot4", "-ssve-fp8dot4"},
293 {"ssve-fp8fma", {}, AArch64::AEK_SSVE_FP8FMA, "FEAT_SSVE_FP8FMA", "Enable SVE2 FP8 multiply-add instructions", "+ssve-fp8fma", "-ssve-fp8fma"},
294 {"sve", {}, AArch64::AEK_SVE, "FEAT_SVE", "Enable Scalable Vector Extension (SVE) instructions", "+sve", "-sve"},
295 {"sve-b16b16", {}, AArch64::AEK_SVEB16B16, "FEAT_SVE_B16B16", "Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions", "+sve-b16b16", "-sve-b16b16"},
296 {"sve2", {}, AArch64::AEK_SVE2, "FEAT_SVE2", "Enable Scalable Vector Extension 2 (SVE2) instructions", "+sve2", "-sve2"},
297 {"sve2-aes", {}, AArch64::AEK_SVE2AES, "FEAT_SVE_AES, FEAT_SVE_PMULL128", "Enable AES SVE2 instructions", "+sve2-aes", "-sve2-aes"},
298 {"sve2-bitperm", {}, AArch64::AEK_SVE2BITPERM, "FEAT_SVE_BitPerm", "Enable bit permutation SVE2 instructions", "+sve2-bitperm", "-sve2-bitperm"},
299 {"sve2-sha3", {}, AArch64::AEK_SVE2SHA3, "FEAT_SVE_SHA3", "Enable SHA3 SVE2 instructions", "+sve2-sha3", "-sve2-sha3"},
300 {"sve2-sm4", {}, AArch64::AEK_SVE2SM4, "FEAT_SVE_SM4", "Enable SM4 SVE2 instructions", "+sve2-sm4", "-sve2-sm4"},
301 {"sve2p1", {}, AArch64::AEK_SVE2P1, "FEAT_SVE2p1", "Enable Scalable Vector Extension 2.1 instructions", "+sve2p1", "-sve2p1"},
302 {"the", {}, AArch64::AEK_THE, "FEAT_THE", "Enable Armv8.9-A Translation Hardening Extension", "+the", "-the"},
303 {"", {}, AArch64::AEK_TLB_RMI, "FEAT_TLBIOS, FEAT_TLBIRANGE", "Enable Armv8.4-A TLB Range and Maintenance instructions", "+tlb-rmi", "-tlb-rmi"},
304 {"tlbiw", {}, AArch64::AEK_TLBIW, "FEAT_TLBIW", "Enable Armv9.5-A TLBI VMALL for Dirty State", "+tlbiw", "-tlbiw"},
305 {"tme", {}, AArch64::AEK_TME, "FEAT_TME", "Enable Transactional Memory Extension", "+tme", "-tme"},
306 {"", {}, AArch64::AEK_TRACEV8_4, "FEAT_TRF", "Enable Armv8.4-A Trace extension", "+tracev8.4", "-tracev8.4"},
307 {"", {}, AArch64::AEK_TRBE, "FEAT_TRBE", "Enable Trace Buffer Extension", "+trbe", "-trbe"},
308 {"", {}, AArch64::AEK_PSUAO, "FEAT_UAO", "Enable Armv8.2-A UAO PState", "+uaops", "-uaops"},
309 {"", {}, AArch64::AEK_VH, "FEAT_VHE", "Enable Armv8.1-A Virtual Host extension", "+vh", "-vh"},
310 {"wfxt", {}, AArch64::AEK_WFXT, "FEAT_WFxT", "Enable Armv8.7-A WFET and WFIT instruction", "+wfxt", "-wfxt"},
311 {"", {}, AArch64::AEK_XS, "FEAT_XS", "Enable Armv8.7-A limited-TLB-maintenance instruction", "+xs", "-xs"},
312};
313#undef EMIT_EXTENSIONS
314#endif // EMIT_EXTENSIONS
315
316#ifdef EMIT_FMV_INFO
317const std::vector<llvm::AArch64::FMVInfo>& llvm::AArch64::getFMVInfo() {
318 static std::vector<FMVInfo> I;
319 if(I.size()) return I;
320 I.reserve(60);
321 I.emplace_back("aes", FEAT_AES, "+fp-armv8,+neon", 150);
322 I.emplace_back("bf16", FEAT_BF16, "+bf16", 280);
323 I.emplace_back("bti", FEAT_BTI, "+bti", 510);
324 I.emplace_back("crc", FEAT_CRC, "+crc", 110);
325 I.emplace_back("dgh", FEAT_DGH, "", 260);
326 I.emplace_back("dit", FEAT_DIT, "+dit", 180);
327 I.emplace_back("dotprod", FEAT_DOTPROD, "+dotprod,+fp-armv8,+neon", 104);
328 I.emplace_back("dpb", FEAT_DPB, "+ccpp", 190);
329 I.emplace_back("dpb2", FEAT_DPB2, "+ccpp,+ccdp", 200);
330 I.emplace_back("ebf16", FEAT_EBF16, "+bf16", 290);
331 I.emplace_back("f32mm", FEAT_SVE_F32MM, "+sve,+f32mm,+fullfp16,+fp-armv8,+neon", 350);
332 I.emplace_back("f64mm", FEAT_SVE_F64MM, "+sve,+f64mm,+fullfp16,+fp-armv8,+neon", 360);
333 I.emplace_back("fcma", FEAT_FCMA, "+fp-armv8,+neon,+complxnum", 220);
334 I.emplace_back("flagm", FEAT_FLAGM, "+flagm", 20);
335 I.emplace_back("flagm2", FEAT_FLAGM2, "+flagm,+altnzcv", 30);
336 I.emplace_back("fp", FEAT_FP, "+fp-armv8,+neon", 90);
337 I.emplace_back("fp16", FEAT_FP16, "+fullfp16,+fp-armv8,+neon", 170);
338 I.emplace_back("fp16fml", FEAT_FP16FML, "+fp16fml,+fullfp16,+fp-armv8,+neon", 175);
339 I.emplace_back("frintts", FEAT_FRINTTS, "+fptoint", 250);
340 I.emplace_back("i8mm", FEAT_I8MM, "+i8mm", 270);
341 I.emplace_back("jscvt", FEAT_JSCVT, "+fp-armv8,+neon,+jsconv", 210);
342 I.emplace_back("ls64", FEAT_LS64, "", 520);
343 I.emplace_back("ls64_accdata", FEAT_LS64_ACCDATA, "+ls64", 540);
344 I.emplace_back("ls64_v", FEAT_LS64_V, "", 530);
345 I.emplace_back("lse", FEAT_LSE, "+lse", 80);
346 I.emplace_back("memtag", FEAT_MEMTAG, "", 440);
347 I.emplace_back("memtag2", FEAT_MEMTAG2, "+mte", 450);
348 I.emplace_back("memtag3", FEAT_MEMTAG3, "+mte", 460);
349 I.emplace_back("mops", FEAT_MOPS, "+mops", 650);
350 I.emplace_back("pmull", FEAT_PMULL, "+aes,+fp-armv8,+neon", 160);
351 I.emplace_back("predres", FEAT_PREDRES, "+predres", 480);
352 I.emplace_back("rcpc", FEAT_RCPC, "+rcpc", 230);
353 I.emplace_back("rcpc2", FEAT_RCPC2, "+rcpc", 240);
354 I.emplace_back("rcpc3", FEAT_RCPC3, "+rcpc,+rcpc3", 241);
355 I.emplace_back("rdm", FEAT_RDM, "+rdm,+fp-armv8,+neon", 108);
356 I.emplace_back("rng", FEAT_RNG, "+rand", 10);
357 I.emplace_back("rpres", FEAT_RPRES, "", 300);
358 I.emplace_back("sb", FEAT_SB, "+sb", 470);
359 I.emplace_back("sha1", FEAT_SHA1, "+fp-armv8,+neon", 120);
360 I.emplace_back("sha2", FEAT_SHA2, "+sha2,+fp-armv8,+neon", 130);
361 I.emplace_back("sha3", FEAT_SHA3, "+sha3,+sha2,+fp-armv8,+neon", 140);
362 I.emplace_back("simd", FEAT_SIMD, "+fp-armv8,+neon", 100);
363 I.emplace_back("sm4", FEAT_SM4, "+sm4,+fp-armv8,+neon", 106);
364 I.emplace_back("sme", FEAT_SME, "+sme,+bf16", 430);
365 I.emplace_back("sme-f64f64", FEAT_SME_F64, "+sme,+sme-f64f64,+bf16", 560);
366 I.emplace_back("sme-i16i64", FEAT_SME_I64, "+sme,+sme-i16i64,+bf16", 570);
367 I.emplace_back("sme2", FEAT_SME2, "+sme2,+sme,+bf16", 580);
368 I.emplace_back("ssbs", FEAT_SSBS, "", 490);
369 I.emplace_back("ssbs2", FEAT_SSBS2, "+ssbs", 500);
370 I.emplace_back("sve", FEAT_SVE, "+sve,+fullfp16,+fp-armv8,+neon", 310);
371 I.emplace_back("sve-bf16", FEAT_SVE_BF16, "+sve,+bf16,+fullfp16,+fp-armv8,+neon", 320);
372 I.emplace_back("sve-ebf16", FEAT_SVE_EBF16, "+sve,+bf16,+fullfp16,+fp-armv8,+neon", 330);
373 I.emplace_back("sve-i8mm", FEAT_SVE_I8MM, "+sve,+i8mm,+fullfp16,+fp-armv8,+neon", 340);
374 I.emplace_back("sve2", FEAT_SVE2, "+sve2,+sve,+fullfp16,+fp-armv8,+neon", 370);
375 I.emplace_back("sve2-aes", FEAT_SVE_AES, "+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 380);
376 I.emplace_back("sve2-bitperm", FEAT_SVE_BITPERM, "+sve2,+sve,+sve2-bitperm,+fullfp16,+fp-armv8,+neon", 400);
377 I.emplace_back("sve2-pmull128", FEAT_SVE_PMULL128, "+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 390);
378 I.emplace_back("sve2-sha3", FEAT_SVE_SHA3, "+sve2,+sve,+sve2-sha3,+fullfp16,+fp-armv8,+neon", 410);
379 I.emplace_back("sve2-sm4", FEAT_SVE_SM4, "+sve2,+sve,+sve2-sm4,+fullfp16,+fp-armv8,+neon", 420);
380 I.emplace_back("wfxt", FEAT_WFXT, "+wfxt", 550);
381 return I;
382}
383#undef EMIT_FMV_INFO
384#endif // EMIT_FMV_INFO
385
386#ifdef EMIT_EXTENSION_DEPENDENCIES
387inline constexpr ExtensionDependency ExtensionDependencies[] = {
388 {AEK_SIMD, AEK_AES},
389 {AEK_AM, AEK_AMVS},
390 {AEK_BF16, AEK_B16B16},
391 {AEK_SIMD, AEK_FCMA},
392 {AEK_SIMD, AEK_CRYPTO},
393 {AEK_SHA2, AEK_CRYPTO},
394 {AEK_AES, AEK_CRYPTO},
395 {AEK_LSE128, AEK_D128},
396 {AEK_SIMD, AEK_DOTPROD},
397 {AEK_TRBE, AEK_ETE},
398 {AEK_SVE, AEK_F32MM},
399 {AEK_SVE, AEK_F64MM},
400 {AEK_FP16, AEK_FP16FML},
401 {AEK_FAMINMAX, AEK_FP8},
402 {AEK_LUT, AEK_FP8},
403 {AEK_BF16, AEK_FP8},
404 {AEK_FP8DOT4, AEK_FP8DOT2},
405 {AEK_FP8FMA, AEK_FP8DOT4},
406 {AEK_FP8, AEK_FP8FMA},
407 {AEK_FP, AEK_FP16},
408 {AEK_CHK, AEK_GCS},
409 {AEK_ETE, AEK_ITE},
410 {AEK_TRBE, AEK_ITE},
411 {AEK_FP, AEK_JSCVT},
412 {AEK_LSE, AEK_LSE128},
413 {AEK_RME, AEK_MEC},
414 {AEK_FP, AEK_SIMD},
415 {AEK_PAN, AEK_PAN_RWV},
416 {AEK_RAS, AEK_RASV2},
417 {AEK_RCPC, AEK_RCPC_IMMO},
418 {AEK_RCPC_IMMO, AEK_RCPC3},
419 {AEK_SIMD, AEK_RDM},
420 {AEK_SIMD, AEK_SHA2},
421 {AEK_SIMD, AEK_SHA3},
422 {AEK_SHA2, AEK_SHA3},
423 {AEK_SIMD, AEK_SM4},
424 {AEK_BF16, AEK_SME},
425 {AEK_SME2, AEK_SMEB16B16},
426 {AEK_B16B16, AEK_SMEB16B16},
427 {AEK_SME2, AEK_SMEF16F16},
428 {AEK_SME, AEK_SMEF64F64},
429 {AEK_SMEF8F32, AEK_SMEF8F16},
430 {AEK_SME2, AEK_SMEF8F32},
431 {AEK_FP8, AEK_SMEF8F32},
432 {AEK_SME, AEK_SMEFA64},
433 {AEK_SVE2, AEK_SMEFA64},
434 {AEK_SME, AEK_SMEI16I64},
435 {AEK_SME, AEK_SME2},
436 {AEK_SME2, AEK_SME2P1},
437 {AEK_PREDRES, AEK_SPECRES2},
438 {AEK_SSVE_FP8DOT4, AEK_SSVE_FP8DOT2},
439 {AEK_SSVE_FP8FMA, AEK_SSVE_FP8DOT4},
440 {AEK_SME2, AEK_SSVE_FP8FMA},
441 {AEK_FP8, AEK_SSVE_FP8FMA},
442 {AEK_FP16, AEK_SVE},
443 {AEK_B16B16, AEK_SVEB16B16},
444 {AEK_SVE, AEK_SVE2},
445 {AEK_SVE2, AEK_SVE2AES},
446 {AEK_AES, AEK_SVE2AES},
447 {AEK_SVE2, AEK_SVE2BITPERM},
448 {AEK_SVE2, AEK_SVE2SHA3},
449 {AEK_SHA3, AEK_SVE2SHA3},
450 {AEK_SVE2, AEK_SVE2SM4},
451 {AEK_SM4, AEK_SVE2SM4},
452 {AEK_SVE2, AEK_SVE2P1},
453 {AEK_RCPC, AEK_RCPC3},
454};
455#undef EMIT_EXTENSION_DEPENDENCIES
456#endif // EMIT_EXTENSION_DEPENDENCIES
457
458#ifdef EMIT_ARCHITECTURES
459inline constexpr ArchInfo ARMV8A = {
460 VersionTuple{8, 0},
461 AProfile,
462 "armv8-a",
463 "+v8a",
464 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, }))
465};
466inline constexpr ArchInfo ARMV8R = {
467 VersionTuple{8, 0},
468 RProfile,
469 "armv8-r",
470 "+v8r",
471 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SB, }))
472};
473inline constexpr ArchInfo ARMV8_1A = {
474 VersionTuple{8, 1},
475 AProfile,
476 "armv8.1-a",
477 "+v8.1a",
478 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, }))
479};
480inline constexpr ArchInfo ARMV8_2A = {
481 VersionTuple{8, 2},
482 AProfile,
483 "armv8.2-a",
484 "+v8.2a",
485 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, }))
486};
487inline constexpr ArchInfo ARMV8_3A = {
488 VersionTuple{8, 3},
489 AProfile,
490 "armv8.3-a",
491 "+v8.3a",
492 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, }))
493};
494inline constexpr ArchInfo ARMV8_4A = {
495 VersionTuple{8, 4},
496 AProfile,
497 "armv8.4-a",
498 "+v8.4a",
499 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, }))
500};
501inline constexpr ArchInfo ARMV8_5A = {
502 VersionTuple{8, 5},
503 AProfile,
504 "armv8.5-a",
505 "+v8.5a",
506 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, }))
507};
508inline constexpr ArchInfo ARMV8_6A = {
509 VersionTuple{8, 6},
510 AProfile,
511 "armv8.6-a",
512 "+v8.6a",
513 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_BF16, AArch64::AEK_I8MM, }))
514};
515inline constexpr ArchInfo ARMV8_7A = {
516 VersionTuple{8, 7},
517 AProfile,
518 "armv8.7-a",
519 "+v8.7a",
520 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_WFXT, }))
521};
522inline constexpr ArchInfo ARMV8_8A = {
523 VersionTuple{8, 8},
524 AProfile,
525 "armv8.8-a",
526 "+v8.8a",
527 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_WFXT, AArch64::AEK_MOPS, AArch64::AEK_HBC, }))
528};
529inline constexpr ArchInfo ARMV8_9A = {
530 VersionTuple{8, 9},
531 AProfile,
532 "armv8.9-a",
533 "+v8.9a",
534 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_WFXT, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, }))
535};
536inline constexpr ArchInfo ARMV9A = {
537 VersionTuple{9, 0},
538 AProfile,
539 "armv9-a",
540 "+v9a",
541 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, }))
542};
543inline constexpr ArchInfo ARMV9_1A = {
544 VersionTuple{9, 1},
545 AProfile,
546 "armv9.1-a",
547 "+v9.1a",
548 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_RME, }))
549};
550inline constexpr ArchInfo ARMV9_2A = {
551 VersionTuple{9, 2},
552 AProfile,
553 "armv9.2-a",
554 "+v9.2a",
555 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_RME, AArch64::AEK_MEC, AArch64::AEK_WFXT, }))
556};
557inline constexpr ArchInfo ARMV9_3A = {
558 VersionTuple{9, 3},
559 AProfile,
560 "armv9.3-a",
561 "+v9.3a",
562 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_RME, AArch64::AEK_MEC, AArch64::AEK_WFXT, AArch64::AEK_MOPS, AArch64::AEK_HBC, }))
563};
564inline constexpr ArchInfo ARMV9_4A = {
565 VersionTuple{9, 4},
566 AProfile,
567 "armv9.4-a",
568 "+v9.4a",
569 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_RME, AArch64::AEK_MEC, AArch64::AEK_WFXT, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, }))
570};
571inline constexpr ArchInfo ARMV9_5A = {
572 VersionTuple{9, 5},
573 AProfile,
574 "armv9.5-a",
575 "+v9.5a",
576 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, AArch64::AEK_FCMA, AArch64::AEK_JSCVT, AArch64::AEK_PAUTH, AArch64::AEK_RCPC, AArch64::AEK_CCIDX, AArch64::AEK_DOTPROD, AArch64::AEK_DIT, AArch64::AEK_FLAGM, AArch64::AEK_PREDRES, AArch64::AEK_SSBS, AArch64::AEK_BTI, AArch64::AEK_SB, AArch64::AEK_FP16, AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_RME, AArch64::AEK_MEC, AArch64::AEK_WFXT, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, AArch64::AEK_CPA, AArch64::AEK_LUT, AArch64::AEK_FAMINMAX, }))
577};
578
579/// The set of all architectures
580static constexpr std::array<const ArchInfo *, 17> ArchInfos = {
581 &ARMV8A,
582 &ARMV8R,
583 &ARMV8_1A,
584 &ARMV8_2A,
585 &ARMV8_3A,
586 &ARMV8_4A,
587 &ARMV8_5A,
588 &ARMV8_6A,
589 &ARMV8_7A,
590 &ARMV8_8A,
591 &ARMV8_9A,
592 &ARMV9A,
593 &ARMV9_1A,
594 &ARMV9_2A,
595 &ARMV9_3A,
596 &ARMV9_4A,
597 &ARMV9_5A,
598};
599#undef EMIT_ARCHITECTURES
600#endif // EMIT_ARCHITECTURES
601
602#ifdef EMIT_CPU_ALIAS
603inline constexpr Alias CpuAliases[] = {
604 { "cobalt-100", "neoverse-n2" },
605 { "grace", "neoverse-v2" },
606 { "cyclone", "apple-a7" },
607 { "apple-a8", "apple-a7" },
608 { "apple-a9", "apple-a7" },
609 { "apple-s4", "apple-a12" },
610 { "apple-s5", "apple-a12" },
611 { "apple-m1", "apple-a14" },
612 { "apple-m2", "apple-a15" },
613 { "apple-m3", "apple-a16" },
614 { "apple-latest", "apple-m4" },
615};
616#undef EMIT_CPU_ALIAS
617#endif // EMIT_CPU_ALIAS
618
619#ifdef EMIT_CPU_INFO
620inline constexpr CpuInfo CpuInfos[] = {
621 {
622 "generic",
623 ARMV8A,
624 AArch64::ExtensionBitset({
625 AArch64::AEK_FP,
626 AArch64::AEK_SIMD,
627 AArch64::AEK_ETE,
628 })
629 },
630 {
631 "cortex-a35",
632 ARMV8A,
633 AArch64::ExtensionBitset({
634 AArch64::AEK_CRC,
635 AArch64::AEK_SHA2,
636 AArch64::AEK_AES,
637 AArch64::AEK_FP,
638 AArch64::AEK_SIMD,
639 AArch64::AEK_PERFMON,
640 })
641 },
642 {
643 "cortex-a34",
644 ARMV8A,
645 AArch64::ExtensionBitset({
646 AArch64::AEK_CRC,
647 AArch64::AEK_SHA2,
648 AArch64::AEK_AES,
649 AArch64::AEK_FP,
650 AArch64::AEK_SIMD,
651 AArch64::AEK_PERFMON,
652 })
653 },
654 {
655 "cortex-a53",
656 ARMV8A,
657 AArch64::ExtensionBitset({
658 AArch64::AEK_CRC,
659 AArch64::AEK_SHA2,
660 AArch64::AEK_AES,
661 AArch64::AEK_FP,
662 AArch64::AEK_SIMD,
663 AArch64::AEK_PERFMON,
664 })
665 },
666 {
667 "cortex-a55",
668 ARMV8_2A,
669 AArch64::ExtensionBitset({
670 AArch64::AEK_SHA2,
671 AArch64::AEK_AES,
672 AArch64::AEK_FP,
673 AArch64::AEK_SIMD,
674 AArch64::AEK_FP16,
675 AArch64::AEK_DOTPROD,
676 AArch64::AEK_RCPC,
677 AArch64::AEK_PERFMON,
678 AArch64::AEK_CRC,
679 AArch64::AEK_LSE,
680 AArch64::AEK_RAS,
681 AArch64::AEK_RDM,
682 })
683 },
684 {
685 "cortex-a510",
686 ARMV9A,
687 AArch64::ExtensionBitset({
688 AArch64::AEK_SIMD,
689 AArch64::AEK_PERFMON,
690 AArch64::AEK_I8MM,
691 AArch64::AEK_BF16,
692 AArch64::AEK_AM,
693 AArch64::AEK_MTE,
694 AArch64::AEK_ETE,
695 AArch64::AEK_SVE2BITPERM,
696 AArch64::AEK_FP16FML,
697 AArch64::AEK_CCIDX,
698 AArch64::AEK_SB,
699 AArch64::AEK_PAUTH,
700 AArch64::AEK_SSBS,
701 AArch64::AEK_SVE,
702 AArch64::AEK_SVE2,
703 AArch64::AEK_FCMA,
704 AArch64::AEK_CRC,
705 AArch64::AEK_DOTPROD,
706 AArch64::AEK_FP,
707 AArch64::AEK_FP16,
708 AArch64::AEK_JSCVT,
709 AArch64::AEK_LSE,
710 AArch64::AEK_RAS,
711 AArch64::AEK_RCPC,
712 AArch64::AEK_RDM,
713 })
714 },
715 {
716 "cortex-a520",
717 ARMV9_2A,
718 AArch64::ExtensionBitset({
719 AArch64::AEK_PERFMON,
720 AArch64::AEK_AM,
721 AArch64::AEK_MTE,
722 AArch64::AEK_ETE,
723 AArch64::AEK_SVE2BITPERM,
724 AArch64::AEK_FP16FML,
725 AArch64::AEK_CCIDX,
726 AArch64::AEK_SB,
727 AArch64::AEK_SSBS,
728 AArch64::AEK_PAUTH,
729 AArch64::AEK_FLAGM,
730 AArch64::AEK_PREDRES,
731 AArch64::AEK_SVE,
732 AArch64::AEK_SVE2,
733 AArch64::AEK_BF16,
734 AArch64::AEK_FCMA,
735 AArch64::AEK_CRC,
736 AArch64::AEK_FP,
737 AArch64::AEK_FP16,
738 AArch64::AEK_I8MM,
739 AArch64::AEK_JSCVT,
740 AArch64::AEK_SIMD,
741 AArch64::AEK_LSE,
742 AArch64::AEK_RAS,
743 AArch64::AEK_RCPC,
744 AArch64::AEK_RDM,
745 AArch64::AEK_DOTPROD,
746 })
747 },
748 {
749 "cortex-a520ae",
750 ARMV9_2A,
751 AArch64::ExtensionBitset({
752 AArch64::AEK_PERFMON,
753 AArch64::AEK_AM,
754 AArch64::AEK_MTE,
755 AArch64::AEK_ETE,
756 AArch64::AEK_SVE2BITPERM,
757 AArch64::AEK_FP16FML,
758 AArch64::AEK_CCIDX,
759 AArch64::AEK_SB,
760 AArch64::AEK_SSBS,
761 AArch64::AEK_PAUTH,
762 AArch64::AEK_FLAGM,
763 AArch64::AEK_PREDRES,
764 AArch64::AEK_SVE,
765 AArch64::AEK_SVE2,
766 AArch64::AEK_BF16,
767 AArch64::AEK_FCMA,
768 AArch64::AEK_CRC,
769 AArch64::AEK_FP,
770 AArch64::AEK_FP16,
771 AArch64::AEK_I8MM,
772 AArch64::AEK_JSCVT,
773 AArch64::AEK_SIMD,
774 AArch64::AEK_LSE,
775 AArch64::AEK_RAS,
776 AArch64::AEK_RCPC,
777 AArch64::AEK_RDM,
778 AArch64::AEK_DOTPROD,
779 })
780 },
781 {
782 "cortex-a57",
783 ARMV8A,
784 AArch64::ExtensionBitset({
785 AArch64::AEK_CRC,
786 AArch64::AEK_SHA2,
787 AArch64::AEK_AES,
788 AArch64::AEK_FP,
789 AArch64::AEK_SIMD,
790 AArch64::AEK_PERFMON,
791 })
792 },
793 {
794 "cortex-a65",
795 ARMV8_2A,
796 AArch64::ExtensionBitset({
797 AArch64::AEK_SHA2,
798 AArch64::AEK_AES,
799 AArch64::AEK_FP,
800 AArch64::AEK_SIMD,
801 AArch64::AEK_FP16,
802 AArch64::AEK_DOTPROD,
803 AArch64::AEK_RCPC,
804 AArch64::AEK_SSBS,
805 AArch64::AEK_RAS,
806 AArch64::AEK_PERFMON,
807 AArch64::AEK_CRC,
808 AArch64::AEK_LSE,
809 AArch64::AEK_RDM,
810 })
811 },
812 {
813 "cortex-a65ae",
814 ARMV8_2A,
815 AArch64::ExtensionBitset({
816 AArch64::AEK_SHA2,
817 AArch64::AEK_AES,
818 AArch64::AEK_FP,
819 AArch64::AEK_SIMD,
820 AArch64::AEK_FP16,
821 AArch64::AEK_DOTPROD,
822 AArch64::AEK_RCPC,
823 AArch64::AEK_SSBS,
824 AArch64::AEK_RAS,
825 AArch64::AEK_PERFMON,
826 AArch64::AEK_CRC,
827 AArch64::AEK_LSE,
828 AArch64::AEK_RDM,
829 })
830 },
831 {
832 "cortex-a72",
833 ARMV8A,
834 AArch64::ExtensionBitset({
835 AArch64::AEK_CRC,
836 AArch64::AEK_SHA2,
837 AArch64::AEK_AES,
838 AArch64::AEK_FP,
839 AArch64::AEK_SIMD,
840 AArch64::AEK_PERFMON,
841 })
842 },
843 {
844 "cortex-a73",
845 ARMV8A,
846 AArch64::ExtensionBitset({
847 AArch64::AEK_CRC,
848 AArch64::AEK_SHA2,
849 AArch64::AEK_AES,
850 AArch64::AEK_FP,
851 AArch64::AEK_SIMD,
852 AArch64::AEK_PERFMON,
853 })
854 },
855 {
856 "cortex-a75",
857 ARMV8_2A,
858 AArch64::ExtensionBitset({
859 AArch64::AEK_SHA2,
860 AArch64::AEK_AES,
861 AArch64::AEK_FP,
862 AArch64::AEK_SIMD,
863 AArch64::AEK_FP16,
864 AArch64::AEK_DOTPROD,
865 AArch64::AEK_RCPC,
866 AArch64::AEK_PERFMON,
867 AArch64::AEK_CRC,
868 AArch64::AEK_LSE,
869 AArch64::AEK_RAS,
870 AArch64::AEK_RDM,
871 })
872 },
873 {
874 "cortex-a76",
875 ARMV8_2A,
876 AArch64::ExtensionBitset({
877 AArch64::AEK_SHA2,
878 AArch64::AEK_AES,
879 AArch64::AEK_FP,
880 AArch64::AEK_SIMD,
881 AArch64::AEK_FP16,
882 AArch64::AEK_DOTPROD,
883 AArch64::AEK_RCPC,
884 AArch64::AEK_SSBS,
885 AArch64::AEK_PERFMON,
886 AArch64::AEK_CRC,
887 AArch64::AEK_LSE,
888 AArch64::AEK_RAS,
889 AArch64::AEK_RDM,
890 })
891 },
892 {
893 "cortex-a76ae",
894 ARMV8_2A,
895 AArch64::ExtensionBitset({
896 AArch64::AEK_SHA2,
897 AArch64::AEK_AES,
898 AArch64::AEK_FP,
899 AArch64::AEK_SIMD,
900 AArch64::AEK_FP16,
901 AArch64::AEK_DOTPROD,
902 AArch64::AEK_RCPC,
903 AArch64::AEK_SSBS,
904 AArch64::AEK_PERFMON,
905 AArch64::AEK_CRC,
906 AArch64::AEK_LSE,
907 AArch64::AEK_RAS,
908 AArch64::AEK_RDM,
909 })
910 },
911 {
912 "cortex-a77",
913 ARMV8_2A,
914 AArch64::ExtensionBitset({
915 AArch64::AEK_SHA2,
916 AArch64::AEK_AES,
917 AArch64::AEK_FP,
918 AArch64::AEK_SIMD,
919 AArch64::AEK_FP16,
920 AArch64::AEK_DOTPROD,
921 AArch64::AEK_RCPC,
922 AArch64::AEK_PERFMON,
923 AArch64::AEK_SSBS,
924 AArch64::AEK_CRC,
925 AArch64::AEK_LSE,
926 AArch64::AEK_RAS,
927 AArch64::AEK_RDM,
928 })
929 },
930 {
931 "cortex-a78",
932 ARMV8_2A,
933 AArch64::ExtensionBitset({
934 AArch64::AEK_SHA2,
935 AArch64::AEK_AES,
936 AArch64::AEK_FP,
937 AArch64::AEK_SIMD,
938 AArch64::AEK_FP16,
939 AArch64::AEK_DOTPROD,
940 AArch64::AEK_RCPC,
941 AArch64::AEK_PERFMON,
942 AArch64::AEK_PROFILE,
943 AArch64::AEK_SSBS,
944 AArch64::AEK_CRC,
945 AArch64::AEK_LSE,
946 AArch64::AEK_RAS,
947 AArch64::AEK_RDM,
948 })
949 },
950 {
951 "cortex-a78ae",
952 ARMV8_2A,
953 AArch64::ExtensionBitset({
954 AArch64::AEK_SHA2,
955 AArch64::AEK_AES,
956 AArch64::AEK_FP,
957 AArch64::AEK_SIMD,
958 AArch64::AEK_FP16,
959 AArch64::AEK_DOTPROD,
960 AArch64::AEK_RCPC,
961 AArch64::AEK_PERFMON,
962 AArch64::AEK_PROFILE,
963 AArch64::AEK_SSBS,
964 AArch64::AEK_CRC,
965 AArch64::AEK_LSE,
966 AArch64::AEK_RAS,
967 AArch64::AEK_RDM,
968 })
969 },
970 {
971 "cortex-a78c",
972 ARMV8_2A,
973 AArch64::ExtensionBitset({
974 AArch64::AEK_SHA2,
975 AArch64::AEK_AES,
976 AArch64::AEK_FP,
977 AArch64::AEK_SIMD,
978 AArch64::AEK_FP16,
979 AArch64::AEK_DOTPROD,
980 AArch64::AEK_FLAGM,
981 AArch64::AEK_PAUTH,
982 AArch64::AEK_PERFMON,
983 AArch64::AEK_RCPC,
984 AArch64::AEK_PROFILE,
985 AArch64::AEK_SSBS,
986 AArch64::AEK_CRC,
987 AArch64::AEK_LSE,
988 AArch64::AEK_RAS,
989 AArch64::AEK_RDM,
990 })
991 },
992 {
993 "cortex-a710",
994 ARMV9A,
995 AArch64::ExtensionBitset({
996 AArch64::AEK_SIMD,
997 AArch64::AEK_PERFMON,
998 AArch64::AEK_CCIDX,
999 AArch64::AEK_SSBS,
1000 AArch64::AEK_ETE,
1001 AArch64::AEK_MTE,
1002 AArch64::AEK_FP16FML,
1003 AArch64::AEK_SVE2BITPERM,
1004 AArch64::AEK_BF16,
1005 AArch64::AEK_I8MM,
1006 AArch64::AEK_PAUTH,
1007 AArch64::AEK_FLAGM,
1008 AArch64::AEK_SB,
1009 AArch64::AEK_SVE,
1010 AArch64::AEK_SVE2,
1011 AArch64::AEK_FCMA,
1012 AArch64::AEK_CRC,
1013 AArch64::AEK_DOTPROD,
1014 AArch64::AEK_FP,
1015 AArch64::AEK_FP16,
1016 AArch64::AEK_JSCVT,
1017 AArch64::AEK_LSE,
1018 AArch64::AEK_RAS,
1019 AArch64::AEK_RCPC,
1020 AArch64::AEK_RDM,
1021 })
1022 },
1023 {
1024 "cortex-a715",
1025 ARMV9A,
1026 AArch64::ExtensionBitset({
1027 AArch64::AEK_SIMD,
1028 AArch64::AEK_MTE,
1029 AArch64::AEK_CCIDX,
1030 AArch64::AEK_FP16FML,
1031 AArch64::AEK_SVE,
1032 AArch64::AEK_TRBE,
1033 AArch64::AEK_SVE2BITPERM,
1034 AArch64::AEK_BF16,
1035 AArch64::AEK_ETE,
1036 AArch64::AEK_PERFMON,
1037 AArch64::AEK_I8MM,
1038 AArch64::AEK_PROFILE,
1039 AArch64::AEK_SB,
1040 AArch64::AEK_SSBS,
1041 AArch64::AEK_FP16,
1042 AArch64::AEK_PAUTH,
1043 AArch64::AEK_PREDRES,
1044 AArch64::AEK_FLAGM,
1045 AArch64::AEK_SVE2,
1046 AArch64::AEK_FCMA,
1047 AArch64::AEK_CRC,
1048 AArch64::AEK_DOTPROD,
1049 AArch64::AEK_FP,
1050 AArch64::AEK_JSCVT,
1051 AArch64::AEK_LSE,
1052 AArch64::AEK_RAS,
1053 AArch64::AEK_RCPC,
1054 AArch64::AEK_RDM,
1055 })
1056 },
1057 {
1058 "cortex-a720",
1059 ARMV9_2A,
1060 AArch64::ExtensionBitset({
1061 AArch64::AEK_MTE,
1062 AArch64::AEK_FP16FML,
1063 AArch64::AEK_CCIDX,
1064 AArch64::AEK_TRBE,
1065 AArch64::AEK_SVE2BITPERM,
1066 AArch64::AEK_ETE,
1067 AArch64::AEK_PERFMON,
1068 AArch64::AEK_PROFILE,
1069 AArch64::AEK_SPE_EEF,
1070 AArch64::AEK_SB,
1071 AArch64::AEK_SSBS,
1072 AArch64::AEK_PAUTH,
1073 AArch64::AEK_FLAGM,
1074 AArch64::AEK_PREDRES,
1075 AArch64::AEK_SVE,
1076 AArch64::AEK_SVE2,
1077 AArch64::AEK_BF16,
1078 AArch64::AEK_FCMA,
1079 AArch64::AEK_CRC,
1080 AArch64::AEK_DOTPROD,
1081 AArch64::AEK_FP,
1082 AArch64::AEK_FP16,
1083 AArch64::AEK_I8MM,
1084 AArch64::AEK_JSCVT,
1085 AArch64::AEK_LSE,
1086 AArch64::AEK_SIMD,
1087 AArch64::AEK_RAS,
1088 AArch64::AEK_RCPC,
1089 AArch64::AEK_RDM,
1090 })
1091 },
1092 {
1093 "cortex-a720ae",
1094 ARMV9_2A,
1095 AArch64::ExtensionBitset({
1096 AArch64::AEK_MTE,
1097 AArch64::AEK_FP16FML,
1098 AArch64::AEK_CCIDX,
1099 AArch64::AEK_TRBE,
1100 AArch64::AEK_SVE2BITPERM,
1101 AArch64::AEK_ETE,
1102 AArch64::AEK_PERFMON,
1103 AArch64::AEK_PROFILE,
1104 AArch64::AEK_SPE_EEF,
1105 AArch64::AEK_SB,
1106 AArch64::AEK_SSBS,
1107 AArch64::AEK_PAUTH,
1108 AArch64::AEK_FLAGM,
1109 AArch64::AEK_PREDRES,
1110 AArch64::AEK_SVE,
1111 AArch64::AEK_SVE2,
1112 AArch64::AEK_BF16,
1113 AArch64::AEK_FCMA,
1114 AArch64::AEK_CRC,
1115 AArch64::AEK_DOTPROD,
1116 AArch64::AEK_FP,
1117 AArch64::AEK_FP16,
1118 AArch64::AEK_I8MM,
1119 AArch64::AEK_JSCVT,
1120 AArch64::AEK_LSE,
1121 AArch64::AEK_SIMD,
1122 AArch64::AEK_RAS,
1123 AArch64::AEK_RCPC,
1124 AArch64::AEK_RDM,
1125 })
1126 },
1127 {
1128 "cortex-a725",
1129 ARMV9_2A,
1130 AArch64::ExtensionBitset({
1131 AArch64::AEK_MTE,
1132 AArch64::AEK_FP16FML,
1133 AArch64::AEK_CCIDX,
1134 AArch64::AEK_ETE,
1135 AArch64::AEK_PERFMON,
1136 AArch64::AEK_PROFILE,
1137 AArch64::AEK_SVE2BITPERM,
1138 AArch64::AEK_SPE_EEF,
1139 AArch64::AEK_TRBE,
1140 AArch64::AEK_FLAGM,
1141 AArch64::AEK_PREDRES,
1142 AArch64::AEK_SB,
1143 AArch64::AEK_SSBS,
1144 AArch64::AEK_SVE,
1145 AArch64::AEK_SVE2,
1146 AArch64::AEK_BF16,
1147 AArch64::AEK_FCMA,
1148 AArch64::AEK_CRC,
1149 AArch64::AEK_DOTPROD,
1150 AArch64::AEK_FP,
1151 AArch64::AEK_FP16,
1152 AArch64::AEK_I8MM,
1153 AArch64::AEK_JSCVT,
1154 AArch64::AEK_LSE,
1155 AArch64::AEK_SIMD,
1156 AArch64::AEK_PAUTH,
1157 AArch64::AEK_RAS,
1158 AArch64::AEK_RCPC,
1159 AArch64::AEK_RDM,
1160 })
1161 },
1162 {
1163 "cortex-r82",
1164 ARMV8R,
1165 AArch64::ExtensionBitset({
1166 AArch64::AEK_PERFMON,
1167 AArch64::AEK_FP16,
1168 AArch64::AEK_FP16FML,
1169 AArch64::AEK_SSBS,
1170 AArch64::AEK_PREDRES,
1171 AArch64::AEK_SB,
1172 AArch64::AEK_RDM,
1173 AArch64::AEK_DOTPROD,
1174 AArch64::AEK_FCMA,
1175 AArch64::AEK_JSCVT,
1176 AArch64::AEK_CCDP,
1177 AArch64::AEK_FLAGM,
1178 AArch64::AEK_CRC,
1179 AArch64::AEK_LSE,
1180 AArch64::AEK_RAS,
1181 AArch64::AEK_FP,
1182 AArch64::AEK_SIMD,
1183 AArch64::AEK_PAUTH,
1184 AArch64::AEK_RCPC,
1185 })
1186 },
1187 {
1188 "cortex-r82ae",
1189 ARMV8R,
1190 AArch64::ExtensionBitset({
1191 AArch64::AEK_PERFMON,
1192 AArch64::AEK_FP16,
1193 AArch64::AEK_FP16FML,
1194 AArch64::AEK_SSBS,
1195 AArch64::AEK_PREDRES,
1196 AArch64::AEK_SB,
1197 AArch64::AEK_RDM,
1198 AArch64::AEK_DOTPROD,
1199 AArch64::AEK_FCMA,
1200 AArch64::AEK_JSCVT,
1201 AArch64::AEK_CCDP,
1202 AArch64::AEK_LSE,
1203 AArch64::AEK_FLAGM,
1204 AArch64::AEK_CRC,
1205 AArch64::AEK_FP,
1206 AArch64::AEK_SIMD,
1207 AArch64::AEK_PAUTH,
1208 AArch64::AEK_RAS,
1209 AArch64::AEK_RCPC,
1210 })
1211 },
1212 {
1213 "cortex-x1",
1214 ARMV8_2A,
1215 AArch64::ExtensionBitset({
1216 AArch64::AEK_SHA2,
1217 AArch64::AEK_AES,
1218 AArch64::AEK_FP,
1219 AArch64::AEK_SIMD,
1220 AArch64::AEK_RCPC,
1221 AArch64::AEK_PERFMON,
1222 AArch64::AEK_PROFILE,
1223 AArch64::AEK_FP16,
1224 AArch64::AEK_DOTPROD,
1225 AArch64::AEK_SSBS,
1226 AArch64::AEK_CRC,
1227 AArch64::AEK_LSE,
1228 AArch64::AEK_RAS,
1229 AArch64::AEK_RDM,
1230 })
1231 },
1232 {
1233 "cortex-x1c",
1234 ARMV8_2A,
1235 AArch64::ExtensionBitset({
1236 AArch64::AEK_SHA2,
1237 AArch64::AEK_AES,
1238 AArch64::AEK_FP,
1239 AArch64::AEK_SIMD,
1240 AArch64::AEK_RCPC_IMMO,
1241 AArch64::AEK_PERFMON,
1242 AArch64::AEK_PROFILE,
1243 AArch64::AEK_FP16,
1244 AArch64::AEK_DOTPROD,
1245 AArch64::AEK_PAUTH,
1246 AArch64::AEK_SSBS,
1247 AArch64::AEK_FLAGM,
1248 AArch64::AEK_LSE2,
1249 AArch64::AEK_RCPC,
1250 AArch64::AEK_CRC,
1251 AArch64::AEK_LSE,
1252 AArch64::AEK_RAS,
1253 AArch64::AEK_RDM,
1254 })
1255 },
1256 {
1257 "cortex-x2",
1258 ARMV9A,
1259 AArch64::ExtensionBitset({
1260 AArch64::AEK_SIMD,
1261 AArch64::AEK_PERFMON,
1262 AArch64::AEK_I8MM,
1263 AArch64::AEK_BF16,
1264 AArch64::AEK_AM,
1265 AArch64::AEK_MTE,
1266 AArch64::AEK_ETE,
1267 AArch64::AEK_SVE2BITPERM,
1268 AArch64::AEK_FP16FML,
1269 AArch64::AEK_CCIDX,
1270 AArch64::AEK_PAUTH,
1271 AArch64::AEK_SSBS,
1272 AArch64::AEK_SB,
1273 AArch64::AEK_SVE,
1274 AArch64::AEK_SVE2,
1275 AArch64::AEK_FLAGM,
1276 AArch64::AEK_FCMA,
1277 AArch64::AEK_CRC,
1278 AArch64::AEK_DOTPROD,
1279 AArch64::AEK_FP,
1280 AArch64::AEK_FP16,
1281 AArch64::AEK_JSCVT,
1282 AArch64::AEK_LSE,
1283 AArch64::AEK_RAS,
1284 AArch64::AEK_RCPC,
1285 AArch64::AEK_RDM,
1286 })
1287 },
1288 {
1289 "cortex-x3",
1290 ARMV9A,
1291 AArch64::ExtensionBitset({
1292 AArch64::AEK_SVE,
1293 AArch64::AEK_SIMD,
1294 AArch64::AEK_PERFMON,
1295 AArch64::AEK_ETE,
1296 AArch64::AEK_TRBE,
1297 AArch64::AEK_PROFILE,
1298 AArch64::AEK_BF16,
1299 AArch64::AEK_I8MM,
1300 AArch64::AEK_MTE,
1301 AArch64::AEK_SVE2BITPERM,
1302 AArch64::AEK_FP16,
1303 AArch64::AEK_FP16FML,
1304 AArch64::AEK_CCIDX,
1305 AArch64::AEK_SB,
1306 AArch64::AEK_PAUTH,
1307 AArch64::AEK_PREDRES,
1308 AArch64::AEK_FLAGM,
1309 AArch64::AEK_SSBS,
1310 AArch64::AEK_SVE2,
1311 AArch64::AEK_FCMA,
1312 AArch64::AEK_CRC,
1313 AArch64::AEK_FP,
1314 AArch64::AEK_JSCVT,
1315 AArch64::AEK_LSE,
1316 AArch64::AEK_RAS,
1317 AArch64::AEK_RCPC,
1318 AArch64::AEK_RDM,
1319 AArch64::AEK_DOTPROD,
1320 })
1321 },
1322 {
1323 "cortex-x4",
1324 ARMV9_2A,
1325 AArch64::ExtensionBitset({
1326 AArch64::AEK_PERFMON,
1327 AArch64::AEK_ETE,
1328 AArch64::AEK_TRBE,
1329 AArch64::AEK_PROFILE,
1330 AArch64::AEK_MTE,
1331 AArch64::AEK_SVE2BITPERM,
1332 AArch64::AEK_FP16FML,
1333 AArch64::AEK_SPE_EEF,
1334 AArch64::AEK_CCIDX,
1335 AArch64::AEK_SB,
1336 AArch64::AEK_SSBS,
1337 AArch64::AEK_PAUTH,
1338 AArch64::AEK_FLAGM,
1339 AArch64::AEK_PREDRES,
1340 AArch64::AEK_SVE,
1341 AArch64::AEK_SVE2,
1342 AArch64::AEK_FCMA,
1343 AArch64::AEK_CRC,
1344 AArch64::AEK_DOTPROD,
1345 AArch64::AEK_FP,
1346 AArch64::AEK_FP16,
1347 AArch64::AEK_I8MM,
1348 AArch64::AEK_JSCVT,
1349 AArch64::AEK_LSE,
1350 AArch64::AEK_SIMD,
1351 AArch64::AEK_RAS,
1352 AArch64::AEK_RCPC,
1353 AArch64::AEK_RDM,
1354 AArch64::AEK_BF16,
1355 })
1356 },
1357 {
1358 "cortex-x925",
1359 ARMV9_2A,
1360 AArch64::ExtensionBitset({
1361 AArch64::AEK_MTE,
1362 AArch64::AEK_FP16FML,
1363 AArch64::AEK_CCIDX,
1364 AArch64::AEK_ETE,
1365 AArch64::AEK_PERFMON,
1366 AArch64::AEK_PROFILE,
1367 AArch64::AEK_SVE2BITPERM,
1368 AArch64::AEK_SPE_EEF,
1369 AArch64::AEK_TRBE,
1370 AArch64::AEK_FLAGM,
1371 AArch64::AEK_PREDRES,
1372 AArch64::AEK_SB,
1373 AArch64::AEK_SSBS,
1374 AArch64::AEK_SVE,
1375 AArch64::AEK_SVE2,
1376 AArch64::AEK_BF16,
1377 AArch64::AEK_FCMA,
1378 AArch64::AEK_CRC,
1379 AArch64::AEK_DOTPROD,
1380 AArch64::AEK_FP,
1381 AArch64::AEK_FP16,
1382 AArch64::AEK_I8MM,
1383 AArch64::AEK_JSCVT,
1384 AArch64::AEK_LSE,
1385 AArch64::AEK_SIMD,
1386 AArch64::AEK_PAUTH,
1387 AArch64::AEK_RAS,
1388 AArch64::AEK_RCPC,
1389 AArch64::AEK_RDM,
1390 })
1391 },
1392 {
1393 "neoverse-e1",
1394 ARMV8_2A,
1395 AArch64::ExtensionBitset({
1396 AArch64::AEK_SHA2,
1397 AArch64::AEK_AES,
1398 AArch64::AEK_DOTPROD,
1399 AArch64::AEK_FP,
1400 AArch64::AEK_FP16,
1401 AArch64::AEK_SIMD,
1402 AArch64::AEK_RCPC,
1403 AArch64::AEK_SSBS,
1404 AArch64::AEK_PERFMON,
1405 AArch64::AEK_CRC,
1406 AArch64::AEK_LSE,
1407 AArch64::AEK_RAS,
1408 AArch64::AEK_RDM,
1409 })
1410 },
1411 {
1412 "neoverse-n1",
1413 ARMV8_2A,
1414 AArch64::ExtensionBitset({
1415 AArch64::AEK_SHA2,
1416 AArch64::AEK_AES,
1417 AArch64::AEK_DOTPROD,
1418 AArch64::AEK_FP,
1419 AArch64::AEK_FP16,
1420 AArch64::AEK_SIMD,
1421 AArch64::AEK_RCPC,
1422 AArch64::AEK_PROFILE,
1423 AArch64::AEK_SSBS,
1424 AArch64::AEK_PERFMON,
1425 AArch64::AEK_CRC,
1426 AArch64::AEK_LSE,
1427 AArch64::AEK_RAS,
1428 AArch64::AEK_RDM,
1429 })
1430 },
1431 {
1432 "neoverse-n2",
1433 ARMV9A,
1434 AArch64::ExtensionBitset({
1435 AArch64::AEK_BF16,
1436 AArch64::AEK_ETE,
1437 AArch64::AEK_FP16FML,
1438 AArch64::AEK_I8MM,
1439 AArch64::AEK_MTE,
1440 AArch64::AEK_SVE2,
1441 AArch64::AEK_SVE2BITPERM,
1442 AArch64::AEK_TRBE,
1443 AArch64::AEK_PERFMON,
1444 AArch64::AEK_CCIDX,
1445 AArch64::AEK_DOTPROD,
1446 AArch64::AEK_FP16,
1447 AArch64::AEK_SB,
1448 AArch64::AEK_SSBS,
1449 AArch64::AEK_SVE,
1450 AArch64::AEK_FCMA,
1451 AArch64::AEK_CRC,
1452 AArch64::AEK_FP,
1453 AArch64::AEK_JSCVT,
1454 AArch64::AEK_LSE,
1455 AArch64::AEK_SIMD,
1456 AArch64::AEK_PAUTH,
1457 AArch64::AEK_RAS,
1458 AArch64::AEK_RCPC,
1459 AArch64::AEK_RDM,
1460 })
1461 },
1462 {
1463 "neoverse-n3",
1464 ARMV9_2A,
1465 AArch64::ExtensionBitset({
1466 AArch64::AEK_ETE,
1467 AArch64::AEK_FP16FML,
1468 AArch64::AEK_FP16,
1469 AArch64::AEK_MTE,
1470 AArch64::AEK_PERFMON,
1471 AArch64::AEK_RAND,
1472 AArch64::AEK_PROFILE,
1473 AArch64::AEK_SPE_EEF,
1474 AArch64::AEK_SVE2BITPERM,
1475 AArch64::AEK_CCIDX,
1476 AArch64::AEK_SSBS,
1477 AArch64::AEK_SB,
1478 AArch64::AEK_PREDRES,
1479 AArch64::AEK_PAUTH,
1480 AArch64::AEK_FLAGM,
1481 AArch64::AEK_SVE,
1482 AArch64::AEK_SVE2,
1483 AArch64::AEK_BF16,
1484 AArch64::AEK_FCMA,
1485 AArch64::AEK_CRC,
1486 AArch64::AEK_DOTPROD,
1487 AArch64::AEK_FP,
1488 AArch64::AEK_I8MM,
1489 AArch64::AEK_JSCVT,
1490 AArch64::AEK_LSE,
1491 AArch64::AEK_RAS,
1492 AArch64::AEK_RCPC,
1493 AArch64::AEK_RDM,
1494 AArch64::AEK_SIMD,
1495 })
1496 },
1497 {
1498 "neoverse-512tvb",
1499 ARMV8_4A,
1500 AArch64::ExtensionBitset({
1501 AArch64::AEK_BF16,
1502 AArch64::AEK_CCDP,
1503 AArch64::AEK_SHA2,
1504 AArch64::AEK_AES,
1505 AArch64::AEK_FP,
1506 AArch64::AEK_FP16FML,
1507 AArch64::AEK_FP16,
1508 AArch64::AEK_I8MM,
1509 AArch64::AEK_SIMD,
1510 AArch64::AEK_PERFMON,
1511 AArch64::AEK_RAND,
1512 AArch64::AEK_PROFILE,
1513 AArch64::AEK_SSBS,
1514 AArch64::AEK_SVE,
1515 AArch64::AEK_CCIDX,
1516 AArch64::AEK_SHA3,
1517 AArch64::AEK_SM4,
1518 AArch64::AEK_DOTPROD,
1519 AArch64::AEK_FCMA,
1520 AArch64::AEK_CRC,
1521 AArch64::AEK_JSCVT,
1522 AArch64::AEK_LSE,
1523 AArch64::AEK_PAUTH,
1524 AArch64::AEK_RAS,
1525 AArch64::AEK_RCPC,
1526 AArch64::AEK_RDM,
1527 })
1528 },
1529 {
1530 "neoverse-v1",
1531 ARMV8_4A,
1532 AArch64::ExtensionBitset({
1533 AArch64::AEK_BF16,
1534 AArch64::AEK_CCDP,
1535 AArch64::AEK_SHA2,
1536 AArch64::AEK_AES,
1537 AArch64::AEK_FP,
1538 AArch64::AEK_FP16FML,
1539 AArch64::AEK_FP16,
1540 AArch64::AEK_I8MM,
1541 AArch64::AEK_SIMD,
1542 AArch64::AEK_PERFMON,
1543 AArch64::AEK_RAND,
1544 AArch64::AEK_PROFILE,
1545 AArch64::AEK_SSBS,
1546 AArch64::AEK_SVE,
1547 AArch64::AEK_CCIDX,
1548 AArch64::AEK_SHA3,
1549 AArch64::AEK_SM4,
1550 AArch64::AEK_DOTPROD,
1551 AArch64::AEK_FCMA,
1552 AArch64::AEK_CRC,
1553 AArch64::AEK_JSCVT,
1554 AArch64::AEK_LSE,
1555 AArch64::AEK_PAUTH,
1556 AArch64::AEK_RAS,
1557 AArch64::AEK_RCPC,
1558 AArch64::AEK_RDM,
1559 })
1560 },
1561 {
1562 "neoverse-v2",
1563 ARMV9A,
1564 AArch64::ExtensionBitset({
1565 AArch64::AEK_BF16,
1566 AArch64::AEK_PROFILE,
1567 AArch64::AEK_PERFMON,
1568 AArch64::AEK_ETE,
1569 AArch64::AEK_I8MM,
1570 AArch64::AEK_SIMD,
1571 AArch64::AEK_SVE2BITPERM,
1572 AArch64::AEK_FP16FML,
1573 AArch64::AEK_MTE,
1574 AArch64::AEK_RAND,
1575 AArch64::AEK_CCIDX,
1576 AArch64::AEK_SVE,
1577 AArch64::AEK_SVE2,
1578 AArch64::AEK_SSBS,
1579 AArch64::AEK_FP16,
1580 AArch64::AEK_DOTPROD,
1581 AArch64::AEK_FCMA,
1582 AArch64::AEK_CRC,
1583 AArch64::AEK_FP,
1584 AArch64::AEK_JSCVT,
1585 AArch64::AEK_LSE,
1586 AArch64::AEK_PAUTH,
1587 AArch64::AEK_RAS,
1588 AArch64::AEK_RCPC,
1589 AArch64::AEK_RDM,
1590 })
1591 },
1592 {
1593 "neoverse-v3",
1594 ARMV9_2A,
1595 AArch64::ExtensionBitset({
1596 AArch64::AEK_ETE,
1597 AArch64::AEK_FP16FML,
1598 AArch64::AEK_FP16,
1599 AArch64::AEK_LS64,
1600 AArch64::AEK_MTE,
1601 AArch64::AEK_PERFMON,
1602 AArch64::AEK_RAND,
1603 AArch64::AEK_PROFILE,
1604 AArch64::AEK_CCIDX,
1605 AArch64::AEK_SPE_EEF,
1606 AArch64::AEK_SVE2BITPERM,
1607 AArch64::AEK_BRBE,
1608 AArch64::AEK_SSBS,
1609 AArch64::AEK_SB,
1610 AArch64::AEK_PREDRES,
1611 AArch64::AEK_PAUTH,
1612 AArch64::AEK_FLAGM,
1613 AArch64::AEK_SVE,
1614 AArch64::AEK_SVE2,
1615 AArch64::AEK_BF16,
1616 AArch64::AEK_FCMA,
1617 AArch64::AEK_CRC,
1618 AArch64::AEK_DOTPROD,
1619 AArch64::AEK_FP,
1620 AArch64::AEK_I8MM,
1621 AArch64::AEK_JSCVT,
1622 AArch64::AEK_LSE,
1623 AArch64::AEK_SIMD,
1624 AArch64::AEK_RAS,
1625 AArch64::AEK_RCPC,
1626 AArch64::AEK_RDM,
1627 AArch64::AEK_RME,
1628 })
1629 },
1630 {
1631 "neoverse-v3ae",
1632 ARMV9_2A,
1633 AArch64::ExtensionBitset({
1634 AArch64::AEK_ETE,
1635 AArch64::AEK_FP16FML,
1636 AArch64::AEK_FP16,
1637 AArch64::AEK_LS64,
1638 AArch64::AEK_MTE,
1639 AArch64::AEK_PERFMON,
1640 AArch64::AEK_RAND,
1641 AArch64::AEK_PROFILE,
1642 AArch64::AEK_SPE_EEF,
1643 AArch64::AEK_SVE2BITPERM,
1644 AArch64::AEK_BRBE,
1645 AArch64::AEK_SSBS,
1646 AArch64::AEK_SB,
1647 AArch64::AEK_PREDRES,
1648 AArch64::AEK_PAUTH,
1649 AArch64::AEK_FLAGM,
1650 AArch64::AEK_CCIDX,
1651 AArch64::AEK_SVE,
1652 AArch64::AEK_SVE2,
1653 AArch64::AEK_BF16,
1654 AArch64::AEK_FCMA,
1655 AArch64::AEK_CRC,
1656 AArch64::AEK_DOTPROD,
1657 AArch64::AEK_FP,
1658 AArch64::AEK_I8MM,
1659 AArch64::AEK_JSCVT,
1660 AArch64::AEK_LSE,
1661 AArch64::AEK_SIMD,
1662 AArch64::AEK_RAS,
1663 AArch64::AEK_RCPC,
1664 AArch64::AEK_RDM,
1665 AArch64::AEK_RME,
1666 })
1667 },
1668 {
1669 "exynos-m3",
1670 ARMV8A,
1671 AArch64::ExtensionBitset({
1672 AArch64::AEK_CRC,
1673 AArch64::AEK_SHA2,
1674 AArch64::AEK_AES,
1675 AArch64::AEK_PERFMON,
1676 AArch64::AEK_SIMD,
1677 AArch64::AEK_FP,
1678 })
1679 },
1680 {
1681 "exynos-m4",
1682 ARMV8_2A,
1683 AArch64::ExtensionBitset({
1684 AArch64::AEK_SHA2,
1685 AArch64::AEK_AES,
1686 AArch64::AEK_DOTPROD,
1687 AArch64::AEK_FP16,
1688 AArch64::AEK_PERFMON,
1689 AArch64::AEK_CRC,
1690 AArch64::AEK_FP,
1691 AArch64::AEK_LSE,
1692 AArch64::AEK_SIMD,
1693 AArch64::AEK_RAS,
1694 AArch64::AEK_RDM,
1695 })
1696 },
1697 {
1698 "exynos-m5",
1699 ARMV8_2A,
1700 AArch64::ExtensionBitset({
1701 AArch64::AEK_SHA2,
1702 AArch64::AEK_AES,
1703 AArch64::AEK_DOTPROD,
1704 AArch64::AEK_FP16,
1705 AArch64::AEK_PERFMON,
1706 AArch64::AEK_CRC,
1707 AArch64::AEK_FP,
1708 AArch64::AEK_LSE,
1709 AArch64::AEK_SIMD,
1710 AArch64::AEK_RAS,
1711 AArch64::AEK_RDM,
1712 })
1713 },
1714 {
1715 "falkor",
1716 ARMV8A,
1717 AArch64::ExtensionBitset({
1718 AArch64::AEK_CRC,
1719 AArch64::AEK_SHA2,
1720 AArch64::AEK_AES,
1721 AArch64::AEK_FP,
1722 AArch64::AEK_SIMD,
1723 AArch64::AEK_PERFMON,
1724 AArch64::AEK_RDM,
1725 })
1726 },
1727 {
1728 "saphira",
1729 ARMV8_4A,
1730 AArch64::ExtensionBitset({
1731 AArch64::AEK_SHA2,
1732 AArch64::AEK_AES,
1733 AArch64::AEK_FP,
1734 AArch64::AEK_SIMD,
1735 AArch64::AEK_PROFILE,
1736 AArch64::AEK_PERFMON,
1737 AArch64::AEK_CRC,
1738 AArch64::AEK_CCIDX,
1739 AArch64::AEK_LSE,
1740 AArch64::AEK_RDM,
1741 AArch64::AEK_RAS,
1742 AArch64::AEK_RCPC,
1743 })
1744 },
1745 {
1746 "kryo",
1747 ARMV8A,
1748 AArch64::ExtensionBitset({
1749 AArch64::AEK_CRC,
1750 AArch64::AEK_SHA2,
1751 AArch64::AEK_AES,
1752 AArch64::AEK_FP,
1753 AArch64::AEK_SIMD,
1754 AArch64::AEK_PERFMON,
1755 })
1756 },
1757 {
1758 "thunderx",
1759 ARMV8A,
1760 AArch64::ExtensionBitset({
1761 AArch64::AEK_CRC,
1762 AArch64::AEK_SHA2,
1763 AArch64::AEK_AES,
1764 AArch64::AEK_FP,
1765 AArch64::AEK_PERFMON,
1766 AArch64::AEK_SIMD,
1767 })
1768 },
1769 {
1770 "thunderxt88",
1771 ARMV8A,
1772 AArch64::ExtensionBitset({
1773 AArch64::AEK_CRC,
1774 AArch64::AEK_SHA2,
1775 AArch64::AEK_AES,
1776 AArch64::AEK_FP,
1777 AArch64::AEK_PERFMON,
1778 AArch64::AEK_SIMD,
1779 })
1780 },
1781 {
1782 "thunderxt81",
1783 ARMV8A,
1784 AArch64::ExtensionBitset({
1785 AArch64::AEK_CRC,
1786 AArch64::AEK_SHA2,
1787 AArch64::AEK_AES,
1788 AArch64::AEK_FP,
1789 AArch64::AEK_PERFMON,
1790 AArch64::AEK_SIMD,
1791 })
1792 },
1793 {
1794 "thunderxt83",
1795 ARMV8A,
1796 AArch64::ExtensionBitset({
1797 AArch64::AEK_CRC,
1798 AArch64::AEK_SHA2,
1799 AArch64::AEK_AES,
1800 AArch64::AEK_FP,
1801 AArch64::AEK_PERFMON,
1802 AArch64::AEK_SIMD,
1803 })
1804 },
1805 {
1806 "thunderx2t99",
1807 ARMV8_1A,
1808 AArch64::ExtensionBitset({
1809 AArch64::AEK_CRC,
1810 AArch64::AEK_SHA2,
1811 AArch64::AEK_AES,
1812 AArch64::AEK_FP,
1813 AArch64::AEK_SIMD,
1814 AArch64::AEK_LSE,
1815 AArch64::AEK_RDM,
1816 })
1817 },
1818 {
1819 "thunderx3t110",
1820 ARMV8_3A,
1821 AArch64::ExtensionBitset({
1822 AArch64::AEK_CRC,
1823 AArch64::AEK_SHA2,
1824 AArch64::AEK_AES,
1825 AArch64::AEK_FP,
1826 AArch64::AEK_SIMD,
1827 AArch64::AEK_LSE,
1828 AArch64::AEK_CCIDX,
1829 AArch64::AEK_PAUTH,
1830 AArch64::AEK_PERFMON,
1831 AArch64::AEK_FCMA,
1832 AArch64::AEK_JSCVT,
1833 AArch64::AEK_RAS,
1834 AArch64::AEK_RCPC,
1835 AArch64::AEK_RDM,
1836 })
1837 },
1838 {
1839 "tsv110",
1840 ARMV8_2A,
1841 AArch64::ExtensionBitset({
1842 AArch64::AEK_SHA2,
1843 AArch64::AEK_AES,
1844 AArch64::AEK_FP,
1845 AArch64::AEK_SIMD,
1846 AArch64::AEK_PERFMON,
1847 AArch64::AEK_PROFILE,
1848 AArch64::AEK_FP16,
1849 AArch64::AEK_FP16FML,
1850 AArch64::AEK_DOTPROD,
1851 AArch64::AEK_JSCVT,
1852 AArch64::AEK_FCMA,
1853 AArch64::AEK_CRC,
1854 AArch64::AEK_LSE,
1855 AArch64::AEK_RAS,
1856 AArch64::AEK_RDM,
1857 })
1858 },
1859 {
1860 "apple-a7",
1861 ARMV8A,
1862 AArch64::ExtensionBitset({
1863 AArch64::AEK_SHA2,
1864 AArch64::AEK_AES,
1865 AArch64::AEK_FP,
1866 AArch64::AEK_SIMD,
1867 AArch64::AEK_PERFMON,
1868 })
1869 },
1870 {
1871 "apple-a10",
1872 ARMV8A,
1873 AArch64::ExtensionBitset({
1874 AArch64::AEK_SHA2,
1875 AArch64::AEK_AES,
1876 AArch64::AEK_FP,
1877 AArch64::AEK_SIMD,
1878 AArch64::AEK_PERFMON,
1879 AArch64::AEK_CRC,
1880 AArch64::AEK_RDM,
1881 AArch64::AEK_PAN,
1882 AArch64::AEK_LOR,
1883 AArch64::AEK_VH,
1884 })
1885 },
1886 {
1887 "apple-a11",
1888 ARMV8_2A,
1889 AArch64::ExtensionBitset({
1890 AArch64::AEK_SHA2,
1891 AArch64::AEK_AES,
1892 AArch64::AEK_FP,
1893 AArch64::AEK_SIMD,
1894 AArch64::AEK_PERFMON,
1895 AArch64::AEK_FP16,
1896 AArch64::AEK_CRC,
1897 AArch64::AEK_LSE,
1898 AArch64::AEK_RAS,
1899 AArch64::AEK_RDM,
1900 })
1901 },
1902 {
1903 "apple-a12",
1904 ARMV8_3A,
1905 AArch64::ExtensionBitset({
1906 AArch64::AEK_SHA2,
1907 AArch64::AEK_AES,
1908 AArch64::AEK_FP,
1909 AArch64::AEK_SIMD,
1910 AArch64::AEK_PERFMON,
1911 AArch64::AEK_FP16,
1912 AArch64::AEK_FCMA,
1913 AArch64::AEK_CRC,
1914 AArch64::AEK_JSCVT,
1915 AArch64::AEK_LSE,
1916 AArch64::AEK_PAUTH,
1917 AArch64::AEK_RAS,
1918 AArch64::AEK_RCPC,
1919 AArch64::AEK_RDM,
1920 })
1921 },
1922 {
1923 "apple-a13",
1924 ARMV8_4A,
1925 AArch64::ExtensionBitset({
1926 AArch64::AEK_SHA2,
1927 AArch64::AEK_AES,
1928 AArch64::AEK_FP,
1929 AArch64::AEK_SIMD,
1930 AArch64::AEK_PERFMON,
1931 AArch64::AEK_FP16,
1932 AArch64::AEK_FP16FML,
1933 AArch64::AEK_SHA3,
1934 AArch64::AEK_FCMA,
1935 AArch64::AEK_CRC,
1936 AArch64::AEK_JSCVT,
1937 AArch64::AEK_LSE,
1938 AArch64::AEK_PAUTH,
1939 AArch64::AEK_RAS,
1940 AArch64::AEK_RCPC,
1941 AArch64::AEK_RDM,
1942 AArch64::AEK_DOTPROD,
1943 })
1944 },
1945 {
1946 "apple-a14",
1947 ARMV8_4A,
1948 AArch64::ExtensionBitset({
1949 AArch64::AEK_SHA2,
1950 AArch64::AEK_AES,
1951 AArch64::AEK_FP,
1952 AArch64::AEK_SIMD,
1953 AArch64::AEK_PERFMON,
1954 AArch64::AEK_FP16,
1955 AArch64::AEK_FP16FML,
1956 AArch64::AEK_SHA3,
1957 AArch64::AEK_ALTERNATIVENZCV,
1958 AArch64::AEK_FRINT3264,
1959 AArch64::AEK_SPECRESTRICT,
1960 AArch64::AEK_SSBS,
1961 AArch64::AEK_SB,
1962 AArch64::AEK_PREDRES,
1963 AArch64::AEK_CCDP,
1964 AArch64::AEK_FCMA,
1965 AArch64::AEK_CRC,
1966 AArch64::AEK_JSCVT,
1967 AArch64::AEK_LSE,
1968 AArch64::AEK_PAUTH,
1969 AArch64::AEK_RAS,
1970 AArch64::AEK_RCPC,
1971 AArch64::AEK_RDM,
1972 AArch64::AEK_DOTPROD,
1973 })
1974 },
1975 {
1976 "apple-a15",
1977 ARMV8_6A,
1978 AArch64::ExtensionBitset({
1979 AArch64::AEK_SHA2,
1980 AArch64::AEK_AES,
1981 AArch64::AEK_FP,
1982 AArch64::AEK_SIMD,
1983 AArch64::AEK_PERFMON,
1984 AArch64::AEK_SHA3,
1985 AArch64::AEK_FP16,
1986 AArch64::AEK_FP16FML,
1987 AArch64::AEK_FCMA,
1988 AArch64::AEK_CRC,
1989 AArch64::AEK_JSCVT,
1990 AArch64::AEK_LSE,
1991 AArch64::AEK_PAUTH,
1992 AArch64::AEK_RAS,
1993 AArch64::AEK_RCPC,
1994 AArch64::AEK_RDM,
1995 AArch64::AEK_BF16,
1996 AArch64::AEK_DOTPROD,
1997 AArch64::AEK_I8MM,
1998 AArch64::AEK_SSBS,
1999 })
2000 },
2001 {
2002 "apple-a16",
2003 ARMV8_6A,
2004 AArch64::ExtensionBitset({
2005 AArch64::AEK_SHA2,
2006 AArch64::AEK_AES,
2007 AArch64::AEK_FP,
2008 AArch64::AEK_SIMD,
2009 AArch64::AEK_PERFMON,
2010 AArch64::AEK_SHA3,
2011 AArch64::AEK_FP16,
2012 AArch64::AEK_FP16FML,
2013 AArch64::AEK_HCX,
2014 AArch64::AEK_FCMA,
2015 AArch64::AEK_CRC,
2016 AArch64::AEK_JSCVT,
2017 AArch64::AEK_LSE,
2018 AArch64::AEK_PAUTH,
2019 AArch64::AEK_RAS,
2020 AArch64::AEK_RCPC,
2021 AArch64::AEK_RDM,
2022 AArch64::AEK_BF16,
2023 AArch64::AEK_DOTPROD,
2024 AArch64::AEK_I8MM,
2025 AArch64::AEK_SSBS,
2026 })
2027 },
2028 {
2029 "apple-a17",
2030 ARMV8_6A,
2031 AArch64::ExtensionBitset({
2032 AArch64::AEK_SHA2,
2033 AArch64::AEK_AES,
2034 AArch64::AEK_FP,
2035 AArch64::AEK_SIMD,
2036 AArch64::AEK_PERFMON,
2037 AArch64::AEK_SHA3,
2038 AArch64::AEK_FP16,
2039 AArch64::AEK_FP16FML,
2040 AArch64::AEK_HCX,
2041 AArch64::AEK_FCMA,
2042 AArch64::AEK_CRC,
2043 AArch64::AEK_JSCVT,
2044 AArch64::AEK_LSE,
2045 AArch64::AEK_PAUTH,
2046 AArch64::AEK_RAS,
2047 AArch64::AEK_RCPC,
2048 AArch64::AEK_RDM,
2049 AArch64::AEK_BF16,
2050 AArch64::AEK_DOTPROD,
2051 AArch64::AEK_I8MM,
2052 AArch64::AEK_SSBS,
2053 })
2054 },
2055 {
2056 "apple-m4",
2057 ARMV8_7A,
2058 AArch64::ExtensionBitset({
2059 AArch64::AEK_SHA2,
2060 AArch64::AEK_FP,
2061 AArch64::AEK_SIMD,
2062 AArch64::AEK_PERFMON,
2063 AArch64::AEK_SHA3,
2064 AArch64::AEK_FP16,
2065 AArch64::AEK_FP16FML,
2066 AArch64::AEK_AES,
2067 AArch64::AEK_BF16,
2068 AArch64::AEK_SME,
2069 AArch64::AEK_SME2,
2070 AArch64::AEK_SMEF64F64,
2071 AArch64::AEK_SMEI16I64,
2072 AArch64::AEK_FCMA,
2073 AArch64::AEK_CRC,
2074 AArch64::AEK_JSCVT,
2075 AArch64::AEK_LSE,
2076 AArch64::AEK_PAUTH,
2077 AArch64::AEK_RAS,
2078 AArch64::AEK_RCPC,
2079 AArch64::AEK_RDM,
2080 AArch64::AEK_DOTPROD,
2081 AArch64::AEK_I8MM,
2082 })
2083 },
2084 {
2085 "a64fx",
2086 ARMV8_2A,
2087 AArch64::ExtensionBitset({
2088 AArch64::AEK_FP,
2089 AArch64::AEK_SIMD,
2090 AArch64::AEK_SHA2,
2091 AArch64::AEK_PERFMON,
2092 AArch64::AEK_FP16,
2093 AArch64::AEK_SVE,
2094 AArch64::AEK_FCMA,
2095 AArch64::AEK_AES,
2096 AArch64::AEK_CRC,
2097 AArch64::AEK_LSE,
2098 AArch64::AEK_RAS,
2099 AArch64::AEK_RDM,
2100 })
2101 },
2102 {
2103 "carmel",
2104 ARMV8_2A,
2105 AArch64::ExtensionBitset({
2106 AArch64::AEK_SIMD,
2107 AArch64::AEK_SHA2,
2108 AArch64::AEK_AES,
2109 AArch64::AEK_FP16,
2110 AArch64::AEK_CRC,
2111 AArch64::AEK_LSE,
2112 AArch64::AEK_RAS,
2113 AArch64::AEK_RDM,
2114 AArch64::AEK_FP,
2115 })
2116 },
2117 {
2118 "ampere1",
2119 ARMV8_6A,
2120 AArch64::ExtensionBitset({
2121 AArch64::AEK_SIMD,
2122 AArch64::AEK_PERFMON,
2123 AArch64::AEK_SSBS,
2124 AArch64::AEK_RAND,
2125 AArch64::AEK_SB,
2126 AArch64::AEK_SHA2,
2127 AArch64::AEK_SHA3,
2128 AArch64::AEK_AES,
2129 AArch64::AEK_FP16,
2130 AArch64::AEK_BF16,
2131 AArch64::AEK_FCMA,
2132 AArch64::AEK_CRC,
2133 AArch64::AEK_DOTPROD,
2134 AArch64::AEK_FP,
2135 AArch64::AEK_I8MM,
2136 AArch64::AEK_JSCVT,
2137 AArch64::AEK_CCIDX,
2138 AArch64::AEK_LSE,
2139 AArch64::AEK_PAUTH,
2140 AArch64::AEK_RAS,
2141 AArch64::AEK_RCPC,
2142 AArch64::AEK_RDM,
2143 })
2144 },
2145 {
2146 "ampere1a",
2147 ARMV8_6A,
2148 AArch64::ExtensionBitset({
2149 AArch64::AEK_SIMD,
2150 AArch64::AEK_PERFMON,
2151 AArch64::AEK_MTE,
2152 AArch64::AEK_SSBS,
2153 AArch64::AEK_RAND,
2154 AArch64::AEK_SB,
2155 AArch64::AEK_SM4,
2156 AArch64::AEK_SHA2,
2157 AArch64::AEK_SHA3,
2158 AArch64::AEK_AES,
2159 AArch64::AEK_FP16,
2160 AArch64::AEK_BF16,
2161 AArch64::AEK_FCMA,
2162 AArch64::AEK_CRC,
2163 AArch64::AEK_DOTPROD,
2164 AArch64::AEK_FP,
2165 AArch64::AEK_I8MM,
2166 AArch64::AEK_JSCVT,
2167 AArch64::AEK_LSE,
2168 AArch64::AEK_PAUTH,
2169 AArch64::AEK_RAS,
2170 AArch64::AEK_RCPC,
2171 AArch64::AEK_CCIDX,
2172 AArch64::AEK_RDM,
2173 })
2174 },
2175 {
2176 "ampere1b",
2177 ARMV8_7A,
2178 AArch64::ExtensionBitset({
2179 AArch64::AEK_SIMD,
2180 AArch64::AEK_PERFMON,
2181 AArch64::AEK_MTE,
2182 AArch64::AEK_SSBS,
2183 AArch64::AEK_RAND,
2184 AArch64::AEK_SB,
2185 AArch64::AEK_SM4,
2186 AArch64::AEK_SHA2,
2187 AArch64::AEK_SHA3,
2188 AArch64::AEK_AES,
2189 AArch64::AEK_CSSC,
2190 AArch64::AEK_WFXT,
2191 AArch64::AEK_FP16,
2192 AArch64::AEK_BF16,
2193 AArch64::AEK_FCMA,
2194 AArch64::AEK_CRC,
2195 AArch64::AEK_DOTPROD,
2196 AArch64::AEK_FP,
2197 AArch64::AEK_I8MM,
2198 AArch64::AEK_JSCVT,
2199 AArch64::AEK_LSE,
2200 AArch64::AEK_PAUTH,
2201 AArch64::AEK_RAS,
2202 AArch64::AEK_RCPC,
2203 AArch64::AEK_CCIDX,
2204 AArch64::AEK_RDM,
2205 })
2206 },
2207 {
2208 "oryon-1",
2209 ARMV8_6A,
2210 AArch64::ExtensionBitset({
2211 AArch64::AEK_SIMD,
2212 AArch64::AEK_PERFMON,
2213 AArch64::AEK_RAND,
2214 AArch64::AEK_PAUTH,
2215 AArch64::AEK_SM4,
2216 AArch64::AEK_SHA2,
2217 AArch64::AEK_SHA3,
2218 AArch64::AEK_AES,
2219 AArch64::AEK_PROFILE,
2220 AArch64::AEK_BF16,
2221 AArch64::AEK_FCMA,
2222 AArch64::AEK_CRC,
2223 AArch64::AEK_DOTPROD,
2224 AArch64::AEK_FP,
2225 AArch64::AEK_I8MM,
2226 AArch64::AEK_SSBS,
2227 AArch64::AEK_CCIDX,
2228 AArch64::AEK_JSCVT,
2229 AArch64::AEK_LSE,
2230 AArch64::AEK_RAS,
2231 AArch64::AEK_RCPC,
2232 AArch64::AEK_RDM,
2233 })
2234 },
2235};
2236#undef EMIT_CPU_INFO
2237#endif // EMIT_CPU_INFO
2238
2239