diff --git a/lib/std/target.zig b/lib/std/target.zig index ad2ca59ee8..8a86af6733 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -862,14 +862,14 @@ pub const Feature = struct { name: []const u8, description: []const u8, - subfeatures: []*const Feature, + dependencies: []*const Feature, }; pub const Cpu = struct { name: []const u8, llvm_name: []const u8, - subfeatures: []*const Feature, + dependencies: []*const Feature, }; pub fn getFeaturesForArch(arch: @TagType(Target.Arch)) []*const Feature { diff --git a/lib/std/target/aarch64.zig b/lib/std/target/aarch64.zig index b907d96b7d..85ef813dea 100644 --- a/lib/std/target/aarch64.zig +++ b/lib/std/target/aarch64.zig @@ -4,7 +4,7 @@ const Cpu = @import("std").target.Cpu; pub const feature_aes = Feature{ .name = "aes", .description = "Enable AES support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -12,154 +12,154 @@ pub const feature_aes = Feature{ pub const feature_am = Feature{ .name = "am", .description = "Enable v8.4-A Activity Monitors extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_aggressiveFma = Feature{ .name = "aggressive-fma", .description = "Enable Aggressive FMA for floating-point.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_altnzcv = Feature{ .name = "altnzcv", .description = "Enable alternative NZCV format for floating point comparisons", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_alternateSextloadCvtF32Pattern = Feature{ .name = "alternate-sextload-cvt-f32-pattern", .description = "Use alternative pattern for sextload convert to f32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_arithBccFusion = Feature{ .name = "arith-bcc-fusion", .description = "CPU fuses arithmetic+bcc operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_arithCbzFusion = Feature{ .name = "arith-cbz-fusion", .description = "CPU fuses arithmetic + cbz/cbnz operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_balanceFpOps = Feature{ .name = "balance-fp-ops", .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bti = Feature{ .name = "bti", .description = "Enable Branch Target Identification", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ccidx = Feature{ .name = "ccidx", .description = "Enable v8.3-A Extend of the CCSIDR number of sets", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ccpp = Feature{ .name = "ccpp", .description = "Enable v8.2 data Cache Clean to Point of Persistence", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_crc = Feature{ .name = "crc", .description = "Enable ARMv8 CRC-32 checksum instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ccdp = Feature{ .name = "ccdp", .description = "Enable v8.5 Cache Clean to Point of Deep Persistence", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX8 = Feature{ .name = "call-saved-x8", .description = "Make X8 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX9 = Feature{ .name = "call-saved-x9", .description = "Make X9 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX10 = Feature{ .name = "call-saved-x10", .description = "Make X10 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX11 = Feature{ .name = "call-saved-x11", .description = "Make X11 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX12 = Feature{ .name = "call-saved-x12", .description = "Make X12 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX13 = Feature{ .name = "call-saved-x13", .description = "Make X13 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX14 = Feature{ .name = "call-saved-x14", .description = "Make X14 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX15 = Feature{ .name = "call-saved-x15", .description = "Make X15 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_callSavedX18 = Feature{ .name = "call-saved-x18", .description = "Make X18 callee saved.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_complxnum = Feature{ .name = "complxnum", .description = "Enable v8.3-A Floating-point complex number support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -167,7 +167,7 @@ pub const feature_complxnum = Feature{ pub const feature_crypto = Feature{ .name = "crypto", .description = "Enable cryptographic instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -175,35 +175,35 @@ pub const feature_crypto = Feature{ pub const feature_customCheapAsMove = Feature{ .name = "custom-cheap-as-move", .description = "Use custom handling of cheap instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dit = Feature{ .name = "dit", .description = "Enable v8.4-A Data Independent Timing instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_disableLatencySchedHeuristic = Feature{ .name = "disable-latency-sched-heuristic", .description = "Disable latency scheduling heuristic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dotprod = Feature{ .name = "dotprod", .description = "Enable dot product support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ete = Feature{ .name = "ete", .description = "Enable Embedded Trace Extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_trbe, }, }; @@ -211,7 +211,7 @@ pub const feature_ete = Feature{ pub const feature_exynosCheapAsMove = Feature{ .name = "exynos-cheap-as-move", .description = "Use Exynos specific handling of cheap instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_customCheapAsMove, }, }; @@ -219,14 +219,14 @@ pub const feature_exynosCheapAsMove = Feature{ pub const feature_fmi = Feature{ .name = "fmi", .description = "Enable v8.4-A Flag Manipulation Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp16fml = Feature{ .name = "fp16fml", .description = "Enable FP16 FML instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -234,28 +234,28 @@ pub const feature_fp16fml = Feature{ pub const feature_fpArmv8 = Feature{ .name = "fp-armv8", .description = "Enable ARMv8 FP", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fptoint = Feature{ .name = "fptoint", .description = "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", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_force32bitJumpTables = Feature{ .name = "force-32bit-jump-tables", .description = "Force jump table entries to be 32-bits wide except at MinSize", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fullfp16 = Feature{ .name = "fullfp16", .description = "Full FP16", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -263,49 +263,49 @@ pub const feature_fullfp16 = Feature{ pub const feature_fuseAes = Feature{ .name = "fuse-aes", .description = "CPU fuses AES crypto operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseAddress = Feature{ .name = "fuse-address", .description = "CPU fuses address generation and memory operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseArithLogic = Feature{ .name = "fuse-arith-logic", .description = "CPU fuses arithmetic and logic operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseCsel = Feature{ .name = "fuse-csel", .description = "CPU fuses conditional select operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseCryptoEor = Feature{ .name = "fuse-crypto-eor", .description = "CPU fuses AES/PMULL and EOR operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseLiterals = Feature{ .name = "fuse-literals", .description = "CPU fuses literal generation operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_jsconv = Feature{ .name = "jsconv", .description = "Enable v8.3-A JavaScript FP conversion enchancement", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -313,42 +313,42 @@ pub const feature_jsconv = Feature{ pub const feature_lor = Feature{ .name = "lor", .description = "Enables ARM v8.1 Limited Ordering Regions extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lse = Feature{ .name = "lse", .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lslFast = Feature{ .name = "lsl-fast", .description = "CPU has a fastpath logical shift of up to 3 places", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mpam = Feature{ .name = "mpam", .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mte = Feature{ .name = "mte", .description = "Enable Memory Tagging Extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_neon = Feature{ .name = "neon", .description = "Enable Advanced SIMD instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -356,35 +356,35 @@ pub const feature_neon = Feature{ pub const feature_nv = Feature{ .name = "nv", .description = "Enable v8.4-A Nested Virtualization Enchancement", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noNegImmediates = Feature{ .name = "no-neg-immediates", .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_pa = Feature{ .name = "pa", .description = "Enable v8.3-A Pointer Authentication enchancement", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_pan = Feature{ .name = "pan", .description = "Enables ARM v8.1 Privileged Access-Never extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_panRwv = Feature{ .name = "pan-rwv", .description = "Enable v8.2 PAN s1e1R and s1e1W Variants", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_pan, }, }; @@ -392,49 +392,49 @@ pub const feature_panRwv = Feature{ pub const feature_perfmon = Feature{ .name = "perfmon", .description = "Enable ARMv8 PMUv3 Performance Monitors extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_usePostraScheduler = Feature{ .name = "use-postra-scheduler", .description = "Schedule again after register allocation", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_predres = Feature{ .name = "predres", .description = "Enable v8.5a execution and data prediction invalidation instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_predictableSelectExpensive = Feature{ .name = "predictable-select-expensive", .description = "Prefer likely predicted branches over selects", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_uaops = Feature{ .name = "uaops", .description = "Enable v8.2 UAO PState", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ras = Feature{ .name = "ras", .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rasv8_4 = Feature{ .name = "rasv8_4", .description = "Enable v8.4-A Reliability, Availability and Serviceability extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ras, }, }; @@ -442,14 +442,14 @@ pub const feature_rasv8_4 = Feature{ pub const feature_rcpc = Feature{ .name = "rcpc", .description = "Enable support for RCPC extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rcpcImmo = Feature{ .name = "rcpc-immo", .description = "Enable v8.4-A RCPC instructions with Immediate Offsets", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_rcpc, }, }; @@ -457,203 +457,203 @@ pub const feature_rcpcImmo = Feature{ pub const feature_rdm = Feature{ .name = "rdm", .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rand = Feature{ .name = "rand", .description = "Enable Random Number generation instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX1 = Feature{ .name = "reserve-x1", .description = "Reserve X1, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX2 = Feature{ .name = "reserve-x2", .description = "Reserve X2, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX3 = Feature{ .name = "reserve-x3", .description = "Reserve X3, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX4 = Feature{ .name = "reserve-x4", .description = "Reserve X4, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX5 = Feature{ .name = "reserve-x5", .description = "Reserve X5, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX6 = Feature{ .name = "reserve-x6", .description = "Reserve X6, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX7 = Feature{ .name = "reserve-x7", .description = "Reserve X7, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX9 = Feature{ .name = "reserve-x9", .description = "Reserve X9, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX10 = Feature{ .name = "reserve-x10", .description = "Reserve X10, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX11 = Feature{ .name = "reserve-x11", .description = "Reserve X11, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX12 = Feature{ .name = "reserve-x12", .description = "Reserve X12, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX13 = Feature{ .name = "reserve-x13", .description = "Reserve X13, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX14 = Feature{ .name = "reserve-x14", .description = "Reserve X14, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX15 = Feature{ .name = "reserve-x15", .description = "Reserve X15, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX18 = Feature{ .name = "reserve-x18", .description = "Reserve X18, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX20 = Feature{ .name = "reserve-x20", .description = "Reserve X20, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX21 = Feature{ .name = "reserve-x21", .description = "Reserve X21, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX22 = Feature{ .name = "reserve-x22", .description = "Reserve X22, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX23 = Feature{ .name = "reserve-x23", .description = "Reserve X23, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX24 = Feature{ .name = "reserve-x24", .description = "Reserve X24, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX25 = Feature{ .name = "reserve-x25", .description = "Reserve X25, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX26 = Feature{ .name = "reserve-x26", .description = "Reserve X26, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX27 = Feature{ .name = "reserve-x27", .description = "Reserve X27, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveX28 = Feature{ .name = "reserve-x28", .description = "Reserve X28, making it unavailable as a GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sb = Feature{ .name = "sb", .description = "Enable v8.5 Speculation Barrier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sel2 = Feature{ .name = "sel2", .description = "Enable v8.4-A Secure Exception Level 2 extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sha2 = Feature{ .name = "sha2", .description = "Enable SHA1 and SHA256 support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -661,7 +661,7 @@ pub const feature_sha2 = Feature{ pub const feature_sha3 = Feature{ .name = "sha3", .description = "Enable SHA512 and SHA3 support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -669,7 +669,7 @@ pub const feature_sha3 = Feature{ pub const feature_sm4 = Feature{ .name = "sm4", .description = "Enable SM3 and SM4 support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, }, }; @@ -677,28 +677,28 @@ pub const feature_sm4 = Feature{ pub const feature_spe = Feature{ .name = "spe", .description = "Enable Statistical Profiling extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ssbs = Feature{ .name = "ssbs", .description = "Enable Speculative Store Bypass Safe bit", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sve = Feature{ .name = "sve", .description = "Enable Scalable Vector Extension (SVE) instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sve2 = Feature{ .name = "sve2", .description = "Enable Scalable Vector Extension 2 (SVE2) instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sve, }, }; @@ -706,7 +706,7 @@ pub const feature_sve2 = Feature{ pub const feature_sve2Aes = Feature{ .name = "sve2-aes", .description = "Enable AES SVE2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, &feature_sve, }, @@ -715,7 +715,7 @@ pub const feature_sve2Aes = Feature{ pub const feature_sve2Bitperm = Feature{ .name = "sve2-bitperm", .description = "Enable bit permutation SVE2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sve, }, }; @@ -723,7 +723,7 @@ pub const feature_sve2Bitperm = Feature{ pub const feature_sve2Sha3 = Feature{ .name = "sve2-sha3", .description = "Enable SHA3 SVE2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, &feature_sve, }, @@ -732,7 +732,7 @@ pub const feature_sve2Sha3 = Feature{ pub const feature_sve2Sm4 = Feature{ .name = "sve2-sm4", .description = "Enable SM4 SVE2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpArmv8, &feature_sve, }, @@ -741,126 +741,126 @@ pub const feature_sve2Sm4 = Feature{ pub const feature_slowMisaligned128store = Feature{ .name = "slow-misaligned-128store", .description = "Misaligned 128 bit stores are slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowPaired128 = Feature{ .name = "slow-paired-128", .description = "Paired 128 bit loads and stores are slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowStrqroStore = Feature{ .name = "slow-strqro-store", .description = "STR of Q register with register offset is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_specrestrict = Feature{ .name = "specrestrict", .description = "Enable architectural speculation restriction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_strictAlign = Feature{ .name = "strict-align", .description = "Disallow all unaligned memory access", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tlbRmi = Feature{ .name = "tlb-rmi", .description = "Enable v8.4-A TLB Range and Maintenance Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tme = Feature{ .name = "tme", .description = "Enable Transactional Memory Extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tracev84 = Feature{ .name = "tracev8.4", .description = "Enable v8.4-A Trace extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_trbe = Feature{ .name = "trbe", .description = "Enable Trace Buffer Extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_taggedGlobals = Feature{ .name = "tagged-globals", .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useAa = Feature{ .name = "use-aa", .description = "Use alias analysis during codegen", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tpidrEl1 = Feature{ .name = "tpidr-el1", .description = "Permit use of TPIDR_EL1 for the TLS base", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tpidrEl2 = Feature{ .name = "tpidr-el2", .description = "Permit use of TPIDR_EL2 for the TLS base", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tpidrEl3 = Feature{ .name = "tpidr-el3", .description = "Permit use of TPIDR_EL3 for the TLS base", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useReciprocalSquareRoot = Feature{ .name = "use-reciprocal-square-root", .description = "Use the reciprocal square root approximation", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vh = Feature{ .name = "vh", .description = "Enables ARM v8.1 Virtual Host extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_zcm = Feature{ .name = "zcm", .description = "Has zero-cycle register moves", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_zcz = Feature{ .name = "zcz", .description = "Has zero-cycle zeroing instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_zczGp, &feature_zczFp, }, @@ -869,21 +869,21 @@ pub const feature_zcz = Feature{ pub const feature_zczFp = Feature{ .name = "zcz-fp", .description = "Has zero-cycle zeroing instructions for FP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_zczFpWorkaround = Feature{ .name = "zcz-fp-workaround", .description = "The zero-cycle floating-point zeroing instruction has a bug", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_zczGp = Feature{ .name = "zcz-gp", .description = "Has zero-cycle zeroing instructions for generic registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -1016,80 +1016,80 @@ pub const features = &[_]*const Feature { pub const cpu_appleLatest = Cpu{ .name = "apple-latest", .llvm_name = "apple-latest", - .subfeatures = &[_]*const Feature { - &feature_arithCbzFusion, + .dependencies = &[_]*const Feature { &feature_alternateSextloadCvtF32Pattern, - &feature_zczFpWorkaround, &feature_fuseCryptoEor, + &feature_fuseAes, + &feature_zczGp, + &feature_zczFpWorkaround, &feature_disableLatencySchedHeuristic, - &feature_zcm, - &feature_zczFp, &feature_perfmon, &feature_fpArmv8, - &feature_fuseAes, &feature_arithBccFusion, - &feature_zczGp, + &feature_arithCbzFusion, + &feature_zczFp, + &feature_zcm, }, }; pub const cpu_cortexA35 = Cpu{ .name = "cortex-a35", .llvm_name = "cortex-a35", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { + &feature_crc, &feature_fpArmv8, &feature_perfmon, - &feature_crc, }, }; pub const cpu_cortexA53 = Cpu{ .name = "cortex-a53", .llvm_name = "cortex-a53", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_perfmon, - &feature_fuseAes, - &feature_useAa, - &feature_fpArmv8, - &feature_balanceFpOps, + .dependencies = &[_]*const Feature { &feature_customCheapAsMove, + &feature_fuseAes, + &feature_usePostraScheduler, + &feature_perfmon, + &feature_fpArmv8, + &feature_crc, + &feature_balanceFpOps, + &feature_useAa, }, }; pub const cpu_cortexA55 = Cpu{ .name = "cortex-a55", .llvm_name = "cortex-a55", - .subfeatures = &[_]*const Feature { - &feature_crc, - &feature_dotprod, - &feature_ccpp, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_fuseAes, + &feature_lse, &feature_perfmon, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_fuseAes, + &feature_rcpc, + &feature_dotprod, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cortexA57 = Cpu{ .name = "cortex-a57", .llvm_name = "cortex-a57", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_fuseLiterals, - &feature_perfmon, - &feature_fuseAes, - &feature_fpArmv8, - &feature_balanceFpOps, + .dependencies = &[_]*const Feature { &feature_customCheapAsMove, + &feature_fuseAes, + &feature_usePostraScheduler, + &feature_perfmon, + &feature_fpArmv8, + &feature_crc, + &feature_balanceFpOps, + &feature_fuseLiterals, &feature_predictableSelectExpensive, }, }; @@ -1097,196 +1097,196 @@ pub const cpu_cortexA57 = Cpu{ pub const cpu_cortexA65 = Cpu{ .name = "cortex-a65", .llvm_name = "cortex-a65", - .subfeatures = &[_]*const Feature { - &feature_ssbs, - &feature_dotprod, - &feature_crc, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, - &feature_ras, - &feature_vh, - &feature_fpArmv8, &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_ras, + &feature_lor, + &feature_vh, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cortexA65ae = Cpu{ .name = "cortex-a65ae", .llvm_name = "cortex-a65ae", - .subfeatures = &[_]*const Feature { - &feature_ssbs, - &feature_dotprod, - &feature_crc, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, - &feature_ras, - &feature_vh, - &feature_fpArmv8, &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_ras, + &feature_lor, + &feature_vh, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cortexA72 = Cpu{ .name = "cortex-a72", .llvm_name = "cortex-a72", - .subfeatures = &[_]*const Feature { - &feature_fpArmv8, - &feature_fuseAes, - &feature_perfmon, + .dependencies = &[_]*const Feature { &feature_crc, + &feature_fuseAes, + &feature_fpArmv8, + &feature_perfmon, }, }; pub const cpu_cortexA73 = Cpu{ .name = "cortex-a73", .llvm_name = "cortex-a73", - .subfeatures = &[_]*const Feature { - &feature_fpArmv8, - &feature_fuseAes, - &feature_perfmon, + .dependencies = &[_]*const Feature { &feature_crc, + &feature_fuseAes, + &feature_fpArmv8, + &feature_perfmon, }, }; pub const cpu_cortexA75 = Cpu{ .name = "cortex-a75", .llvm_name = "cortex-a75", - .subfeatures = &[_]*const Feature { - &feature_crc, - &feature_dotprod, - &feature_ccpp, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_fuseAes, + &feature_lse, &feature_perfmon, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_fuseAes, + &feature_rcpc, + &feature_dotprod, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cortexA76 = Cpu{ .name = "cortex-a76", .llvm_name = "cortex-a76", - .subfeatures = &[_]*const Feature { - &feature_crc, - &feature_ssbs, - &feature_dotprod, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_ccpp, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cortexA76ae = Cpu{ .name = "cortex-a76ae", .llvm_name = "cortex-a76ae", - .subfeatures = &[_]*const Feature { - &feature_crc, - &feature_ssbs, - &feature_dotprod, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_ccpp, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_cyclone = Cpu{ .name = "cyclone", .llvm_name = "cyclone", - .subfeatures = &[_]*const Feature { - &feature_arithCbzFusion, + .dependencies = &[_]*const Feature { &feature_alternateSextloadCvtF32Pattern, - &feature_zczFpWorkaround, &feature_fuseCryptoEor, + &feature_fuseAes, + &feature_zczGp, + &feature_zczFpWorkaround, &feature_disableLatencySchedHeuristic, - &feature_zcm, - &feature_zczFp, &feature_perfmon, &feature_fpArmv8, - &feature_fuseAes, &feature_arithBccFusion, - &feature_zczGp, + &feature_arithCbzFusion, + &feature_zczFp, + &feature_zcm, }, }; pub const cpu_exynosM1 = Cpu{ .name = "exynos-m1", .llvm_name = "exynos-m1", - .subfeatures = &[_]*const Feature { - &feature_useReciprocalSquareRoot, - &feature_usePostraScheduler, - &feature_crc, - &feature_zczFp, - &feature_slowPaired128, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_fuseAes, &feature_force32bitJumpTables, - &feature_slowMisaligned128store, + &feature_usePostraScheduler, &feature_perfmon, &feature_fpArmv8, - &feature_fuseAes, - &feature_customCheapAsMove, + &feature_slowMisaligned128store, + &feature_useReciprocalSquareRoot, + &feature_crc, + &feature_slowPaired128, + &feature_zczFp, }, }; pub const cpu_exynosM2 = Cpu{ .name = "exynos-m2", .llvm_name = "exynos-m2", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_zczFp, - &feature_slowPaired128, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_fuseAes, &feature_force32bitJumpTables, - &feature_slowMisaligned128store, + &feature_usePostraScheduler, &feature_perfmon, &feature_fpArmv8, - &feature_fuseAes, - &feature_customCheapAsMove, + &feature_slowMisaligned128store, + &feature_crc, + &feature_slowPaired128, + &feature_zczFp, }, }; pub const cpu_exynosM3 = Cpu{ .name = "exynos-m3", .llvm_name = "exynos-m3", - .subfeatures = &[_]*const Feature { - &feature_fuseAddress, - &feature_usePostraScheduler, - &feature_crc, - &feature_zczFp, - &feature_fuseLiterals, - &feature_lslFast, - &feature_fuseCsel, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_fuseAes, &feature_force32bitJumpTables, + &feature_usePostraScheduler, &feature_perfmon, &feature_fpArmv8, - &feature_fuseAes, - &feature_customCheapAsMove, + &feature_fuseAddress, + &feature_fuseCsel, + &feature_lslFast, + &feature_zczFp, + &feature_crc, + &feature_fuseLiterals, &feature_predictableSelectExpensive, }, }; @@ -1294,81 +1294,81 @@ pub const cpu_exynosM3 = Cpu{ pub const cpu_exynosM4 = Cpu{ .name = "exynos-m4", .llvm_name = "exynos-m4", - .subfeatures = &[_]*const Feature { - &feature_fuseLiterals, - &feature_uaops, - &feature_fuseCsel, - &feature_force32bitJumpTables, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_lse, + &feature_perfmon, + &feature_fuseAddress, + &feature_dotprod, + &feature_arithCbzFusion, + &feature_zczFp, &feature_fuseArithLogic, + &feature_ccpp, + &feature_fuseAes, + &feature_fuseCsel, + &feature_rdm, + &feature_zczGp, + &feature_force32bitJumpTables, + &feature_usePostraScheduler, + &feature_lslFast, + &feature_crc, + &feature_fuseLiterals, + &feature_pan, + &feature_fpArmv8, + &feature_lor, + &feature_ras, &feature_vh, &feature_arithBccFusion, - &feature_zczGp, - &feature_usePostraScheduler, - &feature_dotprod, - &feature_lse, - &feature_pan, - &feature_ras, - &feature_fuseAes, - &feature_fuseAddress, - &feature_rdm, - &feature_arithCbzFusion, - &feature_crc, - &feature_zczFp, - &feature_lslFast, - &feature_lor, - &feature_perfmon, - &feature_fpArmv8, - &feature_ccpp, - &feature_customCheapAsMove, + &feature_uaops, }, }; pub const cpu_exynosM5 = Cpu{ .name = "exynos-m5", .llvm_name = "exynos-m5", - .subfeatures = &[_]*const Feature { - &feature_fuseLiterals, - &feature_uaops, - &feature_fuseCsel, - &feature_force32bitJumpTables, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_lse, + &feature_perfmon, + &feature_fuseAddress, + &feature_dotprod, + &feature_arithCbzFusion, + &feature_zczFp, &feature_fuseArithLogic, + &feature_ccpp, + &feature_fuseAes, + &feature_fuseCsel, + &feature_rdm, + &feature_zczGp, + &feature_force32bitJumpTables, + &feature_usePostraScheduler, + &feature_lslFast, + &feature_crc, + &feature_fuseLiterals, + &feature_pan, + &feature_fpArmv8, + &feature_lor, + &feature_ras, &feature_vh, &feature_arithBccFusion, - &feature_zczGp, - &feature_usePostraScheduler, - &feature_dotprod, - &feature_lse, - &feature_pan, - &feature_ras, - &feature_fuseAes, - &feature_fuseAddress, - &feature_rdm, - &feature_arithCbzFusion, - &feature_crc, - &feature_zczFp, - &feature_lslFast, - &feature_lor, - &feature_perfmon, - &feature_fpArmv8, - &feature_ccpp, - &feature_customCheapAsMove, + &feature_uaops, }, }; pub const cpu_falkor = Cpu{ .name = "falkor", .llvm_name = "falkor", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_zczFp, - &feature_lslFast, - &feature_slowStrqroStore, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, &feature_rdm, + &feature_zczGp, + &feature_usePostraScheduler, &feature_perfmon, &feature_fpArmv8, - &feature_zczGp, - &feature_customCheapAsMove, + &feature_lslFast, + &feature_zczFp, + &feature_crc, + &feature_slowStrqroStore, &feature_predictableSelectExpensive, }, }; @@ -1376,7 +1376,7 @@ pub const cpu_falkor = Cpu{ pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_trbe, &feature_ete, &feature_fpArmv8, @@ -1390,15 +1390,15 @@ pub const cpu_generic = Cpu{ pub const cpu_kryo = Cpu{ .name = "kryo", .llvm_name = "kryo", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, + &feature_zczGp, &feature_usePostraScheduler, - &feature_crc, - &feature_zczFp, - &feature_lslFast, &feature_perfmon, &feature_fpArmv8, - &feature_zczGp, - &feature_customCheapAsMove, + &feature_lslFast, + &feature_zczFp, + &feature_crc, &feature_predictableSelectExpensive, }, }; @@ -1406,89 +1406,89 @@ pub const cpu_kryo = Cpu{ pub const cpu_neoverseE1 = Cpu{ .name = "neoverse-e1", .llvm_name = "neoverse-e1", - .subfeatures = &[_]*const Feature { - &feature_crc, - &feature_ssbs, - &feature_dotprod, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_ccpp, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, }, }; pub const cpu_neoverseN1 = Cpu{ .name = "neoverse-n1", .llvm_name = "neoverse-n1", - .subfeatures = &[_]*const Feature { - &feature_ssbs, - &feature_dotprod, - &feature_crc, - &feature_uaops, - &feature_rcpc, - &feature_lse, - &feature_spe, - &feature_lor, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, + &feature_ccpp, + &feature_lse, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_ccpp, + &feature_rcpc, + &feature_dotprod, + &feature_ssbs, + &feature_uaops, + &feature_crc, + &feature_pan, + &feature_spe, }, }; pub const cpu_saphira = Cpu{ .name = "saphira", .llvm_name = "saphira", - .subfeatures = &[_]*const Feature { - &feature_uaops, - &feature_vh, - &feature_nv, - &feature_zczGp, - &feature_mpam, - &feature_predictableSelectExpensive, - &feature_am, - &feature_usePostraScheduler, - &feature_dotprod, - &feature_rcpc, - &feature_lse, - &feature_pan, - &feature_ras, - &feature_tlbRmi, - &feature_sel2, - &feature_rdm, - &feature_ccidx, - &feature_dit, - &feature_crc, - &feature_zczFp, - &feature_lslFast, - &feature_fmi, - &feature_spe, - &feature_lor, - &feature_perfmon, - &feature_fpArmv8, - &feature_ccpp, - &feature_tracev84, + .dependencies = &[_]*const Feature { &feature_customCheapAsMove, + &feature_lse, + &feature_fmi, + &feature_perfmon, + &feature_sel2, + &feature_dotprod, + &feature_am, + &feature_zczFp, + &feature_mpam, + &feature_ccpp, + &feature_dit, + &feature_tracev84, + &feature_spe, + &feature_rdm, + &feature_zczGp, + &feature_usePostraScheduler, + &feature_nv, + &feature_tlbRmi, + &feature_lslFast, + &feature_crc, + &feature_pan, + &feature_ccidx, + &feature_fpArmv8, + &feature_ras, + &feature_lor, + &feature_vh, + &feature_rcpc, + &feature_uaops, &feature_pa, + &feature_predictableSelectExpensive, }, }; pub const cpu_thunderx = Cpu{ .name = "thunderx", .llvm_name = "thunderx", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_usePostraScheduler, - &feature_crc, &feature_perfmon, &feature_fpArmv8, + &feature_crc, &feature_predictableSelectExpensive, }, }; @@ -1496,17 +1496,17 @@ pub const cpu_thunderx = Cpu{ pub const cpu_thunderx2t99 = Cpu{ .name = "thunderx2t99", .llvm_name = "thunderx2t99", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_lse, - &feature_lor, - &feature_aggressiveFma, - &feature_pan, + .dependencies = &[_]*const Feature { &feature_rdm, - &feature_vh, + &feature_lse, + &feature_usePostraScheduler, + &feature_aggressiveFma, &feature_fpArmv8, + &feature_lor, + &feature_vh, &feature_arithBccFusion, + &feature_crc, + &feature_pan, &feature_predictableSelectExpensive, }, }; @@ -1514,11 +1514,11 @@ pub const cpu_thunderx2t99 = Cpu{ pub const cpu_thunderxt81 = Cpu{ .name = "thunderxt81", .llvm_name = "thunderxt81", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_usePostraScheduler, - &feature_crc, &feature_perfmon, &feature_fpArmv8, + &feature_crc, &feature_predictableSelectExpensive, }, }; @@ -1526,11 +1526,11 @@ pub const cpu_thunderxt81 = Cpu{ pub const cpu_thunderxt83 = Cpu{ .name = "thunderxt83", .llvm_name = "thunderxt83", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_usePostraScheduler, - &feature_crc, &feature_perfmon, &feature_fpArmv8, + &feature_crc, &feature_predictableSelectExpensive, }, }; @@ -1538,11 +1538,11 @@ pub const cpu_thunderxt83 = Cpu{ pub const cpu_thunderxt88 = Cpu{ .name = "thunderxt88", .llvm_name = "thunderxt88", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_usePostraScheduler, - &feature_crc, &feature_perfmon, &feature_fpArmv8, + &feature_crc, &feature_predictableSelectExpensive, }, }; @@ -1550,23 +1550,23 @@ pub const cpu_thunderxt88 = Cpu{ pub const cpu_tsv110 = Cpu{ .name = "tsv110", .llvm_name = "tsv110", - .subfeatures = &[_]*const Feature { - &feature_usePostraScheduler, - &feature_crc, - &feature_dotprod, - &feature_ccpp, - &feature_uaops, - &feature_lse, - &feature_lor, - &feature_spe, - &feature_pan, + .dependencies = &[_]*const Feature { + &feature_customCheapAsMove, &feature_rdm, + &feature_ccpp, + &feature_fuseAes, + &feature_lse, + &feature_usePostraScheduler, &feature_perfmon, + &feature_fpArmv8, + &feature_lor, &feature_ras, &feature_vh, - &feature_fpArmv8, - &feature_fuseAes, - &feature_customCheapAsMove, + &feature_dotprod, + &feature_uaops, + &feature_crc, + &feature_pan, + &feature_spe, }, }; diff --git a/lib/std/target/amdgpu.zig b/lib/std/target/amdgpu.zig index 5f6fe8dcf6..b428615124 100644 --- a/lib/std/target/amdgpu.zig +++ b/lib/std/target/amdgpu.zig @@ -4,196 +4,196 @@ const Cpu = @import("std").target.Cpu; pub const feature_BitInsts16 = Feature{ .name = "16-bit-insts", .description = "Has i16/f16 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_addNoCarryInsts = Feature{ .name = "add-no-carry-insts", .description = "Have VALU add/sub instructions without carry out", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_apertureRegs = Feature{ .name = "aperture-regs", .description = "Has Memory Aperture Base and Size Registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_atomicFaddInsts = Feature{ .name = "atomic-fadd-insts", .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_autoWaitcntBeforeBarrier = Feature{ .name = "auto-waitcnt-before-barrier", .description = "Hardware automatically inserts waitcnt before barrier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ciInsts = Feature{ .name = "ci-insts", .description = "Additional instructions for CI+", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_codeObjectV3 = Feature{ .name = "code-object-v3", .description = "Generate code object version 3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cumode = Feature{ .name = "cumode", .description = "Enable CU wavefront execution mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dlInsts = Feature{ .name = "dl-insts", .description = "Has v_fmac_f32 and v_xnor_b32 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dpp = Feature{ .name = "dpp", .description = "Support DPP (Data Parallel Primitives) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dpp8 = Feature{ .name = "dpp8", .description = "Support DPP8 (Data Parallel Primitives) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noSramEccSupport = Feature{ .name = "no-sram-ecc-support", .description = "Hardware does not support SRAM ECC", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noXnackSupport = Feature{ .name = "no-xnack-support", .description = "Hardware does not support XNACK", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot1Insts = Feature{ .name = "dot1-insts", .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot2Insts = Feature{ .name = "dot2-insts", .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot3Insts = Feature{ .name = "dot3-insts", .description = "Has v_dot8c_i32_i4 instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot4Insts = Feature{ .name = "dot4-insts", .description = "Has v_dot2c_i32_i16 instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot5Insts = Feature{ .name = "dot5-insts", .description = "Has v_dot2c_f32_f16 instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dot6Insts = Feature{ .name = "dot6-insts", .description = "Has v_dot4c_i32_i8 instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_DumpCode = Feature{ .name = "DumpCode", .description = "Dump MachineInstrs in the CodeEmitter", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dumpcode = Feature{ .name = "dumpcode", .description = "Dump MachineInstrs in the CodeEmitter", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_enableDs128 = Feature{ .name = "enable-ds128", .description = "Use ds_{read|write}_b128", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loadStoreOpt = Feature{ .name = "load-store-opt", .description = "Enable SI load/store optimizer pass", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_enablePrtStrictNull = Feature{ .name = "enable-prt-strict-null", .description = "Enable zeroing of result registers for sparse texture fetches", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_siScheduler = Feature{ .name = "si-scheduler", .description = "Enable SI Machine Scheduler", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_unsafeDsOffsetFolding = Feature{ .name = "unsafe-ds-offset-folding", .description = "Force using DS instruction immediate offsets on SI", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fmaf = Feature{ .name = "fmaf", .description = "Enable single precision FMA (not as fast as mul+add, but fused)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp16Denormals = Feature{ .name = "fp16-denormals", .description = "Enable half precision denormal handling", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp64, }, }; @@ -201,21 +201,21 @@ pub const feature_fp16Denormals = Feature{ pub const feature_fp32Denormals = Feature{ .name = "fp32-denormals", .description = "Enable single precision denormal handling", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp64 = Feature{ .name = "fp64", .description = "Enable double precision operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp64Denormals = Feature{ .name = "fp64-denormals", .description = "Enable double and half precision denormal handling", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp64, }, }; @@ -223,7 +223,7 @@ pub const feature_fp64Denormals = Feature{ pub const feature_fp64Fp16Denormals = Feature{ .name = "fp64-fp16-denormals", .description = "Enable double and half precision denormal handling", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp64, }, }; @@ -231,497 +231,497 @@ pub const feature_fp64Fp16Denormals = Feature{ pub const feature_fpExceptions = Feature{ .name = "fp-exceptions", .description = "Enable floating point exceptions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastFmaf = Feature{ .name = "fast-fmaf", .description = "Assuming f32 fma is at least as fast as mul + add", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatAddressSpace = Feature{ .name = "flat-address-space", .description = "Support flat address space", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatForGlobal = Feature{ .name = "flat-for-global", .description = "Force to generate flat instruction for global", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatGlobalInsts = Feature{ .name = "flat-global-insts", .description = "Have global_* flat memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatInstOffsets = Feature{ .name = "flat-inst-offsets", .description = "Flat instructions have immediate offset addressing mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatScratchInsts = Feature{ .name = "flat-scratch-insts", .description = "Have scratch_* flat memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_flatSegmentOffsetBug = Feature{ .name = "flat-segment-offset-bug", .description = "GFX10 bug, inst_offset ignored in flat segment", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fmaMixInsts = Feature{ .name = "fma-mix-insts", .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gcn3Encoding = Feature{ .name = "gcn3-encoding", .description = "Encoding format for VI", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gfx7Gfx8Gfx9Insts = Feature{ .name = "gfx7-gfx8-gfx9-insts", .description = "Instructions shared in GFX7, GFX8, GFX9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gfx8Insts = Feature{ .name = "gfx8-insts", .description = "Additional instructions for GFX8+", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gfx9Insts = Feature{ .name = "gfx9-insts", .description = "Additional instructions for GFX9+", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gfx10Insts = Feature{ .name = "gfx10-insts", .description = "Additional instructions for GFX10+", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_instFwdPrefetchBug = Feature{ .name = "inst-fwd-prefetch-bug", .description = "S_INST_PREFETCH instruction causes shader to hang", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_intClampInsts = Feature{ .name = "int-clamp-insts", .description = "Support clamp for integer destination", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_inv2piInlineImm = Feature{ .name = "inv-2pi-inline-imm", .description = "Has 1 / (2 * pi) as inline immediate", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ldsbankcount16 = Feature{ .name = "ldsbankcount16", .description = "The number of LDS banks per compute unit.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ldsbankcount32 = Feature{ .name = "ldsbankcount32", .description = "The number of LDS banks per compute unit.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ldsBranchVmemWarHazard = Feature{ .name = "lds-branch-vmem-war-hazard", .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ldsMisalignedBug = Feature{ .name = "lds-misaligned-bug", .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_localmemorysize0 = Feature{ .name = "localmemorysize0", .description = "The size of local memory in bytes", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_localmemorysize32768 = Feature{ .name = "localmemorysize32768", .description = "The size of local memory in bytes", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_localmemorysize65536 = Feature{ .name = "localmemorysize65536", .description = "The size of local memory in bytes", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_maiInsts = Feature{ .name = "mai-insts", .description = "Has mAI instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mfmaInlineLiteralBug = Feature{ .name = "mfma-inline-literal-bug", .description = "MFMA cannot use inline literal as SrcC", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mimgR128 = Feature{ .name = "mimg-r128", .description = "Support 128-bit texture resources", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_madMixInsts = Feature{ .name = "mad-mix-insts", .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_maxPrivateElementSize4 = Feature{ .name = "max-private-element-size-4", .description = "Maximum private access size may be 4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_maxPrivateElementSize8 = Feature{ .name = "max-private-element-size-8", .description = "Maximum private access size may be 8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_maxPrivateElementSize16 = Feature{ .name = "max-private-element-size-16", .description = "Maximum private access size may be 16", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_movrel = Feature{ .name = "movrel", .description = "Has v_movrel*_b32 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nsaEncoding = Feature{ .name = "nsa-encoding", .description = "Support NSA encoding for image instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nsaToVmemBug = Feature{ .name = "nsa-to-vmem-bug", .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noDataDepHazard = Feature{ .name = "no-data-dep-hazard", .description = "Does not need SW waitstates", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noSdstCmpx = Feature{ .name = "no-sdst-cmpx", .description = "V_CMPX does not write VCC/SGPR in addition to EXEC", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_offset3fBug = Feature{ .name = "offset-3f-bug", .description = "Branch offset of 3f hardware bug", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_pkFmacF16Inst = Feature{ .name = "pk-fmac-f16-inst", .description = "Has v_pk_fmac_f16 instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_promoteAlloca = Feature{ .name = "promote-alloca", .description = "Enable promote alloca pass", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_r128A16 = Feature{ .name = "r128-a16", .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_registerBanking = Feature{ .name = "register-banking", .description = "Has register banking", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwa = Feature{ .name = "sdwa", .description = "Support SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwaMav = Feature{ .name = "sdwa-mav", .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwaOmod = Feature{ .name = "sdwa-omod", .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwaOutModsVopc = Feature{ .name = "sdwa-out-mods-vopc", .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwaScalar = Feature{ .name = "sdwa-scalar", .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sdwaSdst = Feature{ .name = "sdwa-sdst", .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sgprInitBug = Feature{ .name = "sgpr-init-bug", .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_smemToVectorWriteHazard = Feature{ .name = "smem-to-vector-write-hazard", .description = "s_load_dword followed by v_cmp page faults", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sMemrealtime = Feature{ .name = "s-memrealtime", .description = "Has s_memrealtime instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sramEcc = Feature{ .name = "sram-ecc", .description = "Enable SRAM ECC", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_scalarAtomics = Feature{ .name = "scalar-atomics", .description = "Has atomic scalar memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_scalarFlatScratchInsts = Feature{ .name = "scalar-flat-scratch-insts", .description = "Have s_scratch_* flat memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_scalarStores = Feature{ .name = "scalar-stores", .description = "Has store scalar memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_trapHandler = Feature{ .name = "trap-handler", .description = "Trap handler support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_trigReducedRange = Feature{ .name = "trig-reduced-range", .description = "Requires use of fract on arguments to trig instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_unalignedBufferAccess = Feature{ .name = "unaligned-buffer-access", .description = "Support unaligned global loads and stores", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_unalignedScratchAccess = Feature{ .name = "unaligned-scratch-access", .description = "Support unaligned scratch loads and stores", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_unpackedD16Vmem = Feature{ .name = "unpacked-d16-vmem", .description = "Has unpacked d16 vmem instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vgprIndexMode = Feature{ .name = "vgpr-index-mode", .description = "Has VGPR mode register indexing", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vmemToScalarWriteHazard = Feature{ .name = "vmem-to-scalar-write-hazard", .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vop3Literal = Feature{ .name = "vop3-literal", .description = "Can use one literal in VOP3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vop3p = Feature{ .name = "vop3p", .description = "Has VOP3P packed instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vcmpxExecWarHazard = Feature{ .name = "vcmpx-exec-war-hazard", .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vcmpxPermlaneHazard = Feature{ .name = "vcmpx-permlane-hazard", .description = "TODO: describe me", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vscnt = Feature{ .name = "vscnt", .description = "Has separate store vscnt counter", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_wavefrontsize16 = Feature{ .name = "wavefrontsize16", .description = "The number of threads per wavefront", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_wavefrontsize32 = Feature{ .name = "wavefrontsize32", .description = "The number of threads per wavefront", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_wavefrontsize64 = Feature{ .name = "wavefrontsize64", .description = "The number of threads per wavefront", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xnack = Feature{ .name = "xnack", .description = "Enable XNACK support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_halfRate64Ops = Feature{ .name = "half-rate-64-ops", .description = "Most fp64 instructions are half rate instead of quarter", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -834,53 +834,53 @@ pub const features = &[_]*const Feature { pub const cpu_bonaire = Cpu{ .name = "bonaire", .llvm_name = "bonaire", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_carrizo = Cpu{ .name = "carrizo", .llvm_name = "carrizo", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_fastFmaf, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, &feature_xnack, &feature_halfRate64Ops, }, @@ -889,40 +889,40 @@ pub const cpu_carrizo = Cpu{ pub const cpu_fiji = Cpu{ .name = "fiji", .llvm_name = "fiji", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_wavefrontsize64, }, }; @@ -930,7 +930,7 @@ pub const cpu_generic = Cpu{ pub const cpu_genericHsa = Cpu{ .name = "generic-hsa", .llvm_name = "generic-hsa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_flatAddressSpace, &feature_wavefrontsize64, }, @@ -939,45 +939,45 @@ pub const cpu_genericHsa = Cpu{ pub const cpu_gfx1010 = Cpu{ .name = "gfx1010", .llvm_name = "gfx1010", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_dlInsts, &feature_noXnackSupport, &feature_flatSegmentOffsetBug, - &feature_mimgR128, - &feature_addNoCarryInsts, - &feature_dpp8, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_inv2piInlineImm, - &feature_fastFmaf, - &feature_registerBanking, - &feature_apertureRegs, - &feature_flatGlobalInsts, - &feature_fp64, - &feature_vscnt, + &feature_noSdstCmpx, &feature_flatScratchInsts, - &feature_dpp, + &feature_fp64, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, + &feature_fastFmaf, + &feature_BitInsts16, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_vop3Literal, + &feature_apertureRegs, + &feature_mimgR128, &feature_sdwaScalar, - &feature_sdwaSdst, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_gfx8Insts, + &feature_intClampInsts, + &feature_vscnt, &feature_movrel, &feature_localmemorysize65536, - &feature_noSdstCmpx, - &feature_pkFmacF16Inst, - &feature_noSramEccSupport, - &feature_vop3Literal, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, &feature_gfx10Insts, - &feature_sdwa, - &feature_intClampInsts, - &feature_noDataDepHazard, - &feature_fmaMixInsts, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp8, + &feature_pkFmacF16Inst, + &feature_dpp, + &feature_sdwaSdst, + &feature_flatInstOffsets, + &feature_fmaMixInsts, + &feature_registerBanking, + &feature_noDataDepHazard, &feature_instFwdPrefetchBug, &feature_ldsbankcount32, &feature_ldsBranchVmemWarHazard, @@ -999,7 +999,7 @@ pub const cpu_gfx1010 = Cpu{ pub const cpu_gfx1011 = Cpu{ .name = "gfx1011", .llvm_name = "gfx1011", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_dlInsts, &feature_noXnackSupport, @@ -1008,40 +1008,40 @@ pub const cpu_gfx1011 = Cpu{ &feature_dot5Insts, &feature_dot6Insts, &feature_flatSegmentOffsetBug, - &feature_mimgR128, - &feature_addNoCarryInsts, - &feature_dpp8, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_inv2piInlineImm, - &feature_fastFmaf, - &feature_registerBanking, - &feature_apertureRegs, - &feature_flatGlobalInsts, - &feature_fp64, - &feature_vscnt, + &feature_noSdstCmpx, &feature_flatScratchInsts, - &feature_dpp, + &feature_fp64, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, + &feature_fastFmaf, + &feature_BitInsts16, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_vop3Literal, + &feature_apertureRegs, + &feature_mimgR128, &feature_sdwaScalar, - &feature_sdwaSdst, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_gfx8Insts, + &feature_intClampInsts, + &feature_vscnt, &feature_movrel, &feature_localmemorysize65536, - &feature_noSdstCmpx, - &feature_pkFmacF16Inst, - &feature_noSramEccSupport, - &feature_vop3Literal, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, &feature_gfx10Insts, - &feature_sdwa, - &feature_intClampInsts, - &feature_noDataDepHazard, - &feature_fmaMixInsts, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp8, + &feature_pkFmacF16Inst, + &feature_dpp, + &feature_sdwaSdst, + &feature_flatInstOffsets, + &feature_fmaMixInsts, + &feature_registerBanking, + &feature_noDataDepHazard, &feature_instFwdPrefetchBug, &feature_ldsbankcount32, &feature_ldsBranchVmemWarHazard, @@ -1062,7 +1062,7 @@ pub const cpu_gfx1011 = Cpu{ pub const cpu_gfx1012 = Cpu{ .name = "gfx1012", .llvm_name = "gfx1012", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_dlInsts, &feature_noXnackSupport, @@ -1071,40 +1071,40 @@ pub const cpu_gfx1012 = Cpu{ &feature_dot5Insts, &feature_dot6Insts, &feature_flatSegmentOffsetBug, - &feature_mimgR128, - &feature_addNoCarryInsts, - &feature_dpp8, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_inv2piInlineImm, - &feature_fastFmaf, - &feature_registerBanking, - &feature_apertureRegs, - &feature_flatGlobalInsts, - &feature_fp64, - &feature_vscnt, + &feature_noSdstCmpx, &feature_flatScratchInsts, - &feature_dpp, + &feature_fp64, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, + &feature_fastFmaf, + &feature_BitInsts16, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_vop3Literal, + &feature_apertureRegs, + &feature_mimgR128, &feature_sdwaScalar, - &feature_sdwaSdst, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_gfx8Insts, + &feature_intClampInsts, + &feature_vscnt, &feature_movrel, &feature_localmemorysize65536, - &feature_noSdstCmpx, - &feature_pkFmacF16Inst, - &feature_noSramEccSupport, - &feature_vop3Literal, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, &feature_gfx10Insts, - &feature_sdwa, - &feature_intClampInsts, - &feature_noDataDepHazard, - &feature_fmaMixInsts, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp8, + &feature_pkFmacF16Inst, + &feature_dpp, + &feature_sdwaSdst, + &feature_flatInstOffsets, + &feature_fmaMixInsts, + &feature_registerBanking, + &feature_noDataDepHazard, &feature_instFwdPrefetchBug, &feature_ldsbankcount32, &feature_ldsBranchVmemWarHazard, @@ -1126,18 +1126,18 @@ pub const cpu_gfx1012 = Cpu{ pub const cpu_gfx600 = Cpu{ .name = "gfx600", .llvm_name = "gfx600", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_fastFmaf, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, &feature_halfRate64Ops, }, }; @@ -1145,58 +1145,58 @@ pub const cpu_gfx600 = Cpu{ pub const cpu_gfx601 = Cpu{ .name = "gfx601", .llvm_name = "gfx601", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_gfx700 = Cpu{ .name = "gfx700", .llvm_name = "gfx700", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_gfx701 = Cpu{ .name = "gfx701", .llvm_name = "gfx701", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_fastFmaf, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, &feature_halfRate64Ops, }, }; @@ -1204,94 +1204,94 @@ pub const cpu_gfx701 = Cpu{ pub const cpu_gfx702 = Cpu{ .name = "gfx702", .llvm_name = "gfx702", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_fastFmaf, &feature_ldsbankcount16, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_gfx703 = Cpu{ .name = "gfx703", .llvm_name = "gfx703", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount16, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_gfx704 = Cpu{ .name = "gfx704", .llvm_name = "gfx704", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_gfx801 = Cpu{ .name = "gfx801", .llvm_name = "gfx801", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_fastFmaf, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, &feature_xnack, &feature_halfRate64Ops, }, @@ -1300,98 +1300,98 @@ pub const cpu_gfx801 = Cpu{ pub const cpu_gfx802 = Cpu{ .name = "gfx802", .llvm_name = "gfx802", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_sgprInitBug, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_gfx803 = Cpu{ .name = "gfx803", .llvm_name = "gfx803", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_gfx810 = Cpu{ .name = "gfx810", .llvm_name = "gfx810", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_ldsbankcount16, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, &feature_xnack, }, }; @@ -1399,40 +1399,40 @@ pub const cpu_gfx810 = Cpu{ pub const cpu_gfx900 = Cpu{ .name = "gfx900", .llvm_name = "gfx900", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noSramEccSupport, &feature_noXnackSupport, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, &feature_madMixInsts, }, @@ -1441,39 +1441,39 @@ pub const cpu_gfx900 = Cpu{ pub const cpu_gfx902 = Cpu{ .name = "gfx902", .llvm_name = "gfx902", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noSramEccSupport, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, &feature_madMixInsts, &feature_xnack, @@ -1483,41 +1483,41 @@ pub const cpu_gfx902 = Cpu{ pub const cpu_gfx904 = Cpu{ .name = "gfx904", .llvm_name = "gfx904", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noSramEccSupport, &feature_noXnackSupport, &feature_fmaMixInsts, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, }, }; @@ -1525,43 +1525,43 @@ pub const cpu_gfx904 = Cpu{ pub const cpu_gfx906 = Cpu{ .name = "gfx906", .llvm_name = "gfx906", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_dlInsts, &feature_noXnackSupport, &feature_dot1Insts, &feature_dot2Insts, &feature_fmaMixInsts, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, &feature_halfRate64Ops, }, @@ -1570,7 +1570,7 @@ pub const cpu_gfx906 = Cpu{ pub const cpu_gfx908 = Cpu{ .name = "gfx908", .llvm_name = "gfx908", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_atomicFaddInsts, &feature_codeObjectV3, &feature_dlInsts, @@ -1581,36 +1581,36 @@ pub const cpu_gfx908 = Cpu{ &feature_dot5Insts, &feature_dot6Insts, &feature_fmaMixInsts, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, &feature_maiInsts, &feature_mfmaInlineLiteralBug, @@ -1623,38 +1623,38 @@ pub const cpu_gfx908 = Cpu{ pub const cpu_gfx909 = Cpu{ .name = "gfx909", .llvm_name = "gfx909", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, - &feature_r128A16, - &feature_addNoCarryInsts, - &feature_inv2piInlineImm, - &feature_gfx9Insts, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_fastFmaf, - &feature_scalarStores, - &feature_gcn3Encoding, - &feature_apertureRegs, - &feature_scalarAtomics, - &feature_flatGlobalInsts, - &feature_fp64, &feature_flatScratchInsts, - &feature_dpp, - &feature_scalarFlatScratchInsts, - &feature_gfx7Gfx8Gfx9Insts, + &feature_fp64, + &feature_r128A16, &feature_sMemrealtime, + &feature_addNoCarryInsts, &feature_vop3p, - &feature_flatInstOffsets, - &feature_sdwaScalar, - &feature_sdwaSdst, - &feature_localmemorysize65536, - &feature_gfx8Insts, - &feature_flatAddressSpace, + &feature_fastFmaf, &feature_BitInsts16, - &feature_sdwa, &feature_wavefrontsize64, + &feature_sdwa, + &feature_gfx9Insts, + &feature_flatAddressSpace, + &feature_apertureRegs, + &feature_sdwaScalar, + &feature_ciInsts, + &feature_scalarAtomics, + &feature_scalarFlatScratchInsts, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, &feature_intClampInsts, + &feature_localmemorysize65536, + &feature_flatGlobalInsts, &feature_sdwaOmod, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_sdwaSdst, + &feature_flatInstOffsets, &feature_ldsbankcount32, &feature_madMixInsts, &feature_xnack, @@ -1664,38 +1664,38 @@ pub const cpu_gfx909 = Cpu{ pub const cpu_hainan = Cpu{ .name = "hainan", .llvm_name = "hainan", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_hawaii = Cpu{ .name = "hawaii", .llvm_name = "hawaii", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_fastFmaf, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, &feature_halfRate64Ops, }, }; @@ -1703,225 +1703,225 @@ pub const cpu_hawaii = Cpu{ pub const cpu_iceland = Cpu{ .name = "iceland", .llvm_name = "iceland", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_sgprInitBug, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_kabini = Cpu{ .name = "kabini", .llvm_name = "kabini", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount16, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_kaveri = Cpu{ .name = "kaveri", .llvm_name = "kaveri", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_mullins = Cpu{ .name = "mullins", .llvm_name = "mullins", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount16, - &feature_noSramEccSupport, &feature_flatAddressSpace, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, - &feature_ciInsts, - &feature_wavefrontsize64, &feature_fp64, + &feature_mimgR128, + &feature_gfx7Gfx8Gfx9Insts, &feature_movrel, &feature_localmemorysize65536, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_oland = Cpu{ .name = "oland", .llvm_name = "oland", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_pitcairn = Cpu{ .name = "pitcairn", .llvm_name = "pitcairn", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; pub const cpu_polaris10 = Cpu{ .name = "polaris10", .llvm_name = "polaris10", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_polaris11 = Cpu{ .name = "polaris11", .llvm_name = "polaris11", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_stoney = Cpu{ .name = "stoney", .llvm_name = "stoney", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_ldsbankcount16, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, &feature_xnack, }, }; @@ -1929,18 +1929,18 @@ pub const cpu_stoney = Cpu{ pub const cpu_tahiti = Cpu{ .name = "tahiti", .llvm_name = "tahiti", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_fastFmaf, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, &feature_halfRate64Ops, }, }; @@ -1948,51 +1948,51 @@ pub const cpu_tahiti = Cpu{ pub const cpu_tonga = Cpu{ .name = "tonga", .llvm_name = "tonga", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, &feature_sgprInitBug, &feature_unpackedD16Vmem, - &feature_mimgR128, - &feature_inv2piInlineImm, - &feature_ciInsts, - &feature_vgprIndexMode, - &feature_scalarStores, - &feature_gcn3Encoding, &feature_fp64, - &feature_dpp, - &feature_trigReducedRange, - &feature_gfx7Gfx8Gfx9Insts, &feature_sMemrealtime, + &feature_BitInsts16, + &feature_wavefrontsize64, + &feature_sdwa, + &feature_flatAddressSpace, + &feature_sdwaMav, + &feature_mimgR128, + &feature_ciInsts, + &feature_noSramEccSupport, + &feature_inv2piInlineImm, + &feature_vgprIndexMode, + &feature_gcn3Encoding, + &feature_gfx8Insts, + &feature_scalarStores, + &feature_intClampInsts, &feature_movrel, &feature_localmemorysize65536, - &feature_noSramEccSupport, - &feature_gfx8Insts, - &feature_flatAddressSpace, - &feature_BitInsts16, - &feature_sdwaMav, - &feature_sdwa, &feature_sdwaOutModsVopc, - &feature_wavefrontsize64, - &feature_intClampInsts, + &feature_dpp, + &feature_gfx7Gfx8Gfx9Insts, + &feature_trigReducedRange, }, }; pub const cpu_verde = Cpu{ .name = "verde", .llvm_name = "verde", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_codeObjectV3, &feature_noXnackSupport, &feature_ldsbankcount32, - &feature_noSramEccSupport, - &feature_mimgR128, - &feature_trigReducedRange, - &feature_wavefrontsize64, &feature_localmemorysize32768, &feature_fp64, + &feature_mimgR128, &feature_movrel, + &feature_noSramEccSupport, + &feature_wavefrontsize64, + &feature_trigReducedRange, }, }; diff --git a/lib/std/target/arm.zig b/lib/std/target/arm.zig index 73f2d3ead9..964b2882af 100644 --- a/lib/std/target/arm.zig +++ b/lib/std/target/arm.zig @@ -4,146 +4,146 @@ const Cpu = @import("std").target.Cpu; pub const feature_msecext8 = Feature{ .name = "8msecext", .description = "Enable support for ARMv8-M Security Extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_aclass = Feature{ .name = "aclass", .description = "Is application profile ('A' series)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_aes = Feature{ .name = "aes", .description = "Enable AES support", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_acquireRelease = Feature{ .name = "acquire-release", .description = "Has v8 acquire/release (lda/ldaex etc) instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avoidMovsShop = Feature{ .name = "avoid-movs-shop", .description = "Avoid movs instructions with shifter operand", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avoidPartialCpsr = Feature{ .name = "avoid-partial-cpsr", .description = "Avoid CPSR partial update for OOO execution", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_crc = Feature{ .name = "crc", .description = "Enable support for CRC instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cheapPredicableCpsr = Feature{ .name = "cheap-predicable-cpsr", .description = "Disable +1 predication cost for instructions updating CPSR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vldnAlign = Feature{ .name = "vldn-align", .description = "Check for VLDn unaligned access", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_crypto = Feature{ .name = "crypto", .description = "Enable support for Cryptography extensions", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_d32 = Feature{ .name = "d32", .description = "Extend FP to 32 double registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_db = Feature{ .name = "db", .description = "Has data barrier (dmb/dsb) instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dfb = Feature{ .name = "dfb", .description = "Has full data barrier (dfb) instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dsp = Feature{ .name = "dsp", .description = "Supports DSP instructions in ARM and/or Thumb2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dontWidenVmovs = Feature{ .name = "dont-widen-vmovs", .description = "Don't widen VMOVS to VMOVD", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dotprod = Feature{ .name = "dotprod", .description = "Enable support for dot product instructions", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_executeOnly = Feature{ .name = "execute-only", .description = "Enable the generation of execute only code.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_expandFpMlx = Feature{ .name = "expand-fp-mlx", .description = "Expand VFP/NEON MLA/MLS instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp16 = Feature{ .name = "fp16", .description = "Enable half-precision floating point", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp16fml = Feature{ .name = "fp16fml", .description = "Enable full half-precision floating point fml instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp16, &feature_fpregs, }, @@ -152,7 +152,7 @@ pub const feature_fp16fml = Feature{ pub const feature_fp64 = Feature{ .name = "fp64", .description = "Floating point unit supports double precision", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -160,24 +160,24 @@ pub const feature_fp64 = Feature{ pub const feature_fpao = Feature{ .name = "fpao", .description = "Enable fast computation of positive address offsets", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fpArmv8 = Feature{ .name = "fp-armv8", .description = "Enable ARMv8 FP", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, &feature_d32, + &feature_fp16, }, }; pub const feature_fpArmv8d16 = Feature{ .name = "fp-armv8d16", .description = "Enable ARMv8 FP with only 16 d-registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp16, &feature_fpregs, }, @@ -186,7 +186,7 @@ pub const feature_fpArmv8d16 = Feature{ pub const feature_fpArmv8d16sp = Feature{ .name = "fp-armv8d16sp", .description = "Enable ARMv8 FP with only 16 d-registers and no double precision", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fp16, &feature_fpregs, }, @@ -195,24 +195,24 @@ pub const feature_fpArmv8d16sp = Feature{ pub const feature_fpArmv8sp = Feature{ .name = "fp-armv8sp", .description = "Enable ARMv8 FP with no double precision", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, &feature_d32, + &feature_fp16, }, }; pub const feature_fpregs = Feature{ .name = "fpregs", .description = "Enable FP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fpregs16 = Feature{ .name = "fpregs16", .description = "Enable 16-bit FP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -220,7 +220,7 @@ pub const feature_fpregs16 = Feature{ pub const feature_fpregs64 = Feature{ .name = "fpregs64", .description = "Enable 64-bit FP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -228,314 +228,314 @@ pub const feature_fpregs64 = Feature{ pub const feature_fullfp16 = Feature{ .name = "fullfp16", .description = "Enable full half-precision floating point", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, + &feature_fp16, }, }; pub const feature_fuseAes = Feature{ .name = "fuse-aes", .description = "CPU fuses AES crypto operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fuseLiterals = Feature{ .name = "fuse-literals", .description = "CPU fuses literal generation operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_hwdivArm = Feature{ .name = "hwdiv-arm", .description = "Enable divide instructions in ARM mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_hwdiv = Feature{ .name = "hwdiv", .description = "Enable divide instructions in Thumb", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noBranchPredictor = Feature{ .name = "no-branch-predictor", .description = "Has no branch predictor", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_retAddrStack = Feature{ .name = "ret-addr-stack", .description = "Has return address stack", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowfpvmlx = Feature{ .name = "slowfpvmlx", .description = "Disable VFP / NEON MAC instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vmlxHazards = Feature{ .name = "vmlx-hazards", .description = "Has VMLx hazards", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lob = Feature{ .name = "lob", .description = "Enable Low Overhead Branch extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_longCalls = Feature{ .name = "long-calls", .description = "Generate calls via indirect call instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mclass = Feature{ .name = "mclass", .description = "Is microcontroller profile ('M' series)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mp = Feature{ .name = "mp", .description = "Supports Multiprocessing extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mve1beat = Feature{ .name = "mve1beat", .description = "Model MVE instructions as a 1 beat per tick architecture", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mve2beat = Feature{ .name = "mve2beat", .description = "Model MVE instructions as a 2 beats per tick architecture", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mve4beat = Feature{ .name = "mve4beat", .description = "Model MVE instructions as a 4 beats per tick architecture", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_muxedUnits = Feature{ .name = "muxed-units", .description = "Has muxed AGU and NEON/FPU", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_neon = Feature{ .name = "neon", .description = "Enable NEON instructions", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_neonfp = Feature{ .name = "neonfp", .description = "Use NEON for single precision FP", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_neonFpmovs = Feature{ .name = "neon-fpmovs", .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_naclTrap = Feature{ .name = "nacl-trap", .description = "NaCl trap", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noarm = Feature{ .name = "noarm", .description = "Does not support ARM mode execution", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noMovt = Feature{ .name = "no-movt", .description = "Don't use movt/movw pairs for 32-bit imms", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noNegImmediates = Feature{ .name = "no-neg-immediates", .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_disablePostraScheduler = Feature{ .name = "disable-postra-scheduler", .description = "Don't schedule again after register allocation", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nonpipelinedVfp = Feature{ .name = "nonpipelined-vfp", .description = "VFP instructions are not pipelined", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_perfmon = Feature{ .name = "perfmon", .description = "Enable support for Performance Monitor extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bit32 = Feature{ .name = "32bit", .description = "Prefer 32-bit Thumb instrs", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_preferIshst = Feature{ .name = "prefer-ishst", .description = "Prefer ISHST barriers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loopAlign = Feature{ .name = "loop-align", .description = "Prefer 32-bit alignment for loops", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_preferVmovsr = Feature{ .name = "prefer-vmovsr", .description = "Prefer VMOVSR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_profUnpr = Feature{ .name = "prof-unpr", .description = "Is profitable to unpredicate", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ras = Feature{ .name = "ras", .description = "Enable Reliability, Availability and Serviceability extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rclass = Feature{ .name = "rclass", .description = "Is realtime profile ('R' series)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_readTpHard = Feature{ .name = "read-tp-hard", .description = "Reading thread pointer from register", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reserveR9 = Feature{ .name = "reserve-r9", .description = "Reserve R9, making it unavailable as GPR", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sb = Feature{ .name = "sb", .description = "Enable v8.5a Speculation Barrier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sha2 = Feature{ .name = "sha2", .description = "Enable SHA1 and SHA256 support", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_slowFpBrcc = Feature{ .name = "slow-fp-brcc", .description = "FP compare + branch is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowLoadDSubreg = Feature{ .name = "slow-load-D-subreg", .description = "Loading into D subregs is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowOddReg = Feature{ .name = "slow-odd-reg", .description = "VLDM/VSTM starting with an odd register is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowVdup32 = Feature{ .name = "slow-vdup32", .description = "Has slow VDUP32 - prefer VMOV", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowVgetlni32 = Feature{ .name = "slow-vgetlni32", .description = "Has slow VGETLNi32 - prefer VMOV", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_splatVfpNeon = Feature{ .name = "splat-vfp-neon", .description = "Splat register from VFP to NEON", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dontWidenVmovs, }, }; @@ -543,56 +543,56 @@ pub const feature_splatVfpNeon = Feature{ pub const feature_strictAlign = Feature{ .name = "strict-align", .description = "Disallow all unaligned memory access", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_thumb2 = Feature{ .name = "thumb2", .description = "Enable Thumb2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_trustzone = Feature{ .name = "trustzone", .description = "Enable support for TrustZone security extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useAa = Feature{ .name = "use-aa", .description = "Use alias analysis during codegen", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useMisched = Feature{ .name = "use-misched", .description = "Use the MachineScheduler", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_wideStrideVfp = Feature{ .name = "wide-stride-vfp", .description = "Use a wide stride when allocating VFP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_v7clrex = Feature{ .name = "v7clrex", .description = "Has v7 clrex instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vfp2 = Feature{ .name = "vfp2", .description = "Enable VFP2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -600,7 +600,7 @@ pub const feature_vfp2 = Feature{ pub const feature_vfp2sp = Feature{ .name = "vfp2sp", .description = "Enable VFP2 instructions with no double precision", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -608,16 +608,16 @@ pub const feature_vfp2sp = Feature{ pub const feature_vfp3 = Feature{ .name = "vfp3", .description = "Enable VFP3 instructions", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_vfp3d16 = Feature{ .name = "vfp3d16", .description = "Enable VFP3 instructions with only 16 d-registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -625,7 +625,7 @@ pub const feature_vfp3d16 = Feature{ pub const feature_vfp3d16sp = Feature{ .name = "vfp3d16sp", .description = "Enable VFP3 instructions with only 16 d-registers and no double precision", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_fpregs, }, }; @@ -633,61 +633,61 @@ pub const feature_vfp3d16sp = Feature{ pub const feature_vfp3sp = Feature{ .name = "vfp3sp", .description = "Enable VFP3 instructions with no double precision", - .subfeatures = &[_]*const Feature { - &feature_fpregs, + .dependencies = &[_]*const Feature { &feature_d32, + &feature_fpregs, }, }; pub const feature_vfp4 = Feature{ .name = "vfp4", .description = "Enable VFP4 instructions", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, &feature_d32, + &feature_fp16, }, }; pub const feature_vfp4d16 = Feature{ .name = "vfp4d16", .description = "Enable VFP4 instructions with only 16 d-registers", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, + &feature_fp16, }, }; pub const feature_vfp4d16sp = Feature{ .name = "vfp4d16sp", .description = "Enable VFP4 instructions with only 16 d-registers and no double precision", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, + &feature_fp16, }, }; pub const feature_vfp4sp = Feature{ .name = "vfp4sp", .description = "Enable VFP4 instructions with no double precision", - .subfeatures = &[_]*const Feature { - &feature_fp16, + .dependencies = &[_]*const Feature { &feature_fpregs, &feature_d32, + &feature_fp16, }, }; pub const feature_vmlxForwarding = Feature{ .name = "vmlx-forwarding", .description = "Has multiplier accumulator forwarding", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_virtualization = Feature{ .name = "virtualization", .description = "Supports Virtualization extension", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hwdiv, &feature_hwdivArm, }, @@ -696,7 +696,7 @@ pub const feature_virtualization = Feature{ pub const feature_zcz = Feature{ .name = "zcz", .description = "Has zero-cycle zeroing instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -799,42 +799,42 @@ pub const features = &[_]*const Feature { pub const cpu_arm1020e = Cpu{ .name = "arm1020e", .llvm_name = "arm1020e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm1020t = Cpu{ .name = "arm1020t", .llvm_name = "arm1020t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm1022e = Cpu{ .name = "arm1022e", .llvm_name = "arm1022e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm10e = Cpu{ .name = "arm10e", .llvm_name = "arm10e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm10tdmi = Cpu{ .name = "arm10tdmi", .llvm_name = "arm10tdmi", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm1136jS = Cpu{ .name = "arm1136j-s", .llvm_name = "arm1136j-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dsp, }, }; @@ -842,7 +842,7 @@ pub const cpu_arm1136jS = Cpu{ pub const cpu_arm1136jfS = Cpu{ .name = "arm1136jf-s", .llvm_name = "arm1136jf-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dsp, &feature_slowfpvmlx, &feature_fpregs, @@ -853,18 +853,18 @@ pub const cpu_arm1136jfS = Cpu{ pub const cpu_arm1156t2S = Cpu{ .name = "arm1156t2-s", .llvm_name = "arm1156t2-s", - .subfeatures = &[_]*const Feature { - &feature_dsp, + .dependencies = &[_]*const Feature { &feature_thumb2, + &feature_dsp, }, }; pub const cpu_arm1156t2fS = Cpu{ .name = "arm1156t2f-s", .llvm_name = "arm1156t2f-s", - .subfeatures = &[_]*const Feature { - &feature_dsp, + .dependencies = &[_]*const Feature { &feature_thumb2, + &feature_dsp, &feature_slowfpvmlx, &feature_fpregs, &feature_vfp2, @@ -874,7 +874,7 @@ pub const cpu_arm1156t2fS = Cpu{ pub const cpu_arm1176jS = Cpu{ .name = "arm1176j-s", .llvm_name = "arm1176j-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_trustzone, }, }; @@ -882,7 +882,7 @@ pub const cpu_arm1176jS = Cpu{ pub const cpu_arm1176jzS = Cpu{ .name = "arm1176jz-s", .llvm_name = "arm1176jz-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_trustzone, }, }; @@ -890,7 +890,7 @@ pub const cpu_arm1176jzS = Cpu{ pub const cpu_arm1176jzfS = Cpu{ .name = "arm1176jzf-s", .llvm_name = "arm1176jzf-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_trustzone, &feature_slowfpvmlx, &feature_fpregs, @@ -901,134 +901,134 @@ pub const cpu_arm1176jzfS = Cpu{ pub const cpu_arm710t = Cpu{ .name = "arm710t", .llvm_name = "arm710t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm720t = Cpu{ .name = "arm720t", .llvm_name = "arm720t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm7tdmi = Cpu{ .name = "arm7tdmi", .llvm_name = "arm7tdmi", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm7tdmiS = Cpu{ .name = "arm7tdmi-s", .llvm_name = "arm7tdmi-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm8 = Cpu{ .name = "arm8", .llvm_name = "arm8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm810 = Cpu{ .name = "arm810", .llvm_name = "arm810", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm9 = Cpu{ .name = "arm9", .llvm_name = "arm9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm920 = Cpu{ .name = "arm920", .llvm_name = "arm920", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm920t = Cpu{ .name = "arm920t", .llvm_name = "arm920t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm922t = Cpu{ .name = "arm922t", .llvm_name = "arm922t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm926ejS = Cpu{ .name = "arm926ej-s", .llvm_name = "arm926ej-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm940t = Cpu{ .name = "arm940t", .llvm_name = "arm940t", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm946eS = Cpu{ .name = "arm946e-s", .llvm_name = "arm946e-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm966eS = Cpu{ .name = "arm966e-s", .llvm_name = "arm966e-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm968eS = Cpu{ .name = "arm968e-s", .llvm_name = "arm968e-s", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm9e = Cpu{ .name = "arm9e", .llvm_name = "arm9e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arm9tdmi = Cpu{ .name = "arm9tdmi", .llvm_name = "arm9tdmi", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_cortexA12 = Cpu{ .name = "cortex-a12", .llvm_name = "cortex-a12", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_retAddrStack, &feature_mp, @@ -1045,15 +1045,15 @@ pub const cpu_cortexA12 = Cpu{ pub const cpu_cortexA15 = Cpu{ .name = "cortex-a15", .llvm_name = "cortex-a15", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_vldnAlign, &feature_dontWidenVmovs, @@ -1073,15 +1073,15 @@ pub const cpu_cortexA15 = Cpu{ pub const cpu_cortexA17 = Cpu{ .name = "cortex-a17", .llvm_name = "cortex-a17", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_retAddrStack, &feature_mp, @@ -1098,22 +1098,22 @@ pub const cpu_cortexA17 = Cpu{ pub const cpu_cortexA32 = Cpu{ .name = "cortex-a32", .llvm_name = "cortex-a32", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, }, }; @@ -1121,22 +1121,22 @@ pub const cpu_cortexA32 = Cpu{ pub const cpu_cortexA35 = Cpu{ .name = "cortex-a35", .llvm_name = "cortex-a35", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, }, }; @@ -1144,15 +1144,15 @@ pub const cpu_cortexA35 = Cpu{ pub const cpu_cortexA5 = Cpu{ .name = "cortex-a5", .llvm_name = "cortex-a5", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_retAddrStack, &feature_slowfpvmlx, &feature_mp, @@ -1167,22 +1167,22 @@ pub const cpu_cortexA5 = Cpu{ pub const cpu_cortexA53 = Cpu{ .name = "cortex-a53", .llvm_name = "cortex-a53", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, &feature_fpao, }, @@ -1191,23 +1191,23 @@ pub const cpu_cortexA53 = Cpu{ pub const cpu_cortexA55 = Cpu{ .name = "cortex-a55", .llvm_name = "cortex-a55", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_dotprod, }, }; @@ -1215,22 +1215,22 @@ pub const cpu_cortexA55 = Cpu{ pub const cpu_cortexA57 = Cpu{ .name = "cortex-a57", .llvm_name = "cortex-a57", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_cheapPredicableCpsr, &feature_crypto, @@ -1241,15 +1241,15 @@ pub const cpu_cortexA57 = Cpu{ pub const cpu_cortexA7 = Cpu{ .name = "cortex-a7", .llvm_name = "cortex-a7", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_retAddrStack, &feature_slowfpvmlx, &feature_vmlxHazards, @@ -1268,22 +1268,22 @@ pub const cpu_cortexA7 = Cpu{ pub const cpu_cortexA72 = Cpu{ .name = "cortex-a72", .llvm_name = "cortex-a72", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, }, }; @@ -1291,22 +1291,22 @@ pub const cpu_cortexA72 = Cpu{ pub const cpu_cortexA73 = Cpu{ .name = "cortex-a73", .llvm_name = "cortex-a73", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, }, }; @@ -1314,23 +1314,23 @@ pub const cpu_cortexA73 = Cpu{ pub const cpu_cortexA75 = Cpu{ .name = "cortex-a75", .llvm_name = "cortex-a75", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_dotprod, }, }; @@ -1338,23 +1338,23 @@ pub const cpu_cortexA75 = Cpu{ pub const cpu_cortexA76 = Cpu{ .name = "cortex-a76", .llvm_name = "cortex-a76", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, &feature_dotprod, &feature_fullfp16, @@ -1364,23 +1364,23 @@ pub const cpu_cortexA76 = Cpu{ pub const cpu_cortexA76ae = Cpu{ .name = "cortex-a76ae", .llvm_name = "cortex-a76ae", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, &feature_dotprod, &feature_fullfp16, @@ -1390,15 +1390,15 @@ pub const cpu_cortexA76ae = Cpu{ pub const cpu_cortexA8 = Cpu{ .name = "cortex-a8", .llvm_name = "cortex-a8", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_retAddrStack, &feature_slowfpvmlx, &feature_vmlxHazards, @@ -1412,15 +1412,15 @@ pub const cpu_cortexA8 = Cpu{ pub const cpu_cortexA9 = Cpu{ .name = "cortex-a9", .llvm_name = "cortex-a9", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_vldnAlign, &feature_expandFpMlx, @@ -1439,48 +1439,48 @@ pub const cpu_cortexA9 = Cpu{ pub const cpu_cortexM0 = Cpu{ .name = "cortex-m0", .llvm_name = "cortex-m0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_db, + &feature_mclass, &feature_strictAlign, &feature_noarm, - &feature_mclass, }, }; pub const cpu_cortexM0plus = Cpu{ .name = "cortex-m0plus", .llvm_name = "cortex-m0plus", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_db, + &feature_mclass, &feature_strictAlign, &feature_noarm, - &feature_mclass, }, }; pub const cpu_cortexM1 = Cpu{ .name = "cortex-m1", .llvm_name = "cortex-m1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_db, + &feature_mclass, &feature_strictAlign, &feature_noarm, - &feature_mclass, }, }; pub const cpu_cortexM23 = Cpu{ .name = "cortex-m23", .llvm_name = "cortex-m23", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_msecext8, + .dependencies = &[_]*const Feature { + &feature_mclass, &feature_db, + &feature_msecext8, &feature_strictAlign, &feature_acquireRelease, - &feature_noarm, + &feature_hwdiv, &feature_v7clrex, - &feature_mclass, + &feature_noarm, &feature_noMovt, }, }; @@ -1488,14 +1488,14 @@ pub const cpu_cortexM23 = Cpu{ pub const cpu_cortexM3 = Cpu{ .name = "cortex-m3", .llvm_name = "cortex-m3", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_v7clrex, + &feature_db, &feature_mclass, &feature_thumb2, + &feature_hwdiv, + &feature_v7clrex, + &feature_noarm, &feature_noBranchPredictor, &feature_loopAlign, &feature_useAa, @@ -1506,16 +1506,16 @@ pub const cpu_cortexM3 = Cpu{ pub const cpu_cortexM33 = Cpu{ .name = "cortex-m33", .llvm_name = "cortex-m33", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_msecext8, - &feature_db, - &feature_acquireRelease, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_v7clrex, &feature_mclass, + &feature_db, + &feature_msecext8, &feature_thumb2, + &feature_acquireRelease, + &feature_hwdiv, + &feature_v7clrex, + &feature_noarm, &feature_dsp, &feature_fp16, &feature_fpregs, @@ -1531,16 +1531,16 @@ pub const cpu_cortexM33 = Cpu{ pub const cpu_cortexM35p = Cpu{ .name = "cortex-m35p", .llvm_name = "cortex-m35p", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_msecext8, - &feature_db, - &feature_acquireRelease, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_v7clrex, &feature_mclass, + &feature_db, + &feature_msecext8, &feature_thumb2, + &feature_acquireRelease, + &feature_hwdiv, + &feature_v7clrex, + &feature_noarm, &feature_dsp, &feature_fp16, &feature_fpregs, @@ -1556,22 +1556,22 @@ pub const cpu_cortexM35p = Cpu{ pub const cpu_cortexM4 = Cpu{ .name = "cortex-m4", .llvm_name = "cortex-m4", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_mclass, &feature_thumb2, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, + &feature_noarm, &feature_noBranchPredictor, &feature_slowfpvmlx, &feature_loopAlign, &feature_useAa, &feature_useMisched, - &feature_fp16, &feature_fpregs, + &feature_fp16, &feature_vfp4d16sp, }, }; @@ -1579,15 +1579,15 @@ pub const cpu_cortexM4 = Cpu{ pub const cpu_cortexM7 = Cpu{ .name = "cortex-m7", .llvm_name = "cortex-m7", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_mclass, &feature_thumb2, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, + &feature_noarm, &feature_fp16, &feature_fpregs, &feature_fpArmv8d16, @@ -1597,14 +1597,14 @@ pub const cpu_cortexM7 = Cpu{ pub const cpu_cortexR4 = Cpu{ .name = "cortex-r4", .llvm_name = "cortex-r4", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_thumb2, + &feature_rclass, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, &feature_avoidPartialCpsr, &feature_retAddrStack, }, @@ -1613,14 +1613,14 @@ pub const cpu_cortexR4 = Cpu{ pub const cpu_cortexR4f = Cpu{ .name = "cortex-r4f", .llvm_name = "cortex-r4f", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_thumb2, + &feature_rclass, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, &feature_avoidPartialCpsr, &feature_retAddrStack, &feature_slowfpvmlx, @@ -1633,14 +1633,14 @@ pub const cpu_cortexR4f = Cpu{ pub const cpu_cortexR5 = Cpu{ .name = "cortex-r5", .llvm_name = "cortex-r5", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_thumb2, + &feature_rclass, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, &feature_avoidPartialCpsr, &feature_hwdivArm, &feature_retAddrStack, @@ -1654,22 +1654,22 @@ pub const cpu_cortexR5 = Cpu{ pub const cpu_cortexR52 = Cpu{ .name = "cortex-r52", .llvm_name = "cortex-r52", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, - &feature_dfb, - &feature_hwdivArm, - &feature_dsp, - &feature_fp16, - &feature_v7clrex, &feature_crc, + &feature_fp16, + &feature_perfmon, &feature_thumb2, + &feature_rclass, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_v7clrex, + &feature_dfb, + &feature_dsp, &feature_fpao, &feature_useAa, &feature_useMisched, @@ -1679,14 +1679,14 @@ pub const cpu_cortexR52 = Cpu{ pub const cpu_cortexR7 = Cpu{ .name = "cortex-r7", .llvm_name = "cortex-r7", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_thumb2, + &feature_rclass, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, &feature_avoidPartialCpsr, &feature_fp16, &feature_hwdivArm, @@ -1702,14 +1702,14 @@ pub const cpu_cortexR7 = Cpu{ pub const cpu_cortexR8 = Cpu{ .name = "cortex-r8", .llvm_name = "cortex-r8", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_rclass, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_dsp, - &feature_v7clrex, + &feature_db, &feature_thumb2, + &feature_rclass, + &feature_hwdiv, + &feature_v7clrex, + &feature_dsp, &feature_avoidPartialCpsr, &feature_fp16, &feature_hwdivArm, @@ -1725,22 +1725,22 @@ pub const cpu_cortexR8 = Cpu{ pub const cpu_cyclone = Cpu{ .name = "cyclone", .llvm_name = "cyclone", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_avoidMovsShop, &feature_avoidPartialCpsr, &feature_crypto, @@ -1757,217 +1757,217 @@ pub const cpu_cyclone = Cpu{ pub const cpu_ep9312 = Cpu{ .name = "ep9312", .llvm_name = "ep9312", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_exynosM1 = Cpu{ .name = "exynos-m1", .llvm_name = "exynos-m1", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, - &feature_slowVdup32, - &feature_expandFpMlx, - &feature_slowVgetlni32, &feature_fuseLiterals, - &feature_wideStrideVfp, - &feature_slowFpBrcc, - &feature_retAddrStack, - &feature_dontWidenVmovs, - &feature_zcz, - &feature_fuseAes, - &feature_slowfpvmlx, &feature_profUnpr, + &feature_wideStrideVfp, + &feature_slowVdup32, + &feature_slowVgetlni32, + &feature_dontWidenVmovs, + &feature_fuseAes, + &feature_retAddrStack, + &feature_expandFpMlx, + &feature_zcz, &feature_useAa, + &feature_slowfpvmlx, + &feature_slowFpBrcc, }, }; pub const cpu_exynosM2 = Cpu{ .name = "exynos-m2", .llvm_name = "exynos-m2", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, - &feature_slowVdup32, - &feature_expandFpMlx, - &feature_slowVgetlni32, &feature_fuseLiterals, - &feature_wideStrideVfp, - &feature_slowFpBrcc, - &feature_retAddrStack, - &feature_dontWidenVmovs, - &feature_zcz, - &feature_fuseAes, - &feature_slowfpvmlx, &feature_profUnpr, + &feature_wideStrideVfp, + &feature_slowVdup32, + &feature_slowVgetlni32, + &feature_dontWidenVmovs, + &feature_fuseAes, + &feature_retAddrStack, + &feature_expandFpMlx, + &feature_zcz, &feature_useAa, + &feature_slowfpvmlx, + &feature_slowFpBrcc, }, }; pub const cpu_exynosM3 = Cpu{ .name = "exynos-m3", .llvm_name = "exynos-m3", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, - &feature_slowVdup32, - &feature_expandFpMlx, - &feature_slowVgetlni32, &feature_fuseLiterals, - &feature_wideStrideVfp, - &feature_slowFpBrcc, - &feature_retAddrStack, - &feature_dontWidenVmovs, - &feature_zcz, - &feature_fuseAes, - &feature_slowfpvmlx, &feature_profUnpr, + &feature_wideStrideVfp, + &feature_slowVdup32, + &feature_slowVgetlni32, + &feature_dontWidenVmovs, + &feature_fuseAes, + &feature_retAddrStack, + &feature_expandFpMlx, + &feature_zcz, &feature_useAa, + &feature_slowfpvmlx, + &feature_slowFpBrcc, }, }; pub const cpu_exynosM4 = Cpu{ .name = "exynos-m4", .llvm_name = "exynos-m4", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_dotprod, &feature_fullfp16, - &feature_slowVdup32, - &feature_expandFpMlx, - &feature_slowVgetlni32, &feature_fuseLiterals, - &feature_wideStrideVfp, - &feature_slowFpBrcc, - &feature_retAddrStack, - &feature_dontWidenVmovs, - &feature_zcz, - &feature_fuseAes, - &feature_slowfpvmlx, &feature_profUnpr, + &feature_wideStrideVfp, + &feature_slowVdup32, + &feature_slowVgetlni32, + &feature_dontWidenVmovs, + &feature_fuseAes, + &feature_retAddrStack, + &feature_expandFpMlx, + &feature_zcz, &feature_useAa, + &feature_slowfpvmlx, + &feature_slowFpBrcc, }, }; pub const cpu_exynosM5 = Cpu{ .name = "exynos-m5", .llvm_name = "exynos-m5", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_dotprod, &feature_fullfp16, - &feature_slowVdup32, - &feature_expandFpMlx, - &feature_slowVgetlni32, &feature_fuseLiterals, - &feature_wideStrideVfp, - &feature_slowFpBrcc, - &feature_retAddrStack, - &feature_dontWidenVmovs, - &feature_zcz, - &feature_fuseAes, - &feature_slowfpvmlx, &feature_profUnpr, + &feature_wideStrideVfp, + &feature_slowVdup32, + &feature_slowVgetlni32, + &feature_dontWidenVmovs, + &feature_fuseAes, + &feature_retAddrStack, + &feature_expandFpMlx, + &feature_zcz, &feature_useAa, + &feature_slowfpvmlx, + &feature_slowFpBrcc, }, }; pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_iwmmxt = Cpu{ .name = "iwmmxt", .llvm_name = "iwmmxt", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_krait = Cpu{ .name = "krait", .llvm_name = "krait", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidPartialCpsr, &feature_vldnAlign, &feature_fp16, @@ -1983,22 +1983,22 @@ pub const cpu_krait = Cpu{ pub const cpu_kryo = Cpu{ .name = "kryo", .llvm_name = "kryo", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, + &feature_crc, + &feature_fp16, &feature_perfmon, + &feature_thumb2, &feature_mp, - &feature_hwdivArm, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, }, }; @@ -2006,7 +2006,7 @@ pub const cpu_kryo = Cpu{ pub const cpu_mpcore = Cpu{ .name = "mpcore", .llvm_name = "mpcore", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_slowfpvmlx, &feature_fpregs, &feature_vfp2, @@ -2016,30 +2016,30 @@ pub const cpu_mpcore = Cpu{ pub const cpu_mpcorenovfp = Cpu{ .name = "mpcorenovfp", .llvm_name = "mpcorenovfp", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_neoverseN1 = Cpu{ .name = "neoverse-n1", .llvm_name = "neoverse-n1", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_trustzone, + .dependencies = &[_]*const Feature { + &feature_d32, + &feature_hwdivArm, &feature_fpregs, &feature_db, - &feature_acquireRelease, - &feature_d32, - &feature_perfmon, - &feature_mp, + &feature_crc, + &feature_fp16, &feature_ras, - &feature_hwdivArm, + &feature_perfmon, + &feature_thumb2, + &feature_mp, + &feature_acquireRelease, + &feature_hwdiv, + &feature_trustzone, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_fp16, - &feature_v7clrex, - &feature_crc, - &feature_thumb2, &feature_crypto, &feature_dotprod, }, @@ -2048,25 +2048,25 @@ pub const cpu_neoverseN1 = Cpu{ pub const cpu_sc000 = Cpu{ .name = "sc000", .llvm_name = "sc000", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_db, + &feature_mclass, &feature_strictAlign, &feature_noarm, - &feature_mclass, }, }; pub const cpu_sc300 = Cpu{ .name = "sc300", .llvm_name = "sc300", - .subfeatures = &[_]*const Feature { - &feature_hwdiv, - &feature_db, + .dependencies = &[_]*const Feature { &feature_perfmon, - &feature_noarm, - &feature_v7clrex, + &feature_db, &feature_mclass, &feature_thumb2, + &feature_hwdiv, + &feature_v7clrex, + &feature_noarm, &feature_noBranchPredictor, &feature_useAa, &feature_useMisched, @@ -2076,43 +2076,43 @@ pub const cpu_sc300 = Cpu{ pub const cpu_strongarm = Cpu{ .name = "strongarm", .llvm_name = "strongarm", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_strongarm110 = Cpu{ .name = "strongarm110", .llvm_name = "strongarm110", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_strongarm1100 = Cpu{ .name = "strongarm1100", .llvm_name = "strongarm1100", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_strongarm1110 = Cpu{ .name = "strongarm1110", .llvm_name = "strongarm1110", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_swift = Cpu{ .name = "swift", .llvm_name = "swift", - .subfeatures = &[_]*const Feature { - &feature_fpregs, - &feature_db, + .dependencies = &[_]*const Feature { &feature_d32, &feature_perfmon, + &feature_fpregs, + &feature_db, + &feature_thumb2, + &feature_v7clrex, &feature_dsp, &feature_aclass, - &feature_v7clrex, - &feature_thumb2, &feature_avoidMovsShop, &feature_avoidPartialCpsr, &feature_hwdivArm, @@ -2139,7 +2139,7 @@ pub const cpu_swift = Cpu{ pub const cpu_xscale = Cpu{ .name = "xscale", .llvm_name = "xscale", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; diff --git a/lib/std/target/avr.zig b/lib/std/target/avr.zig index 79cbb04dc4..de44399cea 100644 --- a/lib/std/target/avr.zig +++ b/lib/std/target/avr.zig @@ -4,126 +4,126 @@ const Cpu = @import("std").target.Cpu; pub const feature_addsubiw = Feature{ .name = "addsubiw", .description = "Enable 16-bit register-immediate addition and subtraction instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_break = Feature{ .name = "break", .description = "The device supports the `BREAK` debugging instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_des = Feature{ .name = "des", .description = "The device supports the `DES k` encryption instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_eijmpcall = Feature{ .name = "eijmpcall", .description = "The device supports the `EIJMP`/`EICALL` instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_elpm = Feature{ .name = "elpm", .description = "The device supports the ELPM instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_elpmx = Feature{ .name = "elpmx", .description = "The device supports the `ELPM Rd, Z[+]` instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ijmpcall = Feature{ .name = "ijmpcall", .description = "The device supports `IJMP`/`ICALL`instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_jmpcall = Feature{ .name = "jmpcall", .description = "The device supports the `JMP` and `CALL` instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lpm = Feature{ .name = "lpm", .description = "The device supports the `LPM` instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lpmx = Feature{ .name = "lpmx", .description = "The device supports the `LPM Rd, Z[+]` instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_movw = Feature{ .name = "movw", .description = "The device supports the 16-bit MOVW instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mul = Feature{ .name = "mul", .description = "The device supports the multiplication instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rmw = Feature{ .name = "rmw", .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_spm = Feature{ .name = "spm", .description = "The device supports the `SPM` instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_spmx = Feature{ .name = "spmx", .description = "The device supports the `SPM Z+` instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sram = Feature{ .name = "sram", .description = "The device has random access memory", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_smallstack = Feature{ .name = "smallstack", .description = "The device has an 8-bit stack pointer", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tinyencoding = Feature{ .name = "tinyencoding", .description = "The device has Tiny core specific instruction encodings", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -151,48 +151,48 @@ pub const features = &[_]*const Feature { pub const cpu_at43usb320 = Cpu{ .name = "at43usb320", .llvm_name = "at43usb320", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, + .dependencies = &[_]*const Feature { &feature_elpm, - &feature_sram, + &feature_lpm, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_at43usb355 = Cpu{ .name = "at43usb355", .llvm_name = "at43usb355", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_at76c711 = Cpu{ .name = "at76c711", .llvm_name = "at76c711", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_at86rf401 = Cpu{ .name = "at86rf401", .llvm_name = "at86rf401", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, &feature_lpmx, &feature_movw, }, @@ -201,450 +201,450 @@ pub const cpu_at86rf401 = Cpu{ pub const cpu_at90c8534 = Cpu{ .name = "at90c8534", .llvm_name = "at90c8534", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90can128 = Cpu{ .name = "at90can128", .llvm_name = "at90can128", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90can32 = Cpu{ .name = "at90can32", .llvm_name = "at90can32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90can64 = Cpu{ .name = "at90can64", .llvm_name = "at90can64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm1 = Cpu{ .name = "at90pwm1", .llvm_name = "at90pwm1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm161 = Cpu{ .name = "at90pwm161", .llvm_name = "at90pwm161", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm2 = Cpu{ .name = "at90pwm2", .llvm_name = "at90pwm2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm216 = Cpu{ .name = "at90pwm216", .llvm_name = "at90pwm216", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm2b = Cpu{ .name = "at90pwm2b", .llvm_name = "at90pwm2b", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm3 = Cpu{ .name = "at90pwm3", .llvm_name = "at90pwm3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm316 = Cpu{ .name = "at90pwm316", .llvm_name = "at90pwm316", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm3b = Cpu{ .name = "at90pwm3b", .llvm_name = "at90pwm3b", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90pwm81 = Cpu{ .name = "at90pwm81", .llvm_name = "at90pwm81", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90s1200 = Cpu{ .name = "at90s1200", .llvm_name = "at90s1200", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_at90s2313 = Cpu{ .name = "at90s2313", .llvm_name = "at90s2313", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s2323 = Cpu{ .name = "at90s2323", .llvm_name = "at90s2323", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s2333 = Cpu{ .name = "at90s2333", .llvm_name = "at90s2333", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s2343 = Cpu{ .name = "at90s2343", .llvm_name = "at90s2343", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s4414 = Cpu{ .name = "at90s4414", .llvm_name = "at90s4414", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s4433 = Cpu{ .name = "at90s4433", .llvm_name = "at90s4433", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s4434 = Cpu{ .name = "at90s4434", .llvm_name = "at90s4434", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s8515 = Cpu{ .name = "at90s8515", .llvm_name = "at90s8515", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90s8535 = Cpu{ .name = "at90s8535", .llvm_name = "at90s8535", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_at90scr100 = Cpu{ .name = "at90scr100", .llvm_name = "at90scr100", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb1286 = Cpu{ .name = "at90usb1286", .llvm_name = "at90usb1286", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb1287 = Cpu{ .name = "at90usb1287", .llvm_name = "at90usb1287", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb162 = Cpu{ .name = "at90usb162", .llvm_name = "at90usb162", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb646 = Cpu{ .name = "at90usb646", .llvm_name = "at90usb646", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb647 = Cpu{ .name = "at90usb647", .llvm_name = "at90usb647", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at90usb82 = Cpu{ .name = "at90usb82", .llvm_name = "at90usb82", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_at94k = Cpu{ .name = "at94k", .llvm_name = "at94k", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, &feature_lpmx, &feature_movw, &feature_mul, @@ -654,326 +654,326 @@ pub const cpu_at94k = Cpu{ pub const cpu_ata5272 = Cpu{ .name = "ata5272", .llvm_name = "ata5272", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata5505 = Cpu{ .name = "ata5505", .llvm_name = "ata5505", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata5790 = Cpu{ .name = "ata5790", .llvm_name = "ata5790", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata5795 = Cpu{ .name = "ata5795", .llvm_name = "ata5795", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata6285 = Cpu{ .name = "ata6285", .llvm_name = "ata6285", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata6286 = Cpu{ .name = "ata6286", .llvm_name = "ata6286", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_ata6289 = Cpu{ .name = "ata6289", .llvm_name = "ata6289", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega103 = Cpu{ .name = "atmega103", .llvm_name = "atmega103", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, + .dependencies = &[_]*const Feature { &feature_elpm, - &feature_sram, + &feature_lpm, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_atmega128 = Cpu{ .name = "atmega128", .llvm_name = "atmega128", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega1280 = Cpu{ .name = "atmega1280", .llvm_name = "atmega1280", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega1281 = Cpu{ .name = "atmega1281", .llvm_name = "atmega1281", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega1284 = Cpu{ .name = "atmega1284", .llvm_name = "atmega1284", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega1284p = Cpu{ .name = "atmega1284p", .llvm_name = "atmega1284p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega1284rfr2 = Cpu{ .name = "atmega1284rfr2", .llvm_name = "atmega1284rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega128a = Cpu{ .name = "atmega128a", .llvm_name = "atmega128a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega128rfa1 = Cpu{ .name = "atmega128rfa1", .llvm_name = "atmega128rfa1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega128rfr2 = Cpu{ .name = "atmega128rfr2", .llvm_name = "atmega128rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16 = Cpu{ .name = "atmega16", .llvm_name = "atmega16", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega161 = Cpu{ .name = "atmega161", .llvm_name = "atmega161", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, &feature_lpmx, &feature_movw, &feature_mul, @@ -984,29 +984,29 @@ pub const cpu_atmega161 = Cpu{ pub const cpu_atmega162 = Cpu{ .name = "atmega162", .llvm_name = "atmega162", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega163 = Cpu{ .name = "atmega163", .llvm_name = "atmega163", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, &feature_lpmx, &feature_movw, &feature_mul, @@ -1017,1508 +1017,1508 @@ pub const cpu_atmega163 = Cpu{ pub const cpu_atmega164a = Cpu{ .name = "atmega164a", .llvm_name = "atmega164a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega164p = Cpu{ .name = "atmega164p", .llvm_name = "atmega164p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega164pa = Cpu{ .name = "atmega164pa", .llvm_name = "atmega164pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega165 = Cpu{ .name = "atmega165", .llvm_name = "atmega165", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega165a = Cpu{ .name = "atmega165a", .llvm_name = "atmega165a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega165p = Cpu{ .name = "atmega165p", .llvm_name = "atmega165p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega165pa = Cpu{ .name = "atmega165pa", .llvm_name = "atmega165pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega168 = Cpu{ .name = "atmega168", .llvm_name = "atmega168", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega168a = Cpu{ .name = "atmega168a", .llvm_name = "atmega168a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega168p = Cpu{ .name = "atmega168p", .llvm_name = "atmega168p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega168pa = Cpu{ .name = "atmega168pa", .llvm_name = "atmega168pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega169 = Cpu{ .name = "atmega169", .llvm_name = "atmega169", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega169a = Cpu{ .name = "atmega169a", .llvm_name = "atmega169a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega169p = Cpu{ .name = "atmega169p", .llvm_name = "atmega169p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega169pa = Cpu{ .name = "atmega169pa", .llvm_name = "atmega169pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16a = Cpu{ .name = "atmega16a", .llvm_name = "atmega16a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16hva = Cpu{ .name = "atmega16hva", .llvm_name = "atmega16hva", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16hva2 = Cpu{ .name = "atmega16hva2", .llvm_name = "atmega16hva2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16hvb = Cpu{ .name = "atmega16hvb", .llvm_name = "atmega16hvb", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16hvbrevb = Cpu{ .name = "atmega16hvbrevb", .llvm_name = "atmega16hvbrevb", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16m1 = Cpu{ .name = "atmega16m1", .llvm_name = "atmega16m1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16u2 = Cpu{ .name = "atmega16u2", .llvm_name = "atmega16u2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega16u4 = Cpu{ .name = "atmega16u4", .llvm_name = "atmega16u4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega2560 = Cpu{ .name = "atmega2560", .llvm_name = "atmega2560", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_elpmx, - &feature_sram, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atmega2561 = Cpu{ .name = "atmega2561", .llvm_name = "atmega2561", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_elpmx, - &feature_sram, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atmega2564rfr2 = Cpu{ .name = "atmega2564rfr2", .llvm_name = "atmega2564rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_elpmx, - &feature_sram, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atmega256rfr2 = Cpu{ .name = "atmega256rfr2", .llvm_name = "atmega256rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_elpmx, - &feature_sram, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atmega32 = Cpu{ .name = "atmega32", .llvm_name = "atmega32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega323 = Cpu{ .name = "atmega323", .llvm_name = "atmega323", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega324a = Cpu{ .name = "atmega324a", .llvm_name = "atmega324a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega324p = Cpu{ .name = "atmega324p", .llvm_name = "atmega324p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega324pa = Cpu{ .name = "atmega324pa", .llvm_name = "atmega324pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega325 = Cpu{ .name = "atmega325", .llvm_name = "atmega325", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3250 = Cpu{ .name = "atmega3250", .llvm_name = "atmega3250", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3250a = Cpu{ .name = "atmega3250a", .llvm_name = "atmega3250a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3250p = Cpu{ .name = "atmega3250p", .llvm_name = "atmega3250p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3250pa = Cpu{ .name = "atmega3250pa", .llvm_name = "atmega3250pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega325a = Cpu{ .name = "atmega325a", .llvm_name = "atmega325a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega325p = Cpu{ .name = "atmega325p", .llvm_name = "atmega325p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega325pa = Cpu{ .name = "atmega325pa", .llvm_name = "atmega325pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega328 = Cpu{ .name = "atmega328", .llvm_name = "atmega328", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega328p = Cpu{ .name = "atmega328p", .llvm_name = "atmega328p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega329 = Cpu{ .name = "atmega329", .llvm_name = "atmega329", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3290 = Cpu{ .name = "atmega3290", .llvm_name = "atmega3290", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3290a = Cpu{ .name = "atmega3290a", .llvm_name = "atmega3290a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3290p = Cpu{ .name = "atmega3290p", .llvm_name = "atmega3290p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega3290pa = Cpu{ .name = "atmega3290pa", .llvm_name = "atmega3290pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega329a = Cpu{ .name = "atmega329a", .llvm_name = "atmega329a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega329p = Cpu{ .name = "atmega329p", .llvm_name = "atmega329p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega329pa = Cpu{ .name = "atmega329pa", .llvm_name = "atmega329pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32a = Cpu{ .name = "atmega32a", .llvm_name = "atmega32a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32c1 = Cpu{ .name = "atmega32c1", .llvm_name = "atmega32c1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32hvb = Cpu{ .name = "atmega32hvb", .llvm_name = "atmega32hvb", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32hvbrevb = Cpu{ .name = "atmega32hvbrevb", .llvm_name = "atmega32hvbrevb", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32m1 = Cpu{ .name = "atmega32m1", .llvm_name = "atmega32m1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32u2 = Cpu{ .name = "atmega32u2", .llvm_name = "atmega32u2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32u4 = Cpu{ .name = "atmega32u4", .llvm_name = "atmega32u4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega32u6 = Cpu{ .name = "atmega32u6", .llvm_name = "atmega32u6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega406 = Cpu{ .name = "atmega406", .llvm_name = "atmega406", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega48 = Cpu{ .name = "atmega48", .llvm_name = "atmega48", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega48a = Cpu{ .name = "atmega48a", .llvm_name = "atmega48a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega48p = Cpu{ .name = "atmega48p", .llvm_name = "atmega48p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega48pa = Cpu{ .name = "atmega48pa", .llvm_name = "atmega48pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64 = Cpu{ .name = "atmega64", .llvm_name = "atmega64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega640 = Cpu{ .name = "atmega640", .llvm_name = "atmega640", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega644 = Cpu{ .name = "atmega644", .llvm_name = "atmega644", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega644a = Cpu{ .name = "atmega644a", .llvm_name = "atmega644a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega644p = Cpu{ .name = "atmega644p", .llvm_name = "atmega644p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega644pa = Cpu{ .name = "atmega644pa", .llvm_name = "atmega644pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega644rfr2 = Cpu{ .name = "atmega644rfr2", .llvm_name = "atmega644rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega645 = Cpu{ .name = "atmega645", .llvm_name = "atmega645", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6450 = Cpu{ .name = "atmega6450", .llvm_name = "atmega6450", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6450a = Cpu{ .name = "atmega6450a", .llvm_name = "atmega6450a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6450p = Cpu{ .name = "atmega6450p", .llvm_name = "atmega6450p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega645a = Cpu{ .name = "atmega645a", .llvm_name = "atmega645a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega645p = Cpu{ .name = "atmega645p", .llvm_name = "atmega645p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega649 = Cpu{ .name = "atmega649", .llvm_name = "atmega649", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6490 = Cpu{ .name = "atmega6490", .llvm_name = "atmega6490", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6490a = Cpu{ .name = "atmega6490a", .llvm_name = "atmega6490a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega6490p = Cpu{ .name = "atmega6490p", .llvm_name = "atmega6490p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega649a = Cpu{ .name = "atmega649a", .llvm_name = "atmega649a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega649p = Cpu{ .name = "atmega649p", .llvm_name = "atmega649p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64a = Cpu{ .name = "atmega64a", .llvm_name = "atmega64a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64c1 = Cpu{ .name = "atmega64c1", .llvm_name = "atmega64c1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64hve = Cpu{ .name = "atmega64hve", .llvm_name = "atmega64hve", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64m1 = Cpu{ .name = "atmega64m1", .llvm_name = "atmega64m1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega64rfr2 = Cpu{ .name = "atmega64rfr2", .llvm_name = "atmega64rfr2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega8 = Cpu{ .name = "atmega8", .llvm_name = "atmega8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega8515 = Cpu{ .name = "atmega8515", .llvm_name = "atmega8515", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, &feature_lpmx, &feature_movw, &feature_mul, @@ -2529,11 +2529,11 @@ pub const cpu_atmega8515 = Cpu{ pub const cpu_atmega8535 = Cpu{ .name = "atmega8535", .llvm_name = "atmega8535", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, &feature_lpmx, &feature_movw, &feature_mul, @@ -2544,149 +2544,149 @@ pub const cpu_atmega8535 = Cpu{ pub const cpu_atmega88 = Cpu{ .name = "atmega88", .llvm_name = "atmega88", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega88a = Cpu{ .name = "atmega88a", .llvm_name = "atmega88a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega88p = Cpu{ .name = "atmega88p", .llvm_name = "atmega88p", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega88pa = Cpu{ .name = "atmega88pa", .llvm_name = "atmega88pa", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega8a = Cpu{ .name = "atmega8a", .llvm_name = "atmega8a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega8hva = Cpu{ .name = "atmega8hva", .llvm_name = "atmega8hva", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atmega8u2 = Cpu{ .name = "atmega8u2", .llvm_name = "atmega8u2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny10 = Cpu{ .name = "attiny10", .llvm_name = "attiny10", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny102 = Cpu{ .name = "attiny102", .llvm_name = "attiny102", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny104 = Cpu{ .name = "attiny104", .llvm_name = "attiny104", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny11 = Cpu{ .name = "attiny11", .llvm_name = "attiny11", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpm, }, }; @@ -2694,7 +2694,7 @@ pub const cpu_attiny11 = Cpu{ pub const cpu_attiny12 = Cpu{ .name = "attiny12", .llvm_name = "attiny12", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpm, }, }; @@ -2702,37 +2702,37 @@ pub const cpu_attiny12 = Cpu{ pub const cpu_attiny13 = Cpu{ .name = "attiny13", .llvm_name = "attiny13", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny13a = Cpu{ .name = "attiny13a", .llvm_name = "attiny13a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny15 = Cpu{ .name = "attiny15", .llvm_name = "attiny15", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpm, }, }; @@ -2740,139 +2740,139 @@ pub const cpu_attiny15 = Cpu{ pub const cpu_attiny1634 = Cpu{ .name = "attiny1634", .llvm_name = "attiny1634", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny167 = Cpu{ .name = "attiny167", .llvm_name = "attiny167", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny20 = Cpu{ .name = "attiny20", .llvm_name = "attiny20", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny22 = Cpu{ .name = "attiny22", .llvm_name = "attiny22", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_attiny2313 = Cpu{ .name = "attiny2313", .llvm_name = "attiny2313", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny2313a = Cpu{ .name = "attiny2313a", .llvm_name = "attiny2313a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny24 = Cpu{ .name = "attiny24", .llvm_name = "attiny24", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny24a = Cpu{ .name = "attiny24a", .llvm_name = "attiny24a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny25 = Cpu{ .name = "attiny25", .llvm_name = "attiny25", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny26 = Cpu{ .name = "attiny26", .llvm_name = "attiny26", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, &feature_lpmx, }, }; @@ -2880,37 +2880,37 @@ pub const cpu_attiny26 = Cpu{ pub const cpu_attiny261 = Cpu{ .name = "attiny261", .llvm_name = "attiny261", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny261a = Cpu{ .name = "attiny261a", .llvm_name = "attiny261a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny28 = Cpu{ .name = "attiny28", .llvm_name = "attiny28", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpm, }, }; @@ -2918,1277 +2918,1277 @@ pub const cpu_attiny28 = Cpu{ pub const cpu_attiny4 = Cpu{ .name = "attiny4", .llvm_name = "attiny4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny40 = Cpu{ .name = "attiny40", .llvm_name = "attiny40", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny4313 = Cpu{ .name = "attiny4313", .llvm_name = "attiny4313", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny43u = Cpu{ .name = "attiny43u", .llvm_name = "attiny43u", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny44 = Cpu{ .name = "attiny44", .llvm_name = "attiny44", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny44a = Cpu{ .name = "attiny44a", .llvm_name = "attiny44a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny45 = Cpu{ .name = "attiny45", .llvm_name = "attiny45", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny461 = Cpu{ .name = "attiny461", .llvm_name = "attiny461", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny461a = Cpu{ .name = "attiny461a", .llvm_name = "attiny461a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny48 = Cpu{ .name = "attiny48", .llvm_name = "attiny48", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny5 = Cpu{ .name = "attiny5", .llvm_name = "attiny5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_attiny828 = Cpu{ .name = "attiny828", .llvm_name = "attiny828", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny84 = Cpu{ .name = "attiny84", .llvm_name = "attiny84", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny84a = Cpu{ .name = "attiny84a", .llvm_name = "attiny84a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny85 = Cpu{ .name = "attiny85", .llvm_name = "attiny85", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny861 = Cpu{ .name = "attiny861", .llvm_name = "attiny861", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny861a = Cpu{ .name = "attiny861a", .llvm_name = "attiny861a", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny87 = Cpu{ .name = "attiny87", .llvm_name = "attiny87", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny88 = Cpu{ .name = "attiny88", .llvm_name = "attiny88", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_attiny9 = Cpu{ .name = "attiny9", .llvm_name = "attiny9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_atxmega128a1 = Cpu{ .name = "atxmega128a1", .llvm_name = "atxmega128a1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega128a1u = Cpu{ .name = "atxmega128a1u", .llvm_name = "atxmega128a1u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128a3 = Cpu{ .name = "atxmega128a3", .llvm_name = "atxmega128a3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega128a3u = Cpu{ .name = "atxmega128a3u", .llvm_name = "atxmega128a3u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128a4u = Cpu{ .name = "atxmega128a4u", .llvm_name = "atxmega128a4u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128b1 = Cpu{ .name = "atxmega128b1", .llvm_name = "atxmega128b1", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128b3 = Cpu{ .name = "atxmega128b3", .llvm_name = "atxmega128b3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128c3 = Cpu{ .name = "atxmega128c3", .llvm_name = "atxmega128c3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega128d3 = Cpu{ .name = "atxmega128d3", .llvm_name = "atxmega128d3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega128d4 = Cpu{ .name = "atxmega128d4", .llvm_name = "atxmega128d4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega16a4 = Cpu{ .name = "atxmega16a4", .llvm_name = "atxmega16a4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega16a4u = Cpu{ .name = "atxmega16a4u", .llvm_name = "atxmega16a4u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega16c4 = Cpu{ .name = "atxmega16c4", .llvm_name = "atxmega16c4", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega16d4 = Cpu{ .name = "atxmega16d4", .llvm_name = "atxmega16d4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega16e5 = Cpu{ .name = "atxmega16e5", .llvm_name = "atxmega16e5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega192a3 = Cpu{ .name = "atxmega192a3", .llvm_name = "atxmega192a3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega192a3u = Cpu{ .name = "atxmega192a3u", .llvm_name = "atxmega192a3u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega192c3 = Cpu{ .name = "atxmega192c3", .llvm_name = "atxmega192c3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega192d3 = Cpu{ .name = "atxmega192d3", .llvm_name = "atxmega192d3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega256a3 = Cpu{ .name = "atxmega256a3", .llvm_name = "atxmega256a3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega256a3b = Cpu{ .name = "atxmega256a3b", .llvm_name = "atxmega256a3b", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega256a3bu = Cpu{ .name = "atxmega256a3bu", .llvm_name = "atxmega256a3bu", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega256a3u = Cpu{ .name = "atxmega256a3u", .llvm_name = "atxmega256a3u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega256c3 = Cpu{ .name = "atxmega256c3", .llvm_name = "atxmega256c3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega256d3 = Cpu{ .name = "atxmega256d3", .llvm_name = "atxmega256d3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega32a4 = Cpu{ .name = "atxmega32a4", .llvm_name = "atxmega32a4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega32a4u = Cpu{ .name = "atxmega32a4u", .llvm_name = "atxmega32a4u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega32c4 = Cpu{ .name = "atxmega32c4", .llvm_name = "atxmega32c4", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega32d4 = Cpu{ .name = "atxmega32d4", .llvm_name = "atxmega32d4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega32e5 = Cpu{ .name = "atxmega32e5", .llvm_name = "atxmega32e5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega32x1 = Cpu{ .name = "atxmega32x1", .llvm_name = "atxmega32x1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega384c3 = Cpu{ .name = "atxmega384c3", .llvm_name = "atxmega384c3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega384d3 = Cpu{ .name = "atxmega384d3", .llvm_name = "atxmega384d3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega64a1 = Cpu{ .name = "atxmega64a1", .llvm_name = "atxmega64a1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega64a1u = Cpu{ .name = "atxmega64a1u", .llvm_name = "atxmega64a1u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64a3 = Cpu{ .name = "atxmega64a3", .llvm_name = "atxmega64a3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega64a3u = Cpu{ .name = "atxmega64a3u", .llvm_name = "atxmega64a3u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64a4u = Cpu{ .name = "atxmega64a4u", .llvm_name = "atxmega64a4u", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64b1 = Cpu{ .name = "atxmega64b1", .llvm_name = "atxmega64b1", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64b3 = Cpu{ .name = "atxmega64b3", .llvm_name = "atxmega64b3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64c3 = Cpu{ .name = "atxmega64c3", .llvm_name = "atxmega64c3", - .subfeatures = &[_]*const Feature { - &feature_rmw, + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_des, - &feature_ijmpcall, - &feature_movw, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_rmw, + &feature_mul, + &feature_eijmpcall, + &feature_movw, + &feature_addsubiw, }, }; pub const cpu_atxmega64d3 = Cpu{ .name = "atxmega64d3", .llvm_name = "atxmega64d3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega64d4 = Cpu{ .name = "atxmega64d4", .llvm_name = "atxmega64d4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_atxmega8e5 = Cpu{ .name = "atxmega8e5", .llvm_name = "atxmega8e5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avr1 = Cpu{ .name = "avr1", .llvm_name = "avr1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpm, }, }; @@ -4196,319 +4196,319 @@ pub const cpu_avr1 = Cpu{ pub const cpu_avr2 = Cpu{ .name = "avr2", .llvm_name = "avr2", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_addsubiw, }, }; pub const cpu_avr25 = Cpu{ .name = "avr25", .llvm_name = "avr25", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_avr3 = Cpu{ .name = "avr3", .llvm_name = "avr3", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, + .dependencies = &[_]*const Feature { &feature_lpm, - &feature_sram, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_avr31 = Cpu{ .name = "avr31", .llvm_name = "avr31", - .subfeatures = &[_]*const Feature { - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, + .dependencies = &[_]*const Feature { &feature_elpm, - &feature_sram, + &feature_lpm, &feature_ijmpcall, + &feature_sram, + &feature_jmpcall, + &feature_addsubiw, }, }; pub const cpu_avr35 = Cpu{ .name = "avr35", .llvm_name = "avr35", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_avr4 = Cpu{ .name = "avr4", .llvm_name = "avr4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_break, &feature_lpm, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_avr5 = Cpu{ .name = "avr5", .llvm_name = "avr5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_avr51 = Cpu{ .name = "avr51", .llvm_name = "avr51", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, + &feature_spm, + &feature_lpm, + &feature_ijmpcall, &feature_elpmx, &feature_sram, - &feature_ijmpcall, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; pub const cpu_avr6 = Cpu{ .name = "avr6", .llvm_name = "avr6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_elpmx, - &feature_sram, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrtiny = Cpu{ .name = "avrtiny", .llvm_name = "avrtiny", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_break, - &feature_sram, &feature_tinyencoding, + &feature_sram, }, }; pub const cpu_avrxmega1 = Cpu{ .name = "avrxmega1", .llvm_name = "avrxmega1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega2 = Cpu{ .name = "avrxmega2", .llvm_name = "avrxmega2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega3 = Cpu{ .name = "avrxmega3", .llvm_name = "avrxmega3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega4 = Cpu{ .name = "avrxmega4", .llvm_name = "avrxmega4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega5 = Cpu{ .name = "avrxmega5", .llvm_name = "avrxmega5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega6 = Cpu{ .name = "avrxmega6", .llvm_name = "avrxmega6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_avrxmega7 = Cpu{ .name = "avrxmega7", .llvm_name = "avrxmega7", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, - &feature_lpm, - &feature_break, - &feature_mul, &feature_elpm, - &feature_eijmpcall, - &feature_elpmx, - &feature_sram, - &feature_des, + &feature_lpm, + &feature_spm, &feature_ijmpcall, &feature_movw, + &feature_sram, &feature_spmx, + &feature_break, + &feature_jmpcall, + &feature_des, + &feature_mul, + &feature_eijmpcall, + &feature_elpmx, + &feature_addsubiw, }, }; pub const cpu_m3000 = Cpu{ .name = "m3000", .llvm_name = "m3000", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_lpmx, - &feature_spm, - &feature_addsubiw, - &feature_jmpcall, &feature_lpm, - &feature_break, - &feature_mul, - &feature_sram, + &feature_spm, &feature_ijmpcall, + &feature_sram, + &feature_break, + &feature_jmpcall, + &feature_mul, &feature_movw, + &feature_addsubiw, }, }; diff --git a/lib/std/target/bpf.zig b/lib/std/target/bpf.zig index d36f9f2e1d..9dc27093a6 100644 --- a/lib/std/target/bpf.zig +++ b/lib/std/target/bpf.zig @@ -4,21 +4,21 @@ const Cpu = @import("std").target.Cpu; pub const feature_alu32 = Feature{ .name = "alu32", .description = "Enable ALU32 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dummy = Feature{ .name = "dummy", .description = "unused feature", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dwarfris = Feature{ .name = "dwarfris", .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -31,35 +31,35 @@ pub const features = &[_]*const Feature { pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_probe = Cpu{ .name = "probe", .llvm_name = "probe", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_v1 = Cpu{ .name = "v1", .llvm_name = "v1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_v2 = Cpu{ .name = "v2", .llvm_name = "v2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_v3 = Cpu{ .name = "v3", .llvm_name = "v3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; diff --git a/lib/std/target/hexagon.zig b/lib/std/target/hexagon.zig index 3051f3273a..a007ee10cf 100644 --- a/lib/std/target/hexagon.zig +++ b/lib/std/target/hexagon.zig @@ -4,35 +4,35 @@ const Cpu = @import("std").target.Cpu; pub const feature_duplex = Feature{ .name = "duplex", .description = "Enable generation of duplex instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_longCalls = Feature{ .name = "long-calls", .description = "Use constant-extended calls", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mem_noshuf = Feature{ .name = "mem_noshuf", .description = "Supports mem_noshuf feature", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_memops = Feature{ .name = "memops", .description = "Use memop instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nvj = Feature{ .name = "nvj", .description = "Support for new-value jumps", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_packets, }, }; @@ -40,7 +40,7 @@ pub const feature_nvj = Feature{ pub const feature_nvs = Feature{ .name = "nvs", .description = "Support for new-value stores", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_packets, }, }; @@ -48,28 +48,28 @@ pub const feature_nvs = Feature{ pub const feature_noreturnStackElim = Feature{ .name = "noreturn-stack-elim", .description = "Eliminate stack allocation in a noreturn function when possible", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_packets = Feature{ .name = "packets", .description = "Support for instruction packets", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_reservedR19 = Feature{ .name = "reserved-r19", .description = "Reserve register R19", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_smallData = Feature{ .name = "small-data", .description = "Allow GP-relative addressing of global variables", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -89,7 +89,7 @@ pub const features = &[_]*const Feature { pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_memops, &feature_packets, @@ -102,7 +102,7 @@ pub const cpu_generic = Cpu{ pub const cpu_hexagonv5 = Cpu{ .name = "hexagonv5", .llvm_name = "hexagonv5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_memops, &feature_packets, @@ -115,7 +115,7 @@ pub const cpu_hexagonv5 = Cpu{ pub const cpu_hexagonv55 = Cpu{ .name = "hexagonv55", .llvm_name = "hexagonv55", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_memops, &feature_packets, @@ -128,7 +128,7 @@ pub const cpu_hexagonv55 = Cpu{ pub const cpu_hexagonv60 = Cpu{ .name = "hexagonv60", .llvm_name = "hexagonv60", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_memops, &feature_packets, @@ -141,7 +141,7 @@ pub const cpu_hexagonv60 = Cpu{ pub const cpu_hexagonv62 = Cpu{ .name = "hexagonv62", .llvm_name = "hexagonv62", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_memops, &feature_packets, @@ -154,7 +154,7 @@ pub const cpu_hexagonv62 = Cpu{ pub const cpu_hexagonv65 = Cpu{ .name = "hexagonv65", .llvm_name = "hexagonv65", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_mem_noshuf, &feature_memops, @@ -168,7 +168,7 @@ pub const cpu_hexagonv65 = Cpu{ pub const cpu_hexagonv66 = Cpu{ .name = "hexagonv66", .llvm_name = "hexagonv66", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_duplex, &feature_mem_noshuf, &feature_memops, diff --git a/lib/std/target/mips.zig b/lib/std/target/mips.zig index 17582a9313..e7c26230af 100644 --- a/lib/std/target/mips.zig +++ b/lib/std/target/mips.zig @@ -4,43 +4,43 @@ const Cpu = @import("std").target.Cpu; pub const feature_abs2008 = Feature{ .name = "abs2008", .description = "Disable IEEE 754-2008 abs.fmt mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_crc = Feature{ .name = "crc", .description = "Mips R6 CRC ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cnmips = Feature{ .name = "cnmips", .description = "Octeon cnMIPS Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, }, }; pub const feature_dsp = Feature{ .name = "dsp", .description = "Mips DSP ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dspr2 = Feature{ .name = "dspr2", .description = "Mips DSP-R2 ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dsp, }, }; @@ -48,7 +48,7 @@ pub const feature_dspr2 = Feature{ pub const feature_dspr3 = Feature{ .name = "dspr3", .description = "Mips DSP-R3 ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dsp, }, }; @@ -56,84 +56,84 @@ pub const feature_dspr3 = Feature{ pub const feature_eva = Feature{ .name = "eva", .description = "Mips EVA ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fp64 = Feature{ .name = "fp64", .description = "Support 64-bit FP registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fpxx = Feature{ .name = "fpxx", .description = "Support for FPXX", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ginv = Feature{ .name = "ginv", .description = "Mips Global Invalidate ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gp64 = Feature{ .name = "gp64", .description = "General Purpose Registers are 64-bit wide", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_longCalls = Feature{ .name = "long-calls", .description = "Disable use of the jal instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_msa = Feature{ .name = "msa", .description = "Mips MSA ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mt = Feature{ .name = "mt", .description = "Mips MT ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nomadd4 = Feature{ .name = "nomadd4", .description = "Disable 4-operand madd.fmt and related instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_micromips = Feature{ .name = "micromips", .description = "microMips mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips1 = Feature{ .name = "mips1", .description = "Mips I ISA Support [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips2 = Feature{ .name = "mips2", .description = "Mips II ISA Support [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mips1, }, }; @@ -141,322 +141,322 @@ pub const feature_mips2 = Feature{ pub const feature_mips3 = Feature{ .name = "mips3", .description = "MIPS III ISA Support [highly experimental]", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { &feature_mips1, - &feature_gp64, &feature_mips3_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, }, }; pub const feature_mips3_32 = Feature{ .name = "mips3_32", .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips3_32r2 = Feature{ .name = "mips3_32r2", .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips4 = Feature{ .name = "mips4", .description = "MIPS IV ISA Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, &feature_mips3_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, }, }; pub const feature_mips4_32 = Feature{ .name = "mips4_32", .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips4_32r2 = Feature{ .name = "mips4_32r2", .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips5 = Feature{ .name = "mips5", .description = "MIPS V ISA Support [highly experimental]", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_mips5_32r2 = Feature{ .name = "mips5_32r2", .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips16 = Feature{ .name = "mips16", .description = "Mips16 mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mips32 = Feature{ .name = "mips32", .description = "Mips32 ISA Support", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mips1, - &feature_mips4_32, &feature_mips3_32, + &feature_mips4_32, }, }; pub const feature_mips32r2 = Feature{ .name = "mips32r2", .description = "Mips32r2 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, }, }; pub const feature_mips32r3 = Feature{ .name = "mips32r3", .description = "Mips32r3 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, }, }; pub const feature_mips32r5 = Feature{ .name = "mips32r5", .description = "Mips32r5 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, }, }; pub const feature_mips32r6 = Feature{ .name = "mips32r6", .description = "Mips32r6 ISA Support [experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_abs2008, - &feature_fp64, - &feature_mips4_32r2, &feature_nan2008, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_mips64 = Feature{ .name = "mips64", .description = "Mips64 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, }, }; pub const feature_mips64r2 = Feature{ .name = "mips64r2", .description = "Mips64r2 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_mips64r3 = Feature{ .name = "mips64r3", .description = "Mips64r3 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_gp64, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_mips64r5 = Feature{ .name = "mips64r5", .description = "Mips64r5 ISA Support", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_mips64r6 = Feature{ .name = "mips64r6", .description = "Mips64r6 ISA Support [experimental]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_abs2008, - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips5_32r2, - &feature_mips4_32, &feature_nan2008, + &feature_mips4_32, + &feature_gp64, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, + &feature_fp64, }, }; pub const feature_nan2008 = Feature{ .name = "nan2008", .description = "IEEE 754-2008 NaN encoding", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noabicalls = Feature{ .name = "noabicalls", .description = "Disable SVR4-style position-independent code", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nooddspreg = Feature{ .name = "nooddspreg", .description = "Disable odd numbered single-precision registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptr64 = Feature{ .name = "ptr64", .description = "Pointers are 64-bit wide", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_singleFloat = Feature{ .name = "single-float", .description = "Only supports single precision float", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_softFloat = Feature{ .name = "soft-float", .description = "Does not support floating point instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sym32 = Feature{ .name = "sym32", .description = "Symbols are 32 bit on Mips64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useIndirectJumpHazard = Feature{ .name = "use-indirect-jump-hazard", .description = "Use indirect jump guards to prevent certain speculation based attacks", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useTccInDiv = Feature{ .name = "use-tcc-in-div", .description = "Force the assembler to use trapping", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vfpu = Feature{ .name = "vfpu", .description = "Enable vector FPU instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_virt = Feature{ .name = "virt", .description = "Mips Virtualization ASE", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xgot = Feature{ .name = "xgot", .description = "Assume 32-bit GOT", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_p5600 = Feature{ .name = "p5600", .description = "The P5600 Processor", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, }, }; @@ -516,7 +516,7 @@ pub const features = &[_]*const Feature { pub const cpu_mips1 = Cpu{ .name = "mips1", .llvm_name = "mips1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mips1, }, }; @@ -524,7 +524,7 @@ pub const cpu_mips1 = Cpu{ pub const cpu_mips2 = Cpu{ .name = "mips2", .llvm_name = "mips2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mips1, &feature_mips2, }, @@ -533,12 +533,12 @@ pub const cpu_mips2 = Cpu{ pub const cpu_mips3 = Cpu{ .name = "mips3", .llvm_name = "mips3", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { &feature_mips1, - &feature_gp64, &feature_mips3_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, &feature_mips3, }, }; @@ -546,10 +546,10 @@ pub const cpu_mips3 = Cpu{ pub const cpu_mips32 = Cpu{ .name = "mips32", .llvm_name = "mips32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mips1, - &feature_mips4_32, &feature_mips3_32, + &feature_mips4_32, &feature_mips32, }, }; @@ -557,13 +557,13 @@ pub const cpu_mips32 = Cpu{ pub const cpu_mips32r2 = Cpu{ .name = "mips32r2", .llvm_name = "mips32r2", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, &feature_mips32r2, }, }; @@ -571,13 +571,13 @@ pub const cpu_mips32r2 = Cpu{ pub const cpu_mips32r3 = Cpu{ .name = "mips32r3", .llvm_name = "mips32r3", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, &feature_mips32r3, }, }; @@ -585,13 +585,13 @@ pub const cpu_mips32r3 = Cpu{ pub const cpu_mips32r5 = Cpu{ .name = "mips32r5", .llvm_name = "mips32r5", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, &feature_mips32r5, }, }; @@ -599,16 +599,16 @@ pub const cpu_mips32r5 = Cpu{ pub const cpu_mips32r6 = Cpu{ .name = "mips32r6", .llvm_name = "mips32r6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_abs2008, - &feature_fp64, - &feature_mips4_32r2, &feature_nan2008, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips32r6, }, }; @@ -616,14 +616,14 @@ pub const cpu_mips32r6 = Cpu{ pub const cpu_mips4 = Cpu{ .name = "mips4", .llvm_name = "mips4", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, &feature_mips3_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, &feature_mips4, }, }; @@ -631,15 +631,15 @@ pub const cpu_mips4 = Cpu{ pub const cpu_mips5 = Cpu{ .name = "mips5", .llvm_name = "mips5", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips5, }, }; @@ -647,15 +647,15 @@ pub const cpu_mips5 = Cpu{ pub const cpu_mips64 = Cpu{ .name = "mips64", .llvm_name = "mips64", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, &feature_mips64, }, }; @@ -663,15 +663,15 @@ pub const cpu_mips64 = Cpu{ pub const cpu_mips64r2 = Cpu{ .name = "mips64r2", .llvm_name = "mips64r2", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips64r2, }, }; @@ -679,15 +679,15 @@ pub const cpu_mips64r2 = Cpu{ pub const cpu_mips64r3 = Cpu{ .name = "mips64r3", .llvm_name = "mips64r3", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, + .dependencies = &[_]*const Feature { &feature_mips4_32, - &feature_mips5_32r2, + &feature_gp64, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips64r3, }, }; @@ -695,15 +695,15 @@ pub const cpu_mips64r3 = Cpu{ pub const cpu_mips64r5 = Cpu{ .name = "mips64r5", .llvm_name = "mips64r5", - .subfeatures = &[_]*const Feature { - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_gp64, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips64r5, }, }; @@ -711,17 +711,17 @@ pub const cpu_mips64r5 = Cpu{ pub const cpu_mips64r6 = Cpu{ .name = "mips64r6", .llvm_name = "mips64r6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_abs2008, - &feature_fp64, - &feature_mips4_32r2, - &feature_mips1, - &feature_gp64, - &feature_mips5_32r2, - &feature_mips4_32, &feature_nan2008, + &feature_mips4_32, + &feature_gp64, + &feature_mips1, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_mips4_32r2, + &feature_fp64, &feature_mips64r6, }, }; @@ -729,15 +729,15 @@ pub const cpu_mips64r6 = Cpu{ pub const cpu_octeon = Cpu{ .name = "octeon", .llvm_name = "octeon", - .subfeatures = &[_]*const Feature { - &feature_fp64, + .dependencies = &[_]*const Feature { + &feature_mips4_32, &feature_mips4_32r2, &feature_mips1, - &feature_gp64, - &feature_mips4_32, - &feature_mips5_32r2, &feature_mips3_32r2, + &feature_mips5_32r2, &feature_mips3_32, + &feature_gp64, + &feature_fp64, &feature_cnmips, &feature_mips64r2, }, @@ -746,13 +746,13 @@ pub const cpu_octeon = Cpu{ pub const cpu_p5600 = Cpu{ .name = "p5600", .llvm_name = "p5600", - .subfeatures = &[_]*const Feature { - &feature_mips4_32r2, - &feature_mips1, - &feature_mips4_32, - &feature_mips5_32r2, - &feature_mips3_32r2, + .dependencies = &[_]*const Feature { &feature_mips3_32, + &feature_mips1, + &feature_mips3_32r2, + &feature_mips5_32r2, + &feature_mips4_32, + &feature_mips4_32r2, &feature_p5600, }, }; diff --git a/lib/std/target/msp430.zig b/lib/std/target/msp430.zig index 433537824d..1e3b93b9d0 100644 --- a/lib/std/target/msp430.zig +++ b/lib/std/target/msp430.zig @@ -4,28 +4,28 @@ const Cpu = @import("std").target.Cpu; pub const feature_hwmult16 = Feature{ .name = "hwmult16", .description = "Enable 16-bit hardware multiplier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_hwmult32 = Feature{ .name = "hwmult32", .description = "Enable 32-bit hardware multiplier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_hwmultf5 = Feature{ .name = "hwmultf5", .description = "Enable F5 series hardware multiplier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ext = Feature{ .name = "ext", .description = "Enable MSP430-X extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -39,21 +39,21 @@ pub const features = &[_]*const Feature { pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_msp430 = Cpu{ .name = "msp430", .llvm_name = "msp430", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_msp430x = Cpu{ .name = "msp430x", .llvm_name = "msp430x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ext, }, }; diff --git a/lib/std/target/nvptx.zig b/lib/std/target/nvptx.zig index 5d5e276587..815d1116c5 100644 --- a/lib/std/target/nvptx.zig +++ b/lib/std/target/nvptx.zig @@ -4,175 +4,175 @@ const Cpu = @import("std").target.Cpu; pub const feature_ptx32 = Feature{ .name = "ptx32", .description = "Use PTX version 3.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx40 = Feature{ .name = "ptx40", .description = "Use PTX version 4.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx41 = Feature{ .name = "ptx41", .description = "Use PTX version 4.1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx42 = Feature{ .name = "ptx42", .description = "Use PTX version 4.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx43 = Feature{ .name = "ptx43", .description = "Use PTX version 4.3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx50 = Feature{ .name = "ptx50", .description = "Use PTX version 5.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx60 = Feature{ .name = "ptx60", .description = "Use PTX version 6.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx61 = Feature{ .name = "ptx61", .description = "Use PTX version 6.1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx63 = Feature{ .name = "ptx63", .description = "Use PTX version 6.3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptx64 = Feature{ .name = "ptx64", .description = "Use PTX version 6.4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_20 = Feature{ .name = "sm_20", .description = "Target SM 2.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_21 = Feature{ .name = "sm_21", .description = "Target SM 2.1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_30 = Feature{ .name = "sm_30", .description = "Target SM 3.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_32 = Feature{ .name = "sm_32", .description = "Target SM 3.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_35 = Feature{ .name = "sm_35", .description = "Target SM 3.5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_37 = Feature{ .name = "sm_37", .description = "Target SM 3.7", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_50 = Feature{ .name = "sm_50", .description = "Target SM 5.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_52 = Feature{ .name = "sm_52", .description = "Target SM 5.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_53 = Feature{ .name = "sm_53", .description = "Target SM 5.3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_60 = Feature{ .name = "sm_60", .description = "Target SM 6.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_61 = Feature{ .name = "sm_61", .description = "Target SM 6.1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_62 = Feature{ .name = "sm_62", .description = "Target SM 6.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_70 = Feature{ .name = "sm_70", .description = "Target SM 7.0", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_72 = Feature{ .name = "sm_72", .description = "Target SM 7.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sm_75 = Feature{ .name = "sm_75", .description = "Target SM 7.5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -207,7 +207,7 @@ pub const features = &[_]*const Feature { pub const cpu_sm_20 = Cpu{ .name = "sm_20", .llvm_name = "sm_20", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sm_20, }, }; @@ -215,7 +215,7 @@ pub const cpu_sm_20 = Cpu{ pub const cpu_sm_21 = Cpu{ .name = "sm_21", .llvm_name = "sm_21", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sm_21, }, }; @@ -223,7 +223,7 @@ pub const cpu_sm_21 = Cpu{ pub const cpu_sm_30 = Cpu{ .name = "sm_30", .llvm_name = "sm_30", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sm_30, }, }; @@ -231,7 +231,7 @@ pub const cpu_sm_30 = Cpu{ pub const cpu_sm_32 = Cpu{ .name = "sm_32", .llvm_name = "sm_32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx40, &feature_sm_32, }, @@ -240,7 +240,7 @@ pub const cpu_sm_32 = Cpu{ pub const cpu_sm_35 = Cpu{ .name = "sm_35", .llvm_name = "sm_35", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sm_35, }, }; @@ -248,7 +248,7 @@ pub const cpu_sm_35 = Cpu{ pub const cpu_sm_37 = Cpu{ .name = "sm_37", .llvm_name = "sm_37", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx41, &feature_sm_37, }, @@ -257,7 +257,7 @@ pub const cpu_sm_37 = Cpu{ pub const cpu_sm_50 = Cpu{ .name = "sm_50", .llvm_name = "sm_50", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx40, &feature_sm_50, }, @@ -266,7 +266,7 @@ pub const cpu_sm_50 = Cpu{ pub const cpu_sm_52 = Cpu{ .name = "sm_52", .llvm_name = "sm_52", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx41, &feature_sm_52, }, @@ -275,7 +275,7 @@ pub const cpu_sm_52 = Cpu{ pub const cpu_sm_53 = Cpu{ .name = "sm_53", .llvm_name = "sm_53", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx42, &feature_sm_53, }, @@ -284,7 +284,7 @@ pub const cpu_sm_53 = Cpu{ pub const cpu_sm_60 = Cpu{ .name = "sm_60", .llvm_name = "sm_60", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx50, &feature_sm_60, }, @@ -293,7 +293,7 @@ pub const cpu_sm_60 = Cpu{ pub const cpu_sm_61 = Cpu{ .name = "sm_61", .llvm_name = "sm_61", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx50, &feature_sm_61, }, @@ -302,7 +302,7 @@ pub const cpu_sm_61 = Cpu{ pub const cpu_sm_62 = Cpu{ .name = "sm_62", .llvm_name = "sm_62", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx50, &feature_sm_62, }, @@ -311,7 +311,7 @@ pub const cpu_sm_62 = Cpu{ pub const cpu_sm_70 = Cpu{ .name = "sm_70", .llvm_name = "sm_70", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx60, &feature_sm_70, }, @@ -320,7 +320,7 @@ pub const cpu_sm_70 = Cpu{ pub const cpu_sm_72 = Cpu{ .name = "sm_72", .llvm_name = "sm_72", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx61, &feature_sm_72, }, @@ -329,7 +329,7 @@ pub const cpu_sm_72 = Cpu{ pub const cpu_sm_75 = Cpu{ .name = "sm_75", .llvm_name = "sm_75", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_ptx63, &feature_sm_75, }, diff --git a/lib/std/target/powerpc.zig b/lib/std/target/powerpc.zig index e8c9d98a1c..9e86df2185 100644 --- a/lib/std/target/powerpc.zig +++ b/lib/std/target/powerpc.zig @@ -4,21 +4,21 @@ const Cpu = @import("std").target.Cpu; pub const feature_bit64 = Feature{ .name = "64bit", .description = "Enable 64-bit instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bitregs64 = Feature{ .name = "64bitregs", .description = "Enable 64-bit registers usage for ppc32 [beta]", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_altivec = Feature{ .name = "altivec", .description = "Enable Altivec instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -26,14 +26,14 @@ pub const feature_altivec = Feature{ pub const feature_bpermd = Feature{ .name = "bpermd", .description = "Enable the bpermd instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_booke = Feature{ .name = "booke", .description = "Enable Book E instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, }, }; @@ -41,21 +41,21 @@ pub const feature_booke = Feature{ pub const feature_cmpb = Feature{ .name = "cmpb", .description = "Enable the cmpb instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_crbits = Feature{ .name = "crbits", .description = "Use condition-register bits individually", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_directMove = Feature{ .name = "direct-move", .description = "Enable Power8 direct move instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -63,21 +63,21 @@ pub const feature_directMove = Feature{ pub const feature_e500 = Feature{ .name = "e500", .description = "Enable E500/E500mc instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_extdiv = Feature{ .name = "extdiv", .description = "Enable extended divide instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fcpsgn = Feature{ .name = "fcpsgn", .description = "Enable the fcpsgn instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -85,7 +85,7 @@ pub const feature_fcpsgn = Feature{ pub const feature_fpcvt = Feature{ .name = "fpcvt", .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -93,7 +93,7 @@ pub const feature_fpcvt = Feature{ pub const feature_fprnd = Feature{ .name = "fprnd", .description = "Enable the fri[mnpz] instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -101,7 +101,7 @@ pub const feature_fprnd = Feature{ pub const feature_fpu = Feature{ .name = "fpu", .description = "Enable classic FPU instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -109,7 +109,7 @@ pub const feature_fpu = Feature{ pub const feature_fre = Feature{ .name = "fre", .description = "Enable the fre instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -117,7 +117,7 @@ pub const feature_fre = Feature{ pub const feature_fres = Feature{ .name = "fres", .description = "Enable the fres instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -125,7 +125,7 @@ pub const feature_fres = Feature{ pub const feature_frsqrte = Feature{ .name = "frsqrte", .description = "Enable the frsqrte instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -133,7 +133,7 @@ pub const feature_frsqrte = Feature{ pub const feature_frsqrtes = Feature{ .name = "frsqrtes", .description = "Enable the frsqrtes instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -141,7 +141,7 @@ pub const feature_frsqrtes = Feature{ pub const feature_fsqrt = Feature{ .name = "fsqrt", .description = "Enable the fsqrt instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -149,7 +149,7 @@ pub const feature_fsqrt = Feature{ pub const feature_float128 = Feature{ .name = "float128", .description = "Enable the __float128 data type for IEEE-754R Binary128.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -157,56 +157,56 @@ pub const feature_float128 = Feature{ pub const feature_htm = Feature{ .name = "htm", .description = "Enable Hardware Transactional Memory instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_hardFloat = Feature{ .name = "hard-float", .description = "Enable floating-point instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_icbt = Feature{ .name = "icbt", .description = "Enable icbt instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_isaV30Instructions = Feature{ .name = "isa-v30-instructions", .description = "Enable instructions added in ISA 3.0.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_isel = Feature{ .name = "isel", .description = "Enable the isel instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_invariantFunctionDescriptors = Feature{ .name = "invariant-function-descriptors", .description = "Assume function descriptors are invariant", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ldbrx = Feature{ .name = "ldbrx", .description = "Enable the ldbrx instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lfiwax = Feature{ .name = "lfiwax", .description = "Enable the lfiwax instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -214,21 +214,21 @@ pub const feature_lfiwax = Feature{ pub const feature_longcall = Feature{ .name = "longcall", .description = "Always use indirect calls", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mfocrf = Feature{ .name = "mfocrf", .description = "Enable the MFOCRF instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_msync = Feature{ .name = "msync", .description = "Has only the msync instruction instead of sync", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, }, }; @@ -236,7 +236,7 @@ pub const feature_msync = Feature{ pub const feature_power8Altivec = Feature{ .name = "power8-altivec", .description = "Enable POWER8 Altivec instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -244,7 +244,7 @@ pub const feature_power8Altivec = Feature{ pub const feature_crypto = Feature{ .name = "crypto", .description = "Enable POWER8 Crypto instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -252,7 +252,7 @@ pub const feature_crypto = Feature{ pub const feature_power8Vector = Feature{ .name = "power8-vector", .description = "Enable POWER8 vector instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -260,7 +260,7 @@ pub const feature_power8Vector = Feature{ pub const feature_power9Altivec = Feature{ .name = "power9-altivec", .description = "Enable POWER9 Altivec instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_isaV30Instructions, &feature_hardFloat, }, @@ -269,7 +269,7 @@ pub const feature_power9Altivec = Feature{ pub const feature_power9Vector = Feature{ .name = "power9-vector", .description = "Enable POWER9 vector instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_isaV30Instructions, &feature_hardFloat, }, @@ -278,49 +278,49 @@ pub const feature_power9Vector = Feature{ pub const feature_popcntd = Feature{ .name = "popcntd", .description = "Enable the popcnt[dw] instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ppc4xx = Feature{ .name = "ppc4xx", .description = "Enable PPC 4xx instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ppc6xx = Feature{ .name = "ppc6xx", .description = "Enable PPC 6xx instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ppcPostraSched = Feature{ .name = "ppc-postra-sched", .description = "Use PowerPC post-RA scheduling strategy", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ppcPreraSched = Feature{ .name = "ppc-prera-sched", .description = "Use PowerPC pre-RA scheduling strategy", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_partwordAtomics = Feature{ .name = "partword-atomics", .description = "Enable l[bh]arx and st[bh]cx.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_qpx = Feature{ .name = "qpx", .description = "Enable QPX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -328,14 +328,14 @@ pub const feature_qpx = Feature{ pub const feature_recipprec = Feature{ .name = "recipprec", .description = "Assume higher precision reciprocal estimates", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_spe = Feature{ .name = "spe", .description = "Enable SPE instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -343,7 +343,7 @@ pub const feature_spe = Feature{ pub const feature_stfiwx = Feature{ .name = "stfiwx", .description = "Enable the stfiwx instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -351,28 +351,28 @@ pub const feature_stfiwx = Feature{ pub const feature_securePlt = Feature{ .name = "secure-plt", .description = "Enable secure plt mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowPopcntd = Feature{ .name = "slow-popcntd", .description = "Has slow popcnt[dw] instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_twoConstNr = Feature{ .name = "two-const-nr", .description = "Requires two constant Newton-Raphson computation", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vsx = Feature{ .name = "vsx", .description = "Enable VSX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -380,7 +380,7 @@ pub const feature_vsx = Feature{ pub const feature_vectorsUseTwoUnits = Feature{ .name = "vectors-use-two-units", .description = "Vectors use two units", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -441,7 +441,7 @@ pub const features = &[_]*const Feature { pub const cpu_440 = Cpu{ .name = "440", .llvm_name = "440", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, &feature_booke, &feature_hardFloat, @@ -455,7 +455,7 @@ pub const cpu_440 = Cpu{ pub const cpu_450 = Cpu{ .name = "450", .llvm_name = "450", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, &feature_booke, &feature_hardFloat, @@ -469,7 +469,7 @@ pub const cpu_450 = Cpu{ pub const cpu_601 = Cpu{ .name = "601", .llvm_name = "601", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fpu, }, @@ -478,7 +478,7 @@ pub const cpu_601 = Cpu{ pub const cpu_602 = Cpu{ .name = "602", .llvm_name = "602", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fpu, }, @@ -487,7 +487,7 @@ pub const cpu_602 = Cpu{ pub const cpu_603 = Cpu{ .name = "603", .llvm_name = "603", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -497,7 +497,7 @@ pub const cpu_603 = Cpu{ pub const cpu_e603 = Cpu{ .name = "603e", .llvm_name = "603e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -507,7 +507,7 @@ pub const cpu_e603 = Cpu{ pub const cpu_ev603 = Cpu{ .name = "603ev", .llvm_name = "603ev", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -517,7 +517,7 @@ pub const cpu_ev603 = Cpu{ pub const cpu_604 = Cpu{ .name = "604", .llvm_name = "604", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -527,7 +527,7 @@ pub const cpu_604 = Cpu{ pub const cpu_e604 = Cpu{ .name = "604e", .llvm_name = "604e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -537,7 +537,7 @@ pub const cpu_e604 = Cpu{ pub const cpu_620 = Cpu{ .name = "620", .llvm_name = "620", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -547,7 +547,7 @@ pub const cpu_620 = Cpu{ pub const cpu_7400 = Cpu{ .name = "7400", .llvm_name = "7400", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_altivec, &feature_fres, @@ -558,7 +558,7 @@ pub const cpu_7400 = Cpu{ pub const cpu_7450 = Cpu{ .name = "7450", .llvm_name = "7450", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_altivec, &feature_fres, @@ -569,7 +569,7 @@ pub const cpu_7450 = Cpu{ pub const cpu_750 = Cpu{ .name = "750", .llvm_name = "750", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -579,7 +579,7 @@ pub const cpu_750 = Cpu{ pub const cpu_970 = Cpu{ .name = "970", .llvm_name = "970", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -594,7 +594,7 @@ pub const cpu_970 = Cpu{ pub const cpu_a2 = Cpu{ .name = "a2", .llvm_name = "a2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_icbt, &feature_booke, @@ -621,7 +621,7 @@ pub const cpu_a2 = Cpu{ pub const cpu_a2q = Cpu{ .name = "a2q", .llvm_name = "a2q", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_icbt, &feature_booke, @@ -649,7 +649,7 @@ pub const cpu_a2q = Cpu{ pub const cpu_e500 = Cpu{ .name = "e500", .llvm_name = "e500", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, &feature_booke, &feature_isel, @@ -659,7 +659,7 @@ pub const cpu_e500 = Cpu{ pub const cpu_e500mc = Cpu{ .name = "e500mc", .llvm_name = "e500mc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_icbt, &feature_booke, &feature_isel, @@ -671,7 +671,7 @@ pub const cpu_e500mc = Cpu{ pub const cpu_e5500 = Cpu{ .name = "e5500", .llvm_name = "e5500", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_icbt, &feature_booke, @@ -685,7 +685,7 @@ pub const cpu_e5500 = Cpu{ pub const cpu_g3 = Cpu{ .name = "g3", .llvm_name = "g3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_fres, &feature_frsqrte, @@ -695,7 +695,7 @@ pub const cpu_g3 = Cpu{ pub const cpu_g4 = Cpu{ .name = "g4", .llvm_name = "g4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_altivec, &feature_fres, @@ -706,7 +706,7 @@ pub const cpu_g4 = Cpu{ pub const cpu_g4Plus = Cpu{ .name = "g4+", .llvm_name = "g4+", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, &feature_altivec, &feature_fres, @@ -717,7 +717,7 @@ pub const cpu_g4Plus = Cpu{ pub const cpu_g5 = Cpu{ .name = "g5", .llvm_name = "g5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -732,7 +732,7 @@ pub const cpu_g5 = Cpu{ pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -740,7 +740,7 @@ pub const cpu_generic = Cpu{ pub const cpu_ppc = Cpu{ .name = "ppc", .llvm_name = "ppc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -748,7 +748,7 @@ pub const cpu_ppc = Cpu{ pub const cpu_ppc32 = Cpu{ .name = "ppc32", .llvm_name = "ppc32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_hardFloat, }, }; @@ -756,7 +756,7 @@ pub const cpu_ppc32 = Cpu{ pub const cpu_ppc64 = Cpu{ .name = "ppc64", .llvm_name = "ppc64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -771,7 +771,7 @@ pub const cpu_ppc64 = Cpu{ pub const cpu_ppc64le = Cpu{ .name = "ppc64le", .llvm_name = "ppc64le", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -808,7 +808,7 @@ pub const cpu_ppc64le = Cpu{ pub const cpu_pwr3 = Cpu{ .name = "pwr3", .llvm_name = "pwr3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -822,7 +822,7 @@ pub const cpu_pwr3 = Cpu{ pub const cpu_pwr4 = Cpu{ .name = "pwr4", .llvm_name = "pwr4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -837,7 +837,7 @@ pub const cpu_pwr4 = Cpu{ pub const cpu_pwr5 = Cpu{ .name = "pwr5", .llvm_name = "pwr5", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -854,7 +854,7 @@ pub const cpu_pwr5 = Cpu{ pub const cpu_pwr5x = Cpu{ .name = "pwr5x", .llvm_name = "pwr5x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -872,7 +872,7 @@ pub const cpu_pwr5x = Cpu{ pub const cpu_pwr6 = Cpu{ .name = "pwr6", .llvm_name = "pwr6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -894,7 +894,7 @@ pub const cpu_pwr6 = Cpu{ pub const cpu_pwr6x = Cpu{ .name = "pwr6x", .llvm_name = "pwr6x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -916,7 +916,7 @@ pub const cpu_pwr6x = Cpu{ pub const cpu_pwr7 = Cpu{ .name = "pwr7", .llvm_name = "pwr7", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -946,7 +946,7 @@ pub const cpu_pwr7 = Cpu{ pub const cpu_pwr8 = Cpu{ .name = "pwr8", .llvm_name = "pwr8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, @@ -983,7 +983,7 @@ pub const cpu_pwr8 = Cpu{ pub const cpu_pwr9 = Cpu{ .name = "pwr9", .llvm_name = "pwr9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_hardFloat, &feature_altivec, diff --git a/lib/std/target/riscv.zig b/lib/std/target/riscv.zig index 46f66aff12..cbb7ccb9ad 100644 --- a/lib/std/target/riscv.zig +++ b/lib/std/target/riscv.zig @@ -4,49 +4,49 @@ const Cpu = @import("std").target.Cpu; pub const feature_bit64 = Feature{ .name = "64bit", .description = "Implements RV64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_e = Feature{ .name = "e", .description = "Implements RV32E (provides 16 rather than 32 GPRs)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rvcHints = Feature{ .name = "rvc-hints", .description = "Enable RVC Hint Instructions.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_relax = Feature{ .name = "relax", .description = "Enable Linker relaxation.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_a = Feature{ .name = "a", .description = "'A' (Atomic Instructions)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_c = Feature{ .name = "c", .description = "'C' (Compressed Instructions)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_d = Feature{ .name = "d", .description = "'D' (Double-Precision Floating-Point)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_f, }, }; @@ -54,14 +54,14 @@ pub const feature_d = Feature{ pub const feature_f = Feature{ .name = "f", .description = "'F' (Single-Precision Floating-Point)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_m = Feature{ .name = "m", .description = "'M' (Integer Multiplication and Division)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -80,7 +80,7 @@ pub const features = &[_]*const Feature { pub const cpu_genericRv32 = Cpu{ .name = "generic-rv32", .llvm_name = "generic-rv32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_rvcHints, }, }; @@ -88,7 +88,7 @@ pub const cpu_genericRv32 = Cpu{ pub const cpu_genericRv64 = Cpu{ .name = "generic-rv64", .llvm_name = "generic-rv64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_rvcHints, }, diff --git a/lib/std/target/sparc.zig b/lib/std/target/sparc.zig index d302c28063..7cdeddb976 100644 --- a/lib/std/target/sparc.zig +++ b/lib/std/target/sparc.zig @@ -4,84 +4,84 @@ const Cpu = @import("std").target.Cpu; pub const feature_hardQuadFloat = Feature{ .name = "hard-quad-float", .description = "Enable quad-word floating point instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_leon = Feature{ .name = "leon", .description = "Enable LEON extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noFmuls = Feature{ .name = "no-fmuls", .description = "Disable the fmuls instruction.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_noFsmuld = Feature{ .name = "no-fsmuld", .description = "Disable the fsmuld instruction.", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_leonpwrpsr = Feature{ .name = "leonpwrpsr", .description = "Enable the PWRPSR instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_softFloat = Feature{ .name = "soft-float", .description = "Use software emulation for floating point", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_softMulDiv = Feature{ .name = "soft-mul-div", .description = "Use software emulation for integer multiply and divide", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_deprecatedV8 = Feature{ .name = "deprecated-v8", .description = "Enable deprecated V8 instructions in V9 mode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_v9 = Feature{ .name = "v9", .description = "Enable SPARC-V9 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vis = Feature{ .name = "vis", .description = "Enable UltraSPARC Visual Instruction Set extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vis2 = Feature{ .name = "vis2", .description = "Enable Visual Instruction Set extensions II", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vis3 = Feature{ .name = "vis3", .description = "Enable Visual Instruction Set extensions III", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -103,7 +103,7 @@ pub const features = &[_]*const Feature { pub const cpu_at697e = Cpu{ .name = "at697e", .llvm_name = "at697e", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -111,7 +111,7 @@ pub const cpu_at697e = Cpu{ pub const cpu_at697f = Cpu{ .name = "at697f", .llvm_name = "at697f", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -119,21 +119,21 @@ pub const cpu_at697f = Cpu{ pub const cpu_f934 = Cpu{ .name = "f934", .llvm_name = "f934", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_gr712rc = Cpu{ .name = "gr712rc", .llvm_name = "gr712rc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -141,7 +141,7 @@ pub const cpu_gr712rc = Cpu{ pub const cpu_gr740 = Cpu{ .name = "gr740", .llvm_name = "gr740", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, &feature_leonpwrpsr, }, @@ -150,14 +150,14 @@ pub const cpu_gr740 = Cpu{ pub const cpu_hypersparc = Cpu{ .name = "hypersparc", .llvm_name = "hypersparc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_leon2 = Cpu{ .name = "leon2", .llvm_name = "leon2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -165,7 +165,7 @@ pub const cpu_leon2 = Cpu{ pub const cpu_leon3 = Cpu{ .name = "leon3", .llvm_name = "leon3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -173,7 +173,7 @@ pub const cpu_leon3 = Cpu{ pub const cpu_leon4 = Cpu{ .name = "leon4", .llvm_name = "leon4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -181,7 +181,7 @@ pub const cpu_leon4 = Cpu{ pub const cpu_ma2080 = Cpu{ .name = "ma2080", .llvm_name = "ma2080", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -189,7 +189,7 @@ pub const cpu_ma2080 = Cpu{ pub const cpu_ma2085 = Cpu{ .name = "ma2085", .llvm_name = "ma2085", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -197,7 +197,7 @@ pub const cpu_ma2085 = Cpu{ pub const cpu_ma2100 = Cpu{ .name = "ma2100", .llvm_name = "ma2100", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -205,7 +205,7 @@ pub const cpu_ma2100 = Cpu{ pub const cpu_ma2150 = Cpu{ .name = "ma2150", .llvm_name = "ma2150", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -213,7 +213,7 @@ pub const cpu_ma2150 = Cpu{ pub const cpu_ma2155 = Cpu{ .name = "ma2155", .llvm_name = "ma2155", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -221,7 +221,7 @@ pub const cpu_ma2155 = Cpu{ pub const cpu_ma2450 = Cpu{ .name = "ma2450", .llvm_name = "ma2450", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -229,7 +229,7 @@ pub const cpu_ma2450 = Cpu{ pub const cpu_ma2455 = Cpu{ .name = "ma2455", .llvm_name = "ma2455", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -237,7 +237,7 @@ pub const cpu_ma2455 = Cpu{ pub const cpu_ma2480 = Cpu{ .name = "ma2480", .llvm_name = "ma2480", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -245,7 +245,7 @@ pub const cpu_ma2480 = Cpu{ pub const cpu_ma2485 = Cpu{ .name = "ma2485", .llvm_name = "ma2485", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -253,7 +253,7 @@ pub const cpu_ma2485 = Cpu{ pub const cpu_ma2x5x = Cpu{ .name = "ma2x5x", .llvm_name = "ma2x5x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -261,7 +261,7 @@ pub const cpu_ma2x5x = Cpu{ pub const cpu_ma2x8x = Cpu{ .name = "ma2x8x", .llvm_name = "ma2x8x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -269,7 +269,7 @@ pub const cpu_ma2x8x = Cpu{ pub const cpu_myriad2 = Cpu{ .name = "myriad2", .llvm_name = "myriad2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -277,7 +277,7 @@ pub const cpu_myriad2 = Cpu{ pub const cpu_myriad21 = Cpu{ .name = "myriad2.1", .llvm_name = "myriad2.1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -285,7 +285,7 @@ pub const cpu_myriad21 = Cpu{ pub const cpu_myriad22 = Cpu{ .name = "myriad2.2", .llvm_name = "myriad2.2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -293,7 +293,7 @@ pub const cpu_myriad22 = Cpu{ pub const cpu_myriad23 = Cpu{ .name = "myriad2.3", .llvm_name = "myriad2.3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, }, }; @@ -301,7 +301,7 @@ pub const cpu_myriad23 = Cpu{ pub const cpu_niagara = Cpu{ .name = "niagara", .llvm_name = "niagara", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -312,7 +312,7 @@ pub const cpu_niagara = Cpu{ pub const cpu_niagara2 = Cpu{ .name = "niagara2", .llvm_name = "niagara2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -323,7 +323,7 @@ pub const cpu_niagara2 = Cpu{ pub const cpu_niagara3 = Cpu{ .name = "niagara3", .llvm_name = "niagara3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -334,7 +334,7 @@ pub const cpu_niagara3 = Cpu{ pub const cpu_niagara4 = Cpu{ .name = "niagara4", .llvm_name = "niagara4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -346,42 +346,42 @@ pub const cpu_niagara4 = Cpu{ pub const cpu_sparclet = Cpu{ .name = "sparclet", .llvm_name = "sparclet", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_sparclite = Cpu{ .name = "sparclite", .llvm_name = "sparclite", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_sparclite86x = Cpu{ .name = "sparclite86x", .llvm_name = "sparclite86x", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_supersparc = Cpu{ .name = "supersparc", .llvm_name = "supersparc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_tsc701 = Cpu{ .name = "tsc701", .llvm_name = "tsc701", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_ultrasparc = Cpu{ .name = "ultrasparc", .llvm_name = "ultrasparc", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -391,7 +391,7 @@ pub const cpu_ultrasparc = Cpu{ pub const cpu_ultrasparc3 = Cpu{ .name = "ultrasparc3", .llvm_name = "ultrasparc3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_deprecatedV8, &feature_v9, &feature_vis, @@ -402,7 +402,7 @@ pub const cpu_ultrasparc3 = Cpu{ pub const cpu_ut699 = Cpu{ .name = "ut699", .llvm_name = "ut699", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_leon, &feature_noFmuls, &feature_noFsmuld, @@ -412,7 +412,7 @@ pub const cpu_ut699 = Cpu{ pub const cpu_v7 = Cpu{ .name = "v7", .llvm_name = "v7", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_noFsmuld, &feature_softMulDiv, }, @@ -421,14 +421,14 @@ pub const cpu_v7 = Cpu{ pub const cpu_v8 = Cpu{ .name = "v8", .llvm_name = "v8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_v9 = Cpu{ .name = "v9", .llvm_name = "v9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_v9, }, }; diff --git a/lib/std/target/systemz.zig b/lib/std/target/systemz.zig index e7fa7c7333..1f5d648468 100644 --- a/lib/std/target/systemz.zig +++ b/lib/std/target/systemz.zig @@ -4,245 +4,245 @@ const Cpu = @import("std").target.Cpu; pub const feature_dfpPackedConversion = Feature{ .name = "dfp-packed-conversion", .description = "Assume that the DFP packed-conversion facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_dfpZonedConversion = Feature{ .name = "dfp-zoned-conversion", .description = "Assume that the DFP zoned-conversion facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_deflateConversion = Feature{ .name = "deflate-conversion", .description = "Assume that the deflate-conversion facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_distinctOps = Feature{ .name = "distinct-ops", .description = "Assume that the distinct-operands facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_enhancedDat2 = Feature{ .name = "enhanced-dat-2", .description = "Assume that the enhanced-DAT facility 2 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_enhancedSort = Feature{ .name = "enhanced-sort", .description = "Assume that the enhanced-sort facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_executionHint = Feature{ .name = "execution-hint", .description = "Assume that the execution-hint facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fpExtension = Feature{ .name = "fp-extension", .description = "Assume that the floating-point extension facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastSerialization = Feature{ .name = "fast-serialization", .description = "Assume that the fast-serialization facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_guardedStorage = Feature{ .name = "guarded-storage", .description = "Assume that the guarded-storage facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_highWord = Feature{ .name = "high-word", .description = "Assume that the high-word facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_insertReferenceBitsMultiple = Feature{ .name = "insert-reference-bits-multiple", .description = "Assume that the insert-reference-bits-multiple facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_interlockedAccess1 = Feature{ .name = "interlocked-access1", .description = "Assume that interlocked-access facility 1 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loadAndTrap = Feature{ .name = "load-and-trap", .description = "Assume that the load-and-trap facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loadAndZeroRightmostByte = Feature{ .name = "load-and-zero-rightmost-byte", .description = "Assume that the load-and-zero-rightmost-byte facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loadStoreOnCond = Feature{ .name = "load-store-on-cond", .description = "Assume that the load/store-on-condition facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_loadStoreOnCond2 = Feature{ .name = "load-store-on-cond-2", .description = "Assume that the load/store-on-condition facility 2 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension3 = Feature{ .name = "message-security-assist-extension3", .description = "Assume that the message-security-assist extension facility 3 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension4 = Feature{ .name = "message-security-assist-extension4", .description = "Assume that the message-security-assist extension facility 4 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension5 = Feature{ .name = "message-security-assist-extension5", .description = "Assume that the message-security-assist extension facility 5 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension7 = Feature{ .name = "message-security-assist-extension7", .description = "Assume that the message-security-assist extension facility 7 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension8 = Feature{ .name = "message-security-assist-extension8", .description = "Assume that the message-security-assist extension facility 8 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_messageSecurityAssistExtension9 = Feature{ .name = "message-security-assist-extension9", .description = "Assume that the message-security-assist extension facility 9 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_miscellaneousExtensions = Feature{ .name = "miscellaneous-extensions", .description = "Assume that the miscellaneous-extensions facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_miscellaneousExtensions2 = Feature{ .name = "miscellaneous-extensions-2", .description = "Assume that the miscellaneous-extensions facility 2 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_miscellaneousExtensions3 = Feature{ .name = "miscellaneous-extensions-3", .description = "Assume that the miscellaneous-extensions facility 3 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_populationCount = Feature{ .name = "population-count", .description = "Assume that the population-count facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_processorAssist = Feature{ .name = "processor-assist", .description = "Assume that the processor-assist facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_resetReferenceBitsMultiple = Feature{ .name = "reset-reference-bits-multiple", .description = "Assume that the reset-reference-bits-multiple facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_transactionalExecution = Feature{ .name = "transactional-execution", .description = "Assume that the transactional-execution facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vector = Feature{ .name = "vector", .description = "Assume that the vectory facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vectorEnhancements1 = Feature{ .name = "vector-enhancements-1", .description = "Assume that the vector enhancements facility 1 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vectorEnhancements2 = Feature{ .name = "vector-enhancements-2", .description = "Assume that the vector enhancements facility 2 is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vectorPackedDecimal = Feature{ .name = "vector-packed-decimal", .description = "Assume that the vector packed decimal facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vectorPackedDecimalEnhancement = Feature{ .name = "vector-packed-decimal-enhancement", .description = "Assume that the vector packed decimal enhancement facility is installed", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -287,7 +287,7 @@ pub const features = &[_]*const Feature { pub const cpu_arch10 = Cpu{ .name = "arch10", .llvm_name = "arch10", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpZonedConversion, &feature_distinctOps, &feature_enhancedDat2, @@ -311,7 +311,7 @@ pub const cpu_arch10 = Cpu{ pub const cpu_arch11 = Cpu{ .name = "arch11", .llvm_name = "arch11", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_distinctOps, @@ -340,7 +340,7 @@ pub const cpu_arch11 = Cpu{ pub const cpu_arch12 = Cpu{ .name = "arch12", .llvm_name = "arch12", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_distinctOps, @@ -376,7 +376,7 @@ pub const cpu_arch12 = Cpu{ pub const cpu_arch13 = Cpu{ .name = "arch13", .llvm_name = "arch13", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_deflateConversion, @@ -418,14 +418,14 @@ pub const cpu_arch13 = Cpu{ pub const cpu_arch8 = Cpu{ .name = "arch8", .llvm_name = "arch8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_arch9 = Cpu{ .name = "arch9", .llvm_name = "arch9", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_distinctOps, &feature_fpExtension, &feature_fastSerialization, @@ -442,21 +442,21 @@ pub const cpu_arch9 = Cpu{ pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_z10 = Cpu{ .name = "z10", .llvm_name = "z10", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_z13 = Cpu{ .name = "z13", .llvm_name = "z13", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_distinctOps, @@ -485,7 +485,7 @@ pub const cpu_z13 = Cpu{ pub const cpu_z14 = Cpu{ .name = "z14", .llvm_name = "z14", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_distinctOps, @@ -521,7 +521,7 @@ pub const cpu_z14 = Cpu{ pub const cpu_z15 = Cpu{ .name = "z15", .llvm_name = "z15", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpPackedConversion, &feature_dfpZonedConversion, &feature_deflateConversion, @@ -563,7 +563,7 @@ pub const cpu_z15 = Cpu{ pub const cpu_z196 = Cpu{ .name = "z196", .llvm_name = "z196", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_distinctOps, &feature_fpExtension, &feature_fastSerialization, @@ -580,7 +580,7 @@ pub const cpu_z196 = Cpu{ pub const cpu_zEC12 = Cpu{ .name = "zEC12", .llvm_name = "zEC12", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_dfpZonedConversion, &feature_distinctOps, &feature_enhancedDat2, diff --git a/lib/std/target/wasm.zig b/lib/std/target/wasm.zig index 6b302a9ff6..17d7717708 100644 --- a/lib/std/target/wasm.zig +++ b/lib/std/target/wasm.zig @@ -4,70 +4,70 @@ const Cpu = @import("std").target.Cpu; pub const feature_atomics = Feature{ .name = "atomics", .description = "Enable Atomics", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bulkMemory = Feature{ .name = "bulk-memory", .description = "Enable bulk memory operations", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_exceptionHandling = Feature{ .name = "exception-handling", .description = "Enable Wasm exception handling", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_multivalue = Feature{ .name = "multivalue", .description = "Enable multivalue blocks, instructions, and functions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mutableGlobals = Feature{ .name = "mutable-globals", .description = "Enable mutable globals", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nontrappingFptoint = Feature{ .name = "nontrapping-fptoint", .description = "Enable non-trapping float-to-int conversion operators", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_simd128 = Feature{ .name = "simd128", .description = "Enable 128-bit SIMD", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_signExt = Feature{ .name = "sign-ext", .description = "Enable sign extension operators", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tailCall = Feature{ .name = "tail-call", .description = "Enable tail call instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_unimplementedSimd128 = Feature{ .name = "unimplemented-simd128", .description = "Enable 128-bit SIMD not yet implemented in engines", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_simd128, }, }; @@ -88,7 +88,7 @@ pub const features = &[_]*const Feature { pub const cpu_bleedingEdge = Cpu{ .name = "bleeding-edge", .llvm_name = "bleeding-edge", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_atomics, &feature_mutableGlobals, &feature_nontrappingFptoint, @@ -100,14 +100,14 @@ pub const cpu_bleedingEdge = Cpu{ pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_mvp = Cpu{ .name = "mvp", .llvm_name = "mvp", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; diff --git a/lib/std/target/x86.zig b/lib/std/target/x86.zig index de49ce937c..573282c664 100644 --- a/lib/std/target/x86.zig +++ b/lib/std/target/x86.zig @@ -4,7 +4,7 @@ const Cpu = @import("std").target.Cpu; pub const feature_dnow3 = Feature{ .name = "3dnow", .description = "Enable 3DNow! instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, }, }; @@ -12,7 +12,7 @@ pub const feature_dnow3 = Feature{ pub const feature_dnowa3 = Feature{ .name = "3dnowa", .description = "Enable 3DNow! Athlon instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, }, }; @@ -20,21 +20,21 @@ pub const feature_dnowa3 = Feature{ pub const feature_bit64 = Feature{ .name = "64bit", .description = "Support 64-bit instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_adx = Feature{ .name = "adx", .description = "Support ADX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_aes = Feature{ .name = "aes", .description = "Enable AES instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -42,7 +42,7 @@ pub const feature_aes = Feature{ pub const feature_avx = Feature{ .name = "avx", .description = "Enable AVX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -50,7 +50,7 @@ pub const feature_avx = Feature{ pub const feature_avx2 = Feature{ .name = "avx2", .description = "Enable AVX2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -58,7 +58,7 @@ pub const feature_avx2 = Feature{ pub const feature_avx512f = Feature{ .name = "avx512f", .description = "Enable AVX-512 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -66,7 +66,7 @@ pub const feature_avx512f = Feature{ pub const feature_avx512bf16 = Feature{ .name = "avx512bf16", .description = "Support bfloat16 floating point", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -74,7 +74,7 @@ pub const feature_avx512bf16 = Feature{ pub const feature_avx512bitalg = Feature{ .name = "avx512bitalg", .description = "Enable AVX-512 Bit Algorithms", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -82,21 +82,21 @@ pub const feature_avx512bitalg = Feature{ pub const feature_bmi = Feature{ .name = "bmi", .description = "Support BMI instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bmi2 = Feature{ .name = "bmi2", .description = "Support BMI2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avx512bw = Feature{ .name = "avx512bw", .description = "Enable AVX-512 Byte and Word Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -104,14 +104,14 @@ pub const feature_avx512bw = Feature{ pub const feature_branchfusion = Feature{ .name = "branchfusion", .description = "CMP/TEST can be fused with conditional branches", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avx512cd = Feature{ .name = "avx512cd", .description = "Enable AVX-512 Conflict Detection Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -119,49 +119,49 @@ pub const feature_avx512cd = Feature{ pub const feature_cldemote = Feature{ .name = "cldemote", .description = "Enable Cache Demote", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_clflushopt = Feature{ .name = "clflushopt", .description = "Flush A Cache Line Optimized", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_clwb = Feature{ .name = "clwb", .description = "Cache Line Write Back", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_clzero = Feature{ .name = "clzero", .description = "Enable Cache Line Zero", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cmov = Feature{ .name = "cmov", .description = "Enable conditional move instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cx8 = Feature{ .name = "cx8", .description = "Support CMPXCHG8B instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_cx16 = Feature{ .name = "cx16", .description = "64-bit with cmpxchg16b", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, }, }; @@ -169,7 +169,7 @@ pub const feature_cx16 = Feature{ pub const feature_avx512dq = Feature{ .name = "avx512dq", .description = "Enable AVX-512 Doubleword and Quadword Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -177,21 +177,21 @@ pub const feature_avx512dq = Feature{ pub const feature_mpx = Feature{ .name = "mpx", .description = "Deprecated. Support MPX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_enqcmd = Feature{ .name = "enqcmd", .description = "Has ENQCMD instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avx512er = Feature{ .name = "avx512er", .description = "Enable AVX-512 Exponential and Reciprocal Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -199,14 +199,14 @@ pub const feature_avx512er = Feature{ pub const feature_ermsb = Feature{ .name = "ermsb", .description = "REP MOVS/STOS are fast", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_f16c = Feature{ .name = "f16c", .description = "Support 16-bit floating point conversion instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -214,7 +214,7 @@ pub const feature_f16c = Feature{ pub const feature_fma = Feature{ .name = "fma", .description = "Enable three-operand fused multiple-add", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -222,7 +222,7 @@ pub const feature_fma = Feature{ pub const feature_fma4 = Feature{ .name = "fma4", .description = "Enable four-operand fused multiple-add", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -230,42 +230,42 @@ pub const feature_fma4 = Feature{ pub const feature_fsgsbase = Feature{ .name = "fsgsbase", .description = "Support FS/GS Base instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fxsr = Feature{ .name = "fxsr", .description = "Support fxsave/fxrestore instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fast11bytenop = Feature{ .name = "fast-11bytenop", .description = "Target can quickly decode up to 11 byte NOPs", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fast15bytenop = Feature{ .name = "fast-15bytenop", .description = "Target can quickly decode up to 15 byte NOPs", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastBextr = Feature{ .name = "fast-bextr", .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastHops = Feature{ .name = "fast-hops", .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -273,63 +273,63 @@ pub const feature_fastHops = Feature{ pub const feature_fastLzcnt = Feature{ .name = "fast-lzcnt", .description = "LZCNT instructions are as fast as most simple integer ops", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastPartialYmmOrZmmWrite = Feature{ .name = "fast-partial-ymm-or-zmm-write", .description = "Partial writes to YMM/ZMM registers are fast", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastShldRotate = Feature{ .name = "fast-shld-rotate", .description = "SHLD can be used as a faster rotate", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastScalarFsqrt = Feature{ .name = "fast-scalar-fsqrt", .description = "Scalar SQRT is fast (disable Newton-Raphson)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastScalarShiftMasks = Feature{ .name = "fast-scalar-shift-masks", .description = "Prefer a left/right scalar logical shift pair over a shift+and pair", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastVariableShuffle = Feature{ .name = "fast-variable-shuffle", .description = "Shuffles with variable masks are fast", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastVectorFsqrt = Feature{ .name = "fast-vector-fsqrt", .description = "Vector SQRT is fast (disable Newton-Raphson)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_fastVectorShiftMasks = Feature{ .name = "fast-vector-shift-masks", .description = "Prefer a left/right vector logical shift pair over a shift+and pair", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_gfni = Feature{ .name = "gfni", .description = "Enable Galois Field Arithmetic Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -337,14 +337,14 @@ pub const feature_gfni = Feature{ pub const feature_fastGather = Feature{ .name = "fast-gather", .description = "Indicates if gather is reasonably fast", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avx512ifma = Feature{ .name = "avx512ifma", .description = "Enable AVX-512 Integer Fused Multiple-Add", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -352,112 +352,112 @@ pub const feature_avx512ifma = Feature{ pub const feature_invpcid = Feature{ .name = "invpcid", .description = "Invalidate Process-Context Identifier", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sahf = Feature{ .name = "sahf", .description = "Support LAHF and SAHF instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_leaSp = Feature{ .name = "lea-sp", .description = "Use LEA for adjusting the stack pointer", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_leaUsesAg = Feature{ .name = "lea-uses-ag", .description = "LEA instruction needs inputs at AG stage", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lwp = Feature{ .name = "lwp", .description = "Enable LWP instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_lzcnt = Feature{ .name = "lzcnt", .description = "Support LZCNT instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_falseDepsLzcntTzcnt = Feature{ .name = "false-deps-lzcnt-tzcnt", .description = "LZCNT/TZCNT have a false dependency on dest register", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mmx = Feature{ .name = "mmx", .description = "Enable MMX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_movbe = Feature{ .name = "movbe", .description = "Support MOVBE instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_movdir64b = Feature{ .name = "movdir64b", .description = "Support movdir64b instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_movdiri = Feature{ .name = "movdiri", .description = "Support movdiri instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mwaitx = Feature{ .name = "mwaitx", .description = "Enable MONITORX/MWAITX timer functionality", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_macrofusion = Feature{ .name = "macrofusion", .description = "Various instructions can be fused with conditional branches", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_mergeToThreewayBranch = Feature{ .name = "merge-to-threeway-branch", .description = "Merge branches to a three-way conditional branch", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_nopl = Feature{ .name = "nopl", .description = "Enable NOPL instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_pclmul = Feature{ .name = "pclmul", .description = "Enable packed carry-less multiplication instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -465,14 +465,14 @@ pub const feature_pclmul = Feature{ pub const feature_pconfig = Feature{ .name = "pconfig", .description = "platform configuration instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_avx512pf = Feature{ .name = "avx512pf", .description = "Enable AVX-512 PreFetch Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -480,107 +480,107 @@ pub const feature_avx512pf = Feature{ pub const feature_pku = Feature{ .name = "pku", .description = "Enable protection keys", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_popcnt = Feature{ .name = "popcnt", .description = "Support POPCNT instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_falseDepsPopcnt = Feature{ .name = "false-deps-popcnt", .description = "POPCNT has a false dependency on dest register", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_prefetchwt1 = Feature{ .name = "prefetchwt1", .description = "Prefetch with Intent to Write and T1 Hint", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_prfchw = Feature{ .name = "prfchw", .description = "Support PRFCHW instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ptwrite = Feature{ .name = "ptwrite", .description = "Support ptwrite instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_padShortFunctions = Feature{ .name = "pad-short-functions", .description = "Pad short functions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_prefer128Bit = Feature{ .name = "prefer-128-bit", .description = "Prefer 128-bit AVX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_prefer256Bit = Feature{ .name = "prefer-256-bit", .description = "Prefer 256-bit AVX instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rdpid = Feature{ .name = "rdpid", .description = "Support RDPID instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rdrnd = Feature{ .name = "rdrnd", .description = "Support RDRAND instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rdseed = Feature{ .name = "rdseed", .description = "Support RDSEED instruction", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_rtm = Feature{ .name = "rtm", .description = "Support RTM instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_retpoline = Feature{ .name = "retpoline", .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct", - .subfeatures = &[_]*const Feature { - &feature_retpolineIndirectBranches, + .dependencies = &[_]*const Feature { &feature_retpolineIndirectCalls, + &feature_retpolineIndirectBranches, }, }; pub const feature_retpolineExternalThunk = Feature{ .name = "retpoline-external-thunk", .description = "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_retpolineIndirectCalls, }, }; @@ -588,28 +588,28 @@ pub const feature_retpolineExternalThunk = Feature{ pub const feature_retpolineIndirectBranches = Feature{ .name = "retpoline-indirect-branches", .description = "Remove speculation of indirect branches from the generated code", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_retpolineIndirectCalls = Feature{ .name = "retpoline-indirect-calls", .description = "Remove speculation of indirect calls from the generated code", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sgx = Feature{ .name = "sgx", .description = "Enable Software Guard Extensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sha = Feature{ .name = "sha", .description = "Enable SHA instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -617,21 +617,21 @@ pub const feature_sha = Feature{ pub const feature_shstk = Feature{ .name = "shstk", .description = "Support CET Shadow-Stack instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sse = Feature{ .name = "sse", .description = "Enable SSE instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_sse2 = Feature{ .name = "sse2", .description = "Enable SSE2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -639,7 +639,7 @@ pub const feature_sse2 = Feature{ pub const feature_sse3 = Feature{ .name = "sse3", .description = "Enable SSE3 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -647,7 +647,7 @@ pub const feature_sse3 = Feature{ pub const feature_sse4a = Feature{ .name = "sse4a", .description = "Support SSE 4a instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -655,7 +655,7 @@ pub const feature_sse4a = Feature{ pub const feature_sse41 = Feature{ .name = "sse4.1", .description = "Enable SSE 4.1 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -663,7 +663,7 @@ pub const feature_sse41 = Feature{ pub const feature_sse42 = Feature{ .name = "sse4.2", .description = "Enable SSE 4.2 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -671,14 +671,14 @@ pub const feature_sse42 = Feature{ pub const feature_sseUnalignedMem = Feature{ .name = "sse-unaligned-mem", .description = "Allow unaligned memory operands with SSE instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_ssse3 = Feature{ .name = "ssse3", .description = "Enable SSSE3 instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -686,105 +686,105 @@ pub const feature_ssse3 = Feature{ pub const feature_slow3opsLea = Feature{ .name = "slow-3ops-lea", .description = "LEA instruction with 3 ops or certain registers is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_idivlToDivb = Feature{ .name = "idivl-to-divb", .description = "Use 8-bit divide for positive values less than 256", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_idivqToDivl = Feature{ .name = "idivq-to-divl", .description = "Use 32-bit divide for positive values less than 2^32", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowIncdec = Feature{ .name = "slow-incdec", .description = "INC and DEC instructions are slower than ADD and SUB", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowLea = Feature{ .name = "slow-lea", .description = "LEA instruction with certain arguments is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowPmaddwd = Feature{ .name = "slow-pmaddwd", .description = "PMADDWD is slower than PMULLD", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowPmulld = Feature{ .name = "slow-pmulld", .description = "PMULLD instruction is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowShld = Feature{ .name = "slow-shld", .description = "SHLD instruction is slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowTwoMemOps = Feature{ .name = "slow-two-mem-ops", .description = "Two memory operand instructions are slow", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowUnalignedMem16 = Feature{ .name = "slow-unaligned-mem-16", .description = "Slow unaligned 16-byte memory access", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_slowUnalignedMem32 = Feature{ .name = "slow-unaligned-mem-32", .description = "Slow unaligned 32-byte memory access", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_softFloat = Feature{ .name = "soft-float", .description = "Use software floating point features", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_tbm = Feature{ .name = "tbm", .description = "Enable TBM instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_useAa = Feature{ .name = "use-aa", .description = "Use alias analysis during codegen", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_vaes = Feature{ .name = "vaes", .description = "Promote selected AES instructions to AVX512/AVX registers", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -792,7 +792,7 @@ pub const feature_vaes = Feature{ pub const feature_avx512vbmi = Feature{ .name = "avx512vbmi", .description = "Enable AVX-512 Vector Byte Manipulation Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -800,7 +800,7 @@ pub const feature_avx512vbmi = Feature{ pub const feature_avx512vbmi2 = Feature{ .name = "avx512vbmi2", .description = "Enable AVX-512 further Vector Byte Manipulation Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -808,7 +808,7 @@ pub const feature_avx512vbmi2 = Feature{ pub const feature_avx512vl = Feature{ .name = "avx512vl", .description = "Enable AVX-512 Vector Length eXtensions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -816,7 +816,7 @@ pub const feature_avx512vl = Feature{ pub const feature_avx512vnni = Feature{ .name = "avx512vnni", .description = "Enable AVX-512 Vector Neural Network Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -824,7 +824,7 @@ pub const feature_avx512vnni = Feature{ pub const feature_avx512vp2intersect = Feature{ .name = "avx512vp2intersect", .description = "Enable AVX-512 vp2intersect", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -832,7 +832,7 @@ pub const feature_avx512vp2intersect = Feature{ pub const feature_vpclmulqdq = Feature{ .name = "vpclmulqdq", .description = "Enable vpclmulqdq instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -840,7 +840,7 @@ pub const feature_vpclmulqdq = Feature{ pub const feature_avx512vpopcntdq = Feature{ .name = "avx512vpopcntdq", .description = "Enable AVX-512 Population Count Instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -848,28 +848,28 @@ pub const feature_avx512vpopcntdq = Feature{ pub const feature_waitpkg = Feature{ .name = "waitpkg", .description = "Wait and pause enhancements", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_wbnoinvd = Feature{ .name = "wbnoinvd", .description = "Write Back No Invalidate", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_x87 = Feature{ .name = "x87", .description = "Enable X87 float instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xop = Feature{ .name = "xop", .description = "Enable XOP instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_sse, }, }; @@ -877,49 +877,49 @@ pub const feature_xop = Feature{ pub const feature_xsave = Feature{ .name = "xsave", .description = "Support xsave instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xsavec = Feature{ .name = "xsavec", .description = "Support xsavec instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xsaveopt = Feature{ .name = "xsaveopt", .description = "Support xsaveopt instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_xsaves = Feature{ .name = "xsaves", .description = "Support xsaves instructions", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bitMode16 = Feature{ .name = "16bit-mode", .description = "16-bit mode (i8086)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bitMode32 = Feature{ .name = "32bit-mode", .description = "32-bit mode (80386)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const feature_bitMode64 = Feature{ .name = "64bit-mode", .description = "64-bit mode (x86_64)", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; @@ -1055,7 +1055,7 @@ pub const features = &[_]*const Feature { pub const cpu_amdfam10 = Cpu{ .name = "amdfam10", .llvm_name = "amdfam10", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -1078,7 +1078,7 @@ pub const cpu_amdfam10 = Cpu{ pub const cpu_athlon = Cpu{ .name = "athlon", .llvm_name = "athlon", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cmov, @@ -1093,7 +1093,7 @@ pub const cpu_athlon = Cpu{ pub const cpu_athlon4 = Cpu{ .name = "athlon-4", .llvm_name = "athlon-4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cmov, @@ -1110,7 +1110,7 @@ pub const cpu_athlon4 = Cpu{ pub const cpu_athlonFx = Cpu{ .name = "athlon-fx", .llvm_name = "athlon-fx", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -1130,7 +1130,7 @@ pub const cpu_athlonFx = Cpu{ pub const cpu_athlonMp = Cpu{ .name = "athlon-mp", .llvm_name = "athlon-mp", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cmov, @@ -1147,7 +1147,7 @@ pub const cpu_athlonMp = Cpu{ pub const cpu_athlonTbird = Cpu{ .name = "athlon-tbird", .llvm_name = "athlon-tbird", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cmov, @@ -1162,7 +1162,7 @@ pub const cpu_athlonTbird = Cpu{ pub const cpu_athlonXp = Cpu{ .name = "athlon-xp", .llvm_name = "athlon-xp", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cmov, @@ -1179,7 +1179,7 @@ pub const cpu_athlonXp = Cpu{ pub const cpu_athlon64 = Cpu{ .name = "athlon64", .llvm_name = "athlon64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -1199,7 +1199,7 @@ pub const cpu_athlon64 = Cpu{ pub const cpu_athlon64Sse3 = Cpu{ .name = "athlon64-sse3", .llvm_name = "athlon64-sse3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -1220,7 +1220,7 @@ pub const cpu_athlon64Sse3 = Cpu{ pub const cpu_atom = Cpu{ .name = "atom", .llvm_name = "atom", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -1246,7 +1246,7 @@ pub const cpu_atom = Cpu{ pub const cpu_barcelona = Cpu{ .name = "barcelona", .llvm_name = "barcelona", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -1269,7 +1269,7 @@ pub const cpu_barcelona = Cpu{ pub const cpu_bdver1 = Cpu{ .name = "bdver1", .llvm_name = "bdver1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1298,7 +1298,7 @@ pub const cpu_bdver1 = Cpu{ pub const cpu_bdver2 = Cpu{ .name = "bdver2", .llvm_name = "bdver2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1332,7 +1332,7 @@ pub const cpu_bdver2 = Cpu{ pub const cpu_bdver3 = Cpu{ .name = "bdver3", .llvm_name = "bdver3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1368,7 +1368,7 @@ pub const cpu_bdver3 = Cpu{ pub const cpu_bdver4 = Cpu{ .name = "bdver4", .llvm_name = "bdver4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1407,7 +1407,7 @@ pub const cpu_bdver4 = Cpu{ pub const cpu_bonnell = Cpu{ .name = "bonnell", .llvm_name = "bonnell", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -1433,7 +1433,7 @@ pub const cpu_bonnell = Cpu{ pub const cpu_broadwell = Cpu{ .name = "broadwell", .llvm_name = "broadwell", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -1479,7 +1479,7 @@ pub const cpu_broadwell = Cpu{ pub const cpu_btver1 = Cpu{ .name = "btver1", .llvm_name = "btver1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -1505,7 +1505,7 @@ pub const cpu_btver1 = Cpu{ pub const cpu_btver2 = Cpu{ .name = "btver2", .llvm_name = "btver2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1543,7 +1543,7 @@ pub const cpu_btver2 = Cpu{ pub const cpu_c3 = Cpu{ .name = "c3", .llvm_name = "c3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnow3, &feature_slowUnalignedMem16, @@ -1554,7 +1554,7 @@ pub const cpu_c3 = Cpu{ pub const cpu_c32 = Cpu{ .name = "c3-2", .llvm_name = "c3-2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -1568,7 +1568,7 @@ pub const cpu_c32 = Cpu{ pub const cpu_cannonlake = Cpu{ .name = "cannonlake", .llvm_name = "cannonlake", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -1629,7 +1629,7 @@ pub const cpu_cannonlake = Cpu{ pub const cpu_cascadelake = Cpu{ .name = "cascadelake", .llvm_name = "cascadelake", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -1689,7 +1689,7 @@ pub const cpu_cascadelake = Cpu{ pub const cpu_cooperlake = Cpu{ .name = "cooperlake", .llvm_name = "cooperlake", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -1750,7 +1750,7 @@ pub const cpu_cooperlake = Cpu{ pub const cpu_coreAvxI = Cpu{ .name = "core-avx-i", .llvm_name = "core-avx-i", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -1784,7 +1784,7 @@ pub const cpu_coreAvxI = Cpu{ pub const cpu_coreAvx2 = Cpu{ .name = "core-avx2", .llvm_name = "core-avx2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -1827,7 +1827,7 @@ pub const cpu_coreAvx2 = Cpu{ pub const cpu_core2 = Cpu{ .name = "core2", .llvm_name = "core2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -1847,7 +1847,7 @@ pub const cpu_core2 = Cpu{ pub const cpu_corei7 = Cpu{ .name = "corei7", .llvm_name = "corei7", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -1867,7 +1867,7 @@ pub const cpu_corei7 = Cpu{ pub const cpu_corei7Avx = Cpu{ .name = "corei7-avx", .llvm_name = "corei7-avx", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -1898,7 +1898,7 @@ pub const cpu_corei7Avx = Cpu{ pub const cpu_generic = Cpu{ .name = "generic", .llvm_name = "generic", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, &feature_slowUnalignedMem16, &feature_x87, @@ -1908,7 +1908,7 @@ pub const cpu_generic = Cpu{ pub const cpu_geode = Cpu{ .name = "geode", .llvm_name = "geode", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_cx8, @@ -1920,7 +1920,7 @@ pub const cpu_geode = Cpu{ pub const cpu_goldmont = Cpu{ .name = "goldmont", .llvm_name = "goldmont", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1957,7 +1957,7 @@ pub const cpu_goldmont = Cpu{ pub const cpu_goldmontPlus = Cpu{ .name = "goldmont-plus", .llvm_name = "goldmont-plus", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -1996,7 +1996,7 @@ pub const cpu_goldmontPlus = Cpu{ pub const cpu_haswell = Cpu{ .name = "haswell", .llvm_name = "haswell", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -2039,7 +2039,7 @@ pub const cpu_haswell = Cpu{ pub const cpu_i386 = Cpu{ .name = "i386", .llvm_name = "i386", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_slowUnalignedMem16, &feature_x87, }, @@ -2048,7 +2048,7 @@ pub const cpu_i386 = Cpu{ pub const cpu_i486 = Cpu{ .name = "i486", .llvm_name = "i486", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_slowUnalignedMem16, &feature_x87, }, @@ -2057,7 +2057,7 @@ pub const cpu_i486 = Cpu{ pub const cpu_i586 = Cpu{ .name = "i586", .llvm_name = "i586", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, &feature_slowUnalignedMem16, &feature_x87, @@ -2067,7 +2067,7 @@ pub const cpu_i586 = Cpu{ pub const cpu_i686 = Cpu{ .name = "i686", .llvm_name = "i686", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_slowUnalignedMem16, @@ -2078,7 +2078,7 @@ pub const cpu_i686 = Cpu{ pub const cpu_icelakeClient = Cpu{ .name = "icelake-client", .llvm_name = "icelake-client", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2148,7 +2148,7 @@ pub const cpu_icelakeClient = Cpu{ pub const cpu_icelakeServer = Cpu{ .name = "icelake-server", .llvm_name = "icelake-server", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2220,7 +2220,7 @@ pub const cpu_icelakeServer = Cpu{ pub const cpu_ivybridge = Cpu{ .name = "ivybridge", .llvm_name = "ivybridge", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -2254,7 +2254,7 @@ pub const cpu_ivybridge = Cpu{ pub const cpu_k6 = Cpu{ .name = "k6", .llvm_name = "k6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, &feature_mmx, &feature_slowUnalignedMem16, @@ -2265,7 +2265,7 @@ pub const cpu_k6 = Cpu{ pub const cpu_k62 = Cpu{ .name = "k6-2", .llvm_name = "k6-2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnow3, &feature_cx8, @@ -2277,7 +2277,7 @@ pub const cpu_k62 = Cpu{ pub const cpu_k63 = Cpu{ .name = "k6-3", .llvm_name = "k6-3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnow3, &feature_cx8, @@ -2289,7 +2289,7 @@ pub const cpu_k63 = Cpu{ pub const cpu_k8 = Cpu{ .name = "k8", .llvm_name = "k8", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -2309,7 +2309,7 @@ pub const cpu_k8 = Cpu{ pub const cpu_k8Sse3 = Cpu{ .name = "k8-sse3", .llvm_name = "k8-sse3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -2330,7 +2330,7 @@ pub const cpu_k8Sse3 = Cpu{ pub const cpu_knl = Cpu{ .name = "knl", .llvm_name = "knl", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2375,7 +2375,7 @@ pub const cpu_knl = Cpu{ pub const cpu_knm = Cpu{ .name = "knm", .llvm_name = "knm", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2421,14 +2421,14 @@ pub const cpu_knm = Cpu{ pub const cpu_lakemont = Cpu{ .name = "lakemont", .llvm_name = "lakemont", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { }, }; pub const cpu_nehalem = Cpu{ .name = "nehalem", .llvm_name = "nehalem", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -2448,7 +2448,7 @@ pub const cpu_nehalem = Cpu{ pub const cpu_nocona = Cpu{ .name = "nocona", .llvm_name = "nocona", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -2466,7 +2466,7 @@ pub const cpu_nocona = Cpu{ pub const cpu_opteron = Cpu{ .name = "opteron", .llvm_name = "opteron", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -2486,7 +2486,7 @@ pub const cpu_opteron = Cpu{ pub const cpu_opteronSse3 = Cpu{ .name = "opteron-sse3", .llvm_name = "opteron-sse3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnowa3, &feature_bit64, @@ -2507,7 +2507,7 @@ pub const cpu_opteronSse3 = Cpu{ pub const cpu_penryn = Cpu{ .name = "penryn", .llvm_name = "penryn", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -2527,7 +2527,7 @@ pub const cpu_penryn = Cpu{ pub const cpu_pentium = Cpu{ .name = "pentium", .llvm_name = "pentium", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, &feature_slowUnalignedMem16, &feature_x87, @@ -2537,7 +2537,7 @@ pub const cpu_pentium = Cpu{ pub const cpu_pentiumM = Cpu{ .name = "pentium-m", .llvm_name = "pentium-m", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2553,7 +2553,7 @@ pub const cpu_pentiumM = Cpu{ pub const cpu_pentiumMmx = Cpu{ .name = "pentium-mmx", .llvm_name = "pentium-mmx", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cx8, &feature_mmx, &feature_slowUnalignedMem16, @@ -2564,7 +2564,7 @@ pub const cpu_pentiumMmx = Cpu{ pub const cpu_pentium2 = Cpu{ .name = "pentium2", .llvm_name = "pentium2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2578,7 +2578,7 @@ pub const cpu_pentium2 = Cpu{ pub const cpu_pentium3 = Cpu{ .name = "pentium3", .llvm_name = "pentium3", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2593,7 +2593,7 @@ pub const cpu_pentium3 = Cpu{ pub const cpu_pentium3m = Cpu{ .name = "pentium3m", .llvm_name = "pentium3m", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2608,7 +2608,7 @@ pub const cpu_pentium3m = Cpu{ pub const cpu_pentium4 = Cpu{ .name = "pentium4", .llvm_name = "pentium4", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2624,7 +2624,7 @@ pub const cpu_pentium4 = Cpu{ pub const cpu_pentium4m = Cpu{ .name = "pentium4m", .llvm_name = "pentium4m", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2640,7 +2640,7 @@ pub const cpu_pentium4m = Cpu{ pub const cpu_pentiumpro = Cpu{ .name = "pentiumpro", .llvm_name = "pentiumpro", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_nopl, @@ -2652,7 +2652,7 @@ pub const cpu_pentiumpro = Cpu{ pub const cpu_prescott = Cpu{ .name = "prescott", .llvm_name = "prescott", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -2668,7 +2668,7 @@ pub const cpu_prescott = Cpu{ pub const cpu_sandybridge = Cpu{ .name = "sandybridge", .llvm_name = "sandybridge", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_avx, @@ -2699,7 +2699,7 @@ pub const cpu_sandybridge = Cpu{ pub const cpu_silvermont = Cpu{ .name = "silvermont", .llvm_name = "silvermont", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -2729,7 +2729,7 @@ pub const cpu_silvermont = Cpu{ pub const cpu_skx = Cpu{ .name = "skx", .llvm_name = "skx", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2788,7 +2788,7 @@ pub const cpu_skx = Cpu{ pub const cpu_skylake = Cpu{ .name = "skylake", .llvm_name = "skylake", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2840,7 +2840,7 @@ pub const cpu_skylake = Cpu{ pub const cpu_skylakeAvx512 = Cpu{ .name = "skylake-avx512", .llvm_name = "skylake-avx512", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -2899,7 +2899,7 @@ pub const cpu_skylakeAvx512 = Cpu{ pub const cpu_slm = Cpu{ .name = "slm", .llvm_name = "slm", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -2929,7 +2929,7 @@ pub const cpu_slm = Cpu{ pub const cpu_tigerlake = Cpu{ .name = "tigerlake", .llvm_name = "tigerlake", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -3003,7 +3003,7 @@ pub const cpu_tigerlake = Cpu{ pub const cpu_tremont = Cpu{ .name = "tremont", .llvm_name = "tremont", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_sse, &feature_aes, @@ -3047,7 +3047,7 @@ pub const cpu_tremont = Cpu{ pub const cpu_westmere = Cpu{ .name = "westmere", .llvm_name = "westmere", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -3068,7 +3068,7 @@ pub const cpu_westmere = Cpu{ pub const cpu_winchipC6 = Cpu{ .name = "winchip-c6", .llvm_name = "winchip-c6", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_slowUnalignedMem16, &feature_x87, @@ -3078,7 +3078,7 @@ pub const cpu_winchipC6 = Cpu{ pub const cpu_winchip2 = Cpu{ .name = "winchip2", .llvm_name = "winchip2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_mmx, &feature_dnow3, &feature_slowUnalignedMem16, @@ -3089,7 +3089,7 @@ pub const cpu_winchip2 = Cpu{ pub const cpu_x8664 = Cpu{ .name = "x86-64", .llvm_name = "x86-64", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_cmov, &feature_cx8, @@ -3108,7 +3108,7 @@ pub const cpu_x8664 = Cpu{ pub const cpu_yonah = Cpu{ .name = "yonah", .llvm_name = "yonah", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_cmov, &feature_cx8, &feature_fxsr, @@ -3124,7 +3124,7 @@ pub const cpu_yonah = Cpu{ pub const cpu_znver1 = Cpu{ .name = "znver1", .llvm_name = "znver1", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, @@ -3171,7 +3171,7 @@ pub const cpu_znver1 = Cpu{ pub const cpu_znver2 = Cpu{ .name = "znver2", .llvm_name = "znver2", - .subfeatures = &[_]*const Feature { + .dependencies = &[_]*const Feature { &feature_bit64, &feature_adx, &feature_sse, diff --git a/src/main.cpp b/src/main.cpp index f061b13414..32efb9f020 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -135,7 +135,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { "Targets Options:\n" " --list-features [arch] list available features for the given architecture\n" " --list-cpus [arch] list available cpus for the given architecture\n" - " --show-subfeatures list subfeatures for each entry from --list-features or --list-cpus\n" + " --show-dependencies list feature dependencies for each entry from --list-{features,cpus}\n" , arg0); return return_code; } @@ -540,7 +540,7 @@ int main(int argc, char **argv) { const char *targets_list_features_arch = nullptr; const char *targets_list_cpus_arch = nullptr; - bool targets_show_subfeatures = false; + bool targets_show_dependencies = false; ZigList llvm_argv = {0}; llvm_argv.append("zig (LLVM option parsing)"); @@ -792,8 +792,8 @@ int main(int argc, char **argv) { cur_pkg = cur_pkg->parent; } else if (strcmp(arg, "-ffunction-sections") == 0) { function_sections = true; - } else if (strcmp(arg, "--show-subfeatures") == 0) { - targets_show_subfeatures = true; + } else if (strcmp(arg, "--show-dependencies") == 0) { + targets_show_dependencies = true; } else if (i + 1 >= argc) { fprintf(stderr, "Expected another argument after %s\n", arg); return print_error_usage(arg0); @@ -1448,13 +1448,13 @@ int main(int argc, char **argv) { stage2_list_features_for_arch( targets_list_features_arch, strlen(targets_list_features_arch), - targets_show_subfeatures); + targets_show_dependencies); return 0; } else if (targets_list_cpus_arch != nullptr) { stage2_list_cpus_for_arch( targets_list_cpus_arch, strlen(targets_list_cpus_arch), - targets_show_subfeatures); + targets_show_dependencies); return 0; } else { return print_target_list(stdout);