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