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(C1Premium)
15ARM_PROCESSOR_FAMILY(CortexA55)
16ARM_PROCESSOR_FAMILY(MONAKA)
17ARM_PROCESSOR_FAMILY(CortexA78AE)
18ARM_PROCESSOR_FAMILY(CortexX4)
19ARM_PROCESSOR_FAMILY(CortexA520)
20ARM_PROCESSOR_FAMILY(AppleA13)
21ARM_PROCESSOR_FAMILY(CortexA76)
22ARM_PROCESSOR_FAMILY(NeoverseN1)
23ARM_PROCESSOR_FAMILY(Kryo)
24ARM_PROCESSOR_FAMILY(AppleA11)
25ARM_PROCESSOR_FAMILY(AppleA14)
26ARM_PROCESSOR_FAMILY(NeoverseN2)
27ARM_PROCESSOR_FAMILY(AppleA16)
28ARM_PROCESSOR_FAMILY(CortexA73)
29ARM_PROCESSOR_FAMILY(CortexX2)
30ARM_PROCESSOR_FAMILY(AppleA7)
31ARM_PROCESSOR_FAMILY(C1Nano)
32ARM_PROCESSOR_FAMILY(CortexA77)
33ARM_PROCESSOR_FAMILY(CortexA53)
34ARM_PROCESSOR_FAMILY(Ampere1B)
35ARM_PROCESSOR_FAMILY(Ampere1C)
36ARM_PROCESSOR_FAMILY(Ampere1A)
37ARM_PROCESSOR_FAMILY(CortexA35)
38ARM_PROCESSOR_FAMILY(CortexA510)
39ARM_PROCESSOR_FAMILY(ExynosM3)
40ARM_PROCESSOR_FAMILY(NeoverseV1)
41ARM_PROCESSOR_FAMILY(ThunderX)
42ARM_PROCESSOR_FAMILY(CortexA710)
43ARM_PROCESSOR_FAMILY(Ampere1)
44ARM_PROCESSOR_FAMILY(AppleM4)
45ARM_PROCESSOR_FAMILY(Olympus)
46ARM_PROCESSOR_FAMILY(Oryon)
47ARM_PROCESSOR_FAMILY(CortexA78C)
48ARM_PROCESSOR_FAMILY(AppleA12)
49ARM_PROCESSOR_FAMILY(A64FX)
50ARM_PROCESSOR_FAMILY(HIP12)
51ARM_PROCESSOR_FAMILY(AppleM5)
52ARM_PROCESSOR_FAMILY(NeoverseN3)
53ARM_PROCESSOR_FAMILY(NeoverseV2)
54ARM_PROCESSOR_FAMILY(ThunderX3T110)
55ARM_PROCESSOR_FAMILY(CortexA57)
56ARM_PROCESSOR_FAMILY(CortexA75)
57ARM_PROCESSOR_FAMILY(Saphira)
58ARM_PROCESSOR_FAMILY(Carmel)
59ARM_PROCESSOR_FAMILY(CortexA72)
60ARM_PROCESSOR_FAMILY(ThunderXT83)
61ARM_PROCESSOR_FAMILY(NeoverseV3)
62ARM_PROCESSOR_FAMILY(ThunderXT88)
63ARM_PROCESSOR_FAMILY(CortexA320)
64ARM_PROCESSOR_FAMILY(Falkor)
65ARM_PROCESSOR_FAMILY(C1Ultra)
66ARM_PROCESSOR_FAMILY(CortexX3)
67ARM_PROCESSOR_FAMILY(C1Pro)
68ARM_PROCESSOR_FAMILY(CortexA720)
69ARM_PROCESSOR_FAMILY(CortexX1)
70ARM_PROCESSOR_FAMILY(CortexA78)
71ARM_PROCESSOR_FAMILY(NeoverseE1)
72ARM_PROCESSOR_FAMILY(CortexA715)
73ARM_PROCESSOR_FAMILY(AppleA15)
74ARM_PROCESSOR_FAMILY(CortexR82AE)
75ARM_PROCESSOR_FAMILY(AppleA10)
76ARM_PROCESSOR_FAMILY(CortexX925)
77ARM_PROCESSOR_FAMILY(CortexA65)
78ARM_PROCESSOR_FAMILY(NeoverseV3AE)
79
80#undef ARM_PROCESSOR_FAMILY
81
82#ifndef ARM_ARCHITECTURE
83#define ARM_ARCHITECTURE(ENUM)
84#endif
85
86
87#undef ARM_ARCHITECTURE
88
89#ifdef EMIT_ARCHEXTKIND_ENUM
90enum ArchExtKind : unsigned {
91 AEK_AES,
92 AEK_ALTERNATIVENZCV,
93 AEK_AM,
94 AEK_AMVS,
95 AEK_BF16,
96 AEK_BRBE,
97 AEK_BTI,
98 AEK_BTIE,
99 AEK_CCDP,
100 AEK_CCIDX,
101 AEK_CCPP,
102 AEK_CHK,
103 AEK_CLRBHB,
104 AEK_CMPBR,
105 AEK_FCMA,
106 AEK_CPA,
107 AEK_CRC,
108 AEK_CRYPTO,
109 AEK_CSSC,
110 AEK_D128,
111 AEK_DIT,
112 AEK_DOTPROD,
113 AEK_ENHANCEDCOUNTERVIRTUALIZATION,
114 AEK_ETE,
115 AEK_F16F32DOT,
116 AEK_F16F32MM,
117 AEK_F16MM,
118 AEK_F32MM,
119 AEK_F64MM,
120 AEK_F8F16MM,
121 AEK_F8F32MM,
122 AEK_FAMINMAX,
123 AEK_FINEGRAINEDTRAPS,
124 AEK_FLAGM,
125 AEK_FP,
126 AEK_FP16FML,
127 AEK_FP8,
128 AEK_FP8DOT2,
129 AEK_FP8DOT4,
130 AEK_FP8FMA,
131 AEK_FPAC,
132 AEK_FPRCVT,
133 AEK_FRINT3264,
134 AEK_FP16,
135 AEK_GCIE,
136 AEK_GCS,
137 AEK_HBC,
138 AEK_HCX,
139 AEK_I8MM,
140 AEK_ITE,
141 AEK_JSCVT,
142 AEK_LOR,
143 AEK_LS64,
144 AEK_LSCP,
145 AEK_LSE,
146 AEK_LSE128,
147 AEK_LSE2,
148 AEK_LSFE,
149 AEK_LSUI,
150 AEK_LUT,
151 AEK_MEC,
152 AEK_MOPS,
153 AEK_MOPS_GO,
154 AEK_MPAM,
155 AEK_MTE,
156 AEK_MTETC,
157 AEK_SIMD,
158 AEK_NMI,
159 AEK_NV,
160 AEK_OCCMO,
161 AEK_PAN,
162 AEK_PAN_RWV,
163 AEK_PAUTH,
164 AEK_PAUTHLR,
165 AEK_PERFMON,
166 AEK_POE2,
167 AEK_POPS,
168 AEK_PREDRES,
169 AEK_PRFM_SLC,
170 AEK_RAND,
171 AEK_RAS,
172 AEK_RASV2,
173 AEK_RCPC,
174 AEK_RCPC_IMMO,
175 AEK_RCPC3,
176 AEK_RDM,
177 AEK_RME,
178 AEK_SB,
179 AEK_SEL2,
180 AEK_SHA2,
181 AEK_SHA3,
182 AEK_SM4,
183 AEK_SME,
184 AEK_SMEB16B16,
185 AEK_SMEF16F16,
186 AEK_SMEF64F64,
187 AEK_SMEF8F16,
188 AEK_SMEF8F32,
189 AEK_SMEFA64,
190 AEK_SMEI16I64,
191 AEK_SME_LUTV2,
192 AEK_SME_MOP4,
193 AEK_SME_TMOP,
194 AEK_SME2,
195 AEK_SME2P1,
196 AEK_SME2P2,
197 AEK_SME2P3,
198 AEK_PROFILE,
199 AEK_SPE_EEF,
200 AEK_SPECRES2,
201 AEK_SPECRESTRICT,
202 AEK_SSBS,
203 AEK_SSVE_AES,
204 AEK_SSVE_BITPERM,
205 AEK_SSVE_FEXPA,
206 AEK_SSVE_FP8DOT2,
207 AEK_SSVE_FP8DOT4,
208 AEK_SSVE_FP8FMA,
209 AEK_SVE,
210 AEK_SVEAES,
211 AEK_SVE_AES2,
212 AEK_SVEB16B16,
213 AEK_SVE_B16MM,
214 AEK_SVE_BFSCALE,
215 AEK_SVEBITPERM,
216 AEK_SVE_F16F32MM,
217 AEK_SVESHA3,
218 AEK_SVESM4,
219 AEK_SVE2,
220 AEK_SVE2AES,
221 AEK_SVE2BITPERM,
222 AEK_SVE2SHA3,
223 AEK_SVE2SM4,
224 AEK_SVE2P1,
225 AEK_SVE2P2,
226 AEK_SVE2P3,
227 AEK_TEV,
228 AEK_THE,
229 AEK_TLB_RMI,
230 AEK_TLBID,
231 AEK_TLBIW,
232 AEK_TRACEV8_4,
233 AEK_TRBE,
234 AEK_PSUAO,
235 AEK_VH,
236 AEK_WFXT,
237 AEK_XS,
238 AEK_NUM_EXTENSIONS
239};
240#undef EMIT_ARCHEXTKIND_ENUM
241#endif // EMIT_ARCHEXTKIND_ENUM
242#ifdef EMIT_EXTENSIONS
243inline constexpr ExtensionInfo Extensions[] = {
244 {"aes", {}, AArch64::AEK_AES, "FEAT_AES, FEAT_PMULL", "Enable AES support", "+aes", "-aes"},
245 {"", {}, AArch64::AEK_ALTERNATIVENZCV, "FEAT_FlagM2", "Enable alternative NZCV format for floating point comparisons", "+altnzcv", "-altnzcv"},
246 {"", {}, AArch64::AEK_AM, "FEAT_AMUv1", "Enable Armv8.4-A Activity Monitors extension", "+am", "-am"},
247 {"", {}, AArch64::AEK_AMVS, "FEAT_AMUv1p1", "Enable Armv8.6-A Activity Monitors Virtualization support", "+amvs", "-amvs"},
248 {"bf16", {}, AArch64::AEK_BF16, "FEAT_BF16", "Enable BFloat16 Extension", "+bf16", "-bf16"},
249 {"brbe", {}, AArch64::AEK_BRBE, "FEAT_BRBE", "Enable Branch Record Buffer Extension", "+brbe", "-brbe"},
250 {"bti", {}, AArch64::AEK_BTI, "FEAT_BTI", "Enable Branch Target Identification", "+bti", "-bti"},
251 {"btie", {}, AArch64::AEK_BTIE, "FEAT_BTIE", "Enable Enhanced Branch Target Identification extension", "+btie", "-btie"},
252 {"", {}, AArch64::AEK_CCDP, "FEAT_DPB2", "Enable Armv8.5-A Cache Clean to Point of Deep Persistence", "+ccdp", "-ccdp"},
253 {"", {}, AArch64::AEK_CCIDX, "FEAT_CCIDX", "Enable Armv8.3-A Extend of the CCSIDR number of sets", "+ccidx", "-ccidx"},
254 {"", {}, AArch64::AEK_CCPP, "FEAT_DPB", "Enable Armv8.2-A data Cache Clean to Point of Persistence", "+ccpp", "-ccpp"},
255 {"", {}, AArch64::AEK_CHK, "FEAT_CHK", "Enable Armv8.0-A Check Feature Status Extension", "+chk", "-chk"},
256 {"", {}, AArch64::AEK_CLRBHB, "FEAT_CLRBHB", "Enable Clear BHB instruction", "+clrbhb", "-clrbhb"},
257 {"cmpbr", {}, AArch64::AEK_CMPBR, "FEAT_CMPBR", "Enable Armv9.6-A base compare and branch instructions", "+cmpbr", "-cmpbr"},
258 {"fcma", {}, AArch64::AEK_FCMA, "FEAT_FCMA", "Enable Armv8.3-A Floating-point complex number support", "+complxnum", "-complxnum"},
259 {"cpa", {}, AArch64::AEK_CPA, "FEAT_CPA", "Enable Armv9.5-A Checked Pointer Arithmetic", "+cpa", "-cpa"},
260 {"crc", {}, AArch64::AEK_CRC, "FEAT_CRC32", "Enable Armv8.0-A CRC-32 checksum instructions", "+crc", "-crc"},
261 {"crypto", {}, AArch64::AEK_CRYPTO, "FEAT_Crypto", "Enable cryptographic instructions", "+crypto", "-crypto"},
262 {"cssc", {}, AArch64::AEK_CSSC, "FEAT_CSSC", "Enable Common Short Sequence Compression (CSSC) instructions", "+cssc", "-cssc"},
263 {"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"},
264 {"dit", {}, AArch64::AEK_DIT, "FEAT_DIT", "Enable Armv8.4-A Data Independent Timing instructions", "+dit", "-dit"},
265 {"dotprod", {}, AArch64::AEK_DOTPROD, "FEAT_DotProd", "Enable dot product support", "+dotprod", "-dotprod"},
266 {"", {}, AArch64::AEK_ENHANCEDCOUNTERVIRTUALIZATION, "FEAT_ECV", "Enable enhanced counter virtualization extension", "+ecv", "-ecv"},
267 {"", {}, AArch64::AEK_ETE, "FEAT_ETE", "Enable Embedded Trace Extension", "+ete", "-ete"},
268 {"f16f32dot", {}, AArch64::AEK_F16F32DOT, "FEAT_F16F32DOT", "Enable Armv9.7-A Advanced SIMD half-precision dot product accumulate to single-precision", "+f16f32dot", "-f16f32dot"},
269 {"f16f32mm", {}, AArch64::AEK_F16F32MM, "FEAT_F16F32MM", "Enable Armv9.7-A Advanced SIMD half-precision matrix multiply-accumulate to single-precision", "+f16f32mm", "-f16f32mm"},
270 {"f16mm", {}, AArch64::AEK_F16MM, "FEAT_F16MM", "Enable Armv9.7-A non-widening half-precision matrix multiply-accumulate", "+f16mm", "-f16mm"},
271 {"f32mm", {}, AArch64::AEK_F32MM, "FEAT_F32MM", "Enable Matrix Multiply FP32 Extension", "+f32mm", "-f32mm"},
272 {"f64mm", {}, AArch64::AEK_F64MM, "FEAT_F64MM", "Enable Matrix Multiply FP64 Extension", "+f64mm", "-f64mm"},
273 {"f8f16mm", {}, AArch64::AEK_F8F16MM, "FEAT_F8F16MM", "Enable Armv9.6-A FP8 to Half-Precision Matrix Multiplication", "+f8f16mm", "-f8f16mm"},
274 {"f8f32mm", {}, AArch64::AEK_F8F32MM, "FEAT_F8F32MM", "Enable Armv9.6-A FP8 to Single-Precision Matrix Multiplication", "+f8f32mm", "-f8f32mm"},
275 {"faminmax", {}, AArch64::AEK_FAMINMAX, "FEAT_FAMINMAX", "Enable FAMIN and FAMAX instructions", "+faminmax", "-faminmax"},
276 {"", {}, AArch64::AEK_FINEGRAINEDTRAPS, "FEAT_FGT", "Enable fine grained virtualization traps extension", "+fgt", "-fgt"},
277 {"flagm", {}, AArch64::AEK_FLAGM, "FEAT_FlagM", "Enable Armv8.4-A Flag Manipulation instructions", "+flagm", "-flagm"},
278 {"fp", {}, AArch64::AEK_FP, "FEAT_FP", "Enable Armv8.0-A Floating Point Extensions", "+fp-armv8", "-fp-armv8"},
279 {"fp16fml", {}, AArch64::AEK_FP16FML, "FEAT_FHM", "Enable FP16 FML instructions", "+fp16fml", "-fp16fml"},
280 {"fp8", {}, AArch64::AEK_FP8, "FEAT_FP8", "Enable FP8 instructions", "+fp8", "-fp8"},
281 {"fp8dot2", {}, AArch64::AEK_FP8DOT2, "FEAT_FP8DOT2", "Enable FP8 2-way dot instructions", "+fp8dot2", "-fp8dot2"},
282 {"fp8dot4", {}, AArch64::AEK_FP8DOT4, "FEAT_FP8DOT4", "Enable FP8 4-way dot instructions", "+fp8dot4", "-fp8dot4"},
283 {"fp8fma", {}, AArch64::AEK_FP8FMA, "FEAT_FP8FMA", "Enable Armv9.5-A FP8 multiply-add instructions", "+fp8fma", "-fp8fma"},
284 {"", {}, AArch64::AEK_FPAC, "FEAT_FPAC", "Enable Armv8.3-A Pointer Authentication Faulting enhancement", "+fpac", "-fpac"},
285 {"fprcvt", {}, AArch64::AEK_FPRCVT, "FEAT_FPRCVT", "Enable Armv9.6-A base convert instructions for SIMD&FP scalar register operands of different input and output sizes", "+fprcvt", "-fprcvt"},
286 {"", {}, 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"},
287 {"fp16", {}, AArch64::AEK_FP16, "FEAT_FP16", "Enable half-precision floating-point data processing", "+fullfp16", "-fullfp16"},
288 {"gcie", {}, AArch64::AEK_GCIE, "FEAT_GCIE", "Enable GICv5 (Generic Interrupt Controller) CPU Interface Extension", "+gcie", "-gcie"},
289 {"gcs", {}, AArch64::AEK_GCS, "FEAT_GCS", "Enable Armv9.4-A Guarded Call Stack Extension", "+gcs", "-gcs"},
290 {"hbc", {}, AArch64::AEK_HBC, "FEAT_HBC", "Enable Armv8.8-A Hinted Conditional Branches Extension", "+hbc", "-hbc"},
291 {"", {}, AArch64::AEK_HCX, "FEAT_HCX", "Enable Armv8.7-A HCRX_EL2 system register", "+hcx", "-hcx"},
292 {"i8mm", {}, AArch64::AEK_I8MM, "FEAT_I8MM", "Enable Matrix Multiply Int8 Extension", "+i8mm", "-i8mm"},
293 {"ite", {}, AArch64::AEK_ITE, "FEAT_ITE", "Enable Armv9.4-A Instrumentation Extension", "+ite", "-ite"},
294 {"jscvt", {}, AArch64::AEK_JSCVT, "FEAT_JSCVT", "Enable Armv8.3-A JavaScript FP conversion instructions", "+jsconv", "-jsconv"},
295 {"", {}, AArch64::AEK_LOR, "FEAT_LOR", "Enable Armv8.1-A Limited Ordering Regions extension", "+lor", "-lor"},
296 {"ls64", {}, AArch64::AEK_LS64, "FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA", "Enable Armv8.7-A LD64B/ST64B Accelerator Extension", "+ls64", "-ls64"},
297 {"lscp", {}, AArch64::AEK_LSCP, "FEAT_LSCP", "Enable Armv9.7-A Load-acquire and store-release pair extension", "+lscp", "-lscp"},
298 {"lse", {}, AArch64::AEK_LSE, "FEAT_LSE", "Enable Armv8.1-A Large System Extension (LSE) atomic instructions", "+lse", "-lse"},
299 {"lse128", {}, AArch64::AEK_LSE128, "FEAT_LSE128", "Enable Armv9.4-A 128-bit Atomic instructions", "+lse128", "-lse128"},
300 {"", {}, AArch64::AEK_LSE2, "FEAT_LSE2", "Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules", "+lse2", "-lse2"},
301 {"lsfe", {}, AArch64::AEK_LSFE, "FEAT_LSFE", "Enable Armv9.6-A base Atomic floating-point in-memory instructions", "+lsfe", "-lsfe"},
302 {"lsui", {}, AArch64::AEK_LSUI, "FEAT_LSUI", "Enable Armv9.6-A unprivileged load/store instructions", "+lsui", "-lsui"},
303 {"lut", {}, AArch64::AEK_LUT, "FEAT_LUT", "Enable Lookup Table instructions", "+lut", "-lut"},
304 {"", {}, AArch64::AEK_MEC, "FEAT_MEC", "Enable Memory Encryption Contexts Extension", "+mec", "-mec"},
305 {"mops", {}, AArch64::AEK_MOPS, "FEAT_MOPS", "Enable Armv8.8-A memcpy and memset acceleration instructions", "+mops", "-mops"},
306 {"mops-go", {}, AArch64::AEK_MOPS_GO, "FEAT_MOPS_GO", "Enable memset acceleration granule only", "+mops-go", "-mops-go"},
307 {"", {}, AArch64::AEK_MPAM, "FEAT_MPAM", "Enable Armv8.4-A Memory system Partitioning and Monitoring extension", "+mpam", "-mpam"},
308 {"memtag", {}, AArch64::AEK_MTE, "FEAT_MTE, FEAT_MTE2", "Enable Memory Tagging Extension", "+mte", "-mte"},
309 {"mtetc", {}, AArch64::AEK_MTETC, "FEAT_MTETC", "Enable Virtual Memory Tagging Extension", "+mtetc", "-mtetc"},
310 {"simd", {}, AArch64::AEK_SIMD, "FEAT_AdvSIMD", "Enable Advanced SIMD instructions", "+neon", "-neon"},
311 {"", {}, AArch64::AEK_NMI, "FEAT_NMI, FEAT_GICv3_NMI", "Enable Armv8.8-A Non-maskable Interrupts", "+nmi", "-nmi"},
312 {"", {}, AArch64::AEK_NV, "FEAT_NV, FEAT_NV2", "Enable Armv8.4-A Nested Virtualization Enchancement", "+nv", "-nv"},
313 {"occmo", {}, AArch64::AEK_OCCMO, "FEAT_OCCMO", "Enable Armv9.6-A Outer cacheable cache maintenance operations", "+occmo", "-occmo"},
314 {"", {}, AArch64::AEK_PAN, "FEAT_PAN", "Enable Armv8.1-A Privileged Access-Never extension", "+pan", "-pan"},
315 {"", {}, AArch64::AEK_PAN_RWV, "FEAT_PAN2", "Enable Armv8.2-A PAN s1e1R and s1e1W Variants", "+pan-rwv", "-pan-rwv"},
316 {"pauth", {}, AArch64::AEK_PAUTH, "FEAT_PAuth", "Enable Armv8.3-A Pointer Authentication extension", "+pauth", "-pauth"},
317 {"pauth-lr", {}, AArch64::AEK_PAUTHLR, "FEAT_PAuth_LR", "Enable Armv9.5-A PAC enhancements", "+pauth-lr", "-pauth-lr"},
318 {"pmuv3", {}, AArch64::AEK_PERFMON, "FEAT_PMUv3", "Enable Armv8.0-A PMUv3 Performance Monitors extension", "+perfmon", "-perfmon"},
319 {"poe2", {}, AArch64::AEK_POE2, "FEAT_S1POE2", "Enable Stage 1 Permission Overlays Extension 2 instructions", "+poe2", "-poe2"},
320 {"pops", {}, AArch64::AEK_POPS, "FEAT_PoPS", "Enable Armv9.6-A Point Of Physical Storage (PoPS) DC instructions", "+pops", "-pops"},
321 {"predres", {}, AArch64::AEK_PREDRES, "FEAT_SPECRES", "Enable Armv8.5-A execution and data prediction invalidation instructions", "+predres", "-predres"},
322 {"", {}, AArch64::AEK_PRFM_SLC, "FEAT_PRFMSLC", "Enable SLC target for PRFM instruction", "+prfm-slc-target", "-prfm-slc-target"},
323 {"rng", {}, AArch64::AEK_RAND, "FEAT_RNG", "Enable Random Number generation instructions", "+rand", "-rand"},
324 {"ras", {}, AArch64::AEK_RAS, "FEAT_RAS, FEAT_RASv1p1", "Enable Armv8.0-A Reliability, Availability and Serviceability Extensions", "+ras", "-ras"},
325 {"rasv2", {}, AArch64::AEK_RASV2, "FEAT_RASv2", "Enable Armv8.9-A Reliability, Availability and Serviceability Extensions", "+rasv2", "-rasv2"},
326 {"rcpc", {}, AArch64::AEK_RCPC, "FEAT_LRCPC", "Enable support for RCPC extension", "+rcpc", "-rcpc"},
327 {"", {}, AArch64::AEK_RCPC_IMMO, "FEAT_LRCPC2", "Enable Armv8.4-A RCPC instructions with Immediate Offsets", "+rcpc-immo", "-rcpc-immo"},
328 {"rcpc3", {}, AArch64::AEK_RCPC3, "FEAT_LRCPC3", "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set", "+rcpc3", "-rcpc3"},
329 {"rdm", "rdma", AArch64::AEK_RDM, "FEAT_RDM", "Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions", "+rdm", "-rdm"},
330 {"", {}, AArch64::AEK_RME, "FEAT_RME", "Enable Realm Management Extension", "+rme", "-rme"},
331 {"sb", {}, AArch64::AEK_SB, "FEAT_SB", "Enable Armv8.5-A Speculation Barrier", "+sb", "-sb"},
332 {"", {}, AArch64::AEK_SEL2, "FEAT_SEL2", "Enable Armv8.4-A Secure Exception Level 2 extension", "+sel2", "-sel2"},
333 {"sha2", {}, AArch64::AEK_SHA2, "FEAT_SHA1, FEAT_SHA256", "Enable SHA1 and SHA256 support", "+sha2", "-sha2"},
334 {"sha3", {}, AArch64::AEK_SHA3, "FEAT_SHA3, FEAT_SHA512", "Enable SHA512 and SHA3 support", "+sha3", "-sha3"},
335 {"sm4", {}, AArch64::AEK_SM4, "FEAT_SM4, FEAT_SM3", "Enable SM3 and SM4 support", "+sm4", "-sm4"},
336 {"sme", {}, AArch64::AEK_SME, "FEAT_SME", "Enable Scalable Matrix Extension (SME)", "+sme", "-sme"},
337 {"sme-b16b16", {}, AArch64::AEK_SMEB16B16, "FEAT_SME_B16B16", "Enable SME2.1 ZA-targeting non-widening BFloat16 instructions", "+sme-b16b16", "-sme-b16b16"},
338 {"sme-f16f16", {}, AArch64::AEK_SMEF16F16, "FEAT_SME_F16F16", "Enable SME non-widening Float16 instructions", "+sme-f16f16", "-sme-f16f16"},
339 {"sme-f64f64", {}, AArch64::AEK_SMEF64F64, "FEAT_SME_F64F64", "Enable Scalable Matrix Extension (SME) F64F64 instructions", "+sme-f64f64", "-sme-f64f64"},
340 {"sme-f8f16", {}, AArch64::AEK_SMEF8F16, "FEAT_SME_F8F16", "Enable Scalable Matrix Extension (SME) F8F16 instructions", "+sme-f8f16", "-sme-f8f16"},
341 {"sme-f8f32", {}, AArch64::AEK_SMEF8F32, "FEAT_SME_F8F32", "Enable Scalable Matrix Extension (SME) F8F32 instructions", "+sme-f8f32", "-sme-f8f32"},
342 {"sme-fa64", {}, AArch64::AEK_SMEFA64, "FEAT_SME_FA64", "Enable the full A64 instruction set in streaming SVE mode", "+sme-fa64", "-sme-fa64"},
343 {"sme-i16i64", {}, AArch64::AEK_SMEI16I64, "FEAT_SME_I16I64", "Enable Scalable Matrix Extension (SME) I16I64 instructions", "+sme-i16i64", "-sme-i16i64"},
344 {"sme-lutv2", {}, AArch64::AEK_SME_LUTV2, "FEAT_SME_LUTv2", "Enable Scalable Matrix Extension (SME) LUTv2 instructions", "+sme-lutv2", "-sme-lutv2"},
345 {"sme-mop4", {}, AArch64::AEK_SME_MOP4, "FEAT_SME_MOP4", "Enable SME Quarter-tile outer product instructions", "+sme-mop4", "-sme-mop4"},
346 {"sme-tmop", {}, AArch64::AEK_SME_TMOP, "FEAT_SME_TMOP", "Enable SME Structured sparsity outer product instructions.", "+sme-tmop", "-sme-tmop"},
347 {"sme2", {}, AArch64::AEK_SME2, "FEAT_SME2", "Enable Scalable Matrix Extension 2 (SME2) instructions", "+sme2", "-sme2"},
348 {"sme2p1", {}, AArch64::AEK_SME2P1, "FEAT_SME2p1", "Enable Scalable Matrix Extension 2.1 instructions", "+sme2p1", "-sme2p1"},
349 {"sme2p2", {}, AArch64::AEK_SME2P2, "FEAT_SME2p2", "Enable Armv9.6-A Scalable Matrix Extension 2.2 instructions", "+sme2p2", "-sme2p2"},
350 {"sme2p3", {}, AArch64::AEK_SME2P3, "FEAT_SME2p3", "Enable Armv9.7-A Scalable Matrix Extension 2.3 instructions", "+sme2p3", "-sme2p3"},
351 {"profile", {}, AArch64::AEK_PROFILE, "FEAT_SPE", "Enable Statistical Profiling extension", "+spe", "-spe"},
352 {"", {}, AArch64::AEK_SPE_EEF, "FEAT_SPEv1p2", "Enable extra register in the Statistical Profiling Extension", "+spe-eef", "-spe-eef"},
353 {"predres2", {}, AArch64::AEK_SPECRES2, "FEAT_SPECRES2", "Enable Speculation Restriction Instruction", "+specres2", "-specres2"},
354 {"", {}, AArch64::AEK_SPECRESTRICT, "FEAT_CSV2_2", "Enable architectural speculation restriction", "+specrestrict", "-specrestrict"},
355 {"ssbs", {}, AArch64::AEK_SSBS, "FEAT_SSBS, FEAT_SSBS2", "Enable Speculative Store Bypass Safe bit", "+ssbs", "-ssbs"},
356 {"ssve-aes", {}, AArch64::AEK_SSVE_AES, "FEAT_SSVE_AES", "Enable Armv9.6-A SVE AES support in streaming SVE mode", "+ssve-aes", "-ssve-aes"},
357 {"ssve-bitperm", {}, AArch64::AEK_SSVE_BITPERM, "FEAT_SSVE_BitPerm", "Enable Armv9.6-A SVE BitPerm support in streaming SVE mode", "+ssve-bitperm", "-ssve-bitperm"},
358 {"ssve-fexpa", {}, AArch64::AEK_SSVE_FEXPA, "FEAT_SSVE_FEXPA", "Enable SVE FEXPA instruction in Streaming SVE mode", "+ssve-fexpa", "-ssve-fexpa"},
359 {"ssve-fp8dot2", {}, AArch64::AEK_SSVE_FP8DOT2, "FEAT_SSVE_FP8DOT2", "Enable SVE2 FP8 2-way dot product instructions", "+ssve-fp8dot2", "-ssve-fp8dot2"},
360 {"ssve-fp8dot4", {}, AArch64::AEK_SSVE_FP8DOT4, "FEAT_SSVE_FP8DOT4", "Enable SVE2 FP8 4-way dot product instructions", "+ssve-fp8dot4", "-ssve-fp8dot4"},
361 {"ssve-fp8fma", {}, AArch64::AEK_SSVE_FP8FMA, "FEAT_SSVE_FP8FMA", "Enable SVE2 FP8 multiply-add instructions", "+ssve-fp8fma", "-ssve-fp8fma"},
362 {"sve", {}, AArch64::AEK_SVE, "FEAT_SVE", "Enable Scalable Vector Extension (SVE) instructions", "+sve", "-sve"},
363 {"sve-aes", {}, AArch64::AEK_SVEAES, "FEAT_SVE_AES, FEAT_SVE_PMULL128", "Enable SVE AES and quadword SVE polynomial multiply instructions", "+sve-aes", "-sve-aes"},
364 {"sve-aes2", {}, AArch64::AEK_SVE_AES2, "FEAT_SVE_AES2", "Enable Armv9.6-A SVE multi-vector AES and multi-vector quadword polynomial multiply instructions", "+sve-aes2", "-sve-aes2"},
365 {"sve-b16b16", {}, AArch64::AEK_SVEB16B16, "FEAT_SVE_B16B16", "Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions", "+sve-b16b16", "-sve-b16b16"},
366 {"sve-b16mm", {}, AArch64::AEK_SVE_B16MM, "FEAT_SVE_B16MM", "Enable Armv9.7-A SVE non-widening BFloat16 matrix multiply-accumulate", "+sve-b16mm", "-sve-b16mm"},
367 {"sve-bfscale", {}, AArch64::AEK_SVE_BFSCALE, "FEAT_SVE_BFSCALE", "Enable Armv9.6-A SVE BFloat16 scaling instructions", "+sve-bfscale", "-sve-bfscale"},
368 {"sve-bitperm", {}, AArch64::AEK_SVEBITPERM, "FEAT_SVE_BitPerm", "Enable bit permutation SVE2 instructions", "+sve-bitperm", "-sve-bitperm"},
369 {"sve-f16f32mm", {}, AArch64::AEK_SVE_F16F32MM, "FEAT_SVE_F16F32MM", "Enable Armv9.6-A FP16 to FP32 Matrix Multiply instructions", "+sve-f16f32mm", "-sve-f16f32mm"},
370 {"sve-sha3", {}, AArch64::AEK_SVESHA3, "FEAT_SVE_SHA3", "Enable SVE SHA3 instructions", "+sve-sha3", "-sve-sha3"},
371 {"sve-sm4", {}, AArch64::AEK_SVESM4, "FEAT_SVE_SM4", "Enable SVE SM4 instructions", "+sve-sm4", "-sve-sm4"},
372 {"sve2", {}, AArch64::AEK_SVE2, "FEAT_SVE2", "Enable Scalable Vector Extension 2 (SVE2) instructions", "+sve2", "-sve2"},
373 {"sve2-aes", {}, AArch64::AEK_SVE2AES, "", "Shorthand for +sve2+sve-aes", "+sve2-aes", "-sve2-aes"},
374 {"sve2-bitperm", {}, AArch64::AEK_SVE2BITPERM, "", "Shorthand for +sve2+sve-bitperm", "+sve2-bitperm", "-sve2-bitperm"},
375 {"sve2-sha3", {}, AArch64::AEK_SVE2SHA3, "", "Shorthand for +sve2+sve-sha3", "+sve2-sha3", "-sve2-sha3"},
376 {"sve2-sm4", {}, AArch64::AEK_SVE2SM4, "", "Shorthand for +sve2+sve-sm4", "+sve2-sm4", "-sve2-sm4"},
377 {"sve2p1", {}, AArch64::AEK_SVE2P1, "FEAT_SVE2p1", "Enable Scalable Vector Extension 2.1 instructions", "+sve2p1", "-sve2p1"},
378 {"sve2p2", {}, AArch64::AEK_SVE2P2, "FEAT_SVE2p2", "Enable Armv9.6-A Scalable Vector Extension 2.2 instructions", "+sve2p2", "-sve2p2"},
379 {"sve2p3", {}, AArch64::AEK_SVE2P3, "FEAT_SVE2p3", "Enable Armv9.7-A Scalable Vector Extension 2.3 instructions", "+sve2p3", "-sve2p3"},
380 {"tev", {}, AArch64::AEK_TEV, "FEAT_TEV", "Enable TIndex Exception-like Vector instructions", "+tev", "-tev"},
381 {"the", {}, AArch64::AEK_THE, "FEAT_THE", "Enable Armv8.9-A Translation Hardening Extension", "+the", "-the"},
382 {"", {}, AArch64::AEK_TLB_RMI, "FEAT_TLBIOS, FEAT_TLBIRANGE", "Enable Armv8.4-A TLB Range and Maintenance instructions", "+tlb-rmi", "-tlb-rmi"},
383 {"tlbid", {}, AArch64::AEK_TLBID, "FEAT_TLBID", "Enable Armv9.7-A TLBI Domains extension", "+tlbid", "-tlbid"},
384 {"tlbiw", {}, AArch64::AEK_TLBIW, "FEAT_TLBIW", "Enable Armv9.5-A TLBI VMALL for Dirty State", "+tlbiw", "-tlbiw"},
385 {"", {}, AArch64::AEK_TRACEV8_4, "FEAT_TRF", "Enable Armv8.4-A Trace extension", "+tracev8.4", "-tracev8.4"},
386 {"", {}, AArch64::AEK_TRBE, "FEAT_TRBE", "Enable Trace Buffer Extension", "+trbe", "-trbe"},
387 {"", {}, AArch64::AEK_PSUAO, "FEAT_UAO", "Enable Armv8.2-A UAO PState", "+uaops", "-uaops"},
388 {"", {}, AArch64::AEK_VH, "FEAT_VHE", "Enable Armv8.1-A Virtual Host extension", "+vh", "-vh"},
389 {"wfxt", {}, AArch64::AEK_WFXT, "FEAT_WFxT", "Enable Armv8.7-A WFET and WFIT instruction", "+wfxt", "-wfxt"},
390 {"", {}, AArch64::AEK_XS, "FEAT_XS", "Enable Armv8.7-A limited-TLB-maintenance instruction", "+xs", "-xs"},
391};
392#undef EMIT_EXTENSIONS
393#endif // EMIT_EXTENSIONS
394
395#ifdef EMIT_FMV_INFO
396const std::vector<llvm::AArch64::FMVInfo>& llvm::AArch64::getFMVInfo() {
397 static std::vector<FMVInfo> I;
398 if(I.size()) return I;
399 I.reserve(53);
400 I.emplace_back("aes", FEAT_PMULL, PRIOR_PMULL, AEK_AES);
401 I.emplace_back("bf16", FEAT_BF16, PRIOR_BF16, AEK_BF16);
402 I.emplace_back("bti", FEAT_BTI, PRIOR_BTI, AEK_BTI);
403 I.emplace_back("crc", FEAT_CRC, PRIOR_CRC, AEK_CRC);
404 I.emplace_back("dit", FEAT_DIT, PRIOR_DIT, AEK_DIT);
405 I.emplace_back("dotprod", FEAT_DOTPROD, PRIOR_DOTPROD, AEK_DOTPROD);
406 I.emplace_back("dpb", FEAT_DPB, PRIOR_DPB, AEK_CCPP);
407 I.emplace_back("dpb2", FEAT_DPB2, PRIOR_DPB2, AEK_CCDP);
408 I.emplace_back("f32mm", FEAT_SVE_F32MM, PRIOR_SVE_F32MM, AEK_F32MM);
409 I.emplace_back("f64mm", FEAT_SVE_F64MM, PRIOR_SVE_F64MM, AEK_F64MM);
410 I.emplace_back("fcma", FEAT_FCMA, PRIOR_FCMA, AEK_FCMA);
411 I.emplace_back("flagm", FEAT_FLAGM, PRIOR_FLAGM, AEK_FLAGM);
412 I.emplace_back("flagm2", FEAT_FLAGM2, PRIOR_FLAGM2, AEK_ALTERNATIVENZCV);
413 I.emplace_back("fp", FEAT_FP, PRIOR_FP, AEK_FP);
414 I.emplace_back("fp16", FEAT_FP16, PRIOR_FP16, AEK_FP16);
415 I.emplace_back("fp16fml", FEAT_FP16FML, PRIOR_FP16FML, AEK_FP16FML);
416 I.emplace_back("frintts", FEAT_FRINTTS, PRIOR_FRINTTS, AEK_FRINT3264);
417 I.emplace_back("i8mm", FEAT_I8MM, PRIOR_I8MM, AEK_I8MM);
418 I.emplace_back("jscvt", FEAT_JSCVT, PRIOR_JSCVT, AEK_JSCVT);
419 I.emplace_back("lse", FEAT_LSE, PRIOR_LSE, AEK_LSE);
420 I.emplace_back("memtag", FEAT_MEMTAG2, PRIOR_MEMTAG2, AEK_MTE);
421 I.emplace_back("mops", FEAT_MOPS, PRIOR_MOPS, AEK_MOPS);
422 I.emplace_back("rcpc", FEAT_RCPC, PRIOR_RCPC, AEK_RCPC);
423 I.emplace_back("rcpc2", FEAT_RCPC2, PRIOR_RCPC2, AEK_RCPC_IMMO);
424 I.emplace_back("rcpc3", FEAT_RCPC3, PRIOR_RCPC3, AEK_RCPC3);
425 I.emplace_back("rdm", FEAT_RDM, PRIOR_RDM, AEK_RDM);
426 I.emplace_back("rng", FEAT_RNG, PRIOR_RNG, AEK_RAND);
427 I.emplace_back("sb", FEAT_SB, PRIOR_SB, AEK_SB);
428 I.emplace_back("sha2", FEAT_SHA2, PRIOR_SHA2, AEK_SHA2);
429 I.emplace_back("sha3", FEAT_SHA3, PRIOR_SHA3, AEK_SHA3);
430 I.emplace_back("simd", FEAT_SIMD, PRIOR_SIMD, AEK_SIMD);
431 I.emplace_back("sm4", FEAT_SM4, PRIOR_SM4, AEK_SM4);
432 I.emplace_back("sme", FEAT_SME, PRIOR_SME, AEK_SME);
433 I.emplace_back("sme-f64f64", FEAT_SME_F64, PRIOR_SME_F64, AEK_SMEF64F64);
434 I.emplace_back("sme-i16i64", FEAT_SME_I64, PRIOR_SME_I64, AEK_SMEI16I64);
435 I.emplace_back("sme2", FEAT_SME2, PRIOR_SME2, AEK_SME2);
436 I.emplace_back("ssbs", FEAT_SSBS2, PRIOR_SSBS2, AEK_SSBS);
437 I.emplace_back("sve", FEAT_SVE, PRIOR_SVE, AEK_SVE);
438 I.emplace_back("sve2", FEAT_SVE2, PRIOR_SVE2, AEK_SVE2);
439 I.emplace_back("sve2-aes", FEAT_SVE_PMULL128, PRIOR_SVE_PMULL128, AEK_SVE2AES);
440 I.emplace_back("sve2-bitperm", FEAT_SVE_BITPERM, PRIOR_SVE_BITPERM, AEK_SVE2BITPERM);
441 I.emplace_back("sve2-sha3", FEAT_SVE_SHA3, PRIOR_SVE_SHA3, AEK_SVE2SHA3);
442 I.emplace_back("sve2-sm4", FEAT_SVE_SM4, PRIOR_SVE_SM4, AEK_SVE2SM4);
443 I.emplace_back("wfxt", FEAT_WFXT, PRIOR_WFXT, AEK_WFXT);
444 I.emplace_back("cssc", FEAT_CSSC, PRIOR_CSSC, AEK_CSSC);
445 I.emplace_back("P0", std::nullopt, PRIOR_P0, std::nullopt);
446 I.emplace_back("P1", std::nullopt, PRIOR_P1, std::nullopt);
447 I.emplace_back("P2", std::nullopt, PRIOR_P2, std::nullopt);
448 I.emplace_back("P3", std::nullopt, PRIOR_P3, std::nullopt);
449 I.emplace_back("P4", std::nullopt, PRIOR_P4, std::nullopt);
450 I.emplace_back("P5", std::nullopt, PRIOR_P5, std::nullopt);
451 I.emplace_back("P6", std::nullopt, PRIOR_P6, std::nullopt);
452 I.emplace_back("P7", std::nullopt, PRIOR_P7, std::nullopt);
453 return I;
454}
455#undef EMIT_FMV_INFO
456#endif // EMIT_FMV_INFO
457
458#ifdef EMIT_EXTENSION_DEPENDENCIES
459inline constexpr ExtensionDependency ExtensionDependencies[] = {
460 {AEK_SIMD, AEK_AES},
461 {AEK_FLAGM, AEK_ALTERNATIVENZCV},
462 {AEK_AM, AEK_AMVS},
463 {AEK_SIMD, AEK_BF16},
464 {AEK_CCPP, AEK_CCDP},
465 {AEK_SIMD, AEK_FCMA},
466 {AEK_AES, AEK_CRYPTO},
467 {AEK_SIMD, AEK_CRYPTO},
468 {AEK_SHA2, AEK_CRYPTO},
469 {AEK_LSE128, AEK_D128},
470 {AEK_SIMD, AEK_DOTPROD},
471 {AEK_TRBE, AEK_ETE},
472 {AEK_FP16, AEK_F16F32DOT},
473 {AEK_SIMD, AEK_F16F32DOT},
474 {AEK_FP16, AEK_F16F32MM},
475 {AEK_SIMD, AEK_F16F32MM},
476 {AEK_FP16, AEK_F16MM},
477 {AEK_SIMD, AEK_F16MM},
478 {AEK_SVE, AEK_F32MM},
479 {AEK_SVE, AEK_F64MM},
480 {AEK_FP8, AEK_F8F16MM},
481 {AEK_SIMD, AEK_F8F16MM},
482 {AEK_FP8, AEK_F8F32MM},
483 {AEK_SIMD, AEK_F8F32MM},
484 {AEK_SIMD, AEK_FAMINMAX},
485 {AEK_FP16, AEK_FP16FML},
486 {AEK_SIMD, AEK_FP16FML},
487 {AEK_SIMD, AEK_FP8},
488 {AEK_FP8, AEK_FP8DOT2},
489 {AEK_FP8, AEK_FP8DOT4},
490 {AEK_FP8, AEK_FP8FMA},
491 {AEK_FP, AEK_FPRCVT},
492 {AEK_FP, AEK_FRINT3264},
493 {AEK_FP, AEK_FP16},
494 {AEK_CHK, AEK_GCS},
495 {AEK_SIMD, AEK_I8MM},
496 {AEK_ETE, AEK_ITE},
497 {AEK_TRBE, AEK_ITE},
498 {AEK_FP, AEK_JSCVT},
499 {AEK_LSE, AEK_LSE128},
500 {AEK_FP, AEK_LSFE},
501 {AEK_SIMD, AEK_LUT},
502 {AEK_RME, AEK_MEC},
503 {AEK_MOPS, AEK_MOPS_GO},
504 {AEK_MTE, AEK_MOPS_GO},
505 {AEK_MTE, AEK_MTETC},
506 {AEK_FP, AEK_SIMD},
507 {AEK_PAN, AEK_PAN_RWV},
508 {AEK_RAS, AEK_RASV2},
509 {AEK_RCPC, AEK_RCPC_IMMO},
510 {AEK_RCPC_IMMO, AEK_RCPC3},
511 {AEK_SIMD, AEK_RDM},
512 {AEK_SIMD, AEK_SHA2},
513 {AEK_SIMD, AEK_SHA3},
514 {AEK_SHA2, AEK_SHA3},
515 {AEK_SIMD, AEK_SM4},
516 {AEK_BF16, AEK_SME},
517 {AEK_FP16, AEK_SME},
518 {AEK_SME2, AEK_SMEB16B16},
519 {AEK_SVEB16B16, AEK_SMEB16B16},
520 {AEK_SME2, AEK_SMEF16F16},
521 {AEK_SME, AEK_SMEF64F64},
522 {AEK_FP8, AEK_SMEF8F16},
523 {AEK_SME2, AEK_SMEF8F16},
524 {AEK_FP8, AEK_SMEF8F32},
525 {AEK_SME2, AEK_SMEF8F32},
526 {AEK_SME, AEK_SMEFA64},
527 {AEK_SVE2, AEK_SMEFA64},
528 {AEK_SME, AEK_SMEI16I64},
529 {AEK_SME2, AEK_SME_LUTV2},
530 {AEK_SME2, AEK_SME_MOP4},
531 {AEK_SME2, AEK_SME_TMOP},
532 {AEK_SME, AEK_SME2},
533 {AEK_SME2, AEK_SME2P1},
534 {AEK_SME2P1, AEK_SME2P2},
535 {AEK_SME2P2, AEK_SME2P3},
536 {AEK_PREDRES, AEK_SPECRES2},
537 {AEK_SME2, AEK_SSVE_AES},
538 {AEK_SVEAES, AEK_SSVE_AES},
539 {AEK_SME2, AEK_SSVE_BITPERM},
540 {AEK_SVEBITPERM, AEK_SSVE_BITPERM},
541 {AEK_SME2, AEK_SSVE_FEXPA},
542 {AEK_FP8, AEK_SSVE_FP8DOT2},
543 {AEK_SME2, AEK_SSVE_FP8DOT2},
544 {AEK_FP8, AEK_SSVE_FP8DOT4},
545 {AEK_SME2, AEK_SSVE_FP8DOT4},
546 {AEK_FP8, AEK_SSVE_FP8FMA},
547 {AEK_SME2, AEK_SSVE_FP8FMA},
548 {AEK_FP16, AEK_SVE},
549 {AEK_AES, AEK_SVEAES},
550 {AEK_SVE, AEK_SVE_B16MM},
551 {AEK_SVE, AEK_SVE_F16F32MM},
552 {AEK_SHA3, AEK_SVESHA3},
553 {AEK_SM4, AEK_SVESM4},
554 {AEK_SVE, AEK_SVE2},
555 {AEK_SVEAES, AEK_SVE2AES},
556 {AEK_SVE2, AEK_SVE2AES},
557 {AEK_SVEBITPERM, AEK_SVE2BITPERM},
558 {AEK_SVE2, AEK_SVE2BITPERM},
559 {AEK_SVESHA3, AEK_SVE2SHA3},
560 {AEK_SVE2, AEK_SVE2SHA3},
561 {AEK_SVESM4, AEK_SVE2SM4},
562 {AEK_SVE2, AEK_SVE2SM4},
563 {AEK_SVE2, AEK_SVE2P1},
564 {AEK_SVE2P1, AEK_SVE2P2},
565 {AEK_SVE2P2, AEK_SVE2P3},
566 {AEK_RCPC, AEK_RCPC3},
567};
568#undef EMIT_EXTENSION_DEPENDENCIES
569#endif // EMIT_EXTENSION_DEPENDENCIES
570
571#ifdef EMIT_ARCHITECTURES
572inline constexpr ArchInfo ARMV8A = {
573 VersionTuple{8, 0},
574 AProfile,
575 "armv8-a",
576 "+v8a",
577 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, }))
578};
579inline constexpr ArchInfo ARMV8R = {
580 VersionTuple{8, 0},
581 RProfile,
582 "armv8-r",
583 "+v8r",
584 (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, }))
585};
586inline constexpr ArchInfo ARMV8_1A = {
587 VersionTuple{8, 1},
588 AProfile,
589 "armv8.1-a",
590 "+v8.1a",
591 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, }))
592};
593inline constexpr ArchInfo ARMV8_2A = {
594 VersionTuple{8, 2},
595 AProfile,
596 "armv8.2-a",
597 "+v8.2a",
598 (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, }))
599};
600inline constexpr ArchInfo ARMV8_3A = {
601 VersionTuple{8, 3},
602 AProfile,
603 "armv8.3-a",
604 "+v8.3a",
605 (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, }))
606};
607inline constexpr ArchInfo ARMV8_4A = {
608 VersionTuple{8, 4},
609 AProfile,
610 "armv8.4-a",
611 "+v8.4a",
612 (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, }))
613};
614inline constexpr ArchInfo ARMV8_5A = {
615 VersionTuple{8, 5},
616 AProfile,
617 "armv8.5-a",
618 "+v8.5a",
619 (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, }))
620};
621inline constexpr ArchInfo ARMV8_6A = {
622 VersionTuple{8, 6},
623 AProfile,
624 "armv8.6-a",
625 "+v8.6a",
626 (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, }))
627};
628inline constexpr ArchInfo ARMV8_7A = {
629 VersionTuple{8, 7},
630 AProfile,
631 "armv8.7-a",
632 "+v8.7a",
633 (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_SPE_EEF, }))
634};
635inline constexpr ArchInfo ARMV8_8A = {
636 VersionTuple{8, 8},
637 AProfile,
638 "armv8.8-a",
639 "+v8.8a",
640 (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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, }))
641};
642inline constexpr ArchInfo ARMV8_9A = {
643 VersionTuple{8, 9},
644 AProfile,
645 "armv8.9-a",
646 "+v8.9a",
647 (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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, }))
648};
649inline constexpr ArchInfo ARMV9A = {
650 VersionTuple{9, 0},
651 AProfile,
652 "armv9-a",
653 "+v9a",
654 (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, }))
655};
656inline constexpr ArchInfo ARMV9_1A = {
657 VersionTuple{9, 1},
658 AProfile,
659 "armv9.1-a",
660 "+v9.1a",
661 (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_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_RME, }))
662};
663inline constexpr ArchInfo ARMV9_2A = {
664 VersionTuple{9, 2},
665 AProfile,
666 "armv9.2-a",
667 "+v9.2a",
668 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, }))
669};
670inline constexpr ArchInfo ARMV9_3A = {
671 VersionTuple{9, 3},
672 AProfile,
673 "armv9.3-a",
674 "+v9.3a",
675 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, }))
676};
677inline constexpr ArchInfo ARMV9_4A = {
678 VersionTuple{9, 4},
679 AProfile,
680 "armv9.4-a",
681 "+v9.4a",
682 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, AArch64::AEK_SVE2P1, }))
683};
684inline constexpr ArchInfo ARMV9_5A = {
685 VersionTuple{9, 5},
686 AProfile,
687 "armv9.5-a",
688 "+v9.5a",
689 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, AArch64::AEK_SVE2P1, AArch64::AEK_CPA, AArch64::AEK_LUT, AArch64::AEK_FAMINMAX, }))
690};
691inline constexpr ArchInfo ARMV9_6A = {
692 VersionTuple{9, 6},
693 AProfile,
694 "armv9.6-a",
695 "+v9.6a",
696 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, AArch64::AEK_SVE2P1, AArch64::AEK_CPA, AArch64::AEK_LUT, AArch64::AEK_FAMINMAX, AArch64::AEK_CMPBR, AArch64::AEK_LSUI, AArch64::AEK_OCCMO, }))
697};
698inline constexpr ArchInfo ARMV9_7A = {
699 VersionTuple{9, 7},
700 AProfile,
701 "armv9.7-a",
702 "+v9.7a",
703 (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_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_RME, 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_SPE_EEF, AArch64::AEK_MEC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, 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_SPE_EEF, AArch64::AEK_MOPS, AArch64::AEK_HBC, AArch64::AEK_SPECRES2, AArch64::AEK_CSSC, AArch64::AEK_RASV2, AArch64::AEK_SVE2P1, AArch64::AEK_CPA, AArch64::AEK_LUT, AArch64::AEK_FAMINMAX, AArch64::AEK_CMPBR, AArch64::AEK_LSUI, AArch64::AEK_OCCMO, AArch64::AEK_SVE2P3, AArch64::AEK_FPRCVT, AArch64::AEK_F16F32DOT, }))
704};
705
706/// The set of all architectures
707static constexpr std::array<const ArchInfo *, 19> ArchInfos = {
708 &ARMV8A,
709 &ARMV8R,
710 &ARMV8_1A,
711 &ARMV8_2A,
712 &ARMV8_3A,
713 &ARMV8_4A,
714 &ARMV8_5A,
715 &ARMV8_6A,
716 &ARMV8_7A,
717 &ARMV8_8A,
718 &ARMV8_9A,
719 &ARMV9A,
720 &ARMV9_1A,
721 &ARMV9_2A,
722 &ARMV9_3A,
723 &ARMV9_4A,
724 &ARMV9_5A,
725 &ARMV9_6A,
726 &ARMV9_7A,
727};
728#undef EMIT_ARCHITECTURES
729#endif // EMIT_ARCHITECTURES
730
731#ifdef EMIT_CPU_ALIAS
732inline constexpr Alias CpuAliases[] = {
733 { "cobalt-100", "neoverse-n2" },
734 { "armagicpu", "neoverse-v3ae" },
735 { "cyclone", "apple-a7" },
736 { "apple-a8", "apple-a7" },
737 { "apple-a9", "apple-a7" },
738 { "apple-s4", "apple-a12" },
739 { "apple-s5", "apple-a12" },
740 { "apple-s6", "apple-a13" },
741 { "apple-s7", "apple-a13" },
742 { "apple-s8", "apple-a13" },
743 { "apple-m1", "apple-a14" },
744 { "apple-m2", "apple-a15" },
745 { "apple-m3", "apple-a16" },
746 { "apple-s9", "apple-a16" },
747 { "apple-s10", "apple-a16" },
748 { "apple-a18", "apple-m4" },
749 { "apple-a19", "apple-m5" },
750 { "apple-latest", "apple-m5" },
751};
752#undef EMIT_CPU_ALIAS
753#endif // EMIT_CPU_ALIAS
754
755#ifdef EMIT_CPU_INFO
756inline constexpr CpuInfo CpuInfos[] = {
757 {
758 "generic",
759 ARMV8A,
760 AArch64::ExtensionBitset({
761 AArch64::AEK_FP,
762 AArch64::AEK_SIMD,
763 AArch64::AEK_ETE,
764 })
765 },
766 {
767 "cortex-a34",
768 ARMV8A,
769 AArch64::ExtensionBitset({
770 AArch64::AEK_CRC,
771 AArch64::AEK_SHA2,
772 AArch64::AEK_AES,
773 AArch64::AEK_FP,
774 AArch64::AEK_SIMD,
775 AArch64::AEK_PERFMON,
776 })
777 },
778 {
779 "cortex-a35",
780 ARMV8A,
781 AArch64::ExtensionBitset({
782 AArch64::AEK_CRC,
783 AArch64::AEK_SHA2,
784 AArch64::AEK_AES,
785 AArch64::AEK_FP,
786 AArch64::AEK_SIMD,
787 AArch64::AEK_PERFMON,
788 })
789 },
790 {
791 "cortex-a320",
792 ARMV9_2A,
793 AArch64::ExtensionBitset({
794 AArch64::AEK_SIMD,
795 AArch64::AEK_MTE,
796 AArch64::AEK_SVEBITPERM,
797 AArch64::AEK_FP16FML,
798 AArch64::AEK_FP16,
799 AArch64::AEK_ETE,
800 AArch64::AEK_PERFMON,
801 AArch64::AEK_CCIDX,
802 AArch64::AEK_CCPP,
803 AArch64::AEK_FCMA,
804 AArch64::AEK_CRC,
805 AArch64::AEK_DOTPROD,
806 AArch64::AEK_JSCVT,
807 AArch64::AEK_LOR,
808 AArch64::AEK_LSE,
809 AArch64::AEK_PAN,
810 AArch64::AEK_PAN_RWV,
811 AArch64::AEK_PAUTH,
812 AArch64::AEK_PSUAO,
813 AArch64::AEK_RAS,
814 AArch64::AEK_RDM,
815 AArch64::AEK_TRBE,
816 AArch64::AEK_VH,
817 AArch64::AEK_FLAGM,
818 AArch64::AEK_PREDRES,
819 AArch64::AEK_SB,
820 AArch64::AEK_SSBS,
821 AArch64::AEK_SVE,
822 AArch64::AEK_SVE2,
823 })
824 },
825 {
826 "cortex-a53",
827 ARMV8A,
828 AArch64::ExtensionBitset({
829 AArch64::AEK_CRC,
830 AArch64::AEK_SHA2,
831 AArch64::AEK_AES,
832 AArch64::AEK_FP,
833 AArch64::AEK_SIMD,
834 AArch64::AEK_PERFMON,
835 })
836 },
837 {
838 "cortex-a55",
839 ARMV8_2A,
840 AArch64::ExtensionBitset({
841 AArch64::AEK_SHA2,
842 AArch64::AEK_AES,
843 AArch64::AEK_FP,
844 AArch64::AEK_SIMD,
845 AArch64::AEK_FP16,
846 AArch64::AEK_DOTPROD,
847 AArch64::AEK_RCPC,
848 AArch64::AEK_PERFMON,
849 AArch64::AEK_CRC,
850 AArch64::AEK_LSE,
851 AArch64::AEK_RAS,
852 AArch64::AEK_RDM,
853 })
854 },
855 {
856 "cortex-a510",
857 ARMV9A,
858 AArch64::ExtensionBitset({
859 AArch64::AEK_SIMD,
860 AArch64::AEK_PERFMON,
861 AArch64::AEK_I8MM,
862 AArch64::AEK_BF16,
863 AArch64::AEK_AM,
864 AArch64::AEK_MTE,
865 AArch64::AEK_ETE,
866 AArch64::AEK_SVEBITPERM,
867 AArch64::AEK_FP16FML,
868 AArch64::AEK_CCIDX,
869 AArch64::AEK_SB,
870 AArch64::AEK_PAUTH,
871 AArch64::AEK_SSBS,
872 AArch64::AEK_SVE,
873 AArch64::AEK_SVE2,
874 AArch64::AEK_FCMA,
875 AArch64::AEK_CRC,
876 AArch64::AEK_DOTPROD,
877 AArch64::AEK_FP,
878 AArch64::AEK_FP16,
879 AArch64::AEK_JSCVT,
880 AArch64::AEK_LSE,
881 AArch64::AEK_RAS,
882 AArch64::AEK_RCPC,
883 AArch64::AEK_RDM,
884 AArch64::AEK_FPAC,
885 })
886 },
887 {
888 "cortex-a520",
889 ARMV9_2A,
890 AArch64::ExtensionBitset({
891 AArch64::AEK_PERFMON,
892 AArch64::AEK_AM,
893 AArch64::AEK_MTE,
894 AArch64::AEK_ETE,
895 AArch64::AEK_SVEBITPERM,
896 AArch64::AEK_FP16FML,
897 AArch64::AEK_CCIDX,
898 AArch64::AEK_SB,
899 AArch64::AEK_SSBS,
900 AArch64::AEK_PAUTH,
901 AArch64::AEK_FLAGM,
902 AArch64::AEK_PREDRES,
903 AArch64::AEK_SVE,
904 AArch64::AEK_SVE2,
905 AArch64::AEK_BF16,
906 AArch64::AEK_FCMA,
907 AArch64::AEK_CRC,
908 AArch64::AEK_FP,
909 AArch64::AEK_FP16,
910 AArch64::AEK_I8MM,
911 AArch64::AEK_JSCVT,
912 AArch64::AEK_SIMD,
913 AArch64::AEK_LSE,
914 AArch64::AEK_RAS,
915 AArch64::AEK_RCPC,
916 AArch64::AEK_RDM,
917 AArch64::AEK_DOTPROD,
918 AArch64::AEK_FPAC,
919 })
920 },
921 {
922 "cortex-a520ae",
923 ARMV9_2A,
924 AArch64::ExtensionBitset({
925 AArch64::AEK_PERFMON,
926 AArch64::AEK_AM,
927 AArch64::AEK_MTE,
928 AArch64::AEK_ETE,
929 AArch64::AEK_SVEBITPERM,
930 AArch64::AEK_FP16FML,
931 AArch64::AEK_CCIDX,
932 AArch64::AEK_SB,
933 AArch64::AEK_SSBS,
934 AArch64::AEK_PAUTH,
935 AArch64::AEK_FLAGM,
936 AArch64::AEK_PREDRES,
937 AArch64::AEK_SVE,
938 AArch64::AEK_SVE2,
939 AArch64::AEK_BF16,
940 AArch64::AEK_FCMA,
941 AArch64::AEK_CRC,
942 AArch64::AEK_FP,
943 AArch64::AEK_FP16,
944 AArch64::AEK_I8MM,
945 AArch64::AEK_JSCVT,
946 AArch64::AEK_SIMD,
947 AArch64::AEK_LSE,
948 AArch64::AEK_RAS,
949 AArch64::AEK_RCPC,
950 AArch64::AEK_RDM,
951 AArch64::AEK_DOTPROD,
952 AArch64::AEK_FPAC,
953 })
954 },
955 {
956 "c1-nano",
957 ARMV9_3A,
958 AArch64::ExtensionBitset({
959 AArch64::AEK_SIMD,
960 AArch64::AEK_CLRBHB,
961 AArch64::AEK_CHK,
962 AArch64::AEK_FP,
963 AArch64::AEK_PERFMON,
964 AArch64::AEK_SPECRES2,
965 AArch64::AEK_SSBS,
966 AArch64::AEK_RDM,
967 AArch64::AEK_VH,
968 AArch64::AEK_BF16,
969 AArch64::AEK_DOTPROD,
970 AArch64::AEK_FP16FML,
971 AArch64::AEK_FP16,
972 AArch64::AEK_MPAM,
973 AArch64::AEK_SVE,
974 AArch64::AEK_CCIDX,
975 AArch64::AEK_FCMA,
976 AArch64::AEK_FPAC,
977 AArch64::AEK_JSCVT,
978 AArch64::AEK_AM,
979 AArch64::AEK_RAS,
980 AArch64::AEK_SEL2,
981 AArch64::AEK_TRACEV8_4,
982 AArch64::AEK_ALTERNATIVENZCV,
983 AArch64::AEK_FRINT3264,
984 AArch64::AEK_MTE,
985 AArch64::AEK_FINEGRAINEDTRAPS,
986 AArch64::AEK_HCX,
987 AArch64::AEK_RCPC3,
988 AArch64::AEK_ETE,
989 AArch64::AEK_SVEBITPERM,
990 AArch64::AEK_SVE2,
991 AArch64::AEK_TRBE,
992 AArch64::AEK_SME,
993 AArch64::AEK_SME2,
994 })
995 },
996 {
997 "cortex-a57",
998 ARMV8A,
999 AArch64::ExtensionBitset({
1000 AArch64::AEK_CRC,
1001 AArch64::AEK_SHA2,
1002 AArch64::AEK_AES,
1003 AArch64::AEK_FP,
1004 AArch64::AEK_SIMD,
1005 AArch64::AEK_PERFMON,
1006 })
1007 },
1008 {
1009 "cortex-a65",
1010 ARMV8_2A,
1011 AArch64::ExtensionBitset({
1012 AArch64::AEK_SHA2,
1013 AArch64::AEK_AES,
1014 AArch64::AEK_FP,
1015 AArch64::AEK_SIMD,
1016 AArch64::AEK_FP16,
1017 AArch64::AEK_DOTPROD,
1018 AArch64::AEK_RCPC,
1019 AArch64::AEK_SSBS,
1020 AArch64::AEK_RAS,
1021 AArch64::AEK_PERFMON,
1022 AArch64::AEK_CRC,
1023 AArch64::AEK_LSE,
1024 AArch64::AEK_RDM,
1025 })
1026 },
1027 {
1028 "cortex-a65ae",
1029 ARMV8_2A,
1030 AArch64::ExtensionBitset({
1031 AArch64::AEK_SHA2,
1032 AArch64::AEK_AES,
1033 AArch64::AEK_FP,
1034 AArch64::AEK_SIMD,
1035 AArch64::AEK_FP16,
1036 AArch64::AEK_DOTPROD,
1037 AArch64::AEK_RCPC,
1038 AArch64::AEK_SSBS,
1039 AArch64::AEK_RAS,
1040 AArch64::AEK_PERFMON,
1041 AArch64::AEK_CRC,
1042 AArch64::AEK_LSE,
1043 AArch64::AEK_RDM,
1044 })
1045 },
1046 {
1047 "cortex-a72",
1048 ARMV8A,
1049 AArch64::ExtensionBitset({
1050 AArch64::AEK_CRC,
1051 AArch64::AEK_SHA2,
1052 AArch64::AEK_AES,
1053 AArch64::AEK_FP,
1054 AArch64::AEK_SIMD,
1055 AArch64::AEK_PERFMON,
1056 })
1057 },
1058 {
1059 "cortex-a73",
1060 ARMV8A,
1061 AArch64::ExtensionBitset({
1062 AArch64::AEK_CRC,
1063 AArch64::AEK_SHA2,
1064 AArch64::AEK_AES,
1065 AArch64::AEK_FP,
1066 AArch64::AEK_SIMD,
1067 AArch64::AEK_PERFMON,
1068 })
1069 },
1070 {
1071 "cortex-a75",
1072 ARMV8_2A,
1073 AArch64::ExtensionBitset({
1074 AArch64::AEK_SHA2,
1075 AArch64::AEK_AES,
1076 AArch64::AEK_FP,
1077 AArch64::AEK_SIMD,
1078 AArch64::AEK_FP16,
1079 AArch64::AEK_DOTPROD,
1080 AArch64::AEK_RCPC,
1081 AArch64::AEK_PERFMON,
1082 AArch64::AEK_CRC,
1083 AArch64::AEK_LSE,
1084 AArch64::AEK_RAS,
1085 AArch64::AEK_RDM,
1086 })
1087 },
1088 {
1089 "cortex-a76",
1090 ARMV8_2A,
1091 AArch64::ExtensionBitset({
1092 AArch64::AEK_SHA2,
1093 AArch64::AEK_AES,
1094 AArch64::AEK_FP,
1095 AArch64::AEK_SIMD,
1096 AArch64::AEK_FP16,
1097 AArch64::AEK_DOTPROD,
1098 AArch64::AEK_RCPC,
1099 AArch64::AEK_SSBS,
1100 AArch64::AEK_PERFMON,
1101 AArch64::AEK_CRC,
1102 AArch64::AEK_LSE,
1103 AArch64::AEK_RAS,
1104 AArch64::AEK_RDM,
1105 })
1106 },
1107 {
1108 "cortex-a76ae",
1109 ARMV8_2A,
1110 AArch64::ExtensionBitset({
1111 AArch64::AEK_SHA2,
1112 AArch64::AEK_AES,
1113 AArch64::AEK_FP,
1114 AArch64::AEK_SIMD,
1115 AArch64::AEK_FP16,
1116 AArch64::AEK_DOTPROD,
1117 AArch64::AEK_RCPC,
1118 AArch64::AEK_SSBS,
1119 AArch64::AEK_PERFMON,
1120 AArch64::AEK_CRC,
1121 AArch64::AEK_LSE,
1122 AArch64::AEK_RAS,
1123 AArch64::AEK_RDM,
1124 })
1125 },
1126 {
1127 "cortex-a77",
1128 ARMV8_2A,
1129 AArch64::ExtensionBitset({
1130 AArch64::AEK_SHA2,
1131 AArch64::AEK_AES,
1132 AArch64::AEK_FP,
1133 AArch64::AEK_SIMD,
1134 AArch64::AEK_FP16,
1135 AArch64::AEK_DOTPROD,
1136 AArch64::AEK_RCPC,
1137 AArch64::AEK_PERFMON,
1138 AArch64::AEK_SSBS,
1139 AArch64::AEK_CRC,
1140 AArch64::AEK_LSE,
1141 AArch64::AEK_RAS,
1142 AArch64::AEK_RDM,
1143 })
1144 },
1145 {
1146 "cortex-a78",
1147 ARMV8_2A,
1148 AArch64::ExtensionBitset({
1149 AArch64::AEK_SHA2,
1150 AArch64::AEK_AES,
1151 AArch64::AEK_FP,
1152 AArch64::AEK_SIMD,
1153 AArch64::AEK_FP16,
1154 AArch64::AEK_DOTPROD,
1155 AArch64::AEK_RCPC,
1156 AArch64::AEK_PERFMON,
1157 AArch64::AEK_PROFILE,
1158 AArch64::AEK_SSBS,
1159 AArch64::AEK_CRC,
1160 AArch64::AEK_LSE,
1161 AArch64::AEK_RAS,
1162 AArch64::AEK_RDM,
1163 })
1164 },
1165 {
1166 "cortex-a78ae",
1167 ARMV8_2A,
1168 AArch64::ExtensionBitset({
1169 AArch64::AEK_SHA2,
1170 AArch64::AEK_AES,
1171 AArch64::AEK_FP,
1172 AArch64::AEK_SIMD,
1173 AArch64::AEK_FP16,
1174 AArch64::AEK_DOTPROD,
1175 AArch64::AEK_RCPC,
1176 AArch64::AEK_PERFMON,
1177 AArch64::AEK_PROFILE,
1178 AArch64::AEK_SSBS,
1179 AArch64::AEK_CRC,
1180 AArch64::AEK_LSE,
1181 AArch64::AEK_RAS,
1182 AArch64::AEK_RDM,
1183 })
1184 },
1185 {
1186 "cortex-a78c",
1187 ARMV8_2A,
1188 AArch64::ExtensionBitset({
1189 AArch64::AEK_SHA2,
1190 AArch64::AEK_AES,
1191 AArch64::AEK_FP,
1192 AArch64::AEK_SIMD,
1193 AArch64::AEK_FP16,
1194 AArch64::AEK_DOTPROD,
1195 AArch64::AEK_FLAGM,
1196 AArch64::AEK_PAUTH,
1197 AArch64::AEK_PERFMON,
1198 AArch64::AEK_RCPC,
1199 AArch64::AEK_PROFILE,
1200 AArch64::AEK_SSBS,
1201 AArch64::AEK_CRC,
1202 AArch64::AEK_LSE,
1203 AArch64::AEK_RAS,
1204 AArch64::AEK_RDM,
1205 })
1206 },
1207 {
1208 "cortex-a710",
1209 ARMV9A,
1210 AArch64::ExtensionBitset({
1211 AArch64::AEK_SIMD,
1212 AArch64::AEK_PERFMON,
1213 AArch64::AEK_CCIDX,
1214 AArch64::AEK_SSBS,
1215 AArch64::AEK_ETE,
1216 AArch64::AEK_MTE,
1217 AArch64::AEK_FP16FML,
1218 AArch64::AEK_SVEBITPERM,
1219 AArch64::AEK_BF16,
1220 AArch64::AEK_I8MM,
1221 AArch64::AEK_PAUTH,
1222 AArch64::AEK_FLAGM,
1223 AArch64::AEK_SB,
1224 AArch64::AEK_SVE,
1225 AArch64::AEK_SVE2,
1226 AArch64::AEK_FPAC,
1227 AArch64::AEK_FCMA,
1228 AArch64::AEK_CRC,
1229 AArch64::AEK_DOTPROD,
1230 AArch64::AEK_FP,
1231 AArch64::AEK_FP16,
1232 AArch64::AEK_JSCVT,
1233 AArch64::AEK_LSE,
1234 AArch64::AEK_RAS,
1235 AArch64::AEK_RCPC,
1236 AArch64::AEK_RDM,
1237 })
1238 },
1239 {
1240 "cortex-a715",
1241 ARMV9A,
1242 AArch64::ExtensionBitset({
1243 AArch64::AEK_SIMD,
1244 AArch64::AEK_MTE,
1245 AArch64::AEK_CCIDX,
1246 AArch64::AEK_FP16FML,
1247 AArch64::AEK_SVE,
1248 AArch64::AEK_TRBE,
1249 AArch64::AEK_SVEBITPERM,
1250 AArch64::AEK_BF16,
1251 AArch64::AEK_ETE,
1252 AArch64::AEK_PERFMON,
1253 AArch64::AEK_I8MM,
1254 AArch64::AEK_PROFILE,
1255 AArch64::AEK_SB,
1256 AArch64::AEK_SSBS,
1257 AArch64::AEK_FP16,
1258 AArch64::AEK_PAUTH,
1259 AArch64::AEK_PREDRES,
1260 AArch64::AEK_FLAGM,
1261 AArch64::AEK_SVE2,
1262 AArch64::AEK_FCMA,
1263 AArch64::AEK_CRC,
1264 AArch64::AEK_DOTPROD,
1265 AArch64::AEK_FP,
1266 AArch64::AEK_JSCVT,
1267 AArch64::AEK_LSE,
1268 AArch64::AEK_RAS,
1269 AArch64::AEK_RCPC,
1270 AArch64::AEK_RDM,
1271 AArch64::AEK_FPAC,
1272 })
1273 },
1274 {
1275 "cortex-a720",
1276 ARMV9_2A,
1277 AArch64::ExtensionBitset({
1278 AArch64::AEK_MTE,
1279 AArch64::AEK_FP16FML,
1280 AArch64::AEK_CCIDX,
1281 AArch64::AEK_TRBE,
1282 AArch64::AEK_SVEBITPERM,
1283 AArch64::AEK_ETE,
1284 AArch64::AEK_PERFMON,
1285 AArch64::AEK_PROFILE,
1286 AArch64::AEK_SPE_EEF,
1287 AArch64::AEK_SB,
1288 AArch64::AEK_SSBS,
1289 AArch64::AEK_PAUTH,
1290 AArch64::AEK_FLAGM,
1291 AArch64::AEK_PREDRES,
1292 AArch64::AEK_SVE,
1293 AArch64::AEK_SVE2,
1294 AArch64::AEK_BF16,
1295 AArch64::AEK_FCMA,
1296 AArch64::AEK_CRC,
1297 AArch64::AEK_DOTPROD,
1298 AArch64::AEK_FP,
1299 AArch64::AEK_FP16,
1300 AArch64::AEK_I8MM,
1301 AArch64::AEK_JSCVT,
1302 AArch64::AEK_LSE,
1303 AArch64::AEK_SIMD,
1304 AArch64::AEK_RAS,
1305 AArch64::AEK_RCPC,
1306 AArch64::AEK_RDM,
1307 AArch64::AEK_FPAC,
1308 })
1309 },
1310 {
1311 "cortex-a720ae",
1312 ARMV9_2A,
1313 AArch64::ExtensionBitset({
1314 AArch64::AEK_MTE,
1315 AArch64::AEK_FP16FML,
1316 AArch64::AEK_CCIDX,
1317 AArch64::AEK_TRBE,
1318 AArch64::AEK_SVEBITPERM,
1319 AArch64::AEK_ETE,
1320 AArch64::AEK_PERFMON,
1321 AArch64::AEK_PROFILE,
1322 AArch64::AEK_SPE_EEF,
1323 AArch64::AEK_SB,
1324 AArch64::AEK_SSBS,
1325 AArch64::AEK_PAUTH,
1326 AArch64::AEK_FLAGM,
1327 AArch64::AEK_PREDRES,
1328 AArch64::AEK_SVE,
1329 AArch64::AEK_SVE2,
1330 AArch64::AEK_BF16,
1331 AArch64::AEK_FCMA,
1332 AArch64::AEK_CRC,
1333 AArch64::AEK_DOTPROD,
1334 AArch64::AEK_FP,
1335 AArch64::AEK_FP16,
1336 AArch64::AEK_I8MM,
1337 AArch64::AEK_JSCVT,
1338 AArch64::AEK_LSE,
1339 AArch64::AEK_SIMD,
1340 AArch64::AEK_RAS,
1341 AArch64::AEK_RCPC,
1342 AArch64::AEK_RDM,
1343 AArch64::AEK_FPAC,
1344 })
1345 },
1346 {
1347 "cortex-a725",
1348 ARMV9_2A,
1349 AArch64::ExtensionBitset({
1350 AArch64::AEK_MTE,
1351 AArch64::AEK_FP16FML,
1352 AArch64::AEK_CCIDX,
1353 AArch64::AEK_ETE,
1354 AArch64::AEK_PERFMON,
1355 AArch64::AEK_PROFILE,
1356 AArch64::AEK_SVEBITPERM,
1357 AArch64::AEK_SPE_EEF,
1358 AArch64::AEK_TRBE,
1359 AArch64::AEK_FLAGM,
1360 AArch64::AEK_PREDRES,
1361 AArch64::AEK_SB,
1362 AArch64::AEK_SSBS,
1363 AArch64::AEK_SVE,
1364 AArch64::AEK_SVE2,
1365 AArch64::AEK_BF16,
1366 AArch64::AEK_FCMA,
1367 AArch64::AEK_CRC,
1368 AArch64::AEK_DOTPROD,
1369 AArch64::AEK_FP,
1370 AArch64::AEK_FP16,
1371 AArch64::AEK_I8MM,
1372 AArch64::AEK_JSCVT,
1373 AArch64::AEK_LSE,
1374 AArch64::AEK_SIMD,
1375 AArch64::AEK_PAUTH,
1376 AArch64::AEK_RAS,
1377 AArch64::AEK_RCPC,
1378 AArch64::AEK_RDM,
1379 AArch64::AEK_FPAC,
1380 })
1381 },
1382 {
1383 "c1-pro",
1384 ARMV9_3A,
1385 AArch64::ExtensionBitset({
1386 AArch64::AEK_SIMD,
1387 AArch64::AEK_CLRBHB,
1388 AArch64::AEK_CHK,
1389 AArch64::AEK_FP,
1390 AArch64::AEK_PERFMON,
1391 AArch64::AEK_SPECRES2,
1392 AArch64::AEK_SSBS,
1393 AArch64::AEK_RDM,
1394 AArch64::AEK_VH,
1395 AArch64::AEK_BF16,
1396 AArch64::AEK_DOTPROD,
1397 AArch64::AEK_FP16FML,
1398 AArch64::AEK_FP16,
1399 AArch64::AEK_MPAM,
1400 AArch64::AEK_PROFILE,
1401 AArch64::AEK_SVE,
1402 AArch64::AEK_CCIDX,
1403 AArch64::AEK_FCMA,
1404 AArch64::AEK_FPAC,
1405 AArch64::AEK_JSCVT,
1406 AArch64::AEK_AM,
1407 AArch64::AEK_RAS,
1408 AArch64::AEK_SEL2,
1409 AArch64::AEK_TRACEV8_4,
1410 AArch64::AEK_ALTERNATIVENZCV,
1411 AArch64::AEK_FRINT3264,
1412 AArch64::AEK_MTE,
1413 AArch64::AEK_FINEGRAINEDTRAPS,
1414 AArch64::AEK_HCX,
1415 AArch64::AEK_SPE_EEF,
1416 AArch64::AEK_RCPC3,
1417 AArch64::AEK_ETE,
1418 AArch64::AEK_SVEBITPERM,
1419 AArch64::AEK_SVE2,
1420 AArch64::AEK_TRBE,
1421 AArch64::AEK_SME,
1422 AArch64::AEK_SME2,
1423 })
1424 },
1425 {
1426 "cortex-r82",
1427 ARMV8R,
1428 AArch64::ExtensionBitset({
1429 AArch64::AEK_PERFMON,
1430 AArch64::AEK_FP16,
1431 AArch64::AEK_FP16FML,
1432 AArch64::AEK_SSBS,
1433 AArch64::AEK_PREDRES,
1434 AArch64::AEK_SB,
1435 AArch64::AEK_RDM,
1436 AArch64::AEK_DOTPROD,
1437 AArch64::AEK_FCMA,
1438 AArch64::AEK_JSCVT,
1439 AArch64::AEK_CCDP,
1440 AArch64::AEK_FLAGM,
1441 AArch64::AEK_CRC,
1442 AArch64::AEK_LSE,
1443 AArch64::AEK_RAS,
1444 AArch64::AEK_FP,
1445 AArch64::AEK_SIMD,
1446 AArch64::AEK_PAUTH,
1447 AArch64::AEK_RCPC,
1448 AArch64::AEK_FPAC,
1449 })
1450 },
1451 {
1452 "cortex-r82ae",
1453 ARMV8R,
1454 AArch64::ExtensionBitset({
1455 AArch64::AEK_PERFMON,
1456 AArch64::AEK_FP16,
1457 AArch64::AEK_FP16FML,
1458 AArch64::AEK_SSBS,
1459 AArch64::AEK_PREDRES,
1460 AArch64::AEK_SB,
1461 AArch64::AEK_RDM,
1462 AArch64::AEK_DOTPROD,
1463 AArch64::AEK_FCMA,
1464 AArch64::AEK_JSCVT,
1465 AArch64::AEK_CCDP,
1466 AArch64::AEK_LSE,
1467 AArch64::AEK_FLAGM,
1468 AArch64::AEK_CRC,
1469 AArch64::AEK_FP,
1470 AArch64::AEK_SIMD,
1471 AArch64::AEK_PAUTH,
1472 AArch64::AEK_RAS,
1473 AArch64::AEK_RCPC,
1474 AArch64::AEK_FPAC,
1475 })
1476 },
1477 {
1478 "cortex-x1",
1479 ARMV8_2A,
1480 AArch64::ExtensionBitset({
1481 AArch64::AEK_SHA2,
1482 AArch64::AEK_AES,
1483 AArch64::AEK_FP,
1484 AArch64::AEK_SIMD,
1485 AArch64::AEK_RCPC,
1486 AArch64::AEK_PERFMON,
1487 AArch64::AEK_PROFILE,
1488 AArch64::AEK_FP16,
1489 AArch64::AEK_DOTPROD,
1490 AArch64::AEK_SSBS,
1491 AArch64::AEK_CRC,
1492 AArch64::AEK_LSE,
1493 AArch64::AEK_RAS,
1494 AArch64::AEK_RDM,
1495 })
1496 },
1497 {
1498 "cortex-x1c",
1499 ARMV8_2A,
1500 AArch64::ExtensionBitset({
1501 AArch64::AEK_SHA2,
1502 AArch64::AEK_AES,
1503 AArch64::AEK_FP,
1504 AArch64::AEK_SIMD,
1505 AArch64::AEK_RCPC_IMMO,
1506 AArch64::AEK_PERFMON,
1507 AArch64::AEK_PROFILE,
1508 AArch64::AEK_FP16,
1509 AArch64::AEK_DOTPROD,
1510 AArch64::AEK_PAUTH,
1511 AArch64::AEK_SSBS,
1512 AArch64::AEK_FLAGM,
1513 AArch64::AEK_LSE2,
1514 AArch64::AEK_RCPC,
1515 AArch64::AEK_CRC,
1516 AArch64::AEK_LSE,
1517 AArch64::AEK_RAS,
1518 AArch64::AEK_RDM,
1519 })
1520 },
1521 {
1522 "cortex-x2",
1523 ARMV9A,
1524 AArch64::ExtensionBitset({
1525 AArch64::AEK_SIMD,
1526 AArch64::AEK_PERFMON,
1527 AArch64::AEK_I8MM,
1528 AArch64::AEK_BF16,
1529 AArch64::AEK_AM,
1530 AArch64::AEK_MTE,
1531 AArch64::AEK_ETE,
1532 AArch64::AEK_SVEBITPERM,
1533 AArch64::AEK_FP16FML,
1534 AArch64::AEK_CCIDX,
1535 AArch64::AEK_PAUTH,
1536 AArch64::AEK_SSBS,
1537 AArch64::AEK_SB,
1538 AArch64::AEK_SVE,
1539 AArch64::AEK_SVE2,
1540 AArch64::AEK_FLAGM,
1541 AArch64::AEK_FCMA,
1542 AArch64::AEK_CRC,
1543 AArch64::AEK_DOTPROD,
1544 AArch64::AEK_FP,
1545 AArch64::AEK_FP16,
1546 AArch64::AEK_JSCVT,
1547 AArch64::AEK_LSE,
1548 AArch64::AEK_RAS,
1549 AArch64::AEK_RCPC,
1550 AArch64::AEK_RDM,
1551 AArch64::AEK_FPAC,
1552 })
1553 },
1554 {
1555 "cortex-x3",
1556 ARMV9A,
1557 AArch64::ExtensionBitset({
1558 AArch64::AEK_SVE,
1559 AArch64::AEK_SIMD,
1560 AArch64::AEK_PERFMON,
1561 AArch64::AEK_ETE,
1562 AArch64::AEK_TRBE,
1563 AArch64::AEK_PROFILE,
1564 AArch64::AEK_BF16,
1565 AArch64::AEK_I8MM,
1566 AArch64::AEK_MTE,
1567 AArch64::AEK_SVEBITPERM,
1568 AArch64::AEK_FP16,
1569 AArch64::AEK_FP16FML,
1570 AArch64::AEK_CCIDX,
1571 AArch64::AEK_SB,
1572 AArch64::AEK_PAUTH,
1573 AArch64::AEK_PREDRES,
1574 AArch64::AEK_FLAGM,
1575 AArch64::AEK_SSBS,
1576 AArch64::AEK_SVE2,
1577 AArch64::AEK_FCMA,
1578 AArch64::AEK_CRC,
1579 AArch64::AEK_FP,
1580 AArch64::AEK_JSCVT,
1581 AArch64::AEK_LSE,
1582 AArch64::AEK_RAS,
1583 AArch64::AEK_RCPC,
1584 AArch64::AEK_RDM,
1585 AArch64::AEK_DOTPROD,
1586 AArch64::AEK_FPAC,
1587 })
1588 },
1589 {
1590 "cortex-x4",
1591 ARMV9_2A,
1592 AArch64::ExtensionBitset({
1593 AArch64::AEK_PERFMON,
1594 AArch64::AEK_ETE,
1595 AArch64::AEK_TRBE,
1596 AArch64::AEK_PROFILE,
1597 AArch64::AEK_MTE,
1598 AArch64::AEK_SVEBITPERM,
1599 AArch64::AEK_FP16FML,
1600 AArch64::AEK_SPE_EEF,
1601 AArch64::AEK_CCIDX,
1602 AArch64::AEK_SB,
1603 AArch64::AEK_SSBS,
1604 AArch64::AEK_PAUTH,
1605 AArch64::AEK_FLAGM,
1606 AArch64::AEK_PREDRES,
1607 AArch64::AEK_SVE,
1608 AArch64::AEK_SVE2,
1609 AArch64::AEK_FCMA,
1610 AArch64::AEK_CRC,
1611 AArch64::AEK_DOTPROD,
1612 AArch64::AEK_FP,
1613 AArch64::AEK_FP16,
1614 AArch64::AEK_I8MM,
1615 AArch64::AEK_JSCVT,
1616 AArch64::AEK_LSE,
1617 AArch64::AEK_SIMD,
1618 AArch64::AEK_RAS,
1619 AArch64::AEK_RCPC,
1620 AArch64::AEK_RDM,
1621 AArch64::AEK_BF16,
1622 AArch64::AEK_FPAC,
1623 })
1624 },
1625 {
1626 "cortex-x925",
1627 ARMV9_2A,
1628 AArch64::ExtensionBitset({
1629 AArch64::AEK_MTE,
1630 AArch64::AEK_FP16FML,
1631 AArch64::AEK_CCIDX,
1632 AArch64::AEK_ETE,
1633 AArch64::AEK_PERFMON,
1634 AArch64::AEK_PROFILE,
1635 AArch64::AEK_SVEBITPERM,
1636 AArch64::AEK_SPE_EEF,
1637 AArch64::AEK_TRBE,
1638 AArch64::AEK_FLAGM,
1639 AArch64::AEK_PREDRES,
1640 AArch64::AEK_SB,
1641 AArch64::AEK_SSBS,
1642 AArch64::AEK_SVE,
1643 AArch64::AEK_SVE2,
1644 AArch64::AEK_BF16,
1645 AArch64::AEK_FCMA,
1646 AArch64::AEK_CRC,
1647 AArch64::AEK_DOTPROD,
1648 AArch64::AEK_FP,
1649 AArch64::AEK_FP16,
1650 AArch64::AEK_I8MM,
1651 AArch64::AEK_JSCVT,
1652 AArch64::AEK_LSE,
1653 AArch64::AEK_SIMD,
1654 AArch64::AEK_PAUTH,
1655 AArch64::AEK_RAS,
1656 AArch64::AEK_RCPC,
1657 AArch64::AEK_RDM,
1658 AArch64::AEK_FPAC,
1659 })
1660 },
1661 {
1662 "c1-premium",
1663 ARMV9_3A,
1664 AArch64::ExtensionBitset({
1665 AArch64::AEK_SIMD,
1666 AArch64::AEK_CLRBHB,
1667 AArch64::AEK_CHK,
1668 AArch64::AEK_FP,
1669 AArch64::AEK_PERFMON,
1670 AArch64::AEK_SPECRES2,
1671 AArch64::AEK_SSBS,
1672 AArch64::AEK_RDM,
1673 AArch64::AEK_VH,
1674 AArch64::AEK_BF16,
1675 AArch64::AEK_DOTPROD,
1676 AArch64::AEK_FP16FML,
1677 AArch64::AEK_FP16,
1678 AArch64::AEK_MPAM,
1679 AArch64::AEK_PROFILE,
1680 AArch64::AEK_SVE,
1681 AArch64::AEK_CCIDX,
1682 AArch64::AEK_FCMA,
1683 AArch64::AEK_FPAC,
1684 AArch64::AEK_JSCVT,
1685 AArch64::AEK_AM,
1686 AArch64::AEK_RAS,
1687 AArch64::AEK_SEL2,
1688 AArch64::AEK_TRACEV8_4,
1689 AArch64::AEK_ALTERNATIVENZCV,
1690 AArch64::AEK_FRINT3264,
1691 AArch64::AEK_MTE,
1692 AArch64::AEK_FINEGRAINEDTRAPS,
1693 AArch64::AEK_HCX,
1694 AArch64::AEK_SPE_EEF,
1695 AArch64::AEK_RCPC3,
1696 AArch64::AEK_ETE,
1697 AArch64::AEK_SVEBITPERM,
1698 AArch64::AEK_SVE2,
1699 AArch64::AEK_TRBE,
1700 AArch64::AEK_SME,
1701 AArch64::AEK_SME2,
1702 })
1703 },
1704 {
1705 "c1-ultra",
1706 ARMV9_3A,
1707 AArch64::ExtensionBitset({
1708 AArch64::AEK_SIMD,
1709 AArch64::AEK_CLRBHB,
1710 AArch64::AEK_CHK,
1711 AArch64::AEK_FP,
1712 AArch64::AEK_PERFMON,
1713 AArch64::AEK_SPECRES2,
1714 AArch64::AEK_SSBS,
1715 AArch64::AEK_RDM,
1716 AArch64::AEK_VH,
1717 AArch64::AEK_BF16,
1718 AArch64::AEK_DOTPROD,
1719 AArch64::AEK_FP16FML,
1720 AArch64::AEK_FP16,
1721 AArch64::AEK_MPAM,
1722 AArch64::AEK_PROFILE,
1723 AArch64::AEK_SVE,
1724 AArch64::AEK_CCIDX,
1725 AArch64::AEK_FCMA,
1726 AArch64::AEK_FPAC,
1727 AArch64::AEK_JSCVT,
1728 AArch64::AEK_AM,
1729 AArch64::AEK_RAS,
1730 AArch64::AEK_SEL2,
1731 AArch64::AEK_TRACEV8_4,
1732 AArch64::AEK_ALTERNATIVENZCV,
1733 AArch64::AEK_FRINT3264,
1734 AArch64::AEK_MTE,
1735 AArch64::AEK_FINEGRAINEDTRAPS,
1736 AArch64::AEK_HCX,
1737 AArch64::AEK_SPE_EEF,
1738 AArch64::AEK_RCPC3,
1739 AArch64::AEK_ETE,
1740 AArch64::AEK_SVEBITPERM,
1741 AArch64::AEK_SVE2,
1742 AArch64::AEK_TRBE,
1743 AArch64::AEK_SME,
1744 AArch64::AEK_SME2,
1745 })
1746 },
1747 {
1748 "gb10",
1749 ARMV9_2A,
1750 AArch64::ExtensionBitset({
1751 AArch64::AEK_MTE,
1752 AArch64::AEK_FP16FML,
1753 AArch64::AEK_CCIDX,
1754 AArch64::AEK_ETE,
1755 AArch64::AEK_PERFMON,
1756 AArch64::AEK_PROFILE,
1757 AArch64::AEK_SVEBITPERM,
1758 AArch64::AEK_SPE_EEF,
1759 AArch64::AEK_TRBE,
1760 AArch64::AEK_FLAGM,
1761 AArch64::AEK_PREDRES,
1762 AArch64::AEK_SB,
1763 AArch64::AEK_SSBS,
1764 AArch64::AEK_SVE,
1765 AArch64::AEK_SVE2,
1766 AArch64::AEK_BF16,
1767 AArch64::AEK_FCMA,
1768 AArch64::AEK_CRC,
1769 AArch64::AEK_DOTPROD,
1770 AArch64::AEK_FP,
1771 AArch64::AEK_FP16,
1772 AArch64::AEK_I8MM,
1773 AArch64::AEK_JSCVT,
1774 AArch64::AEK_LSE,
1775 AArch64::AEK_SIMD,
1776 AArch64::AEK_PAUTH,
1777 AArch64::AEK_RAS,
1778 AArch64::AEK_RCPC,
1779 AArch64::AEK_RDM,
1780 AArch64::AEK_FPAC,
1781 AArch64::AEK_SVEAES,
1782 AArch64::AEK_SVESHA3,
1783 AArch64::AEK_SVESM4,
1784 })
1785 },
1786 {
1787 "grace",
1788 ARMV9A,
1789 AArch64::ExtensionBitset({
1790 AArch64::AEK_BF16,
1791 AArch64::AEK_PROFILE,
1792 AArch64::AEK_PERFMON,
1793 AArch64::AEK_ETE,
1794 AArch64::AEK_I8MM,
1795 AArch64::AEK_SIMD,
1796 AArch64::AEK_SVEBITPERM,
1797 AArch64::AEK_FP16FML,
1798 AArch64::AEK_MTE,
1799 AArch64::AEK_CCIDX,
1800 AArch64::AEK_SVE,
1801 AArch64::AEK_SVE2,
1802 AArch64::AEK_SSBS,
1803 AArch64::AEK_FP16,
1804 AArch64::AEK_DOTPROD,
1805 AArch64::AEK_FCMA,
1806 AArch64::AEK_CRC,
1807 AArch64::AEK_FP,
1808 AArch64::AEK_JSCVT,
1809 AArch64::AEK_LSE,
1810 AArch64::AEK_PAUTH,
1811 AArch64::AEK_RAS,
1812 AArch64::AEK_RCPC,
1813 AArch64::AEK_RDM,
1814 AArch64::AEK_FPAC,
1815 AArch64::AEK_SVESM4,
1816 AArch64::AEK_SVEAES,
1817 AArch64::AEK_SVESHA3,
1818 })
1819 },
1820 {
1821 "neoverse-e1",
1822 ARMV8_2A,
1823 AArch64::ExtensionBitset({
1824 AArch64::AEK_SHA2,
1825 AArch64::AEK_AES,
1826 AArch64::AEK_DOTPROD,
1827 AArch64::AEK_FP,
1828 AArch64::AEK_FP16,
1829 AArch64::AEK_SIMD,
1830 AArch64::AEK_RCPC,
1831 AArch64::AEK_SSBS,
1832 AArch64::AEK_PERFMON,
1833 AArch64::AEK_CRC,
1834 AArch64::AEK_LSE,
1835 AArch64::AEK_RAS,
1836 AArch64::AEK_RDM,
1837 })
1838 },
1839 {
1840 "neoverse-n1",
1841 ARMV8_2A,
1842 AArch64::ExtensionBitset({
1843 AArch64::AEK_SHA2,
1844 AArch64::AEK_AES,
1845 AArch64::AEK_DOTPROD,
1846 AArch64::AEK_FP,
1847 AArch64::AEK_FP16,
1848 AArch64::AEK_SIMD,
1849 AArch64::AEK_RCPC,
1850 AArch64::AEK_PROFILE,
1851 AArch64::AEK_SSBS,
1852 AArch64::AEK_PERFMON,
1853 AArch64::AEK_CRC,
1854 AArch64::AEK_LSE,
1855 AArch64::AEK_RAS,
1856 AArch64::AEK_RDM,
1857 })
1858 },
1859 {
1860 "neoverse-n2",
1861 ARMV9A,
1862 AArch64::ExtensionBitset({
1863 AArch64::AEK_BF16,
1864 AArch64::AEK_ETE,
1865 AArch64::AEK_FP16FML,
1866 AArch64::AEK_I8MM,
1867 AArch64::AEK_MTE,
1868 AArch64::AEK_SVE2,
1869 AArch64::AEK_SVEBITPERM,
1870 AArch64::AEK_TRBE,
1871 AArch64::AEK_PERFMON,
1872 AArch64::AEK_CCIDX,
1873 AArch64::AEK_DOTPROD,
1874 AArch64::AEK_FP16,
1875 AArch64::AEK_SB,
1876 AArch64::AEK_SSBS,
1877 AArch64::AEK_SVE,
1878 AArch64::AEK_FCMA,
1879 AArch64::AEK_CRC,
1880 AArch64::AEK_FP,
1881 AArch64::AEK_JSCVT,
1882 AArch64::AEK_LSE,
1883 AArch64::AEK_SIMD,
1884 AArch64::AEK_PAUTH,
1885 AArch64::AEK_RAS,
1886 AArch64::AEK_RCPC,
1887 AArch64::AEK_RDM,
1888 AArch64::AEK_FPAC,
1889 })
1890 },
1891 {
1892 "neoverse-n3",
1893 ARMV9_2A,
1894 AArch64::ExtensionBitset({
1895 AArch64::AEK_ETE,
1896 AArch64::AEK_FP16FML,
1897 AArch64::AEK_FP16,
1898 AArch64::AEK_MTE,
1899 AArch64::AEK_PERFMON,
1900 AArch64::AEK_RAND,
1901 AArch64::AEK_PROFILE,
1902 AArch64::AEK_SPE_EEF,
1903 AArch64::AEK_SVEBITPERM,
1904 AArch64::AEK_CCIDX,
1905 AArch64::AEK_SSBS,
1906 AArch64::AEK_SB,
1907 AArch64::AEK_PREDRES,
1908 AArch64::AEK_PAUTH,
1909 AArch64::AEK_FLAGM,
1910 AArch64::AEK_SVE,
1911 AArch64::AEK_SVE2,
1912 AArch64::AEK_BF16,
1913 AArch64::AEK_FCMA,
1914 AArch64::AEK_CRC,
1915 AArch64::AEK_DOTPROD,
1916 AArch64::AEK_FP,
1917 AArch64::AEK_I8MM,
1918 AArch64::AEK_JSCVT,
1919 AArch64::AEK_LSE,
1920 AArch64::AEK_RAS,
1921 AArch64::AEK_RCPC,
1922 AArch64::AEK_RDM,
1923 AArch64::AEK_SIMD,
1924 AArch64::AEK_FPAC,
1925 })
1926 },
1927 {
1928 "neoverse-512tvb",
1929 ARMV8_4A,
1930 AArch64::ExtensionBitset({
1931 AArch64::AEK_BF16,
1932 AArch64::AEK_CCDP,
1933 AArch64::AEK_SHA2,
1934 AArch64::AEK_AES,
1935 AArch64::AEK_FP,
1936 AArch64::AEK_FP16FML,
1937 AArch64::AEK_FP16,
1938 AArch64::AEK_I8MM,
1939 AArch64::AEK_SIMD,
1940 AArch64::AEK_PERFMON,
1941 AArch64::AEK_RAND,
1942 AArch64::AEK_PROFILE,
1943 AArch64::AEK_SSBS,
1944 AArch64::AEK_SVE,
1945 AArch64::AEK_CCIDX,
1946 AArch64::AEK_SHA3,
1947 AArch64::AEK_SM4,
1948 AArch64::AEK_DOTPROD,
1949 AArch64::AEK_FCMA,
1950 AArch64::AEK_CRC,
1951 AArch64::AEK_JSCVT,
1952 AArch64::AEK_LSE,
1953 AArch64::AEK_PAUTH,
1954 AArch64::AEK_RAS,
1955 AArch64::AEK_RCPC,
1956 AArch64::AEK_RDM,
1957 AArch64::AEK_FPAC,
1958 })
1959 },
1960 {
1961 "neoverse-v1",
1962 ARMV8_4A,
1963 AArch64::ExtensionBitset({
1964 AArch64::AEK_BF16,
1965 AArch64::AEK_CCDP,
1966 AArch64::AEK_SHA2,
1967 AArch64::AEK_AES,
1968 AArch64::AEK_FP,
1969 AArch64::AEK_FP16FML,
1970 AArch64::AEK_FP16,
1971 AArch64::AEK_I8MM,
1972 AArch64::AEK_SIMD,
1973 AArch64::AEK_PERFMON,
1974 AArch64::AEK_RAND,
1975 AArch64::AEK_PROFILE,
1976 AArch64::AEK_SSBS,
1977 AArch64::AEK_SVE,
1978 AArch64::AEK_CCIDX,
1979 AArch64::AEK_SHA3,
1980 AArch64::AEK_SM4,
1981 AArch64::AEK_DOTPROD,
1982 AArch64::AEK_FCMA,
1983 AArch64::AEK_CRC,
1984 AArch64::AEK_JSCVT,
1985 AArch64::AEK_LSE,
1986 AArch64::AEK_PAUTH,
1987 AArch64::AEK_RAS,
1988 AArch64::AEK_RCPC,
1989 AArch64::AEK_RDM,
1990 })
1991 },
1992 {
1993 "neoverse-v2",
1994 ARMV9A,
1995 AArch64::ExtensionBitset({
1996 AArch64::AEK_BF16,
1997 AArch64::AEK_PROFILE,
1998 AArch64::AEK_PERFMON,
1999 AArch64::AEK_ETE,
2000 AArch64::AEK_I8MM,
2001 AArch64::AEK_SIMD,
2002 AArch64::AEK_SVEBITPERM,
2003 AArch64::AEK_FP16FML,
2004 AArch64::AEK_MTE,
2005 AArch64::AEK_RAND,
2006 AArch64::AEK_CCIDX,
2007 AArch64::AEK_SVE,
2008 AArch64::AEK_SVE2,
2009 AArch64::AEK_SSBS,
2010 AArch64::AEK_FP16,
2011 AArch64::AEK_DOTPROD,
2012 AArch64::AEK_FCMA,
2013 AArch64::AEK_CRC,
2014 AArch64::AEK_FP,
2015 AArch64::AEK_JSCVT,
2016 AArch64::AEK_LSE,
2017 AArch64::AEK_PAUTH,
2018 AArch64::AEK_RAS,
2019 AArch64::AEK_RCPC,
2020 AArch64::AEK_RDM,
2021 AArch64::AEK_FPAC,
2022 })
2023 },
2024 {
2025 "neoverse-v3",
2026 ARMV9_2A,
2027 AArch64::ExtensionBitset({
2028 AArch64::AEK_ETE,
2029 AArch64::AEK_FP16FML,
2030 AArch64::AEK_FP16,
2031 AArch64::AEK_LS64,
2032 AArch64::AEK_MTE,
2033 AArch64::AEK_PERFMON,
2034 AArch64::AEK_RAND,
2035 AArch64::AEK_PROFILE,
2036 AArch64::AEK_CCIDX,
2037 AArch64::AEK_SPE_EEF,
2038 AArch64::AEK_SVEBITPERM,
2039 AArch64::AEK_BRBE,
2040 AArch64::AEK_SSBS,
2041 AArch64::AEK_SB,
2042 AArch64::AEK_PREDRES,
2043 AArch64::AEK_PAUTH,
2044 AArch64::AEK_FLAGM,
2045 AArch64::AEK_SVE,
2046 AArch64::AEK_SVE2,
2047 AArch64::AEK_BF16,
2048 AArch64::AEK_FCMA,
2049 AArch64::AEK_CRC,
2050 AArch64::AEK_DOTPROD,
2051 AArch64::AEK_FP,
2052 AArch64::AEK_I8MM,
2053 AArch64::AEK_JSCVT,
2054 AArch64::AEK_LSE,
2055 AArch64::AEK_SIMD,
2056 AArch64::AEK_RAS,
2057 AArch64::AEK_RCPC,
2058 AArch64::AEK_RDM,
2059 AArch64::AEK_RME,
2060 AArch64::AEK_FPAC,
2061 })
2062 },
2063 {
2064 "neoverse-v3ae",
2065 ARMV9_2A,
2066 AArch64::ExtensionBitset({
2067 AArch64::AEK_ETE,
2068 AArch64::AEK_FP16FML,
2069 AArch64::AEK_FP16,
2070 AArch64::AEK_LS64,
2071 AArch64::AEK_MTE,
2072 AArch64::AEK_PERFMON,
2073 AArch64::AEK_RAND,
2074 AArch64::AEK_PROFILE,
2075 AArch64::AEK_SPE_EEF,
2076 AArch64::AEK_SVEBITPERM,
2077 AArch64::AEK_BRBE,
2078 AArch64::AEK_SSBS,
2079 AArch64::AEK_SB,
2080 AArch64::AEK_PREDRES,
2081 AArch64::AEK_PAUTH,
2082 AArch64::AEK_FLAGM,
2083 AArch64::AEK_CCIDX,
2084 AArch64::AEK_SVE,
2085 AArch64::AEK_SVE2,
2086 AArch64::AEK_BF16,
2087 AArch64::AEK_FCMA,
2088 AArch64::AEK_CRC,
2089 AArch64::AEK_DOTPROD,
2090 AArch64::AEK_FP,
2091 AArch64::AEK_I8MM,
2092 AArch64::AEK_JSCVT,
2093 AArch64::AEK_LSE,
2094 AArch64::AEK_SIMD,
2095 AArch64::AEK_RAS,
2096 AArch64::AEK_RCPC,
2097 AArch64::AEK_RDM,
2098 AArch64::AEK_RME,
2099 AArch64::AEK_FPAC,
2100 })
2101 },
2102 {
2103 "exynos-m3",
2104 ARMV8A,
2105 AArch64::ExtensionBitset({
2106 AArch64::AEK_CRC,
2107 AArch64::AEK_SHA2,
2108 AArch64::AEK_AES,
2109 AArch64::AEK_PERFMON,
2110 AArch64::AEK_SIMD,
2111 AArch64::AEK_FP,
2112 })
2113 },
2114 {
2115 "exynos-m4",
2116 ARMV8_2A,
2117 AArch64::ExtensionBitset({
2118 AArch64::AEK_SHA2,
2119 AArch64::AEK_AES,
2120 AArch64::AEK_DOTPROD,
2121 AArch64::AEK_FP16,
2122 AArch64::AEK_PERFMON,
2123 AArch64::AEK_CRC,
2124 AArch64::AEK_FP,
2125 AArch64::AEK_LSE,
2126 AArch64::AEK_SIMD,
2127 AArch64::AEK_RAS,
2128 AArch64::AEK_RDM,
2129 })
2130 },
2131 {
2132 "exynos-m5",
2133 ARMV8_2A,
2134 AArch64::ExtensionBitset({
2135 AArch64::AEK_SHA2,
2136 AArch64::AEK_AES,
2137 AArch64::AEK_DOTPROD,
2138 AArch64::AEK_FP16,
2139 AArch64::AEK_PERFMON,
2140 AArch64::AEK_CRC,
2141 AArch64::AEK_FP,
2142 AArch64::AEK_LSE,
2143 AArch64::AEK_SIMD,
2144 AArch64::AEK_RAS,
2145 AArch64::AEK_RDM,
2146 })
2147 },
2148 {
2149 "falkor",
2150 ARMV8A,
2151 AArch64::ExtensionBitset({
2152 AArch64::AEK_CRC,
2153 AArch64::AEK_SHA2,
2154 AArch64::AEK_AES,
2155 AArch64::AEK_FP,
2156 AArch64::AEK_SIMD,
2157 AArch64::AEK_PERFMON,
2158 AArch64::AEK_RDM,
2159 })
2160 },
2161 {
2162 "saphira",
2163 ARMV8_4A,
2164 AArch64::ExtensionBitset({
2165 AArch64::AEK_SHA2,
2166 AArch64::AEK_AES,
2167 AArch64::AEK_FP,
2168 AArch64::AEK_SIMD,
2169 AArch64::AEK_PROFILE,
2170 AArch64::AEK_PERFMON,
2171 AArch64::AEK_CRC,
2172 AArch64::AEK_CCIDX,
2173 AArch64::AEK_LSE,
2174 AArch64::AEK_RDM,
2175 AArch64::AEK_RAS,
2176 AArch64::AEK_RCPC,
2177 })
2178 },
2179 {
2180 "kryo",
2181 ARMV8A,
2182 AArch64::ExtensionBitset({
2183 AArch64::AEK_CRC,
2184 AArch64::AEK_SHA2,
2185 AArch64::AEK_AES,
2186 AArch64::AEK_FP,
2187 AArch64::AEK_SIMD,
2188 AArch64::AEK_PERFMON,
2189 })
2190 },
2191 {
2192 "thunderx",
2193 ARMV8A,
2194 AArch64::ExtensionBitset({
2195 AArch64::AEK_CRC,
2196 AArch64::AEK_SHA2,
2197 AArch64::AEK_AES,
2198 AArch64::AEK_FP,
2199 AArch64::AEK_PERFMON,
2200 AArch64::AEK_SIMD,
2201 })
2202 },
2203 {
2204 "thunderxt88",
2205 ARMV8A,
2206 AArch64::ExtensionBitset({
2207 AArch64::AEK_CRC,
2208 AArch64::AEK_SHA2,
2209 AArch64::AEK_AES,
2210 AArch64::AEK_FP,
2211 AArch64::AEK_PERFMON,
2212 AArch64::AEK_SIMD,
2213 })
2214 },
2215 {
2216 "thunderxt81",
2217 ARMV8A,
2218 AArch64::ExtensionBitset({
2219 AArch64::AEK_CRC,
2220 AArch64::AEK_SHA2,
2221 AArch64::AEK_AES,
2222 AArch64::AEK_FP,
2223 AArch64::AEK_PERFMON,
2224 AArch64::AEK_SIMD,
2225 })
2226 },
2227 {
2228 "thunderxt83",
2229 ARMV8A,
2230 AArch64::ExtensionBitset({
2231 AArch64::AEK_CRC,
2232 AArch64::AEK_SHA2,
2233 AArch64::AEK_AES,
2234 AArch64::AEK_FP,
2235 AArch64::AEK_PERFMON,
2236 AArch64::AEK_SIMD,
2237 })
2238 },
2239 {
2240 "thunderx2t99",
2241 ARMV8_1A,
2242 AArch64::ExtensionBitset({
2243 AArch64::AEK_CRC,
2244 AArch64::AEK_SHA2,
2245 AArch64::AEK_AES,
2246 AArch64::AEK_FP,
2247 AArch64::AEK_SIMD,
2248 AArch64::AEK_LSE,
2249 AArch64::AEK_RDM,
2250 })
2251 },
2252 {
2253 "thunderx3t110",
2254 ARMV8_3A,
2255 AArch64::ExtensionBitset({
2256 AArch64::AEK_CRC,
2257 AArch64::AEK_SHA2,
2258 AArch64::AEK_AES,
2259 AArch64::AEK_FP,
2260 AArch64::AEK_SIMD,
2261 AArch64::AEK_LSE,
2262 AArch64::AEK_CCIDX,
2263 AArch64::AEK_PAUTH,
2264 AArch64::AEK_PERFMON,
2265 AArch64::AEK_FCMA,
2266 AArch64::AEK_JSCVT,
2267 AArch64::AEK_RAS,
2268 AArch64::AEK_RCPC,
2269 AArch64::AEK_RDM,
2270 })
2271 },
2272 {
2273 "tsv110",
2274 ARMV8_2A,
2275 AArch64::ExtensionBitset({
2276 AArch64::AEK_SHA2,
2277 AArch64::AEK_AES,
2278 AArch64::AEK_FP,
2279 AArch64::AEK_SIMD,
2280 AArch64::AEK_PERFMON,
2281 AArch64::AEK_PROFILE,
2282 AArch64::AEK_FP16,
2283 AArch64::AEK_FP16FML,
2284 AArch64::AEK_DOTPROD,
2285 AArch64::AEK_JSCVT,
2286 AArch64::AEK_FCMA,
2287 AArch64::AEK_CRC,
2288 AArch64::AEK_LSE,
2289 AArch64::AEK_RAS,
2290 AArch64::AEK_RDM,
2291 })
2292 },
2293 {
2294 "hip12",
2295 ARMV8_7A,
2296 AArch64::ExtensionBitset({
2297 AArch64::AEK_SVE,
2298 AArch64::AEK_SVE2,
2299 AArch64::AEK_SVEBITPERM,
2300 AArch64::AEK_SVEAES,
2301 AArch64::AEK_SVESM4,
2302 AArch64::AEK_SVESHA3,
2303 AArch64::AEK_FP16,
2304 AArch64::AEK_FP16FML,
2305 AArch64::AEK_PERFMON,
2306 AArch64::AEK_FLAGM,
2307 AArch64::AEK_PREDRES,
2308 AArch64::AEK_SB,
2309 AArch64::AEK_SSBS,
2310 AArch64::AEK_CCIDX,
2311 AArch64::AEK_RAND,
2312 AArch64::AEK_ETE,
2313 AArch64::AEK_TRBE,
2314 AArch64::AEK_PROFILE,
2315 AArch64::AEK_SPE_EEF,
2316 AArch64::AEK_NMI,
2317 AArch64::AEK_HBC,
2318 AArch64::AEK_RCPC3,
2319 AArch64::AEK_BF16,
2320 AArch64::AEK_FCMA,
2321 AArch64::AEK_CRC,
2322 AArch64::AEK_DOTPROD,
2323 AArch64::AEK_FP,
2324 AArch64::AEK_I8MM,
2325 AArch64::AEK_JSCVT,
2326 AArch64::AEK_LSE,
2327 AArch64::AEK_SIMD,
2328 AArch64::AEK_PAUTH,
2329 AArch64::AEK_RAS,
2330 AArch64::AEK_RCPC,
2331 AArch64::AEK_RDM,
2332 AArch64::AEK_FPAC,
2333 AArch64::AEK_LS64,
2334 AArch64::AEK_RME,
2335 AArch64::AEK_BRBE,
2336 })
2337 },
2338 {
2339 "apple-a7",
2340 ARMV8A,
2341 AArch64::ExtensionBitset({
2342 AArch64::AEK_SHA2,
2343 AArch64::AEK_AES,
2344 AArch64::AEK_FP,
2345 AArch64::AEK_SIMD,
2346 AArch64::AEK_PERFMON,
2347 })
2348 },
2349 {
2350 "apple-a10",
2351 ARMV8A,
2352 AArch64::ExtensionBitset({
2353 AArch64::AEK_SHA2,
2354 AArch64::AEK_AES,
2355 AArch64::AEK_FP,
2356 AArch64::AEK_SIMD,
2357 AArch64::AEK_PERFMON,
2358 AArch64::AEK_CRC,
2359 AArch64::AEK_RDM,
2360 AArch64::AEK_PAN,
2361 AArch64::AEK_LOR,
2362 AArch64::AEK_VH,
2363 })
2364 },
2365 {
2366 "apple-a11",
2367 ARMV8_2A,
2368 AArch64::ExtensionBitset({
2369 AArch64::AEK_SHA2,
2370 AArch64::AEK_AES,
2371 AArch64::AEK_FP,
2372 AArch64::AEK_SIMD,
2373 AArch64::AEK_PERFMON,
2374 AArch64::AEK_FP16,
2375 AArch64::AEK_CRC,
2376 AArch64::AEK_LSE,
2377 AArch64::AEK_RAS,
2378 AArch64::AEK_RDM,
2379 })
2380 },
2381 {
2382 "apple-a12",
2383 ARMV8_3A,
2384 AArch64::ExtensionBitset({
2385 AArch64::AEK_SHA2,
2386 AArch64::AEK_AES,
2387 AArch64::AEK_FP,
2388 AArch64::AEK_SIMD,
2389 AArch64::AEK_PERFMON,
2390 AArch64::AEK_FP16,
2391 AArch64::AEK_FCMA,
2392 AArch64::AEK_CRC,
2393 AArch64::AEK_JSCVT,
2394 AArch64::AEK_LSE,
2395 AArch64::AEK_PAUTH,
2396 AArch64::AEK_RAS,
2397 AArch64::AEK_RCPC,
2398 AArch64::AEK_RDM,
2399 })
2400 },
2401 {
2402 "apple-a13",
2403 ARMV8_4A,
2404 AArch64::ExtensionBitset({
2405 AArch64::AEK_SHA2,
2406 AArch64::AEK_AES,
2407 AArch64::AEK_FP,
2408 AArch64::AEK_SIMD,
2409 AArch64::AEK_PERFMON,
2410 AArch64::AEK_FP16,
2411 AArch64::AEK_FP16FML,
2412 AArch64::AEK_SHA3,
2413 AArch64::AEK_FCMA,
2414 AArch64::AEK_CRC,
2415 AArch64::AEK_JSCVT,
2416 AArch64::AEK_LSE,
2417 AArch64::AEK_PAUTH,
2418 AArch64::AEK_RAS,
2419 AArch64::AEK_RCPC,
2420 AArch64::AEK_RDM,
2421 AArch64::AEK_DOTPROD,
2422 })
2423 },
2424 {
2425 "apple-a14",
2426 ARMV8_4A,
2427 AArch64::ExtensionBitset({
2428 AArch64::AEK_SHA2,
2429 AArch64::AEK_AES,
2430 AArch64::AEK_FP,
2431 AArch64::AEK_SIMD,
2432 AArch64::AEK_PERFMON,
2433 AArch64::AEK_FP16,
2434 AArch64::AEK_FP16FML,
2435 AArch64::AEK_SHA3,
2436 AArch64::AEK_ALTERNATIVENZCV,
2437 AArch64::AEK_FRINT3264,
2438 AArch64::AEK_SPECRESTRICT,
2439 AArch64::AEK_SSBS,
2440 AArch64::AEK_SB,
2441 AArch64::AEK_PREDRES,
2442 AArch64::AEK_CCDP,
2443 AArch64::AEK_FCMA,
2444 AArch64::AEK_CRC,
2445 AArch64::AEK_JSCVT,
2446 AArch64::AEK_LSE,
2447 AArch64::AEK_PAUTH,
2448 AArch64::AEK_RAS,
2449 AArch64::AEK_RCPC,
2450 AArch64::AEK_RDM,
2451 AArch64::AEK_DOTPROD,
2452 })
2453 },
2454 {
2455 "apple-a15",
2456 ARMV8_6A,
2457 AArch64::ExtensionBitset({
2458 AArch64::AEK_SHA2,
2459 AArch64::AEK_AES,
2460 AArch64::AEK_FP,
2461 AArch64::AEK_SIMD,
2462 AArch64::AEK_PERFMON,
2463 AArch64::AEK_SHA3,
2464 AArch64::AEK_FP16,
2465 AArch64::AEK_FP16FML,
2466 AArch64::AEK_FCMA,
2467 AArch64::AEK_CRC,
2468 AArch64::AEK_JSCVT,
2469 AArch64::AEK_LSE,
2470 AArch64::AEK_PAUTH,
2471 AArch64::AEK_FPAC,
2472 AArch64::AEK_RAS,
2473 AArch64::AEK_RCPC,
2474 AArch64::AEK_RDM,
2475 AArch64::AEK_BF16,
2476 AArch64::AEK_DOTPROD,
2477 AArch64::AEK_I8MM,
2478 AArch64::AEK_SSBS,
2479 })
2480 },
2481 {
2482 "apple-a16",
2483 ARMV8_6A,
2484 AArch64::ExtensionBitset({
2485 AArch64::AEK_SHA2,
2486 AArch64::AEK_AES,
2487 AArch64::AEK_FP,
2488 AArch64::AEK_SIMD,
2489 AArch64::AEK_PERFMON,
2490 AArch64::AEK_SHA3,
2491 AArch64::AEK_FP16,
2492 AArch64::AEK_FP16FML,
2493 AArch64::AEK_HCX,
2494 AArch64::AEK_FCMA,
2495 AArch64::AEK_CRC,
2496 AArch64::AEK_JSCVT,
2497 AArch64::AEK_LSE,
2498 AArch64::AEK_PAUTH,
2499 AArch64::AEK_FPAC,
2500 AArch64::AEK_RAS,
2501 AArch64::AEK_RCPC,
2502 AArch64::AEK_RDM,
2503 AArch64::AEK_BF16,
2504 AArch64::AEK_DOTPROD,
2505 AArch64::AEK_I8MM,
2506 AArch64::AEK_SSBS,
2507 })
2508 },
2509 {
2510 "apple-a17",
2511 ARMV8_6A,
2512 AArch64::ExtensionBitset({
2513 AArch64::AEK_SHA2,
2514 AArch64::AEK_AES,
2515 AArch64::AEK_FP,
2516 AArch64::AEK_SIMD,
2517 AArch64::AEK_PERFMON,
2518 AArch64::AEK_SHA3,
2519 AArch64::AEK_FP16,
2520 AArch64::AEK_FP16FML,
2521 AArch64::AEK_HCX,
2522 AArch64::AEK_FCMA,
2523 AArch64::AEK_CRC,
2524 AArch64::AEK_JSCVT,
2525 AArch64::AEK_LSE,
2526 AArch64::AEK_PAUTH,
2527 AArch64::AEK_FPAC,
2528 AArch64::AEK_RAS,
2529 AArch64::AEK_RCPC,
2530 AArch64::AEK_RDM,
2531 AArch64::AEK_BF16,
2532 AArch64::AEK_DOTPROD,
2533 AArch64::AEK_I8MM,
2534 AArch64::AEK_SSBS,
2535 })
2536 },
2537 {
2538 "apple-m4",
2539 ARMV8_7A,
2540 AArch64::ExtensionBitset({
2541 AArch64::AEK_SHA2,
2542 AArch64::AEK_FP,
2543 AArch64::AEK_SIMD,
2544 AArch64::AEK_PERFMON,
2545 AArch64::AEK_SHA3,
2546 AArch64::AEK_FP16,
2547 AArch64::AEK_FP16FML,
2548 AArch64::AEK_AES,
2549 AArch64::AEK_BF16,
2550 AArch64::AEK_SME,
2551 AArch64::AEK_SME2,
2552 AArch64::AEK_SMEF64F64,
2553 AArch64::AEK_SMEI16I64,
2554 AArch64::AEK_FCMA,
2555 AArch64::AEK_CRC,
2556 AArch64::AEK_JSCVT,
2557 AArch64::AEK_LSE,
2558 AArch64::AEK_PAUTH,
2559 AArch64::AEK_FPAC,
2560 AArch64::AEK_RAS,
2561 AArch64::AEK_RCPC,
2562 AArch64::AEK_RDM,
2563 AArch64::AEK_DOTPROD,
2564 AArch64::AEK_I8MM,
2565 })
2566 },
2567 {
2568 "apple-m5",
2569 ARMV8_7A,
2570 AArch64::ExtensionBitset({
2571 AArch64::AEK_SHA2,
2572 AArch64::AEK_FP,
2573 AArch64::AEK_SIMD,
2574 AArch64::AEK_PERFMON,
2575 AArch64::AEK_SHA3,
2576 AArch64::AEK_FP16,
2577 AArch64::AEK_FP16FML,
2578 AArch64::AEK_AES,
2579 AArch64::AEK_BF16,
2580 AArch64::AEK_WFXT,
2581 AArch64::AEK_SME,
2582 AArch64::AEK_SME2,
2583 AArch64::AEK_SMEF64F64,
2584 AArch64::AEK_SMEI16I64,
2585 AArch64::AEK_FCMA,
2586 AArch64::AEK_CRC,
2587 AArch64::AEK_JSCVT,
2588 AArch64::AEK_LSE,
2589 AArch64::AEK_PAUTH,
2590 AArch64::AEK_FPAC,
2591 AArch64::AEK_RAS,
2592 AArch64::AEK_RCPC,
2593 AArch64::AEK_RDM,
2594 AArch64::AEK_DOTPROD,
2595 AArch64::AEK_I8MM,
2596 AArch64::AEK_MTE,
2597 AArch64::AEK_CSSC,
2598 AArch64::AEK_HBC,
2599 AArch64::AEK_SME2P1,
2600 AArch64::AEK_SMEB16B16,
2601 AArch64::AEK_SMEF16F16,
2602 AArch64::AEK_SPECRES2,
2603 })
2604 },
2605 {
2606 "a64fx",
2607 ARMV8_2A,
2608 AArch64::ExtensionBitset({
2609 AArch64::AEK_FP,
2610 AArch64::AEK_SIMD,
2611 AArch64::AEK_SHA2,
2612 AArch64::AEK_PERFMON,
2613 AArch64::AEK_FP16,
2614 AArch64::AEK_SVE,
2615 AArch64::AEK_FCMA,
2616 AArch64::AEK_AES,
2617 AArch64::AEK_CRC,
2618 AArch64::AEK_LSE,
2619 AArch64::AEK_RAS,
2620 AArch64::AEK_RDM,
2621 })
2622 },
2623 {
2624 "fujitsu-monaka",
2625 ARMV9_3A,
2626 AArch64::ExtensionBitset({
2627 AArch64::AEK_PERFMON,
2628 AArch64::AEK_CCIDX,
2629 AArch64::AEK_FPAC,
2630 AArch64::AEK_FP16FML,
2631 AArch64::AEK_RAND,
2632 AArch64::AEK_SSBS,
2633 AArch64::AEK_LS64,
2634 AArch64::AEK_CLRBHB,
2635 AArch64::AEK_SPECRES2,
2636 AArch64::AEK_SVEAES,
2637 AArch64::AEK_SVESM4,
2638 AArch64::AEK_SVESHA3,
2639 AArch64::AEK_SVE2,
2640 AArch64::AEK_SVEBITPERM,
2641 AArch64::AEK_ETE,
2642 AArch64::AEK_MEC,
2643 AArch64::AEK_FAMINMAX,
2644 AArch64::AEK_FP8DOT2,
2645 AArch64::AEK_FP8DOT4,
2646 AArch64::AEK_FP8FMA,
2647 AArch64::AEK_LUT,
2648 })
2649 },
2650 {
2651 "carmel",
2652 ARMV8_2A,
2653 AArch64::ExtensionBitset({
2654 AArch64::AEK_SIMD,
2655 AArch64::AEK_SHA2,
2656 AArch64::AEK_AES,
2657 AArch64::AEK_FP16,
2658 AArch64::AEK_CRC,
2659 AArch64::AEK_LSE,
2660 AArch64::AEK_RAS,
2661 AArch64::AEK_RDM,
2662 AArch64::AEK_FP,
2663 })
2664 },
2665 {
2666 "olympus",
2667 ARMV9_2A,
2668 AArch64::ExtensionBitset({
2669 AArch64::AEK_BRBE,
2670 AArch64::AEK_CCIDX,
2671 AArch64::AEK_CHK,
2672 AArch64::AEK_ETE,
2673 AArch64::AEK_FAMINMAX,
2674 AArch64::AEK_FP16FML,
2675 AArch64::AEK_FP8DOT2,
2676 AArch64::AEK_FP8DOT4,
2677 AArch64::AEK_FP8FMA,
2678 AArch64::AEK_FPAC,
2679 AArch64::AEK_LS64,
2680 AArch64::AEK_LUT,
2681 AArch64::AEK_MEC,
2682 AArch64::AEK_MTE,
2683 AArch64::AEK_PERFMON,
2684 AArch64::AEK_RAND,
2685 AArch64::AEK_PROFILE,
2686 AArch64::AEK_SPE_EEF,
2687 AArch64::AEK_SSBS,
2688 AArch64::AEK_SVEBITPERM,
2689 AArch64::AEK_SVESHA3,
2690 AArch64::AEK_SVESM4,
2691 AArch64::AEK_SVEAES,
2692 AArch64::AEK_SVE2,
2693 })
2694 },
2695 {
2696 "ampere1",
2697 ARMV8_6A,
2698 AArch64::ExtensionBitset({
2699 AArch64::AEK_SIMD,
2700 AArch64::AEK_PERFMON,
2701 AArch64::AEK_SSBS,
2702 AArch64::AEK_RAND,
2703 AArch64::AEK_SB,
2704 AArch64::AEK_SHA2,
2705 AArch64::AEK_SHA3,
2706 AArch64::AEK_AES,
2707 AArch64::AEK_FP16,
2708 AArch64::AEK_BF16,
2709 AArch64::AEK_FCMA,
2710 AArch64::AEK_CRC,
2711 AArch64::AEK_DOTPROD,
2712 AArch64::AEK_FP,
2713 AArch64::AEK_I8MM,
2714 AArch64::AEK_JSCVT,
2715 AArch64::AEK_CCIDX,
2716 AArch64::AEK_LSE,
2717 AArch64::AEK_PAUTH,
2718 AArch64::AEK_RAS,
2719 AArch64::AEK_RCPC,
2720 AArch64::AEK_RDM,
2721 })
2722 },
2723 {
2724 "ampere1a",
2725 ARMV8_6A,
2726 AArch64::ExtensionBitset({
2727 AArch64::AEK_SIMD,
2728 AArch64::AEK_PERFMON,
2729 AArch64::AEK_MTE,
2730 AArch64::AEK_SSBS,
2731 AArch64::AEK_RAND,
2732 AArch64::AEK_SB,
2733 AArch64::AEK_SM4,
2734 AArch64::AEK_SHA2,
2735 AArch64::AEK_SHA3,
2736 AArch64::AEK_AES,
2737 AArch64::AEK_FP16,
2738 AArch64::AEK_BF16,
2739 AArch64::AEK_FCMA,
2740 AArch64::AEK_CRC,
2741 AArch64::AEK_DOTPROD,
2742 AArch64::AEK_FP,
2743 AArch64::AEK_I8MM,
2744 AArch64::AEK_JSCVT,
2745 AArch64::AEK_LSE,
2746 AArch64::AEK_PAUTH,
2747 AArch64::AEK_RAS,
2748 AArch64::AEK_RCPC,
2749 AArch64::AEK_CCIDX,
2750 AArch64::AEK_RDM,
2751 })
2752 },
2753 {
2754 "ampere1b",
2755 ARMV8_7A,
2756 AArch64::ExtensionBitset({
2757 AArch64::AEK_SIMD,
2758 AArch64::AEK_PERFMON,
2759 AArch64::AEK_MTE,
2760 AArch64::AEK_SSBS,
2761 AArch64::AEK_RAND,
2762 AArch64::AEK_SB,
2763 AArch64::AEK_SM4,
2764 AArch64::AEK_SHA2,
2765 AArch64::AEK_SHA3,
2766 AArch64::AEK_AES,
2767 AArch64::AEK_CSSC,
2768 AArch64::AEK_WFXT,
2769 AArch64::AEK_FP16,
2770 AArch64::AEK_BF16,
2771 AArch64::AEK_FCMA,
2772 AArch64::AEK_CRC,
2773 AArch64::AEK_DOTPROD,
2774 AArch64::AEK_FP,
2775 AArch64::AEK_I8MM,
2776 AArch64::AEK_JSCVT,
2777 AArch64::AEK_LSE,
2778 AArch64::AEK_PAUTH,
2779 AArch64::AEK_RAS,
2780 AArch64::AEK_RCPC,
2781 AArch64::AEK_CCIDX,
2782 AArch64::AEK_RDM,
2783 })
2784 },
2785 {
2786 "ampere1c",
2787 ARMV9_2A,
2788 AArch64::ExtensionBitset({
2789 AArch64::AEK_SIMD,
2790 AArch64::AEK_CSSC,
2791 AArch64::AEK_CCIDX,
2792 AArch64::AEK_FP8FMA,
2793 AArch64::AEK_FAMINMAX,
2794 AArch64::AEK_LUT,
2795 AArch64::AEK_SVEAES,
2796 AArch64::AEK_SVESM4,
2797 AArch64::AEK_SVESHA3,
2798 AArch64::AEK_SVE2,
2799 AArch64::AEK_SVEB16B16,
2800 AArch64::AEK_MTE,
2801 AArch64::AEK_FP16FML,
2802 AArch64::AEK_SSBS,
2803 AArch64::AEK_RAND,
2804 AArch64::AEK_PERFMON,
2805 })
2806 },
2807 {
2808 "oryon-1",
2809 ARMV8_6A,
2810 AArch64::ExtensionBitset({
2811 AArch64::AEK_SIMD,
2812 AArch64::AEK_PERFMON,
2813 AArch64::AEK_RAND,
2814 AArch64::AEK_PAUTH,
2815 AArch64::AEK_SM4,
2816 AArch64::AEK_SHA2,
2817 AArch64::AEK_SHA3,
2818 AArch64::AEK_AES,
2819 AArch64::AEK_PROFILE,
2820 AArch64::AEK_BF16,
2821 AArch64::AEK_FCMA,
2822 AArch64::AEK_CRC,
2823 AArch64::AEK_DOTPROD,
2824 AArch64::AEK_FP,
2825 AArch64::AEK_I8MM,
2826 AArch64::AEK_SSBS,
2827 AArch64::AEK_CCIDX,
2828 AArch64::AEK_JSCVT,
2829 AArch64::AEK_LSE,
2830 AArch64::AEK_RAS,
2831 AArch64::AEK_RCPC,
2832 AArch64::AEK_RDM,
2833 })
2834 },
2835};
2836#undef EMIT_CPU_INFO
2837#endif // EMIT_CPU_INFO
2838
2839