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