Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/llvm/TargetParser/AArch64TargetParserDef.inc is written in an unsupported language. File is not indexed.

0001 // Autogenerated by ARMTargetDefEmitter.cpp
0002 
0003 #ifndef ARM_PROCESSOR_FAMILY
0004 #define ARM_PROCESSOR_FAMILY(ENUM)
0005 #endif
0006 
0007 ARM_PROCESSOR_FAMILY(TSV110)
0008 ARM_PROCESSOR_FAMILY(CortexR82)
0009 ARM_PROCESSOR_FAMILY(ThunderX2T99)
0010 ARM_PROCESSOR_FAMILY(AppleA17)
0011 ARM_PROCESSOR_FAMILY(Neoverse512TVB)
0012 ARM_PROCESSOR_FAMILY(ThunderXT81)
0013 ARM_PROCESSOR_FAMILY(CortexA725)
0014 ARM_PROCESSOR_FAMILY(CortexA55)
0015 ARM_PROCESSOR_FAMILY(MONAKA)
0016 ARM_PROCESSOR_FAMILY(CortexA78AE)
0017 ARM_PROCESSOR_FAMILY(CortexX4)
0018 ARM_PROCESSOR_FAMILY(CortexA520)
0019 ARM_PROCESSOR_FAMILY(AppleA13)
0020 ARM_PROCESSOR_FAMILY(CortexA76)
0021 ARM_PROCESSOR_FAMILY(NeoverseN1)
0022 ARM_PROCESSOR_FAMILY(Kryo)
0023 ARM_PROCESSOR_FAMILY(AppleA11)
0024 ARM_PROCESSOR_FAMILY(AppleA14)
0025 ARM_PROCESSOR_FAMILY(NeoverseN2)
0026 ARM_PROCESSOR_FAMILY(AppleA16)
0027 ARM_PROCESSOR_FAMILY(CortexA73)
0028 ARM_PROCESSOR_FAMILY(CortexX2)
0029 ARM_PROCESSOR_FAMILY(AppleA7)
0030 ARM_PROCESSOR_FAMILY(CortexA77)
0031 ARM_PROCESSOR_FAMILY(CortexA53)
0032 ARM_PROCESSOR_FAMILY(Ampere1B)
0033 ARM_PROCESSOR_FAMILY(Ampere1A)
0034 ARM_PROCESSOR_FAMILY(CortexA35)
0035 ARM_PROCESSOR_FAMILY(CortexA510)
0036 ARM_PROCESSOR_FAMILY(ExynosM3)
0037 ARM_PROCESSOR_FAMILY(NeoverseV1)
0038 ARM_PROCESSOR_FAMILY(ThunderX)
0039 ARM_PROCESSOR_FAMILY(CortexA710)
0040 ARM_PROCESSOR_FAMILY(AppleM4)
0041 ARM_PROCESSOR_FAMILY(Oryon)
0042 ARM_PROCESSOR_FAMILY(Ampere1)
0043 ARM_PROCESSOR_FAMILY(CortexA78C)
0044 ARM_PROCESSOR_FAMILY(AppleA12)
0045 ARM_PROCESSOR_FAMILY(A64FX)
0046 ARM_PROCESSOR_FAMILY(NeoverseN3)
0047 ARM_PROCESSOR_FAMILY(NeoverseV2)
0048 ARM_PROCESSOR_FAMILY(ThunderX3T110)
0049 ARM_PROCESSOR_FAMILY(CortexA57)
0050 ARM_PROCESSOR_FAMILY(CortexA75)
0051 ARM_PROCESSOR_FAMILY(Saphira)
0052 ARM_PROCESSOR_FAMILY(Carmel)
0053 ARM_PROCESSOR_FAMILY(CortexA72)
0054 ARM_PROCESSOR_FAMILY(ThunderXT83)
0055 ARM_PROCESSOR_FAMILY(NeoverseV3)
0056 ARM_PROCESSOR_FAMILY(ThunderXT88)
0057 ARM_PROCESSOR_FAMILY(Falkor)
0058 ARM_PROCESSOR_FAMILY(CortexX3)
0059 ARM_PROCESSOR_FAMILY(CortexA720)
0060 ARM_PROCESSOR_FAMILY(CortexX1)
0061 ARM_PROCESSOR_FAMILY(CortexA78)
0062 ARM_PROCESSOR_FAMILY(NeoverseE1)
0063 ARM_PROCESSOR_FAMILY(CortexA715)
0064 ARM_PROCESSOR_FAMILY(AppleA15)
0065 ARM_PROCESSOR_FAMILY(CortexR82AE)
0066 ARM_PROCESSOR_FAMILY(AppleA10)
0067 ARM_PROCESSOR_FAMILY(CortexX925)
0068 ARM_PROCESSOR_FAMILY(CortexA65)
0069 
0070 #undef ARM_PROCESSOR_FAMILY
0071 
0072 #ifndef ARM_ARCHITECTURE
0073 #define ARM_ARCHITECTURE(ENUM)
0074 #endif
0075 
0076 
0077 #undef ARM_ARCHITECTURE
0078 
0079 #ifdef EMIT_ARCHEXTKIND_ENUM
0080 enum ArchExtKind : unsigned {
0081   AEK_AES,
0082   AEK_ALTERNATIVENZCV,
0083   AEK_AM,
0084   AEK_AMVS,
0085   AEK_BF16,
0086   AEK_BRBE,
0087   AEK_BTI,
0088   AEK_CCDP,
0089   AEK_CCIDX,
0090   AEK_CCPP,
0091   AEK_CHK,
0092   AEK_CLRBHB,
0093   AEK_CMPBR,
0094   AEK_FCMA,
0095   AEK_CPA,
0096   AEK_CRC,
0097   AEK_CRYPTO,
0098   AEK_CSSC,
0099   AEK_D128,
0100   AEK_DIT,
0101   AEK_DOTPROD,
0102   AEK_ENHANCEDCOUNTERVIRTUALIZATION,
0103   AEK_ETE,
0104   AEK_F32MM,
0105   AEK_F64MM,
0106   AEK_F8F16MM,
0107   AEK_F8F32MM,
0108   AEK_FAMINMAX,
0109   AEK_FINEGRAINEDTRAPS,
0110   AEK_FLAGM,
0111   AEK_FP,
0112   AEK_FP16FML,
0113   AEK_FP8,
0114   AEK_FP8DOT2,
0115   AEK_FP8DOT4,
0116   AEK_FP8FMA,
0117   AEK_FPAC,
0118   AEK_FPRCVT,
0119   AEK_FRINT3264,
0120   AEK_FP16,
0121   AEK_GCS,
0122   AEK_HBC,
0123   AEK_HCX,
0124   AEK_I8MM,
0125   AEK_ITE,
0126   AEK_JSCVT,
0127   AEK_LOR,
0128   AEK_LS64,
0129   AEK_LSE,
0130   AEK_LSE128,
0131   AEK_LSE2,
0132   AEK_LSFE,
0133   AEK_LSUI,
0134   AEK_LUT,
0135   AEK_MEC,
0136   AEK_MOPS,
0137   AEK_MPAM,
0138   AEK_MTE,
0139   AEK_SIMD,
0140   AEK_NMI,
0141   AEK_NV,
0142   AEK_OCCMO,
0143   AEK_PAN,
0144   AEK_PAN_RWV,
0145   AEK_PAUTH,
0146   AEK_PAUTHLR,
0147   AEK_PCDPHINT,
0148   AEK_PERFMON,
0149   AEK_POPS,
0150   AEK_PREDRES,
0151   AEK_PRFM_SLC,
0152   AEK_RAND,
0153   AEK_RAS,
0154   AEK_RASV2,
0155   AEK_RCPC,
0156   AEK_RCPC_IMMO,
0157   AEK_RCPC3,
0158   AEK_RDM,
0159   AEK_RME,
0160   AEK_SB,
0161   AEK_SEL2,
0162   AEK_SHA2,
0163   AEK_SHA3,
0164   AEK_SM4,
0165   AEK_SME,
0166   AEK_SMEB16B16,
0167   AEK_SMEF16F16,
0168   AEK_SMEF64F64,
0169   AEK_SMEF8F16,
0170   AEK_SMEF8F32,
0171   AEK_SMEFA64,
0172   AEK_SMEI16I64,
0173   AEK_SME_LUTV2,
0174   AEK_SME_MOP4,
0175   AEK_SME_TMOP,
0176   AEK_SME2,
0177   AEK_SME2P1,
0178   AEK_SME2P2,
0179   AEK_PROFILE,
0180   AEK_SPE_EEF,
0181   AEK_SPECRES2,
0182   AEK_SPECRESTRICT,
0183   AEK_SSBS,
0184   AEK_SSVE_AES,
0185   AEK_SSVE_BITPERM,
0186   AEK_SSVE_FP8DOT2,
0187   AEK_SSVE_FP8DOT4,
0188   AEK_SSVE_FP8FMA,
0189   AEK_SVE,
0190   AEK_SVEAES,
0191   AEK_SVE_AES2,
0192   AEK_SVEB16B16,
0193   AEK_SVE_BFSCALE,
0194   AEK_SVEBITPERM,
0195   AEK_SVE_F16F32MM,
0196   AEK_SVE2,
0197   AEK_SVE2AES,
0198   AEK_SVE2BITPERM,
0199   AEK_SVE2SHA3,
0200   AEK_SVE2SM4,
0201   AEK_SVE2P1,
0202   AEK_SVE2P2,
0203   AEK_THE,
0204   AEK_TLB_RMI,
0205   AEK_TLBIW,
0206   AEK_TME,
0207   AEK_TRACEV8_4,
0208   AEK_TRBE,
0209   AEK_PSUAO,
0210   AEK_VH,
0211   AEK_WFXT,
0212   AEK_XS,
0213   AEK_NUM_EXTENSIONS
0214 };
0215 #undef EMIT_ARCHEXTKIND_ENUM
0216 #endif // EMIT_ARCHEXTKIND_ENUM
0217 #ifdef EMIT_EXTENSIONS
0218 inline constexpr ExtensionInfo Extensions[] = {
0219   {"aes", {}, AArch64::AEK_AES, "FEAT_AES, FEAT_PMULL", "Enable AES support", "+aes", "-aes"},
0220   {"", {}, AArch64::AEK_ALTERNATIVENZCV, "FEAT_FlagM2", "Enable alternative NZCV format for floating point comparisons", "+altnzcv", "-altnzcv"},
0221   {"", {}, AArch64::AEK_AM, "FEAT_AMUv1", "Enable Armv8.4-A Activity Monitors extension", "+am", "-am"},
0222   {"", {}, AArch64::AEK_AMVS, "FEAT_AMUv1p1", "Enable Armv8.6-A Activity Monitors Virtualization support", "+amvs", "-amvs"},
0223   {"bf16", {}, AArch64::AEK_BF16, "FEAT_BF16", "Enable BFloat16 Extension", "+bf16", "-bf16"},
0224   {"brbe", {}, AArch64::AEK_BRBE, "FEAT_BRBE", "Enable Branch Record Buffer Extension", "+brbe", "-brbe"},
0225   {"bti", {}, AArch64::AEK_BTI, "FEAT_BTI", "Enable Branch Target Identification", "+bti", "-bti"},
0226   {"", {}, AArch64::AEK_CCDP, "FEAT_DPB2", "Enable Armv8.5-A Cache Clean to Point of Deep Persistence", "+ccdp", "-ccdp"},
0227   {"", {}, AArch64::AEK_CCIDX, "FEAT_CCIDX", "Enable Armv8.3-A Extend of the CCSIDR number of sets", "+ccidx", "-ccidx"},
0228   {"", {}, AArch64::AEK_CCPP, "FEAT_DPB", "Enable Armv8.2-A data Cache Clean to Point of Persistence", "+ccpp", "-ccpp"},
0229   {"", {}, AArch64::AEK_CHK, "FEAT_CHK", "Enable Armv8.0-A Check Feature Status Extension", "+chk", "-chk"},
0230   {"", {}, AArch64::AEK_CLRBHB, "FEAT_CLRBHB", "Enable Clear BHB instruction", "+clrbhb", "-clrbhb"},
0231   {"cmpbr", {}, AArch64::AEK_CMPBR, "FEAT_CMPBR", "Enable Armv9.6-A base compare and branch instructions", "+cmpbr", "-cmpbr"},
0232   {"fcma", {}, AArch64::AEK_FCMA, "FEAT_FCMA", "Enable Armv8.3-A Floating-point complex number support", "+complxnum", "-complxnum"},
0233   {"cpa", {}, AArch64::AEK_CPA, "FEAT_CPA", "Enable Armv9.5-A Checked Pointer Arithmetic", "+cpa", "-cpa"},
0234   {"crc", {}, AArch64::AEK_CRC, "FEAT_CRC32", "Enable Armv8.0-A CRC-32 checksum instructions", "+crc", "-crc"},
0235   {"crypto", {}, AArch64::AEK_CRYPTO, "FEAT_Crypto", "Enable cryptographic instructions", "+crypto", "-crypto"},
0236   {"cssc", {}, AArch64::AEK_CSSC, "FEAT_CSSC", "Enable Common Short Sequence Compression (CSSC) instructions", "+cssc", "-cssc"},
0237   {"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"},
0238   {"dit", {}, AArch64::AEK_DIT, "FEAT_DIT", "Enable Armv8.4-A Data Independent Timing instructions", "+dit", "-dit"},
0239   {"dotprod", {}, AArch64::AEK_DOTPROD, "FEAT_DotProd", "Enable dot product support", "+dotprod", "-dotprod"},
0240   {"", {}, AArch64::AEK_ENHANCEDCOUNTERVIRTUALIZATION, "FEAT_ECV", "Enable enhanced counter virtualization extension", "+ecv", "-ecv"},
0241   {"", {}, AArch64::AEK_ETE, "FEAT_ETE", "Enable Embedded Trace Extension", "+ete", "-ete"},
0242   {"f32mm", {}, AArch64::AEK_F32MM, "FEAT_F32MM", "Enable Matrix Multiply FP32 Extension", "+f32mm", "-f32mm"},
0243   {"f64mm", {}, AArch64::AEK_F64MM, "FEAT_F64MM", "Enable Matrix Multiply FP64 Extension", "+f64mm", "-f64mm"},
0244   {"f8f16mm", {}, AArch64::AEK_F8F16MM, "FEAT_F8F16MM", "Enable Armv9.6-A FP8 to Half-Precision Matrix Multiplication", "+f8f16mm", "-f8f16mm"},
0245   {"f8f32mm", {}, AArch64::AEK_F8F32MM, "FEAT_F8F32MM", "Enable Armv9.6-A FP8 to Single-Precision Matrix Multiplication", "+f8f32mm", "-f8f32mm"},
0246   {"faminmax", {}, AArch64::AEK_FAMINMAX, "FEAT_FAMINMAX", "Enable FAMIN and FAMAX instructions", "+faminmax", "-faminmax"},
0247   {"", {}, AArch64::AEK_FINEGRAINEDTRAPS, "FEAT_FGT", "Enable fine grained virtualization traps extension", "+fgt", "-fgt"},
0248   {"flagm", {}, AArch64::AEK_FLAGM, "FEAT_FlagM", "Enable Armv8.4-A Flag Manipulation instructions", "+flagm", "-flagm"},
0249   {"fp", {}, AArch64::AEK_FP, "FEAT_FP", "Enable Armv8.0-A Floating Point Extensions", "+fp-armv8", "-fp-armv8"},
0250   {"fp16fml", {}, AArch64::AEK_FP16FML, "FEAT_FHM", "Enable FP16 FML instructions", "+fp16fml", "-fp16fml"},
0251   {"fp8", {}, AArch64::AEK_FP8, "FEAT_FP8", "Enable FP8 instructions", "+fp8", "-fp8"},
0252   {"fp8dot2", {}, AArch64::AEK_FP8DOT2, "FEAT_FP8DOT2", "Enable FP8 2-way dot instructions", "+fp8dot2", "-fp8dot2"},
0253   {"fp8dot4", {}, AArch64::AEK_FP8DOT4, "FEAT_FP8DOT4", "Enable FP8 4-way dot instructions", "+fp8dot4", "-fp8dot4"},
0254   {"fp8fma", {}, AArch64::AEK_FP8FMA, "FEAT_FP8FMA", "Enable Armv9.5-A FP8 multiply-add instructions", "+fp8fma", "-fp8fma"},
0255   {"", {}, AArch64::AEK_FPAC, "FEAT_FPAC", "Enable Armv8.3-A Pointer Authentication Faulting enhancement", "+fpac", "-fpac"},
0256   {"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"},
0257   {"", {}, 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"},
0258   {"fp16", {}, AArch64::AEK_FP16, "FEAT_FP16", "Enable half-precision floating-point data processing", "+fullfp16", "-fullfp16"},
0259   {"gcs", {}, AArch64::AEK_GCS, "FEAT_GCS", "Enable Armv9.4-A Guarded Call Stack Extension", "+gcs", "-gcs"},
0260   {"hbc", {}, AArch64::AEK_HBC, "FEAT_HBC", "Enable Armv8.8-A Hinted Conditional Branches Extension", "+hbc", "-hbc"},
0261   {"", {}, AArch64::AEK_HCX, "FEAT_HCX", "Enable Armv8.7-A HCRX_EL2 system register", "+hcx", "-hcx"},
0262   {"i8mm", {}, AArch64::AEK_I8MM, "FEAT_I8MM", "Enable Matrix Multiply Int8 Extension", "+i8mm", "-i8mm"},
0263   {"ite", {}, AArch64::AEK_ITE, "FEAT_ITE", "Enable Armv9.4-A Instrumentation Extension", "+ite", "-ite"},
0264   {"jscvt", {}, AArch64::AEK_JSCVT, "FEAT_JSCVT", "Enable Armv8.3-A JavaScript FP conversion instructions", "+jsconv", "-jsconv"},
0265   {"", {}, AArch64::AEK_LOR, "FEAT_LOR", "Enable Armv8.1-A Limited Ordering Regions extension", "+lor", "-lor"},
0266   {"ls64", {}, AArch64::AEK_LS64, "FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA", "Enable Armv8.7-A LD64B/ST64B Accelerator Extension", "+ls64", "-ls64"},
0267   {"lse", {}, AArch64::AEK_LSE, "FEAT_LSE", "Enable Armv8.1-A Large System Extension (LSE) atomic instructions", "+lse", "-lse"},
0268   {"lse128", {}, AArch64::AEK_LSE128, "FEAT_LSE128", "Enable Armv9.4-A 128-bit Atomic instructions", "+lse128", "-lse128"},
0269   {"", {}, AArch64::AEK_LSE2, "FEAT_LSE2", "Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules", "+lse2", "-lse2"},
0270   {"lsfe", {}, AArch64::AEK_LSFE, "FEAT_LSFE", "Enable Armv9.6-A base Atomic floating-point in-memory instructions", "+lsfe", "-lsfe"},
0271   {"lsui", {}, AArch64::AEK_LSUI, "FEAT_LSUI", "Enable Armv9.6-A unprivileged load/store instructions", "+lsui", "-lsui"},
0272   {"lut", {}, AArch64::AEK_LUT, "FEAT_LUT", "Enable Lookup Table instructions", "+lut", "-lut"},
0273   {"", {}, AArch64::AEK_MEC, "FEAT_MEC", "Enable Memory Encryption Contexts Extension", "+mec", "-mec"},
0274   {"mops", {}, AArch64::AEK_MOPS, "FEAT_MOPS", "Enable Armv8.8-A memcpy and memset acceleration instructions", "+mops", "-mops"},
0275   {"", {}, AArch64::AEK_MPAM, "FEAT_MPAM", "Enable Armv8.4-A Memory system Partitioning and Monitoring extension", "+mpam", "-mpam"},
0276   {"memtag", {}, AArch64::AEK_MTE, "FEAT_MTE, FEAT_MTE2", "Enable Memory Tagging Extension", "+mte", "-mte"},
0277   {"simd", {}, AArch64::AEK_SIMD, "FEAT_AdvSIMD", "Enable Advanced SIMD instructions", "+neon", "-neon"},
0278   {"", {}, AArch64::AEK_NMI, "FEAT_NMI, FEAT_GICv3_NMI", "Enable Armv8.8-A Non-maskable Interrupts", "+nmi", "-nmi"},
0279   {"", {}, AArch64::AEK_NV, "FEAT_NV, FEAT_NV2", "Enable Armv8.4-A Nested Virtualization Enchancement", "+nv", "-nv"},
0280   {"occmo", {}, AArch64::AEK_OCCMO, "FEAT_OCCMO", "Enable Armv9.6-A Outer cacheable cache maintenance operations", "+occmo", "-occmo"},
0281   {"", {}, AArch64::AEK_PAN, "FEAT_PAN", "Enable Armv8.1-A Privileged Access-Never extension", "+pan", "-pan"},
0282   {"", {}, AArch64::AEK_PAN_RWV, "FEAT_PAN2", "Enable Armv8.2-A PAN s1e1R and s1e1W Variants", "+pan-rwv", "-pan-rwv"},
0283   {"pauth", {}, AArch64::AEK_PAUTH, "FEAT_PAuth", "Enable Armv8.3-A Pointer Authentication extension", "+pauth", "-pauth"},
0284   {"pauth-lr", {}, AArch64::AEK_PAUTHLR, "FEAT_PAuth_LR", "Enable Armv9.5-A PAC enhancements", "+pauth-lr", "-pauth-lr"},
0285   {"pcdphint", {}, AArch64::AEK_PCDPHINT, "FEAT_PCDPHINT", "Enable Armv9.6-A Producer Consumer Data Placement hints", "+pcdphint", "-pcdphint"},
0286   {"pmuv3", {}, AArch64::AEK_PERFMON, "FEAT_PMUv3", "Enable Armv8.0-A PMUv3 Performance Monitors extension", "+perfmon", "-perfmon"},
0287   {"pops", {}, AArch64::AEK_POPS, "FEAT_PoPS", "Enable Armv9.6-A Point Of Physical Storage (PoPS) DC instructions", "+pops", "-pops"},
0288   {"predres", {}, AArch64::AEK_PREDRES, "FEAT_SPECRES", "Enable Armv8.5-A execution and data prediction invalidation instructions", "+predres", "-predres"},
0289   {"", {}, AArch64::AEK_PRFM_SLC, "FEAT_PRFMSLC", "Enable SLC target for PRFM instruction", "+prfm-slc-target", "-prfm-slc-target"},
0290   {"rng", {}, AArch64::AEK_RAND, "FEAT_RNG", "Enable Random Number generation instructions", "+rand", "-rand"},
0291   {"ras", {}, AArch64::AEK_RAS, "FEAT_RAS, FEAT_RASv1p1", "Enable Armv8.0-A Reliability, Availability and Serviceability Extensions", "+ras", "-ras"},
0292   {"rasv2", {}, AArch64::AEK_RASV2, "FEAT_RASv2", "Enable Armv8.9-A Reliability, Availability and Serviceability Extensions", "+rasv2", "-rasv2"},
0293   {"rcpc", {}, AArch64::AEK_RCPC, "FEAT_LRCPC", "Enable support for RCPC extension", "+rcpc", "-rcpc"},
0294   {"", {}, AArch64::AEK_RCPC_IMMO, "FEAT_LRCPC2", "Enable Armv8.4-A RCPC instructions with Immediate Offsets", "+rcpc-immo", "-rcpc-immo"},
0295   {"rcpc3", {}, AArch64::AEK_RCPC3, "FEAT_LRCPC3", "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set", "+rcpc3", "-rcpc3"},
0296   {"rdm", "rdma", AArch64::AEK_RDM, "FEAT_RDM", "Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions", "+rdm", "-rdm"},
0297   {"", {}, AArch64::AEK_RME, "FEAT_RME", "Enable Realm Management Extension", "+rme", "-rme"},
0298   {"sb", {}, AArch64::AEK_SB, "FEAT_SB", "Enable Armv8.5-A Speculation Barrier", "+sb", "-sb"},
0299   {"", {}, AArch64::AEK_SEL2, "FEAT_SEL2", "Enable Armv8.4-A Secure Exception Level 2 extension", "+sel2", "-sel2"},
0300   {"sha2", {}, AArch64::AEK_SHA2, "FEAT_SHA1, FEAT_SHA256", "Enable SHA1 and SHA256 support", "+sha2", "-sha2"},
0301   {"sha3", {}, AArch64::AEK_SHA3, "FEAT_SHA3, FEAT_SHA512", "Enable SHA512 and SHA3 support", "+sha3", "-sha3"},
0302   {"sm4", {}, AArch64::AEK_SM4, "FEAT_SM4, FEAT_SM3", "Enable SM3 and SM4 support", "+sm4", "-sm4"},
0303   {"sme", {}, AArch64::AEK_SME, "FEAT_SME", "Enable Scalable Matrix Extension (SME)", "+sme", "-sme"},
0304   {"sme-b16b16", {}, AArch64::AEK_SMEB16B16, "FEAT_SME_B16B16", "Enable SME2.1 ZA-targeting non-widening BFloat16 instructions", "+sme-b16b16", "-sme-b16b16"},
0305   {"sme-f16f16", {}, AArch64::AEK_SMEF16F16, "FEAT_SME_F16F16", "Enable SME non-widening Float16 instructions", "+sme-f16f16", "-sme-f16f16"},
0306   {"sme-f64f64", {}, AArch64::AEK_SMEF64F64, "FEAT_SME_F64F64", "Enable Scalable Matrix Extension (SME) F64F64 instructions", "+sme-f64f64", "-sme-f64f64"},
0307   {"sme-f8f16", {}, AArch64::AEK_SMEF8F16, "FEAT_SME_F8F16", "Enable Scalable Matrix Extension (SME) F8F16 instructions", "+sme-f8f16", "-sme-f8f16"},
0308   {"sme-f8f32", {}, AArch64::AEK_SMEF8F32, "FEAT_SME_F8F32", "Enable Scalable Matrix Extension (SME) F8F32 instructions", "+sme-f8f32", "-sme-f8f32"},
0309   {"sme-fa64", {}, AArch64::AEK_SMEFA64, "FEAT_SME_FA64", "Enable the full A64 instruction set in streaming SVE mode", "+sme-fa64", "-sme-fa64"},
0310   {"sme-i16i64", {}, AArch64::AEK_SMEI16I64, "FEAT_SME_I16I64", "Enable Scalable Matrix Extension (SME) I16I64 instructions", "+sme-i16i64", "-sme-i16i64"},
0311   {"sme-lutv2", {}, AArch64::AEK_SME_LUTV2, "FEAT_SME_LUTv2", "Enable Scalable Matrix Extension (SME) LUTv2 instructions", "+sme-lutv2", "-sme-lutv2"},
0312   {"sme-mop4", {}, AArch64::AEK_SME_MOP4, "FEAT_SME_MOP4", "Enable SME Quarter-tile outer product instructions", "+sme-mop4", "-sme-mop4"},
0313   {"sme-tmop", {}, AArch64::AEK_SME_TMOP, "FEAT_SME_TMOP", "Enable SME Structured sparsity outer product instructions.", "+sme-tmop", "-sme-tmop"},
0314   {"sme2", {}, AArch64::AEK_SME2, "FEAT_SME2", "Enable Scalable Matrix Extension 2 (SME2) instructions", "+sme2", "-sme2"},
0315   {"sme2p1", {}, AArch64::AEK_SME2P1, "FEAT_SME2p1", "Enable Scalable Matrix Extension 2.1 instructions", "+sme2p1", "-sme2p1"},
0316   {"sme2p2", {}, AArch64::AEK_SME2P2, "FEAT_SME2p2", "Enable Armv9.6-A Scalable Matrix Extension 2.2 instructions", "+sme2p2", "-sme2p2"},
0317   {"profile", {}, AArch64::AEK_PROFILE, "FEAT_SPE", "Enable Statistical Profiling extension", "+spe", "-spe"},
0318   {"", {}, AArch64::AEK_SPE_EEF, "FEAT_SPEv1p2", "Enable extra register in the Statistical Profiling Extension", "+spe-eef", "-spe-eef"},
0319   {"predres2", {}, AArch64::AEK_SPECRES2, "FEAT_SPECRES2", "Enable Speculation Restriction Instruction", "+specres2", "-specres2"},
0320   {"", {}, AArch64::AEK_SPECRESTRICT, "FEAT_CSV2_2", "Enable architectural speculation restriction", "+specrestrict", "-specrestrict"},
0321   {"ssbs", {}, AArch64::AEK_SSBS, "FEAT_SSBS, FEAT_SSBS2", "Enable Speculative Store Bypass Safe bit", "+ssbs", "-ssbs"},
0322   {"ssve-aes", {}, AArch64::AEK_SSVE_AES, "FEAT_SSVE_AES", "Enable Armv9.6-A SVE AES support in streaming SVE mode", "+ssve-aes", "-ssve-aes"},
0323   {"ssve-bitperm", {}, AArch64::AEK_SSVE_BITPERM, "FEAT_SSVE_BitPerm", "Enable Armv9.6-A SVE BitPerm support in streaming SVE mode", "+ssve-bitperm", "-ssve-bitperm"},
0324   {"ssve-fp8dot2", {}, AArch64::AEK_SSVE_FP8DOT2, "FEAT_SSVE_FP8DOT2", "Enable SVE2 FP8 2-way dot product instructions", "+ssve-fp8dot2", "-ssve-fp8dot2"},
0325   {"ssve-fp8dot4", {}, AArch64::AEK_SSVE_FP8DOT4, "FEAT_SSVE_FP8DOT4", "Enable SVE2 FP8 4-way dot product instructions", "+ssve-fp8dot4", "-ssve-fp8dot4"},
0326   {"ssve-fp8fma", {}, AArch64::AEK_SSVE_FP8FMA, "FEAT_SSVE_FP8FMA", "Enable SVE2 FP8 multiply-add instructions", "+ssve-fp8fma", "-ssve-fp8fma"},
0327   {"sve", {}, AArch64::AEK_SVE, "FEAT_SVE", "Enable Scalable Vector Extension (SVE) instructions", "+sve", "-sve"},
0328   {"sve-aes", {}, AArch64::AEK_SVEAES, "FEAT_SVE_AES, FEAT_SVE_PMULL128", "Enable SVE AES and quadword SVE polynomial multiply instructions", "+sve-aes", "-sve-aes"},
0329   {"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"},
0330   {"sve-b16b16", {}, AArch64::AEK_SVEB16B16, "FEAT_SVE_B16B16", "Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions", "+sve-b16b16", "-sve-b16b16"},
0331   {"sve-bfscale", {}, AArch64::AEK_SVE_BFSCALE, "FEAT_SVE_BFSCALE", "Enable Armv9.6-A SVE BFloat16 scaling instructions", "+sve-bfscale", "-sve-bfscale"},
0332   {"sve-bitperm", {}, AArch64::AEK_SVEBITPERM, "FEAT_SVE_BitPerm", "Enable bit permutation SVE2 instructions", "+sve-bitperm", "-sve-bitperm"},
0333   {"sve-f16f32mm", {}, AArch64::AEK_SVE_F16F32MM, "FEAT_SVE_F16F32MM", "Enable Armv9.6-A FP16 to FP32 Matrix Multiply instructions", "+sve-f16f32mm", "-sve-f16f32mm"},
0334   {"sve2", {}, AArch64::AEK_SVE2, "FEAT_SVE2", "Enable Scalable Vector Extension 2 (SVE2) instructions", "+sve2", "-sve2"},
0335   {"sve2-aes", {}, AArch64::AEK_SVE2AES, "", "Shorthand for +sve2+sve-aes", "+sve2-aes", "-sve2-aes"},
0336   {"sve2-bitperm", {}, AArch64::AEK_SVE2BITPERM, "", "Shorthand for +sve2+sve-bitperm", "+sve2-bitperm", "-sve2-bitperm"},
0337   {"sve2-sha3", {}, AArch64::AEK_SVE2SHA3, "FEAT_SVE_SHA3", "Enable SHA3 SVE2 instructions", "+sve2-sha3", "-sve2-sha3"},
0338   {"sve2-sm4", {}, AArch64::AEK_SVE2SM4, "FEAT_SVE_SM4", "Enable SM4 SVE2 instructions", "+sve2-sm4", "-sve2-sm4"},
0339   {"sve2p1", {}, AArch64::AEK_SVE2P1, "FEAT_SVE2p1", "Enable Scalable Vector Extension 2.1 instructions", "+sve2p1", "-sve2p1"},
0340   {"sve2p2", {}, AArch64::AEK_SVE2P2, "FEAT_SVE2p2", "Enable Armv9.6-A Scalable Vector Extension 2.2 instructions", "+sve2p2", "-sve2p2"},
0341   {"the", {}, AArch64::AEK_THE, "FEAT_THE", "Enable Armv8.9-A Translation Hardening Extension", "+the", "-the"},
0342   {"", {}, AArch64::AEK_TLB_RMI, "FEAT_TLBIOS, FEAT_TLBIRANGE", "Enable Armv8.4-A TLB Range and Maintenance instructions", "+tlb-rmi", "-tlb-rmi"},
0343   {"tlbiw", {}, AArch64::AEK_TLBIW, "FEAT_TLBIW", "Enable Armv9.5-A TLBI VMALL for Dirty State", "+tlbiw", "-tlbiw"},
0344   {"tme", {}, AArch64::AEK_TME, "FEAT_TME", "Enable Transactional Memory Extension", "+tme", "-tme"},
0345   {"", {}, AArch64::AEK_TRACEV8_4, "FEAT_TRF", "Enable Armv8.4-A Trace extension", "+tracev8.4", "-tracev8.4"},
0346   {"", {}, AArch64::AEK_TRBE, "FEAT_TRBE", "Enable Trace Buffer Extension", "+trbe", "-trbe"},
0347   {"", {}, AArch64::AEK_PSUAO, "FEAT_UAO", "Enable Armv8.2-A UAO PState", "+uaops", "-uaops"},
0348   {"", {}, AArch64::AEK_VH, "FEAT_VHE", "Enable Armv8.1-A Virtual Host extension", "+vh", "-vh"},
0349   {"wfxt", {}, AArch64::AEK_WFXT, "FEAT_WFxT", "Enable Armv8.7-A WFET and WFIT instruction", "+wfxt", "-wfxt"},
0350   {"", {}, AArch64::AEK_XS, "FEAT_XS", "Enable Armv8.7-A limited-TLB-maintenance instruction", "+xs", "-xs"},
0351 };
0352 #undef EMIT_EXTENSIONS
0353 #endif // EMIT_EXTENSIONS
0354 
0355 #ifdef EMIT_FMV_INFO
0356 const std::vector<llvm::AArch64::FMVInfo>& llvm::AArch64::getFMVInfo() {
0357   static std::vector<FMVInfo> I;
0358   if(I.size()) return I;
0359   I.reserve(44);
0360   I.emplace_back("aes", FEAT_PMULL, PRIOR_PMULL, AEK_AES);
0361   I.emplace_back("bf16", FEAT_BF16, PRIOR_BF16, AEK_BF16);
0362   I.emplace_back("bti", FEAT_BTI, PRIOR_BTI, AEK_BTI);
0363   I.emplace_back("crc", FEAT_CRC, PRIOR_CRC, AEK_CRC);
0364   I.emplace_back("dit", FEAT_DIT, PRIOR_DIT, AEK_DIT);
0365   I.emplace_back("dotprod", FEAT_DOTPROD, PRIOR_DOTPROD, AEK_DOTPROD);
0366   I.emplace_back("dpb", FEAT_DPB, PRIOR_DPB, AEK_CCPP);
0367   I.emplace_back("dpb2", FEAT_DPB2, PRIOR_DPB2, AEK_CCDP);
0368   I.emplace_back("f32mm", FEAT_SVE_F32MM, PRIOR_SVE_F32MM, AEK_F32MM);
0369   I.emplace_back("f64mm", FEAT_SVE_F64MM, PRIOR_SVE_F64MM, AEK_F64MM);
0370   I.emplace_back("fcma", FEAT_FCMA, PRIOR_FCMA, AEK_FCMA);
0371   I.emplace_back("flagm", FEAT_FLAGM, PRIOR_FLAGM, AEK_FLAGM);
0372   I.emplace_back("flagm2", FEAT_FLAGM2, PRIOR_FLAGM2, AEK_ALTERNATIVENZCV);
0373   I.emplace_back("fp", FEAT_FP, PRIOR_FP, AEK_FP);
0374   I.emplace_back("fp16", FEAT_FP16, PRIOR_FP16, AEK_FP16);
0375   I.emplace_back("fp16fml", FEAT_FP16FML, PRIOR_FP16FML, AEK_FP16FML);
0376   I.emplace_back("frintts", FEAT_FRINTTS, PRIOR_FRINTTS, AEK_FRINT3264);
0377   I.emplace_back("i8mm", FEAT_I8MM, PRIOR_I8MM, AEK_I8MM);
0378   I.emplace_back("jscvt", FEAT_JSCVT, PRIOR_JSCVT, AEK_JSCVT);
0379   I.emplace_back("lse", FEAT_LSE, PRIOR_LSE, AEK_LSE);
0380   I.emplace_back("memtag", FEAT_MEMTAG2, PRIOR_MEMTAG2, AEK_MTE);
0381   I.emplace_back("mops", FEAT_MOPS, PRIOR_MOPS, AEK_MOPS);
0382   I.emplace_back("rcpc", FEAT_RCPC, PRIOR_RCPC, AEK_RCPC);
0383   I.emplace_back("rcpc2", FEAT_RCPC2, PRIOR_RCPC2, AEK_RCPC_IMMO);
0384   I.emplace_back("rcpc3", FEAT_RCPC3, PRIOR_RCPC3, AEK_RCPC3);
0385   I.emplace_back("rdm", FEAT_RDM, PRIOR_RDM, AEK_RDM);
0386   I.emplace_back("rng", FEAT_RNG, PRIOR_RNG, AEK_RAND);
0387   I.emplace_back("sb", FEAT_SB, PRIOR_SB, AEK_SB);
0388   I.emplace_back("sha2", FEAT_SHA2, PRIOR_SHA2, AEK_SHA2);
0389   I.emplace_back("sha3", FEAT_SHA3, PRIOR_SHA3, AEK_SHA3);
0390   I.emplace_back("simd", FEAT_SIMD, PRIOR_SIMD, AEK_SIMD);
0391   I.emplace_back("sm4", FEAT_SM4, PRIOR_SM4, AEK_SM4);
0392   I.emplace_back("sme", FEAT_SME, PRIOR_SME, AEK_SME);
0393   I.emplace_back("sme-f64f64", FEAT_SME_F64, PRIOR_SME_F64, AEK_SMEF64F64);
0394   I.emplace_back("sme-i16i64", FEAT_SME_I64, PRIOR_SME_I64, AEK_SMEI16I64);
0395   I.emplace_back("sme2", FEAT_SME2, PRIOR_SME2, AEK_SME2);
0396   I.emplace_back("ssbs", FEAT_SSBS2, PRIOR_SSBS2, AEK_SSBS);
0397   I.emplace_back("sve", FEAT_SVE, PRIOR_SVE, AEK_SVE);
0398   I.emplace_back("sve2", FEAT_SVE2, PRIOR_SVE2, AEK_SVE2);
0399   I.emplace_back("sve2-aes", FEAT_SVE_PMULL128, PRIOR_SVE_PMULL128, AEK_SVE2AES);
0400   I.emplace_back("sve2-bitperm", FEAT_SVE_BITPERM, PRIOR_SVE_BITPERM, AEK_SVE2BITPERM);
0401   I.emplace_back("sve2-sha3", FEAT_SVE_SHA3, PRIOR_SVE_SHA3, AEK_SVE2SHA3);
0402   I.emplace_back("sve2-sm4", FEAT_SVE_SM4, PRIOR_SVE_SM4, AEK_SVE2SM4);
0403   I.emplace_back("wfxt", FEAT_WFXT, PRIOR_WFXT, AEK_WFXT);
0404   return I;
0405 }
0406 #undef EMIT_FMV_INFO
0407 #endif // EMIT_FMV_INFO
0408 
0409 #ifdef EMIT_EXTENSION_DEPENDENCIES
0410 inline constexpr ExtensionDependency ExtensionDependencies[] = {
0411   {AEK_SIMD, AEK_AES},
0412   {AEK_FLAGM, AEK_ALTERNATIVENZCV},
0413   {AEK_AM, AEK_AMVS},
0414   {AEK_SIMD, AEK_BF16},
0415   {AEK_CCPP, AEK_CCDP},
0416   {AEK_SIMD, AEK_FCMA},
0417   {AEK_SIMD, AEK_CRYPTO},
0418   {AEK_SHA2, AEK_CRYPTO},
0419   {AEK_AES, AEK_CRYPTO},
0420   {AEK_LSE128, AEK_D128},
0421   {AEK_SIMD, AEK_DOTPROD},
0422   {AEK_TRBE, AEK_ETE},
0423   {AEK_SVE, AEK_F32MM},
0424   {AEK_SVE, AEK_F64MM},
0425   {AEK_SIMD, AEK_F8F16MM},
0426   {AEK_FP8, AEK_F8F16MM},
0427   {AEK_SIMD, AEK_F8F32MM},
0428   {AEK_FP8, AEK_F8F32MM},
0429   {AEK_SIMD, AEK_FAMINMAX},
0430   {AEK_FP16, AEK_FP16FML},
0431   {AEK_SIMD, AEK_FP16FML},
0432   {AEK_SIMD, AEK_FP8},
0433   {AEK_FP8, AEK_FP8DOT2},
0434   {AEK_FP8, AEK_FP8DOT4},
0435   {AEK_FP8, AEK_FP8FMA},
0436   {AEK_FP, AEK_FPRCVT},
0437   {AEK_FP, AEK_FRINT3264},
0438   {AEK_FP, AEK_FP16},
0439   {AEK_CHK, AEK_GCS},
0440   {AEK_SIMD, AEK_I8MM},
0441   {AEK_ETE, AEK_ITE},
0442   {AEK_TRBE, AEK_ITE},
0443   {AEK_FP, AEK_JSCVT},
0444   {AEK_LSE, AEK_LSE128},
0445   {AEK_FP, AEK_LSFE},
0446   {AEK_SIMD, AEK_LUT},
0447   {AEK_RME, AEK_MEC},
0448   {AEK_FP, AEK_SIMD},
0449   {AEK_PAN, AEK_PAN_RWV},
0450   {AEK_RAS, AEK_RASV2},
0451   {AEK_RCPC, AEK_RCPC_IMMO},
0452   {AEK_RCPC_IMMO, AEK_RCPC3},
0453   {AEK_SIMD, AEK_RDM},
0454   {AEK_SIMD, AEK_SHA2},
0455   {AEK_SIMD, AEK_SHA3},
0456   {AEK_SHA2, AEK_SHA3},
0457   {AEK_SIMD, AEK_SM4},
0458   {AEK_BF16, AEK_SME},
0459   {AEK_FP16, AEK_SME},
0460   {AEK_SME2, AEK_SMEB16B16},
0461   {AEK_SVEB16B16, AEK_SMEB16B16},
0462   {AEK_SME2, AEK_SMEF16F16},
0463   {AEK_SME, AEK_SMEF64F64},
0464   {AEK_SME2, AEK_SMEF8F16},
0465   {AEK_FP8, AEK_SMEF8F16},
0466   {AEK_SME2, AEK_SMEF8F32},
0467   {AEK_FP8, AEK_SMEF8F32},
0468   {AEK_SME, AEK_SMEFA64},
0469   {AEK_SVE2, AEK_SMEFA64},
0470   {AEK_SME, AEK_SMEI16I64},
0471   {AEK_SME2, AEK_SME_LUTV2},
0472   {AEK_SME2, AEK_SME_MOP4},
0473   {AEK_SME2, AEK_SME_TMOP},
0474   {AEK_SME, AEK_SME2},
0475   {AEK_SME2, AEK_SME2P1},
0476   {AEK_SME2P1, AEK_SME2P2},
0477   {AEK_PREDRES, AEK_SPECRES2},
0478   {AEK_SME2, AEK_SSVE_AES},
0479   {AEK_SVEAES, AEK_SSVE_AES},
0480   {AEK_SME2, AEK_SSVE_BITPERM},
0481   {AEK_SVEBITPERM, AEK_SSVE_BITPERM},
0482   {AEK_SME2, AEK_SSVE_FP8DOT2},
0483   {AEK_FP8, AEK_SSVE_FP8DOT2},
0484   {AEK_SME2, AEK_SSVE_FP8DOT4},
0485   {AEK_FP8, AEK_SSVE_FP8DOT4},
0486   {AEK_SME2, AEK_SSVE_FP8FMA},
0487   {AEK_FP8, AEK_SSVE_FP8FMA},
0488   {AEK_FP16, AEK_SVE},
0489   {AEK_AES, AEK_SVEAES},
0490   {AEK_SVE, AEK_SVE_F16F32MM},
0491   {AEK_SVE, AEK_SVE2},
0492   {AEK_SVE2, AEK_SVE2AES},
0493   {AEK_SVEAES, AEK_SVE2AES},
0494   {AEK_SVE2, AEK_SVE2BITPERM},
0495   {AEK_SVEBITPERM, AEK_SVE2BITPERM},
0496   {AEK_SVE2, AEK_SVE2SHA3},
0497   {AEK_SHA3, AEK_SVE2SHA3},
0498   {AEK_SVE2, AEK_SVE2SM4},
0499   {AEK_SM4, AEK_SVE2SM4},
0500   {AEK_SVE2, AEK_SVE2P1},
0501   {AEK_SVE2P1, AEK_SVE2P2},
0502   {AEK_RCPC, AEK_RCPC3},
0503 };
0504 #undef EMIT_EXTENSION_DEPENDENCIES
0505 #endif // EMIT_EXTENSION_DEPENDENCIES
0506 
0507 #ifdef EMIT_ARCHITECTURES
0508 inline constexpr ArchInfo ARMV8A = {
0509   VersionTuple{8, 0},
0510   AProfile,
0511   "armv8-a",
0512   "+v8a",
0513   (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, }))
0514 };
0515 inline constexpr ArchInfo ARMV8R = {
0516   VersionTuple{8, 0},
0517   RProfile,
0518   "armv8-r",
0519   "+v8r",
0520   (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, }))
0521 };
0522 inline constexpr ArchInfo ARMV8_1A = {
0523   VersionTuple{8, 1},
0524   AProfile,
0525   "armv8.1-a",
0526   "+v8.1a",
0527   (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, }))
0528 };
0529 inline constexpr ArchInfo ARMV8_2A = {
0530   VersionTuple{8, 2},
0531   AProfile,
0532   "armv8.2-a",
0533   "+v8.2a",
0534   (AArch64::ExtensionBitset({AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_RAS, }))
0535 };
0536 inline constexpr ArchInfo ARMV8_3A = {
0537   VersionTuple{8, 3},
0538   AProfile,
0539   "armv8.3-a",
0540   "+v8.3a",
0541   (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, }))
0542 };
0543 inline constexpr ArchInfo ARMV8_4A = {
0544   VersionTuple{8, 4},
0545   AProfile,
0546   "armv8.4-a",
0547   "+v8.4a",
0548   (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, }))
0549 };
0550 inline constexpr ArchInfo ARMV8_5A = {
0551   VersionTuple{8, 5},
0552   AProfile,
0553   "armv8.5-a",
0554   "+v8.5a",
0555   (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, }))
0556 };
0557 inline constexpr ArchInfo ARMV8_6A = {
0558   VersionTuple{8, 6},
0559   AProfile,
0560   "armv8.6-a",
0561   "+v8.6a",
0562   (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, }))
0563 };
0564 inline constexpr ArchInfo ARMV8_7A = {
0565   VersionTuple{8, 7},
0566   AProfile,
0567   "armv8.7-a",
0568   "+v8.7a",
0569   (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, }))
0570 };
0571 inline constexpr ArchInfo ARMV8_8A = {
0572   VersionTuple{8, 8},
0573   AProfile,
0574   "armv8.8-a",
0575   "+v8.8a",
0576   (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, }))
0577 };
0578 inline constexpr ArchInfo ARMV8_9A = {
0579   VersionTuple{8, 9},
0580   AProfile,
0581   "armv8.9-a",
0582   "+v8.9a",
0583   (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, }))
0584 };
0585 inline constexpr ArchInfo ARMV9A = {
0586   VersionTuple{9, 0},
0587   AProfile,
0588   "armv9-a",
0589   "+v9a",
0590   (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, }))
0591 };
0592 inline constexpr ArchInfo ARMV9_1A = {
0593   VersionTuple{9, 1},
0594   AProfile,
0595   "armv9.1-a",
0596   "+v9.1a",
0597   (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, }))
0598 };
0599 inline constexpr ArchInfo ARMV9_2A = {
0600   VersionTuple{9, 2},
0601   AProfile,
0602   "armv9.2-a",
0603   "+v9.2a",
0604   (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, }))
0605 };
0606 inline constexpr ArchInfo ARMV9_3A = {
0607   VersionTuple{9, 3},
0608   AProfile,
0609   "armv9.3-a",
0610   "+v9.3a",
0611   (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, }))
0612 };
0613 inline constexpr ArchInfo ARMV9_4A = {
0614   VersionTuple{9, 4},
0615   AProfile,
0616   "armv9.4-a",
0617   "+v9.4a",
0618   (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, }))
0619 };
0620 inline constexpr ArchInfo ARMV9_5A = {
0621   VersionTuple{9, 5},
0622   AProfile,
0623   "armv9.5-a",
0624   "+v9.5a",
0625   (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, }))
0626 };
0627 inline constexpr ArchInfo ARMV9_6A = {
0628   VersionTuple{9, 6},
0629   AProfile,
0630   "armv9.6-a",
0631   "+v9.6a",
0632   (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_FPRCVT, AArch64::AEK_SVE2P2, AArch64::AEK_LSUI, AArch64::AEK_OCCMO, }))
0633 };
0634 
0635 /// The set of all architectures
0636 static constexpr std::array<const ArchInfo *, 18> ArchInfos = {
0637   &ARMV8A,
0638   &ARMV8R,
0639   &ARMV8_1A,
0640   &ARMV8_2A,
0641   &ARMV8_3A,
0642   &ARMV8_4A,
0643   &ARMV8_5A,
0644   &ARMV8_6A,
0645   &ARMV8_7A,
0646   &ARMV8_8A,
0647   &ARMV8_9A,
0648   &ARMV9A,
0649   &ARMV9_1A,
0650   &ARMV9_2A,
0651   &ARMV9_3A,
0652   &ARMV9_4A,
0653   &ARMV9_5A,
0654   &ARMV9_6A,
0655 };
0656 #undef EMIT_ARCHITECTURES
0657 #endif // EMIT_ARCHITECTURES
0658 
0659 #ifdef EMIT_CPU_ALIAS
0660 inline constexpr Alias CpuAliases[] = {
0661   { "cobalt-100", "neoverse-n2" },
0662   { "grace", "neoverse-v2" },
0663   { "cyclone", "apple-a7" },
0664   { "apple-a8", "apple-a7" },
0665   { "apple-a9", "apple-a7" },
0666   { "apple-s4", "apple-a12" },
0667   { "apple-s5", "apple-a12" },
0668   { "apple-m1", "apple-a14" },
0669   { "apple-m2", "apple-a15" },
0670   { "apple-m3", "apple-a16" },
0671   { "apple-latest", "apple-m4" },
0672 };
0673 #undef EMIT_CPU_ALIAS
0674 #endif // EMIT_CPU_ALIAS
0675 
0676 #ifdef EMIT_CPU_INFO
0677 inline constexpr CpuInfo CpuInfos[] = {
0678   {
0679     "generic",
0680     ARMV8A,
0681     AArch64::ExtensionBitset({
0682       AArch64::AEK_FP,
0683       AArch64::AEK_SIMD,
0684       AArch64::AEK_ETE,
0685     })
0686   },
0687   {
0688     "cortex-a35",
0689     ARMV8A,
0690     AArch64::ExtensionBitset({
0691       AArch64::AEK_CRC,
0692       AArch64::AEK_SHA2,
0693       AArch64::AEK_AES,
0694       AArch64::AEK_FP,
0695       AArch64::AEK_SIMD,
0696       AArch64::AEK_PERFMON,
0697     })
0698   },
0699   {
0700     "cortex-a34",
0701     ARMV8A,
0702     AArch64::ExtensionBitset({
0703       AArch64::AEK_CRC,
0704       AArch64::AEK_SHA2,
0705       AArch64::AEK_AES,
0706       AArch64::AEK_FP,
0707       AArch64::AEK_SIMD,
0708       AArch64::AEK_PERFMON,
0709     })
0710   },
0711   {
0712     "cortex-a53",
0713     ARMV8A,
0714     AArch64::ExtensionBitset({
0715       AArch64::AEK_CRC,
0716       AArch64::AEK_SHA2,
0717       AArch64::AEK_AES,
0718       AArch64::AEK_FP,
0719       AArch64::AEK_SIMD,
0720       AArch64::AEK_PERFMON,
0721     })
0722   },
0723   {
0724     "cortex-a55",
0725     ARMV8_2A,
0726     AArch64::ExtensionBitset({
0727       AArch64::AEK_SHA2,
0728       AArch64::AEK_AES,
0729       AArch64::AEK_FP,
0730       AArch64::AEK_SIMD,
0731       AArch64::AEK_FP16,
0732       AArch64::AEK_DOTPROD,
0733       AArch64::AEK_RCPC,
0734       AArch64::AEK_PERFMON,
0735       AArch64::AEK_CRC,
0736       AArch64::AEK_LSE,
0737       AArch64::AEK_RAS,
0738       AArch64::AEK_RDM,
0739     })
0740   },
0741   {
0742     "cortex-a510",
0743     ARMV9A,
0744     AArch64::ExtensionBitset({
0745       AArch64::AEK_SIMD,
0746       AArch64::AEK_PERFMON,
0747       AArch64::AEK_I8MM,
0748       AArch64::AEK_BF16,
0749       AArch64::AEK_AM,
0750       AArch64::AEK_MTE,
0751       AArch64::AEK_ETE,
0752       AArch64::AEK_SVEBITPERM,
0753       AArch64::AEK_FP16FML,
0754       AArch64::AEK_CCIDX,
0755       AArch64::AEK_SB,
0756       AArch64::AEK_PAUTH,
0757       AArch64::AEK_SSBS,
0758       AArch64::AEK_SVE,
0759       AArch64::AEK_SVE2,
0760       AArch64::AEK_FCMA,
0761       AArch64::AEK_CRC,
0762       AArch64::AEK_DOTPROD,
0763       AArch64::AEK_FP,
0764       AArch64::AEK_FP16,
0765       AArch64::AEK_JSCVT,
0766       AArch64::AEK_LSE,
0767       AArch64::AEK_RAS,
0768       AArch64::AEK_RCPC,
0769       AArch64::AEK_RDM,
0770     })
0771   },
0772   {
0773     "cortex-a520",
0774     ARMV9_2A,
0775     AArch64::ExtensionBitset({
0776       AArch64::AEK_PERFMON,
0777       AArch64::AEK_AM,
0778       AArch64::AEK_MTE,
0779       AArch64::AEK_ETE,
0780       AArch64::AEK_SVEBITPERM,
0781       AArch64::AEK_FP16FML,
0782       AArch64::AEK_CCIDX,
0783       AArch64::AEK_SB,
0784       AArch64::AEK_SSBS,
0785       AArch64::AEK_PAUTH,
0786       AArch64::AEK_FLAGM,
0787       AArch64::AEK_PREDRES,
0788       AArch64::AEK_SVE,
0789       AArch64::AEK_SVE2,
0790       AArch64::AEK_BF16,
0791       AArch64::AEK_FCMA,
0792       AArch64::AEK_CRC,
0793       AArch64::AEK_FP,
0794       AArch64::AEK_FP16,
0795       AArch64::AEK_I8MM,
0796       AArch64::AEK_JSCVT,
0797       AArch64::AEK_SIMD,
0798       AArch64::AEK_LSE,
0799       AArch64::AEK_RAS,
0800       AArch64::AEK_RCPC,
0801       AArch64::AEK_RDM,
0802       AArch64::AEK_DOTPROD,
0803     })
0804   },
0805   {
0806     "cortex-a520ae",
0807     ARMV9_2A,
0808     AArch64::ExtensionBitset({
0809       AArch64::AEK_PERFMON,
0810       AArch64::AEK_AM,
0811       AArch64::AEK_MTE,
0812       AArch64::AEK_ETE,
0813       AArch64::AEK_SVEBITPERM,
0814       AArch64::AEK_FP16FML,
0815       AArch64::AEK_CCIDX,
0816       AArch64::AEK_SB,
0817       AArch64::AEK_SSBS,
0818       AArch64::AEK_PAUTH,
0819       AArch64::AEK_FLAGM,
0820       AArch64::AEK_PREDRES,
0821       AArch64::AEK_SVE,
0822       AArch64::AEK_SVE2,
0823       AArch64::AEK_BF16,
0824       AArch64::AEK_FCMA,
0825       AArch64::AEK_CRC,
0826       AArch64::AEK_FP,
0827       AArch64::AEK_FP16,
0828       AArch64::AEK_I8MM,
0829       AArch64::AEK_JSCVT,
0830       AArch64::AEK_SIMD,
0831       AArch64::AEK_LSE,
0832       AArch64::AEK_RAS,
0833       AArch64::AEK_RCPC,
0834       AArch64::AEK_RDM,
0835       AArch64::AEK_DOTPROD,
0836     })
0837   },
0838   {
0839     "cortex-a57",
0840     ARMV8A,
0841     AArch64::ExtensionBitset({
0842       AArch64::AEK_CRC,
0843       AArch64::AEK_SHA2,
0844       AArch64::AEK_AES,
0845       AArch64::AEK_FP,
0846       AArch64::AEK_SIMD,
0847       AArch64::AEK_PERFMON,
0848     })
0849   },
0850   {
0851     "cortex-a65",
0852     ARMV8_2A,
0853     AArch64::ExtensionBitset({
0854       AArch64::AEK_SHA2,
0855       AArch64::AEK_AES,
0856       AArch64::AEK_FP,
0857       AArch64::AEK_SIMD,
0858       AArch64::AEK_FP16,
0859       AArch64::AEK_DOTPROD,
0860       AArch64::AEK_RCPC,
0861       AArch64::AEK_SSBS,
0862       AArch64::AEK_RAS,
0863       AArch64::AEK_PERFMON,
0864       AArch64::AEK_CRC,
0865       AArch64::AEK_LSE,
0866       AArch64::AEK_RDM,
0867     })
0868   },
0869   {
0870     "cortex-a65ae",
0871     ARMV8_2A,
0872     AArch64::ExtensionBitset({
0873       AArch64::AEK_SHA2,
0874       AArch64::AEK_AES,
0875       AArch64::AEK_FP,
0876       AArch64::AEK_SIMD,
0877       AArch64::AEK_FP16,
0878       AArch64::AEK_DOTPROD,
0879       AArch64::AEK_RCPC,
0880       AArch64::AEK_SSBS,
0881       AArch64::AEK_RAS,
0882       AArch64::AEK_PERFMON,
0883       AArch64::AEK_CRC,
0884       AArch64::AEK_LSE,
0885       AArch64::AEK_RDM,
0886     })
0887   },
0888   {
0889     "cortex-a72",
0890     ARMV8A,
0891     AArch64::ExtensionBitset({
0892       AArch64::AEK_CRC,
0893       AArch64::AEK_SHA2,
0894       AArch64::AEK_AES,
0895       AArch64::AEK_FP,
0896       AArch64::AEK_SIMD,
0897       AArch64::AEK_PERFMON,
0898     })
0899   },
0900   {
0901     "cortex-a73",
0902     ARMV8A,
0903     AArch64::ExtensionBitset({
0904       AArch64::AEK_CRC,
0905       AArch64::AEK_SHA2,
0906       AArch64::AEK_AES,
0907       AArch64::AEK_FP,
0908       AArch64::AEK_SIMD,
0909       AArch64::AEK_PERFMON,
0910     })
0911   },
0912   {
0913     "cortex-a75",
0914     ARMV8_2A,
0915     AArch64::ExtensionBitset({
0916       AArch64::AEK_SHA2,
0917       AArch64::AEK_AES,
0918       AArch64::AEK_FP,
0919       AArch64::AEK_SIMD,
0920       AArch64::AEK_FP16,
0921       AArch64::AEK_DOTPROD,
0922       AArch64::AEK_RCPC,
0923       AArch64::AEK_PERFMON,
0924       AArch64::AEK_CRC,
0925       AArch64::AEK_LSE,
0926       AArch64::AEK_RAS,
0927       AArch64::AEK_RDM,
0928     })
0929   },
0930   {
0931     "cortex-a76",
0932     ARMV8_2A,
0933     AArch64::ExtensionBitset({
0934       AArch64::AEK_SHA2,
0935       AArch64::AEK_AES,
0936       AArch64::AEK_FP,
0937       AArch64::AEK_SIMD,
0938       AArch64::AEK_FP16,
0939       AArch64::AEK_DOTPROD,
0940       AArch64::AEK_RCPC,
0941       AArch64::AEK_SSBS,
0942       AArch64::AEK_PERFMON,
0943       AArch64::AEK_CRC,
0944       AArch64::AEK_LSE,
0945       AArch64::AEK_RAS,
0946       AArch64::AEK_RDM,
0947     })
0948   },
0949   {
0950     "cortex-a76ae",
0951     ARMV8_2A,
0952     AArch64::ExtensionBitset({
0953       AArch64::AEK_SHA2,
0954       AArch64::AEK_AES,
0955       AArch64::AEK_FP,
0956       AArch64::AEK_SIMD,
0957       AArch64::AEK_FP16,
0958       AArch64::AEK_DOTPROD,
0959       AArch64::AEK_RCPC,
0960       AArch64::AEK_SSBS,
0961       AArch64::AEK_PERFMON,
0962       AArch64::AEK_CRC,
0963       AArch64::AEK_LSE,
0964       AArch64::AEK_RAS,
0965       AArch64::AEK_RDM,
0966     })
0967   },
0968   {
0969     "cortex-a77",
0970     ARMV8_2A,
0971     AArch64::ExtensionBitset({
0972       AArch64::AEK_SHA2,
0973       AArch64::AEK_AES,
0974       AArch64::AEK_FP,
0975       AArch64::AEK_SIMD,
0976       AArch64::AEK_FP16,
0977       AArch64::AEK_DOTPROD,
0978       AArch64::AEK_RCPC,
0979       AArch64::AEK_PERFMON,
0980       AArch64::AEK_SSBS,
0981       AArch64::AEK_CRC,
0982       AArch64::AEK_LSE,
0983       AArch64::AEK_RAS,
0984       AArch64::AEK_RDM,
0985     })
0986   },
0987   {
0988     "cortex-a78",
0989     ARMV8_2A,
0990     AArch64::ExtensionBitset({
0991       AArch64::AEK_SHA2,
0992       AArch64::AEK_AES,
0993       AArch64::AEK_FP,
0994       AArch64::AEK_SIMD,
0995       AArch64::AEK_FP16,
0996       AArch64::AEK_DOTPROD,
0997       AArch64::AEK_RCPC,
0998       AArch64::AEK_PERFMON,
0999       AArch64::AEK_PROFILE,
1000       AArch64::AEK_SSBS,
1001       AArch64::AEK_CRC,
1002       AArch64::AEK_LSE,
1003       AArch64::AEK_RAS,
1004       AArch64::AEK_RDM,
1005     })
1006   },
1007   {
1008     "cortex-a78ae",
1009     ARMV8_2A,
1010     AArch64::ExtensionBitset({
1011       AArch64::AEK_SHA2,
1012       AArch64::AEK_AES,
1013       AArch64::AEK_FP,
1014       AArch64::AEK_SIMD,
1015       AArch64::AEK_FP16,
1016       AArch64::AEK_DOTPROD,
1017       AArch64::AEK_RCPC,
1018       AArch64::AEK_PERFMON,
1019       AArch64::AEK_PROFILE,
1020       AArch64::AEK_SSBS,
1021       AArch64::AEK_CRC,
1022       AArch64::AEK_LSE,
1023       AArch64::AEK_RAS,
1024       AArch64::AEK_RDM,
1025     })
1026   },
1027   {
1028     "cortex-a78c",
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_FLAGM,
1038       AArch64::AEK_PAUTH,
1039       AArch64::AEK_PERFMON,
1040       AArch64::AEK_RCPC,
1041       AArch64::AEK_PROFILE,
1042       AArch64::AEK_SSBS,
1043       AArch64::AEK_CRC,
1044       AArch64::AEK_LSE,
1045       AArch64::AEK_RAS,
1046       AArch64::AEK_RDM,
1047     })
1048   },
1049   {
1050     "cortex-a710",
1051     ARMV9A,
1052     AArch64::ExtensionBitset({
1053       AArch64::AEK_SIMD,
1054       AArch64::AEK_PERFMON,
1055       AArch64::AEK_CCIDX,
1056       AArch64::AEK_SSBS,
1057       AArch64::AEK_ETE,
1058       AArch64::AEK_MTE,
1059       AArch64::AEK_FP16FML,
1060       AArch64::AEK_SVEBITPERM,
1061       AArch64::AEK_BF16,
1062       AArch64::AEK_I8MM,
1063       AArch64::AEK_PAUTH,
1064       AArch64::AEK_FLAGM,
1065       AArch64::AEK_SB,
1066       AArch64::AEK_SVE,
1067       AArch64::AEK_SVE2,
1068       AArch64::AEK_FCMA,
1069       AArch64::AEK_CRC,
1070       AArch64::AEK_DOTPROD,
1071       AArch64::AEK_FP,
1072       AArch64::AEK_FP16,
1073       AArch64::AEK_JSCVT,
1074       AArch64::AEK_LSE,
1075       AArch64::AEK_RAS,
1076       AArch64::AEK_RCPC,
1077       AArch64::AEK_RDM,
1078     })
1079   },
1080   {
1081     "cortex-a715",
1082     ARMV9A,
1083     AArch64::ExtensionBitset({
1084       AArch64::AEK_SIMD,
1085       AArch64::AEK_MTE,
1086       AArch64::AEK_CCIDX,
1087       AArch64::AEK_FP16FML,
1088       AArch64::AEK_SVE,
1089       AArch64::AEK_TRBE,
1090       AArch64::AEK_SVEBITPERM,
1091       AArch64::AEK_BF16,
1092       AArch64::AEK_ETE,
1093       AArch64::AEK_PERFMON,
1094       AArch64::AEK_I8MM,
1095       AArch64::AEK_PROFILE,
1096       AArch64::AEK_SB,
1097       AArch64::AEK_SSBS,
1098       AArch64::AEK_FP16,
1099       AArch64::AEK_PAUTH,
1100       AArch64::AEK_PREDRES,
1101       AArch64::AEK_FLAGM,
1102       AArch64::AEK_SVE2,
1103       AArch64::AEK_FCMA,
1104       AArch64::AEK_CRC,
1105       AArch64::AEK_DOTPROD,
1106       AArch64::AEK_FP,
1107       AArch64::AEK_JSCVT,
1108       AArch64::AEK_LSE,
1109       AArch64::AEK_RAS,
1110       AArch64::AEK_RCPC,
1111       AArch64::AEK_RDM,
1112     })
1113   },
1114   {
1115     "cortex-a720",
1116     ARMV9_2A,
1117     AArch64::ExtensionBitset({
1118       AArch64::AEK_MTE,
1119       AArch64::AEK_FP16FML,
1120       AArch64::AEK_CCIDX,
1121       AArch64::AEK_TRBE,
1122       AArch64::AEK_SVEBITPERM,
1123       AArch64::AEK_ETE,
1124       AArch64::AEK_PERFMON,
1125       AArch64::AEK_PROFILE,
1126       AArch64::AEK_SPE_EEF,
1127       AArch64::AEK_SB,
1128       AArch64::AEK_SSBS,
1129       AArch64::AEK_PAUTH,
1130       AArch64::AEK_FLAGM,
1131       AArch64::AEK_PREDRES,
1132       AArch64::AEK_SVE,
1133       AArch64::AEK_SVE2,
1134       AArch64::AEK_BF16,
1135       AArch64::AEK_FCMA,
1136       AArch64::AEK_CRC,
1137       AArch64::AEK_DOTPROD,
1138       AArch64::AEK_FP,
1139       AArch64::AEK_FP16,
1140       AArch64::AEK_I8MM,
1141       AArch64::AEK_JSCVT,
1142       AArch64::AEK_LSE,
1143       AArch64::AEK_SIMD,
1144       AArch64::AEK_RAS,
1145       AArch64::AEK_RCPC,
1146       AArch64::AEK_RDM,
1147     })
1148   },
1149   {
1150     "cortex-a720ae",
1151     ARMV9_2A,
1152     AArch64::ExtensionBitset({
1153       AArch64::AEK_MTE,
1154       AArch64::AEK_FP16FML,
1155       AArch64::AEK_CCIDX,
1156       AArch64::AEK_TRBE,
1157       AArch64::AEK_SVEBITPERM,
1158       AArch64::AEK_ETE,
1159       AArch64::AEK_PERFMON,
1160       AArch64::AEK_PROFILE,
1161       AArch64::AEK_SPE_EEF,
1162       AArch64::AEK_SB,
1163       AArch64::AEK_SSBS,
1164       AArch64::AEK_PAUTH,
1165       AArch64::AEK_FLAGM,
1166       AArch64::AEK_PREDRES,
1167       AArch64::AEK_SVE,
1168       AArch64::AEK_SVE2,
1169       AArch64::AEK_BF16,
1170       AArch64::AEK_FCMA,
1171       AArch64::AEK_CRC,
1172       AArch64::AEK_DOTPROD,
1173       AArch64::AEK_FP,
1174       AArch64::AEK_FP16,
1175       AArch64::AEK_I8MM,
1176       AArch64::AEK_JSCVT,
1177       AArch64::AEK_LSE,
1178       AArch64::AEK_SIMD,
1179       AArch64::AEK_RAS,
1180       AArch64::AEK_RCPC,
1181       AArch64::AEK_RDM,
1182     })
1183   },
1184   {
1185     "cortex-a725",
1186     ARMV9_2A,
1187     AArch64::ExtensionBitset({
1188       AArch64::AEK_MTE,
1189       AArch64::AEK_FP16FML,
1190       AArch64::AEK_CCIDX,
1191       AArch64::AEK_ETE,
1192       AArch64::AEK_PERFMON,
1193       AArch64::AEK_PROFILE,
1194       AArch64::AEK_SVEBITPERM,
1195       AArch64::AEK_SPE_EEF,
1196       AArch64::AEK_TRBE,
1197       AArch64::AEK_FLAGM,
1198       AArch64::AEK_PREDRES,
1199       AArch64::AEK_SB,
1200       AArch64::AEK_SSBS,
1201       AArch64::AEK_SVE,
1202       AArch64::AEK_SVE2,
1203       AArch64::AEK_BF16,
1204       AArch64::AEK_FCMA,
1205       AArch64::AEK_CRC,
1206       AArch64::AEK_DOTPROD,
1207       AArch64::AEK_FP,
1208       AArch64::AEK_FP16,
1209       AArch64::AEK_I8MM,
1210       AArch64::AEK_JSCVT,
1211       AArch64::AEK_LSE,
1212       AArch64::AEK_SIMD,
1213       AArch64::AEK_PAUTH,
1214       AArch64::AEK_RAS,
1215       AArch64::AEK_RCPC,
1216       AArch64::AEK_RDM,
1217     })
1218   },
1219   {
1220     "cortex-r82",
1221     ARMV8R,
1222     AArch64::ExtensionBitset({
1223       AArch64::AEK_PERFMON,
1224       AArch64::AEK_FP16,
1225       AArch64::AEK_FP16FML,
1226       AArch64::AEK_SSBS,
1227       AArch64::AEK_PREDRES,
1228       AArch64::AEK_SB,
1229       AArch64::AEK_RDM,
1230       AArch64::AEK_DOTPROD,
1231       AArch64::AEK_FCMA,
1232       AArch64::AEK_JSCVT,
1233       AArch64::AEK_CCDP,
1234       AArch64::AEK_FLAGM,
1235       AArch64::AEK_CRC,
1236       AArch64::AEK_LSE,
1237       AArch64::AEK_RAS,
1238       AArch64::AEK_FP,
1239       AArch64::AEK_SIMD,
1240       AArch64::AEK_PAUTH,
1241       AArch64::AEK_RCPC,
1242     })
1243   },
1244   {
1245     "cortex-r82ae",
1246     ARMV8R,
1247     AArch64::ExtensionBitset({
1248       AArch64::AEK_PERFMON,
1249       AArch64::AEK_FP16,
1250       AArch64::AEK_FP16FML,
1251       AArch64::AEK_SSBS,
1252       AArch64::AEK_PREDRES,
1253       AArch64::AEK_SB,
1254       AArch64::AEK_RDM,
1255       AArch64::AEK_DOTPROD,
1256       AArch64::AEK_FCMA,
1257       AArch64::AEK_JSCVT,
1258       AArch64::AEK_CCDP,
1259       AArch64::AEK_LSE,
1260       AArch64::AEK_FLAGM,
1261       AArch64::AEK_CRC,
1262       AArch64::AEK_FP,
1263       AArch64::AEK_SIMD,
1264       AArch64::AEK_PAUTH,
1265       AArch64::AEK_RAS,
1266       AArch64::AEK_RCPC,
1267     })
1268   },
1269   {
1270     "cortex-x1",
1271     ARMV8_2A,
1272     AArch64::ExtensionBitset({
1273       AArch64::AEK_SHA2,
1274       AArch64::AEK_AES,
1275       AArch64::AEK_FP,
1276       AArch64::AEK_SIMD,
1277       AArch64::AEK_RCPC,
1278       AArch64::AEK_PERFMON,
1279       AArch64::AEK_PROFILE,
1280       AArch64::AEK_FP16,
1281       AArch64::AEK_DOTPROD,
1282       AArch64::AEK_SSBS,
1283       AArch64::AEK_CRC,
1284       AArch64::AEK_LSE,
1285       AArch64::AEK_RAS,
1286       AArch64::AEK_RDM,
1287     })
1288   },
1289   {
1290     "cortex-x1c",
1291     ARMV8_2A,
1292     AArch64::ExtensionBitset({
1293       AArch64::AEK_SHA2,
1294       AArch64::AEK_AES,
1295       AArch64::AEK_FP,
1296       AArch64::AEK_SIMD,
1297       AArch64::AEK_RCPC_IMMO,
1298       AArch64::AEK_PERFMON,
1299       AArch64::AEK_PROFILE,
1300       AArch64::AEK_FP16,
1301       AArch64::AEK_DOTPROD,
1302       AArch64::AEK_PAUTH,
1303       AArch64::AEK_SSBS,
1304       AArch64::AEK_FLAGM,
1305       AArch64::AEK_LSE2,
1306       AArch64::AEK_RCPC,
1307       AArch64::AEK_CRC,
1308       AArch64::AEK_LSE,
1309       AArch64::AEK_RAS,
1310       AArch64::AEK_RDM,
1311     })
1312   },
1313   {
1314     "cortex-x2",
1315     ARMV9A,
1316     AArch64::ExtensionBitset({
1317       AArch64::AEK_SIMD,
1318       AArch64::AEK_PERFMON,
1319       AArch64::AEK_I8MM,
1320       AArch64::AEK_BF16,
1321       AArch64::AEK_AM,
1322       AArch64::AEK_MTE,
1323       AArch64::AEK_ETE,
1324       AArch64::AEK_SVEBITPERM,
1325       AArch64::AEK_FP16FML,
1326       AArch64::AEK_CCIDX,
1327       AArch64::AEK_PAUTH,
1328       AArch64::AEK_SSBS,
1329       AArch64::AEK_SB,
1330       AArch64::AEK_SVE,
1331       AArch64::AEK_SVE2,
1332       AArch64::AEK_FLAGM,
1333       AArch64::AEK_FCMA,
1334       AArch64::AEK_CRC,
1335       AArch64::AEK_DOTPROD,
1336       AArch64::AEK_FP,
1337       AArch64::AEK_FP16,
1338       AArch64::AEK_JSCVT,
1339       AArch64::AEK_LSE,
1340       AArch64::AEK_RAS,
1341       AArch64::AEK_RCPC,
1342       AArch64::AEK_RDM,
1343     })
1344   },
1345   {
1346     "cortex-x3",
1347     ARMV9A,
1348     AArch64::ExtensionBitset({
1349       AArch64::AEK_SVE,
1350       AArch64::AEK_SIMD,
1351       AArch64::AEK_PERFMON,
1352       AArch64::AEK_ETE,
1353       AArch64::AEK_TRBE,
1354       AArch64::AEK_PROFILE,
1355       AArch64::AEK_BF16,
1356       AArch64::AEK_I8MM,
1357       AArch64::AEK_MTE,
1358       AArch64::AEK_SVEBITPERM,
1359       AArch64::AEK_FP16,
1360       AArch64::AEK_FP16FML,
1361       AArch64::AEK_CCIDX,
1362       AArch64::AEK_SB,
1363       AArch64::AEK_PAUTH,
1364       AArch64::AEK_PREDRES,
1365       AArch64::AEK_FLAGM,
1366       AArch64::AEK_SSBS,
1367       AArch64::AEK_SVE2,
1368       AArch64::AEK_FCMA,
1369       AArch64::AEK_CRC,
1370       AArch64::AEK_FP,
1371       AArch64::AEK_JSCVT,
1372       AArch64::AEK_LSE,
1373       AArch64::AEK_RAS,
1374       AArch64::AEK_RCPC,
1375       AArch64::AEK_RDM,
1376       AArch64::AEK_DOTPROD,
1377     })
1378   },
1379   {
1380     "cortex-x4",
1381     ARMV9_2A,
1382     AArch64::ExtensionBitset({
1383       AArch64::AEK_PERFMON,
1384       AArch64::AEK_ETE,
1385       AArch64::AEK_TRBE,
1386       AArch64::AEK_PROFILE,
1387       AArch64::AEK_MTE,
1388       AArch64::AEK_SVEBITPERM,
1389       AArch64::AEK_FP16FML,
1390       AArch64::AEK_SPE_EEF,
1391       AArch64::AEK_CCIDX,
1392       AArch64::AEK_SB,
1393       AArch64::AEK_SSBS,
1394       AArch64::AEK_PAUTH,
1395       AArch64::AEK_FLAGM,
1396       AArch64::AEK_PREDRES,
1397       AArch64::AEK_SVE,
1398       AArch64::AEK_SVE2,
1399       AArch64::AEK_FCMA,
1400       AArch64::AEK_CRC,
1401       AArch64::AEK_DOTPROD,
1402       AArch64::AEK_FP,
1403       AArch64::AEK_FP16,
1404       AArch64::AEK_I8MM,
1405       AArch64::AEK_JSCVT,
1406       AArch64::AEK_LSE,
1407       AArch64::AEK_SIMD,
1408       AArch64::AEK_RAS,
1409       AArch64::AEK_RCPC,
1410       AArch64::AEK_RDM,
1411       AArch64::AEK_BF16,
1412     })
1413   },
1414   {
1415     "cortex-x925",
1416     ARMV9_2A,
1417     AArch64::ExtensionBitset({
1418       AArch64::AEK_MTE,
1419       AArch64::AEK_FP16FML,
1420       AArch64::AEK_CCIDX,
1421       AArch64::AEK_ETE,
1422       AArch64::AEK_PERFMON,
1423       AArch64::AEK_PROFILE,
1424       AArch64::AEK_SVEBITPERM,
1425       AArch64::AEK_SPE_EEF,
1426       AArch64::AEK_TRBE,
1427       AArch64::AEK_FLAGM,
1428       AArch64::AEK_PREDRES,
1429       AArch64::AEK_SB,
1430       AArch64::AEK_SSBS,
1431       AArch64::AEK_SVE,
1432       AArch64::AEK_SVE2,
1433       AArch64::AEK_BF16,
1434       AArch64::AEK_FCMA,
1435       AArch64::AEK_CRC,
1436       AArch64::AEK_DOTPROD,
1437       AArch64::AEK_FP,
1438       AArch64::AEK_FP16,
1439       AArch64::AEK_I8MM,
1440       AArch64::AEK_JSCVT,
1441       AArch64::AEK_LSE,
1442       AArch64::AEK_SIMD,
1443       AArch64::AEK_PAUTH,
1444       AArch64::AEK_RAS,
1445       AArch64::AEK_RCPC,
1446       AArch64::AEK_RDM,
1447     })
1448   },
1449   {
1450     "neoverse-e1",
1451     ARMV8_2A,
1452     AArch64::ExtensionBitset({
1453       AArch64::AEK_SHA2,
1454       AArch64::AEK_AES,
1455       AArch64::AEK_DOTPROD,
1456       AArch64::AEK_FP,
1457       AArch64::AEK_FP16,
1458       AArch64::AEK_SIMD,
1459       AArch64::AEK_RCPC,
1460       AArch64::AEK_SSBS,
1461       AArch64::AEK_PERFMON,
1462       AArch64::AEK_CRC,
1463       AArch64::AEK_LSE,
1464       AArch64::AEK_RAS,
1465       AArch64::AEK_RDM,
1466     })
1467   },
1468   {
1469     "neoverse-n1",
1470     ARMV8_2A,
1471     AArch64::ExtensionBitset({
1472       AArch64::AEK_SHA2,
1473       AArch64::AEK_AES,
1474       AArch64::AEK_DOTPROD,
1475       AArch64::AEK_FP,
1476       AArch64::AEK_FP16,
1477       AArch64::AEK_SIMD,
1478       AArch64::AEK_RCPC,
1479       AArch64::AEK_PROFILE,
1480       AArch64::AEK_SSBS,
1481       AArch64::AEK_PERFMON,
1482       AArch64::AEK_CRC,
1483       AArch64::AEK_LSE,
1484       AArch64::AEK_RAS,
1485       AArch64::AEK_RDM,
1486     })
1487   },
1488   {
1489     "neoverse-n2",
1490     ARMV9A,
1491     AArch64::ExtensionBitset({
1492       AArch64::AEK_BF16,
1493       AArch64::AEK_ETE,
1494       AArch64::AEK_FP16FML,
1495       AArch64::AEK_I8MM,
1496       AArch64::AEK_MTE,
1497       AArch64::AEK_SVE2,
1498       AArch64::AEK_SVEBITPERM,
1499       AArch64::AEK_TRBE,
1500       AArch64::AEK_PERFMON,
1501       AArch64::AEK_CCIDX,
1502       AArch64::AEK_DOTPROD,
1503       AArch64::AEK_FP16,
1504       AArch64::AEK_SB,
1505       AArch64::AEK_SSBS,
1506       AArch64::AEK_SVE,
1507       AArch64::AEK_FCMA,
1508       AArch64::AEK_CRC,
1509       AArch64::AEK_FP,
1510       AArch64::AEK_JSCVT,
1511       AArch64::AEK_LSE,
1512       AArch64::AEK_SIMD,
1513       AArch64::AEK_PAUTH,
1514       AArch64::AEK_RAS,
1515       AArch64::AEK_RCPC,
1516       AArch64::AEK_RDM,
1517     })
1518   },
1519   {
1520     "neoverse-n3",
1521     ARMV9_2A,
1522     AArch64::ExtensionBitset({
1523       AArch64::AEK_ETE,
1524       AArch64::AEK_FP16FML,
1525       AArch64::AEK_FP16,
1526       AArch64::AEK_MTE,
1527       AArch64::AEK_PERFMON,
1528       AArch64::AEK_RAND,
1529       AArch64::AEK_PROFILE,
1530       AArch64::AEK_SPE_EEF,
1531       AArch64::AEK_SVEBITPERM,
1532       AArch64::AEK_CCIDX,
1533       AArch64::AEK_SSBS,
1534       AArch64::AEK_SB,
1535       AArch64::AEK_PREDRES,
1536       AArch64::AEK_PAUTH,
1537       AArch64::AEK_FLAGM,
1538       AArch64::AEK_SVE,
1539       AArch64::AEK_SVE2,
1540       AArch64::AEK_BF16,
1541       AArch64::AEK_FCMA,
1542       AArch64::AEK_CRC,
1543       AArch64::AEK_DOTPROD,
1544       AArch64::AEK_FP,
1545       AArch64::AEK_I8MM,
1546       AArch64::AEK_JSCVT,
1547       AArch64::AEK_LSE,
1548       AArch64::AEK_RAS,
1549       AArch64::AEK_RCPC,
1550       AArch64::AEK_RDM,
1551       AArch64::AEK_SIMD,
1552     })
1553   },
1554   {
1555     "neoverse-512tvb",
1556     ARMV8_4A,
1557     AArch64::ExtensionBitset({
1558       AArch64::AEK_BF16,
1559       AArch64::AEK_CCDP,
1560       AArch64::AEK_SHA2,
1561       AArch64::AEK_AES,
1562       AArch64::AEK_FP,
1563       AArch64::AEK_FP16FML,
1564       AArch64::AEK_FP16,
1565       AArch64::AEK_I8MM,
1566       AArch64::AEK_SIMD,
1567       AArch64::AEK_PERFMON,
1568       AArch64::AEK_RAND,
1569       AArch64::AEK_PROFILE,
1570       AArch64::AEK_SSBS,
1571       AArch64::AEK_SVE,
1572       AArch64::AEK_CCIDX,
1573       AArch64::AEK_SHA3,
1574       AArch64::AEK_SM4,
1575       AArch64::AEK_DOTPROD,
1576       AArch64::AEK_FCMA,
1577       AArch64::AEK_CRC,
1578       AArch64::AEK_JSCVT,
1579       AArch64::AEK_LSE,
1580       AArch64::AEK_PAUTH,
1581       AArch64::AEK_RAS,
1582       AArch64::AEK_RCPC,
1583       AArch64::AEK_RDM,
1584     })
1585   },
1586   {
1587     "neoverse-v1",
1588     ARMV8_4A,
1589     AArch64::ExtensionBitset({
1590       AArch64::AEK_BF16,
1591       AArch64::AEK_CCDP,
1592       AArch64::AEK_SHA2,
1593       AArch64::AEK_AES,
1594       AArch64::AEK_FP,
1595       AArch64::AEK_FP16FML,
1596       AArch64::AEK_FP16,
1597       AArch64::AEK_I8MM,
1598       AArch64::AEK_SIMD,
1599       AArch64::AEK_PERFMON,
1600       AArch64::AEK_RAND,
1601       AArch64::AEK_PROFILE,
1602       AArch64::AEK_SSBS,
1603       AArch64::AEK_SVE,
1604       AArch64::AEK_CCIDX,
1605       AArch64::AEK_SHA3,
1606       AArch64::AEK_SM4,
1607       AArch64::AEK_DOTPROD,
1608       AArch64::AEK_FCMA,
1609       AArch64::AEK_CRC,
1610       AArch64::AEK_JSCVT,
1611       AArch64::AEK_LSE,
1612       AArch64::AEK_PAUTH,
1613       AArch64::AEK_RAS,
1614       AArch64::AEK_RCPC,
1615       AArch64::AEK_RDM,
1616     })
1617   },
1618   {
1619     "neoverse-v2",
1620     ARMV9A,
1621     AArch64::ExtensionBitset({
1622       AArch64::AEK_BF16,
1623       AArch64::AEK_PROFILE,
1624       AArch64::AEK_PERFMON,
1625       AArch64::AEK_ETE,
1626       AArch64::AEK_I8MM,
1627       AArch64::AEK_SIMD,
1628       AArch64::AEK_SVEBITPERM,
1629       AArch64::AEK_FP16FML,
1630       AArch64::AEK_MTE,
1631       AArch64::AEK_RAND,
1632       AArch64::AEK_CCIDX,
1633       AArch64::AEK_SVE,
1634       AArch64::AEK_SVE2,
1635       AArch64::AEK_SSBS,
1636       AArch64::AEK_FP16,
1637       AArch64::AEK_DOTPROD,
1638       AArch64::AEK_FCMA,
1639       AArch64::AEK_CRC,
1640       AArch64::AEK_FP,
1641       AArch64::AEK_JSCVT,
1642       AArch64::AEK_LSE,
1643       AArch64::AEK_PAUTH,
1644       AArch64::AEK_RAS,
1645       AArch64::AEK_RCPC,
1646       AArch64::AEK_RDM,
1647     })
1648   },
1649   {
1650     "neoverse-v3",
1651     ARMV9_2A,
1652     AArch64::ExtensionBitset({
1653       AArch64::AEK_ETE,
1654       AArch64::AEK_FP16FML,
1655       AArch64::AEK_FP16,
1656       AArch64::AEK_LS64,
1657       AArch64::AEK_MTE,
1658       AArch64::AEK_PERFMON,
1659       AArch64::AEK_RAND,
1660       AArch64::AEK_PROFILE,
1661       AArch64::AEK_CCIDX,
1662       AArch64::AEK_SPE_EEF,
1663       AArch64::AEK_SVEBITPERM,
1664       AArch64::AEK_BRBE,
1665       AArch64::AEK_SSBS,
1666       AArch64::AEK_SB,
1667       AArch64::AEK_PREDRES,
1668       AArch64::AEK_PAUTH,
1669       AArch64::AEK_FLAGM,
1670       AArch64::AEK_SVE,
1671       AArch64::AEK_SVE2,
1672       AArch64::AEK_BF16,
1673       AArch64::AEK_FCMA,
1674       AArch64::AEK_CRC,
1675       AArch64::AEK_DOTPROD,
1676       AArch64::AEK_FP,
1677       AArch64::AEK_I8MM,
1678       AArch64::AEK_JSCVT,
1679       AArch64::AEK_LSE,
1680       AArch64::AEK_SIMD,
1681       AArch64::AEK_RAS,
1682       AArch64::AEK_RCPC,
1683       AArch64::AEK_RDM,
1684       AArch64::AEK_RME,
1685     })
1686   },
1687   {
1688     "neoverse-v3ae",
1689     ARMV9_2A,
1690     AArch64::ExtensionBitset({
1691       AArch64::AEK_ETE,
1692       AArch64::AEK_FP16FML,
1693       AArch64::AEK_FP16,
1694       AArch64::AEK_LS64,
1695       AArch64::AEK_MTE,
1696       AArch64::AEK_PERFMON,
1697       AArch64::AEK_RAND,
1698       AArch64::AEK_PROFILE,
1699       AArch64::AEK_SPE_EEF,
1700       AArch64::AEK_SVEBITPERM,
1701       AArch64::AEK_BRBE,
1702       AArch64::AEK_SSBS,
1703       AArch64::AEK_SB,
1704       AArch64::AEK_PREDRES,
1705       AArch64::AEK_PAUTH,
1706       AArch64::AEK_FLAGM,
1707       AArch64::AEK_CCIDX,
1708       AArch64::AEK_SVE,
1709       AArch64::AEK_SVE2,
1710       AArch64::AEK_BF16,
1711       AArch64::AEK_FCMA,
1712       AArch64::AEK_CRC,
1713       AArch64::AEK_DOTPROD,
1714       AArch64::AEK_FP,
1715       AArch64::AEK_I8MM,
1716       AArch64::AEK_JSCVT,
1717       AArch64::AEK_LSE,
1718       AArch64::AEK_SIMD,
1719       AArch64::AEK_RAS,
1720       AArch64::AEK_RCPC,
1721       AArch64::AEK_RDM,
1722       AArch64::AEK_RME,
1723     })
1724   },
1725   {
1726     "exynos-m3",
1727     ARMV8A,
1728     AArch64::ExtensionBitset({
1729       AArch64::AEK_CRC,
1730       AArch64::AEK_SHA2,
1731       AArch64::AEK_AES,
1732       AArch64::AEK_PERFMON,
1733       AArch64::AEK_SIMD,
1734       AArch64::AEK_FP,
1735     })
1736   },
1737   {
1738     "exynos-m4",
1739     ARMV8_2A,
1740     AArch64::ExtensionBitset({
1741       AArch64::AEK_SHA2,
1742       AArch64::AEK_AES,
1743       AArch64::AEK_DOTPROD,
1744       AArch64::AEK_FP16,
1745       AArch64::AEK_PERFMON,
1746       AArch64::AEK_CRC,
1747       AArch64::AEK_FP,
1748       AArch64::AEK_LSE,
1749       AArch64::AEK_SIMD,
1750       AArch64::AEK_RAS,
1751       AArch64::AEK_RDM,
1752     })
1753   },
1754   {
1755     "exynos-m5",
1756     ARMV8_2A,
1757     AArch64::ExtensionBitset({
1758       AArch64::AEK_SHA2,
1759       AArch64::AEK_AES,
1760       AArch64::AEK_DOTPROD,
1761       AArch64::AEK_FP16,
1762       AArch64::AEK_PERFMON,
1763       AArch64::AEK_CRC,
1764       AArch64::AEK_FP,
1765       AArch64::AEK_LSE,
1766       AArch64::AEK_SIMD,
1767       AArch64::AEK_RAS,
1768       AArch64::AEK_RDM,
1769     })
1770   },
1771   {
1772     "falkor",
1773     ARMV8A,
1774     AArch64::ExtensionBitset({
1775       AArch64::AEK_CRC,
1776       AArch64::AEK_SHA2,
1777       AArch64::AEK_AES,
1778       AArch64::AEK_FP,
1779       AArch64::AEK_SIMD,
1780       AArch64::AEK_PERFMON,
1781       AArch64::AEK_RDM,
1782     })
1783   },
1784   {
1785     "saphira",
1786     ARMV8_4A,
1787     AArch64::ExtensionBitset({
1788       AArch64::AEK_SHA2,
1789       AArch64::AEK_AES,
1790       AArch64::AEK_FP,
1791       AArch64::AEK_SIMD,
1792       AArch64::AEK_PROFILE,
1793       AArch64::AEK_PERFMON,
1794       AArch64::AEK_CRC,
1795       AArch64::AEK_CCIDX,
1796       AArch64::AEK_LSE,
1797       AArch64::AEK_RDM,
1798       AArch64::AEK_RAS,
1799       AArch64::AEK_RCPC,
1800     })
1801   },
1802   {
1803     "kryo",
1804     ARMV8A,
1805     AArch64::ExtensionBitset({
1806       AArch64::AEK_CRC,
1807       AArch64::AEK_SHA2,
1808       AArch64::AEK_AES,
1809       AArch64::AEK_FP,
1810       AArch64::AEK_SIMD,
1811       AArch64::AEK_PERFMON,
1812     })
1813   },
1814   {
1815     "thunderx",
1816     ARMV8A,
1817     AArch64::ExtensionBitset({
1818       AArch64::AEK_CRC,
1819       AArch64::AEK_SHA2,
1820       AArch64::AEK_AES,
1821       AArch64::AEK_FP,
1822       AArch64::AEK_PERFMON,
1823       AArch64::AEK_SIMD,
1824     })
1825   },
1826   {
1827     "thunderxt88",
1828     ARMV8A,
1829     AArch64::ExtensionBitset({
1830       AArch64::AEK_CRC,
1831       AArch64::AEK_SHA2,
1832       AArch64::AEK_AES,
1833       AArch64::AEK_FP,
1834       AArch64::AEK_PERFMON,
1835       AArch64::AEK_SIMD,
1836     })
1837   },
1838   {
1839     "thunderxt81",
1840     ARMV8A,
1841     AArch64::ExtensionBitset({
1842       AArch64::AEK_CRC,
1843       AArch64::AEK_SHA2,
1844       AArch64::AEK_AES,
1845       AArch64::AEK_FP,
1846       AArch64::AEK_PERFMON,
1847       AArch64::AEK_SIMD,
1848     })
1849   },
1850   {
1851     "thunderxt83",
1852     ARMV8A,
1853     AArch64::ExtensionBitset({
1854       AArch64::AEK_CRC,
1855       AArch64::AEK_SHA2,
1856       AArch64::AEK_AES,
1857       AArch64::AEK_FP,
1858       AArch64::AEK_PERFMON,
1859       AArch64::AEK_SIMD,
1860     })
1861   },
1862   {
1863     "thunderx2t99",
1864     ARMV8_1A,
1865     AArch64::ExtensionBitset({
1866       AArch64::AEK_CRC,
1867       AArch64::AEK_SHA2,
1868       AArch64::AEK_AES,
1869       AArch64::AEK_FP,
1870       AArch64::AEK_SIMD,
1871       AArch64::AEK_LSE,
1872       AArch64::AEK_RDM,
1873     })
1874   },
1875   {
1876     "thunderx3t110",
1877     ARMV8_3A,
1878     AArch64::ExtensionBitset({
1879       AArch64::AEK_CRC,
1880       AArch64::AEK_SHA2,
1881       AArch64::AEK_AES,
1882       AArch64::AEK_FP,
1883       AArch64::AEK_SIMD,
1884       AArch64::AEK_LSE,
1885       AArch64::AEK_CCIDX,
1886       AArch64::AEK_PAUTH,
1887       AArch64::AEK_PERFMON,
1888       AArch64::AEK_FCMA,
1889       AArch64::AEK_JSCVT,
1890       AArch64::AEK_RAS,
1891       AArch64::AEK_RCPC,
1892       AArch64::AEK_RDM,
1893     })
1894   },
1895   {
1896     "tsv110",
1897     ARMV8_2A,
1898     AArch64::ExtensionBitset({
1899       AArch64::AEK_SHA2,
1900       AArch64::AEK_AES,
1901       AArch64::AEK_FP,
1902       AArch64::AEK_SIMD,
1903       AArch64::AEK_PERFMON,
1904       AArch64::AEK_PROFILE,
1905       AArch64::AEK_FP16,
1906       AArch64::AEK_FP16FML,
1907       AArch64::AEK_DOTPROD,
1908       AArch64::AEK_JSCVT,
1909       AArch64::AEK_FCMA,
1910       AArch64::AEK_CRC,
1911       AArch64::AEK_LSE,
1912       AArch64::AEK_RAS,
1913       AArch64::AEK_RDM,
1914     })
1915   },
1916   {
1917     "apple-a7",
1918     ARMV8A,
1919     AArch64::ExtensionBitset({
1920       AArch64::AEK_SHA2,
1921       AArch64::AEK_AES,
1922       AArch64::AEK_FP,
1923       AArch64::AEK_SIMD,
1924       AArch64::AEK_PERFMON,
1925     })
1926   },
1927   {
1928     "apple-a10",
1929     ARMV8A,
1930     AArch64::ExtensionBitset({
1931       AArch64::AEK_SHA2,
1932       AArch64::AEK_AES,
1933       AArch64::AEK_FP,
1934       AArch64::AEK_SIMD,
1935       AArch64::AEK_PERFMON,
1936       AArch64::AEK_CRC,
1937       AArch64::AEK_RDM,
1938       AArch64::AEK_PAN,
1939       AArch64::AEK_LOR,
1940       AArch64::AEK_VH,
1941     })
1942   },
1943   {
1944     "apple-a11",
1945     ARMV8_2A,
1946     AArch64::ExtensionBitset({
1947       AArch64::AEK_SHA2,
1948       AArch64::AEK_AES,
1949       AArch64::AEK_FP,
1950       AArch64::AEK_SIMD,
1951       AArch64::AEK_PERFMON,
1952       AArch64::AEK_FP16,
1953       AArch64::AEK_CRC,
1954       AArch64::AEK_LSE,
1955       AArch64::AEK_RAS,
1956       AArch64::AEK_RDM,
1957     })
1958   },
1959   {
1960     "apple-a12",
1961     ARMV8_3A,
1962     AArch64::ExtensionBitset({
1963       AArch64::AEK_SHA2,
1964       AArch64::AEK_AES,
1965       AArch64::AEK_FP,
1966       AArch64::AEK_SIMD,
1967       AArch64::AEK_PERFMON,
1968       AArch64::AEK_FP16,
1969       AArch64::AEK_FCMA,
1970       AArch64::AEK_CRC,
1971       AArch64::AEK_JSCVT,
1972       AArch64::AEK_LSE,
1973       AArch64::AEK_PAUTH,
1974       AArch64::AEK_RAS,
1975       AArch64::AEK_RCPC,
1976       AArch64::AEK_RDM,
1977     })
1978   },
1979   {
1980     "apple-a13",
1981     ARMV8_4A,
1982     AArch64::ExtensionBitset({
1983       AArch64::AEK_SHA2,
1984       AArch64::AEK_AES,
1985       AArch64::AEK_FP,
1986       AArch64::AEK_SIMD,
1987       AArch64::AEK_PERFMON,
1988       AArch64::AEK_FP16,
1989       AArch64::AEK_FP16FML,
1990       AArch64::AEK_SHA3,
1991       AArch64::AEK_FCMA,
1992       AArch64::AEK_CRC,
1993       AArch64::AEK_JSCVT,
1994       AArch64::AEK_LSE,
1995       AArch64::AEK_PAUTH,
1996       AArch64::AEK_RAS,
1997       AArch64::AEK_RCPC,
1998       AArch64::AEK_RDM,
1999       AArch64::AEK_DOTPROD,
2000     })
2001   },
2002   {
2003     "apple-a14",
2004     ARMV8_4A,
2005     AArch64::ExtensionBitset({
2006       AArch64::AEK_SHA2,
2007       AArch64::AEK_AES,
2008       AArch64::AEK_FP,
2009       AArch64::AEK_SIMD,
2010       AArch64::AEK_PERFMON,
2011       AArch64::AEK_FP16,
2012       AArch64::AEK_FP16FML,
2013       AArch64::AEK_SHA3,
2014       AArch64::AEK_ALTERNATIVENZCV,
2015       AArch64::AEK_FRINT3264,
2016       AArch64::AEK_SPECRESTRICT,
2017       AArch64::AEK_SSBS,
2018       AArch64::AEK_SB,
2019       AArch64::AEK_PREDRES,
2020       AArch64::AEK_CCDP,
2021       AArch64::AEK_FCMA,
2022       AArch64::AEK_CRC,
2023       AArch64::AEK_JSCVT,
2024       AArch64::AEK_LSE,
2025       AArch64::AEK_PAUTH,
2026       AArch64::AEK_RAS,
2027       AArch64::AEK_RCPC,
2028       AArch64::AEK_RDM,
2029       AArch64::AEK_DOTPROD,
2030     })
2031   },
2032   {
2033     "apple-a15",
2034     ARMV8_6A,
2035     AArch64::ExtensionBitset({
2036       AArch64::AEK_SHA2,
2037       AArch64::AEK_AES,
2038       AArch64::AEK_FP,
2039       AArch64::AEK_SIMD,
2040       AArch64::AEK_PERFMON,
2041       AArch64::AEK_SHA3,
2042       AArch64::AEK_FP16,
2043       AArch64::AEK_FP16FML,
2044       AArch64::AEK_FCMA,
2045       AArch64::AEK_CRC,
2046       AArch64::AEK_JSCVT,
2047       AArch64::AEK_LSE,
2048       AArch64::AEK_PAUTH,
2049       AArch64::AEK_FPAC,
2050       AArch64::AEK_RAS,
2051       AArch64::AEK_RCPC,
2052       AArch64::AEK_RDM,
2053       AArch64::AEK_BF16,
2054       AArch64::AEK_DOTPROD,
2055       AArch64::AEK_I8MM,
2056       AArch64::AEK_SSBS,
2057     })
2058   },
2059   {
2060     "apple-a16",
2061     ARMV8_6A,
2062     AArch64::ExtensionBitset({
2063       AArch64::AEK_SHA2,
2064       AArch64::AEK_AES,
2065       AArch64::AEK_FP,
2066       AArch64::AEK_SIMD,
2067       AArch64::AEK_PERFMON,
2068       AArch64::AEK_SHA3,
2069       AArch64::AEK_FP16,
2070       AArch64::AEK_FP16FML,
2071       AArch64::AEK_HCX,
2072       AArch64::AEK_FCMA,
2073       AArch64::AEK_CRC,
2074       AArch64::AEK_JSCVT,
2075       AArch64::AEK_LSE,
2076       AArch64::AEK_PAUTH,
2077       AArch64::AEK_FPAC,
2078       AArch64::AEK_RAS,
2079       AArch64::AEK_RCPC,
2080       AArch64::AEK_RDM,
2081       AArch64::AEK_BF16,
2082       AArch64::AEK_DOTPROD,
2083       AArch64::AEK_I8MM,
2084       AArch64::AEK_SSBS,
2085     })
2086   },
2087   {
2088     "apple-a17",
2089     ARMV8_6A,
2090     AArch64::ExtensionBitset({
2091       AArch64::AEK_SHA2,
2092       AArch64::AEK_AES,
2093       AArch64::AEK_FP,
2094       AArch64::AEK_SIMD,
2095       AArch64::AEK_PERFMON,
2096       AArch64::AEK_SHA3,
2097       AArch64::AEK_FP16,
2098       AArch64::AEK_FP16FML,
2099       AArch64::AEK_HCX,
2100       AArch64::AEK_FCMA,
2101       AArch64::AEK_CRC,
2102       AArch64::AEK_JSCVT,
2103       AArch64::AEK_LSE,
2104       AArch64::AEK_PAUTH,
2105       AArch64::AEK_FPAC,
2106       AArch64::AEK_RAS,
2107       AArch64::AEK_RCPC,
2108       AArch64::AEK_RDM,
2109       AArch64::AEK_BF16,
2110       AArch64::AEK_DOTPROD,
2111       AArch64::AEK_I8MM,
2112       AArch64::AEK_SSBS,
2113     })
2114   },
2115   {
2116     "apple-m4",
2117     ARMV8_7A,
2118     AArch64::ExtensionBitset({
2119       AArch64::AEK_SHA2,
2120       AArch64::AEK_FP,
2121       AArch64::AEK_SIMD,
2122       AArch64::AEK_PERFMON,
2123       AArch64::AEK_SHA3,
2124       AArch64::AEK_FP16,
2125       AArch64::AEK_FP16FML,
2126       AArch64::AEK_AES,
2127       AArch64::AEK_BF16,
2128       AArch64::AEK_SME,
2129       AArch64::AEK_SME2,
2130       AArch64::AEK_SMEF64F64,
2131       AArch64::AEK_SMEI16I64,
2132       AArch64::AEK_FCMA,
2133       AArch64::AEK_CRC,
2134       AArch64::AEK_JSCVT,
2135       AArch64::AEK_LSE,
2136       AArch64::AEK_PAUTH,
2137       AArch64::AEK_FPAC,
2138       AArch64::AEK_RAS,
2139       AArch64::AEK_RCPC,
2140       AArch64::AEK_RDM,
2141       AArch64::AEK_DOTPROD,
2142       AArch64::AEK_I8MM,
2143     })
2144   },
2145   {
2146     "a64fx",
2147     ARMV8_2A,
2148     AArch64::ExtensionBitset({
2149       AArch64::AEK_FP,
2150       AArch64::AEK_SIMD,
2151       AArch64::AEK_SHA2,
2152       AArch64::AEK_PERFMON,
2153       AArch64::AEK_FP16,
2154       AArch64::AEK_SVE,
2155       AArch64::AEK_FCMA,
2156       AArch64::AEK_AES,
2157       AArch64::AEK_CRC,
2158       AArch64::AEK_LSE,
2159       AArch64::AEK_RAS,
2160       AArch64::AEK_RDM,
2161     })
2162   },
2163   {
2164     "fujitsu-monaka",
2165     ARMV9_3A,
2166     AArch64::ExtensionBitset({
2167       AArch64::AEK_PERFMON,
2168       AArch64::AEK_CCIDX,
2169       AArch64::AEK_FPAC,
2170       AArch64::AEK_FP16FML,
2171       AArch64::AEK_RAND,
2172       AArch64::AEK_SSBS,
2173       AArch64::AEK_LS64,
2174       AArch64::AEK_CLRBHB,
2175       AArch64::AEK_SPECRES2,
2176       AArch64::AEK_SVEAES,
2177       AArch64::AEK_SVE2SM4,
2178       AArch64::AEK_SVE2SHA3,
2179       AArch64::AEK_SVE2,
2180       AArch64::AEK_SVEBITPERM,
2181       AArch64::AEK_ETE,
2182       AArch64::AEK_MEC,
2183       AArch64::AEK_FAMINMAX,
2184       AArch64::AEK_FP8DOT2,
2185       AArch64::AEK_FP8DOT4,
2186       AArch64::AEK_FP8FMA,
2187       AArch64::AEK_LUT,
2188     })
2189   },
2190   {
2191     "carmel",
2192     ARMV8_2A,
2193     AArch64::ExtensionBitset({
2194       AArch64::AEK_SIMD,
2195       AArch64::AEK_SHA2,
2196       AArch64::AEK_AES,
2197       AArch64::AEK_FP16,
2198       AArch64::AEK_CRC,
2199       AArch64::AEK_LSE,
2200       AArch64::AEK_RAS,
2201       AArch64::AEK_RDM,
2202       AArch64::AEK_FP,
2203     })
2204   },
2205   {
2206     "ampere1",
2207     ARMV8_6A,
2208     AArch64::ExtensionBitset({
2209       AArch64::AEK_SIMD,
2210       AArch64::AEK_PERFMON,
2211       AArch64::AEK_SSBS,
2212       AArch64::AEK_RAND,
2213       AArch64::AEK_SB,
2214       AArch64::AEK_SHA2,
2215       AArch64::AEK_SHA3,
2216       AArch64::AEK_AES,
2217       AArch64::AEK_FP16,
2218       AArch64::AEK_BF16,
2219       AArch64::AEK_FCMA,
2220       AArch64::AEK_CRC,
2221       AArch64::AEK_DOTPROD,
2222       AArch64::AEK_FP,
2223       AArch64::AEK_I8MM,
2224       AArch64::AEK_JSCVT,
2225       AArch64::AEK_CCIDX,
2226       AArch64::AEK_LSE,
2227       AArch64::AEK_PAUTH,
2228       AArch64::AEK_RAS,
2229       AArch64::AEK_RCPC,
2230       AArch64::AEK_RDM,
2231     })
2232   },
2233   {
2234     "ampere1a",
2235     ARMV8_6A,
2236     AArch64::ExtensionBitset({
2237       AArch64::AEK_SIMD,
2238       AArch64::AEK_PERFMON,
2239       AArch64::AEK_MTE,
2240       AArch64::AEK_SSBS,
2241       AArch64::AEK_RAND,
2242       AArch64::AEK_SB,
2243       AArch64::AEK_SM4,
2244       AArch64::AEK_SHA2,
2245       AArch64::AEK_SHA3,
2246       AArch64::AEK_AES,
2247       AArch64::AEK_FP16,
2248       AArch64::AEK_BF16,
2249       AArch64::AEK_FCMA,
2250       AArch64::AEK_CRC,
2251       AArch64::AEK_DOTPROD,
2252       AArch64::AEK_FP,
2253       AArch64::AEK_I8MM,
2254       AArch64::AEK_JSCVT,
2255       AArch64::AEK_LSE,
2256       AArch64::AEK_PAUTH,
2257       AArch64::AEK_RAS,
2258       AArch64::AEK_RCPC,
2259       AArch64::AEK_CCIDX,
2260       AArch64::AEK_RDM,
2261     })
2262   },
2263   {
2264     "ampere1b",
2265     ARMV8_7A,
2266     AArch64::ExtensionBitset({
2267       AArch64::AEK_SIMD,
2268       AArch64::AEK_PERFMON,
2269       AArch64::AEK_MTE,
2270       AArch64::AEK_SSBS,
2271       AArch64::AEK_RAND,
2272       AArch64::AEK_SB,
2273       AArch64::AEK_SM4,
2274       AArch64::AEK_SHA2,
2275       AArch64::AEK_SHA3,
2276       AArch64::AEK_AES,
2277       AArch64::AEK_CSSC,
2278       AArch64::AEK_WFXT,
2279       AArch64::AEK_FP16,
2280       AArch64::AEK_BF16,
2281       AArch64::AEK_FCMA,
2282       AArch64::AEK_CRC,
2283       AArch64::AEK_DOTPROD,
2284       AArch64::AEK_FP,
2285       AArch64::AEK_I8MM,
2286       AArch64::AEK_JSCVT,
2287       AArch64::AEK_LSE,
2288       AArch64::AEK_PAUTH,
2289       AArch64::AEK_RAS,
2290       AArch64::AEK_RCPC,
2291       AArch64::AEK_CCIDX,
2292       AArch64::AEK_RDM,
2293     })
2294   },
2295   {
2296     "oryon-1",
2297     ARMV8_6A,
2298     AArch64::ExtensionBitset({
2299       AArch64::AEK_SIMD,
2300       AArch64::AEK_PERFMON,
2301       AArch64::AEK_RAND,
2302       AArch64::AEK_PAUTH,
2303       AArch64::AEK_SM4,
2304       AArch64::AEK_SHA2,
2305       AArch64::AEK_SHA3,
2306       AArch64::AEK_AES,
2307       AArch64::AEK_PROFILE,
2308       AArch64::AEK_BF16,
2309       AArch64::AEK_FCMA,
2310       AArch64::AEK_CRC,
2311       AArch64::AEK_DOTPROD,
2312       AArch64::AEK_FP,
2313       AArch64::AEK_I8MM,
2314       AArch64::AEK_SSBS,
2315       AArch64::AEK_CCIDX,
2316       AArch64::AEK_JSCVT,
2317       AArch64::AEK_LSE,
2318       AArch64::AEK_RAS,
2319       AArch64::AEK_RCPC,
2320       AArch64::AEK_RDM,
2321     })
2322   },
2323 };
2324 #undef EMIT_CPU_INFO
2325 #endif // EMIT_CPU_INFO
2326