Commit 4c6f207aff

Andrew Kelley <andrew@ziglang.org>
2020-02-20 00:12:06
clean up arm CPU features
* remove "cpu features" that are actually just processors * rename `v8` to `v8a`. this matches the corresponding change to target/aarch64.zig * rename types in preparation for removing sub-architecture from `std.Target`. I have other files changed in my dirty working tree, but about to make some changes to arm.zig that I don't want batched with this commit.
1 parent c664692
Changed files (1)
lib
std
target
lib/std/target/arm.zig
@@ -1,25 +1,11 @@
 const std = @import("../std.zig");
-const Cpu = std.Target.Cpu;
+const CpuFeature = std.Target.Cpu.Feature;
+const CpuModel = std.Target.Cpu.Model;
 
 pub const Feature = enum {
     @"32bit",
     @"8msecext",
-    a12,
-    a15,
-    a17,
-    a32,
-    a35,
-    a5,
-    a53,
-    a55,
-    a57,
-    a7,
-    a72,
-    a73,
-    a75,
     a76,
-    a8,
-    a9,
     aclass,
     acquire_release,
     aes,
@@ -89,8 +75,6 @@ pub const Feature = enum {
     hwdiv_arm,
     iwmmxt,
     iwmmxt2,
-    krait,
-    kryo,
     lob,
     long_calls,
     loop_align,
@@ -114,9 +98,6 @@ pub const Feature = enum {
     prefer_vmovsr,
     prof_unpr,
     r4,
-    r5,
-    r52,
-    r7,
     ras,
     rclass,
     read_tp_hard,
@@ -148,7 +129,7 @@ pub const Feature = enum {
     v6t2,
     v7,
     v7clrex,
-    v8,
+    v8a,
     v8_1a,
     v8_1m_main,
     v8_2a,
@@ -178,13 +159,13 @@ pub const Feature = enum {
     zcz,
 };
 
-pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
+pub usingnamespace CpuFeature.feature_set_fns(Feature);
 
 pub const all_features = blk: {
     @setEvalBranchQuota(10000);
     const len = @typeInfo(Feature).Enum.fields.len;
-    std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
-    var result: [len]Cpu.Feature = undefined;
+    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
+    var result: [len]CpuFeature = undefined;
     result[@enumToInt(Feature.@"32bit")] = .{
         .llvm_name = "32bit",
         .description = "Prefer 32-bit Thumb instrs",
@@ -195,86 +176,11 @@ pub const all_features = blk: {
         .description = "Enable support for ARMv8-M Security Extensions",
         .dependencies = featureSet(&[_]Feature{}),
     };
-    result[@enumToInt(Feature.a12)] = .{
-        .llvm_name = "a12",
-        .description = "Cortex-A12 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a15)] = .{
-        .llvm_name = "a15",
-        .description = "Cortex-A15 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a17)] = .{
-        .llvm_name = "a17",
-        .description = "Cortex-A17 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a32)] = .{
-        .llvm_name = "a32",
-        .description = "Cortex-A32 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a35)] = .{
-        .llvm_name = "a35",
-        .description = "Cortex-A35 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a5)] = .{
-        .llvm_name = "a5",
-        .description = "Cortex-A5 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a53)] = .{
-        .llvm_name = "a53",
-        .description = "Cortex-A53 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a55)] = .{
-        .llvm_name = "a55",
-        .description = "Cortex-A55 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a57)] = .{
-        .llvm_name = "a57",
-        .description = "Cortex-A57 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a7)] = .{
-        .llvm_name = "a7",
-        .description = "Cortex-A7 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a72)] = .{
-        .llvm_name = "a72",
-        .description = "Cortex-A72 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a73)] = .{
-        .llvm_name = "a73",
-        .description = "Cortex-A73 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a75)] = .{
-        .llvm_name = "a75",
-        .description = "Cortex-A75 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
     result[@enumToInt(Feature.a76)] = .{
         .llvm_name = "a76",
         .description = "Cortex-A76 ARM processors",
         .dependencies = featureSet(&[_]Feature{}),
     };
-    result[@enumToInt(Feature.a8)] = .{
-        .llvm_name = "a8",
-        .description = "Cortex-A8 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.a9)] = .{
-        .llvm_name = "a9",
-        .description = "Cortex-A9 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
     result[@enumToInt(Feature.aclass)] = .{
         .llvm_name = "aclass",
         .description = "Is application profile ('A' series)",
@@ -497,7 +403,7 @@ pub const all_features = blk: {
             .mp,
             .neon,
             .trustzone,
-            .v8,
+            .v8a,
             .virtualization,
         }),
     };
@@ -543,7 +449,7 @@ pub const all_features = blk: {
             .mp,
             .neon,
             .rclass,
-            .v8,
+            .v8a,
             .virtualization,
         }),
     };
@@ -872,16 +778,6 @@ pub const all_features = blk: {
             .armv5te,
         }),
     };
-    result[@enumToInt(Feature.krait)] = .{
-        .llvm_name = "krait",
-        .description = "Qualcomm Krait processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.kryo)] = .{
-        .llvm_name = "kryo",
-        .description = "Qualcomm Kryo processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
     result[@enumToInt(Feature.lob)] = .{
         .llvm_name = "lob",
         .description = "Enable Low Overhead Branch extensions",
@@ -1008,21 +904,6 @@ pub const all_features = blk: {
         .description = "Cortex-R4 ARM processors",
         .dependencies = featureSet(&[_]Feature{}),
     };
-    result[@enumToInt(Feature.r5)] = .{
-        .llvm_name = "r5",
-        .description = "Cortex-R5 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.r52)] = .{
-        .llvm_name = "r52",
-        .description = "Cortex-R52 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.r7)] = .{
-        .llvm_name = "r7",
-        .description = "Cortex-R7 ARM processors",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
     result[@enumToInt(Feature.ras)] = .{
         .llvm_name = "ras",
         .description = "Enable Reliability, Availability and Serviceability extensions",
@@ -1200,9 +1081,9 @@ pub const all_features = blk: {
         .description = "Has v7 clrex instruction",
         .dependencies = featureSet(&[_]Feature{}),
     };
-    result[@enumToInt(Feature.v8)] = .{
-        .llvm_name = "v8",
-        .description = "Support ARM v8 instructions",
+    result[@enumToInt(Feature.v8a)] = .{
+        .llvm_name = "v8a",
+        .description = "Support ARM v8a instructions",
         .dependencies = featureSet(&[_]Feature{
             .acquire_release,
             .v7,
@@ -1212,7 +1093,7 @@ pub const all_features = blk: {
         .llvm_name = "v8.1a",
         .description = "Support ARM v8.1a instructions",
         .dependencies = featureSet(&[_]Feature{
-            .v8,
+            .v8a,
         }),
     };
     result[@enumToInt(Feature.v8_1m_main)] = .{
@@ -1415,49 +1296,49 @@ pub const all_features = blk: {
 };
 
 pub const cpu = struct {
-    pub const arm1020e = Cpu{
+    pub const arm1020e = CpuModel{
         .name = "arm1020e",
         .llvm_name = "arm1020e",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm1020t = Cpu{
+    pub const arm1020t = CpuModel{
         .name = "arm1020t",
         .llvm_name = "arm1020t",
         .features = featureSet(&[_]Feature{
             .armv5t,
         }),
     };
-    pub const arm1022e = Cpu{
+    pub const arm1022e = CpuModel{
         .name = "arm1022e",
         .llvm_name = "arm1022e",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm10e = Cpu{
+    pub const arm10e = CpuModel{
         .name = "arm10e",
         .llvm_name = "arm10e",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm10tdmi = Cpu{
+    pub const arm10tdmi = CpuModel{
         .name = "arm10tdmi",
         .llvm_name = "arm10tdmi",
         .features = featureSet(&[_]Feature{
             .armv5t,
         }),
     };
-    pub const arm1136j_s = Cpu{
+    pub const arm1136j_s = CpuModel{
         .name = "arm1136j_s",
         .llvm_name = "arm1136j-s",
         .features = featureSet(&[_]Feature{
             .armv6,
         }),
     };
-    pub const arm1136jf_s = Cpu{
+    pub const arm1136jf_s = CpuModel{
         .name = "arm1136jf_s",
         .llvm_name = "arm1136jf-s",
         .features = featureSet(&[_]Feature{
@@ -1466,14 +1347,14 @@ pub const cpu = struct {
             .vfp2,
         }),
     };
-    pub const arm1156t2_s = Cpu{
+    pub const arm1156t2_s = CpuModel{
         .name = "arm1156t2_s",
         .llvm_name = "arm1156t2-s",
         .features = featureSet(&[_]Feature{
             .armv6t2,
         }),
     };
-    pub const arm1156t2f_s = Cpu{
+    pub const arm1156t2f_s = CpuModel{
         .name = "arm1156t2f_s",
         .llvm_name = "arm1156t2f-s",
         .features = featureSet(&[_]Feature{
@@ -1482,21 +1363,21 @@ pub const cpu = struct {
             .vfp2,
         }),
     };
-    pub const arm1176j_s = Cpu{
+    pub const arm1176j_s = CpuModel{
         .name = "arm1176j_s",
         .llvm_name = "arm1176j-s",
         .features = featureSet(&[_]Feature{
             .armv6kz,
         }),
     };
-    pub const arm1176jz_s = Cpu{
+    pub const arm1176jz_s = CpuModel{
         .name = "arm1176jz_s",
         .llvm_name = "arm1176jz-s",
         .features = featureSet(&[_]Feature{
             .armv6kz,
         }),
     };
-    pub const arm1176jzf_s = Cpu{
+    pub const arm1176jzf_s = CpuModel{
         .name = "arm1176jzf_s",
         .llvm_name = "arm1176jzf-s",
         .features = featureSet(&[_]Feature{
@@ -1505,126 +1386,133 @@ pub const cpu = struct {
             .vfp2,
         }),
     };
-    pub const arm710t = Cpu{
+    pub const arm710t = CpuModel{
         .name = "arm710t",
         .llvm_name = "arm710t",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm720t = Cpu{
+    pub const arm720t = CpuModel{
         .name = "arm720t",
         .llvm_name = "arm720t",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm7tdmi = Cpu{
+    pub const arm7tdmi = CpuModel{
         .name = "arm7tdmi",
         .llvm_name = "arm7tdmi",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm7tdmi_s = Cpu{
+    pub const arm7tdmi_s = CpuModel{
         .name = "arm7tdmi_s",
         .llvm_name = "arm7tdmi-s",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm8 = Cpu{
+    pub const arm8 = CpuModel{
         .name = "arm8",
         .llvm_name = "arm8",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const arm810 = Cpu{
+    pub const arm810 = CpuModel{
         .name = "arm810",
         .llvm_name = "arm810",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const arm9 = Cpu{
+    pub const arm9 = CpuModel{
         .name = "arm9",
         .llvm_name = "arm9",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm920 = Cpu{
+    pub const arm920 = CpuModel{
         .name = "arm920",
         .llvm_name = "arm920",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm920t = Cpu{
+    pub const arm920t = CpuModel{
         .name = "arm920t",
         .llvm_name = "arm920t",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm922t = Cpu{
+    pub const arm922t = CpuModel{
         .name = "arm922t",
         .llvm_name = "arm922t",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm926ej_s = Cpu{
+    pub const arm926ej_s = CpuModel{
         .name = "arm926ej_s",
         .llvm_name = "arm926ej-s",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm940t = Cpu{
+    pub const arm940t = CpuModel{
         .name = "arm940t",
         .llvm_name = "arm940t",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const arm946e_s = Cpu{
+    pub const arm946e_s = CpuModel{
         .name = "arm946e_s",
         .llvm_name = "arm946e-s",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm966e_s = Cpu{
+    pub const arm966e_s = CpuModel{
         .name = "arm966e_s",
         .llvm_name = "arm966e-s",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm968e_s = Cpu{
+    pub const arm968e_s = CpuModel{
         .name = "arm968e_s",
         .llvm_name = "arm968e-s",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm9e = Cpu{
+    pub const arm9e = CpuModel{
         .name = "arm9e",
         .llvm_name = "arm9e",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const arm9tdmi = Cpu{
+    pub const arm9tdmi = CpuModel{
         .name = "arm9tdmi",
         .llvm_name = "arm9tdmi",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const cortex_a12 = Cpu{
+    pub const baseline = CpuModel{
+        .name = "baseline",
+        .llvm_name = "generic",
+        .features = featureSet(&[_]Feature{
+            .armv6_m,
+        }),
+    };
+    pub const cortex_a12 = CpuModel{
         .name = "cortex_a12",
         .llvm_name = "cortex-a12",
         .features = featureSet(&[_]Feature{
@@ -1639,11 +1527,10 @@ pub const cpu = struct {
             .vmlx_forwarding,
         }),
     };
-    pub const cortex_a15 = Cpu{
+    pub const cortex_a15 = CpuModel{
         .name = "cortex_a15",
         .llvm_name = "cortex-a15",
         .features = featureSet(&[_]Feature{
-            .a15,
             .armv7_a,
             .avoid_partial_cpsr,
             .dont_widen_vmovs,
@@ -1657,11 +1544,10 @@ pub const cpu = struct {
             .vldn_align,
         }),
     };
-    pub const cortex_a17 = Cpu{
+    pub const cortex_a17 = CpuModel{
         .name = "cortex_a17",
         .llvm_name = "cortex-a17",
         .features = featureSet(&[_]Feature{
-            .a17,
             .armv7_a,
             .avoid_partial_cpsr,
             .mp,
@@ -1672,7 +1558,7 @@ pub const cpu = struct {
             .vmlx_forwarding,
         }),
     };
-    pub const cortex_a32 = Cpu{
+    pub const cortex_a32 = CpuModel{
         .name = "cortex_a32",
         .llvm_name = "cortex-a32",
         .features = featureSet(&[_]Feature{
@@ -1683,11 +1569,10 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a35 = Cpu{
+    pub const cortex_a35 = CpuModel{
         .name = "cortex_a35",
         .llvm_name = "cortex-a35",
         .features = featureSet(&[_]Feature{
-            .a35,
             .armv8_a,
             .crc,
             .crypto,
@@ -1695,11 +1580,10 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a5 = Cpu{
+    pub const cortex_a5 = CpuModel{
         .name = "cortex_a5",
         .llvm_name = "cortex-a5",
         .features = featureSet(&[_]Feature{
-            .a5,
             .armv7_a,
             .mp,
             .ret_addr_stack,
@@ -1710,11 +1594,10 @@ pub const cpu = struct {
             .vmlx_forwarding,
         }),
     };
-    pub const cortex_a53 = Cpu{
+    pub const cortex_a53 = CpuModel{
         .name = "cortex_a53",
         .llvm_name = "cortex-a53",
         .features = featureSet(&[_]Feature{
-            .a53,
             .armv8_a,
             .crc,
             .crypto,
@@ -1723,22 +1606,20 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a55 = Cpu{
+    pub const cortex_a55 = CpuModel{
         .name = "cortex_a55",
         .llvm_name = "cortex-a55",
         .features = featureSet(&[_]Feature{
-            .a55,
             .armv8_2_a,
             .dotprod,
             .hwdiv,
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a57 = Cpu{
+    pub const cortex_a57 = CpuModel{
         .name = "cortex_a57",
         .llvm_name = "cortex-a57",
         .features = featureSet(&[_]Feature{
-            .a57,
             .armv8_a,
             .avoid_partial_cpsr,
             .cheap_predicable_cpsr,
@@ -1749,11 +1630,10 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a7 = Cpu{
+    pub const cortex_a7 = CpuModel{
         .name = "cortex_a7",
         .llvm_name = "cortex-a7",
         .features = featureSet(&[_]Feature{
-            .a7,
             .armv7_a,
             .mp,
             .ret_addr_stack,
@@ -1766,11 +1646,10 @@ pub const cpu = struct {
             .vmlx_hazards,
         }),
     };
-    pub const cortex_a72 = Cpu{
+    pub const cortex_a72 = CpuModel{
         .name = "cortex_a72",
         .llvm_name = "cortex-a72",
         .features = featureSet(&[_]Feature{
-            .a72,
             .armv8_a,
             .crc,
             .crypto,
@@ -1778,11 +1657,10 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a73 = Cpu{
+    pub const cortex_a73 = CpuModel{
         .name = "cortex_a73",
         .llvm_name = "cortex-a73",
         .features = featureSet(&[_]Feature{
-            .a73,
             .armv8_a,
             .crc,
             .crypto,
@@ -1790,18 +1668,17 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a75 = Cpu{
+    pub const cortex_a75 = CpuModel{
         .name = "cortex_a75",
         .llvm_name = "cortex-a75",
         .features = featureSet(&[_]Feature{
-            .a75,
             .armv8_2_a,
             .dotprod,
             .hwdiv,
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a76 = Cpu{
+    pub const cortex_a76 = CpuModel{
         .name = "cortex_a76",
         .llvm_name = "cortex-a76",
         .features = featureSet(&[_]Feature{
@@ -1815,7 +1692,7 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a76ae = Cpu{
+    pub const cortex_a76ae = CpuModel{
         .name = "cortex_a76ae",
         .llvm_name = "cortex-a76ae",
         .features = featureSet(&[_]Feature{
@@ -1829,11 +1706,10 @@ pub const cpu = struct {
             .hwdiv_arm,
         }),
     };
-    pub const cortex_a8 = Cpu{
+    pub const cortex_a8 = CpuModel{
         .name = "cortex_a8",
         .llvm_name = "cortex-a8",
         .features = featureSet(&[_]Feature{
-            .a8,
             .armv7_a,
             .nonpipelined_vfp,
             .ret_addr_stack,
@@ -1844,11 +1720,10 @@ pub const cpu = struct {
             .vmlx_hazards,
         }),
     };
-    pub const cortex_a9 = Cpu{
+    pub const cortex_a9 = CpuModel{
         .name = "cortex_a9",
         .llvm_name = "cortex-a9",
         .features = featureSet(&[_]Feature{
-            .a9,
             .armv7_a,
             .avoid_partial_cpsr,
             .expand_fp_mlx,
@@ -1864,28 +1739,28 @@ pub const cpu = struct {
             .vmlx_hazards,
         }),
     };
-    pub const cortex_m0 = Cpu{
+    pub const cortex_m0 = CpuModel{
         .name = "cortex_m0",
         .llvm_name = "cortex-m0",
         .features = featureSet(&[_]Feature{
             .armv6_m,
         }),
     };
-    pub const cortex_m0plus = Cpu{
+    pub const cortex_m0plus = CpuModel{
         .name = "cortex_m0plus",
         .llvm_name = "cortex-m0plus",
         .features = featureSet(&[_]Feature{
             .armv6_m,
         }),
     };
-    pub const cortex_m1 = Cpu{
+    pub const cortex_m1 = CpuModel{
         .name = "cortex_m1",
         .llvm_name = "cortex-m1",
         .features = featureSet(&[_]Feature{
             .armv6_m,
         }),
     };
-    pub const cortex_m23 = Cpu{
+    pub const cortex_m23 = CpuModel{
         .name = "cortex_m23",
         .llvm_name = "cortex-m23",
         .features = featureSet(&[_]Feature{
@@ -1893,7 +1768,7 @@ pub const cpu = struct {
             .no_movt,
         }),
     };
-    pub const cortex_m3 = Cpu{
+    pub const cortex_m3 = CpuModel{
         .name = "cortex_m3",
         .llvm_name = "cortex-m3",
         .features = featureSet(&[_]Feature{
@@ -1905,7 +1780,7 @@ pub const cpu = struct {
             .use_misched,
         }),
     };
-    pub const cortex_m33 = Cpu{
+    pub const cortex_m33 = CpuModel{
         .name = "cortex_m33",
         .llvm_name = "cortex-m33",
         .features = featureSet(&[_]Feature{
@@ -1919,7 +1794,7 @@ pub const cpu = struct {
             .use_misched,
         }),
     };
-    pub const cortex_m35p = Cpu{
+    pub const cortex_m35p = CpuModel{
         .name = "cortex_m35p",
         .llvm_name = "cortex-m35p",
         .features = featureSet(&[_]Feature{
@@ -1933,7 +1808,7 @@ pub const cpu = struct {
             .use_misched,
         }),
     };
-    pub const cortex_m4 = Cpu{
+    pub const cortex_m4 = CpuModel{
         .name = "cortex_m4",
         .llvm_name = "cortex-m4",
         .features = featureSet(&[_]Feature{
@@ -1946,7 +1821,7 @@ pub const cpu = struct {
             .vfp4d16sp,
         }),
     };
-    pub const cortex_m7 = Cpu{
+    pub const cortex_m7 = CpuModel{
         .name = "cortex_m7",
         .llvm_name = "cortex-m7",
         .features = featureSet(&[_]Feature{
@@ -1954,7 +1829,7 @@ pub const cpu = struct {
             .fp_armv8d16,
         }),
     };
-    pub const cortex_r4 = Cpu{
+    pub const cortex_r4 = CpuModel{
         .name = "cortex_r4",
         .llvm_name = "cortex-r4",
         .features = featureSet(&[_]Feature{
@@ -1964,7 +1839,7 @@ pub const cpu = struct {
             .ret_addr_stack,
         }),
     };
-    pub const cortex_r4f = Cpu{
+    pub const cortex_r4f = CpuModel{
         .name = "cortex_r4f",
         .llvm_name = "cortex-r4f",
         .features = featureSet(&[_]Feature{
@@ -1977,32 +1852,30 @@ pub const cpu = struct {
             .vfp3d16,
         }),
     };
-    pub const cortex_r5 = Cpu{
+    pub const cortex_r5 = CpuModel{
         .name = "cortex_r5",
         .llvm_name = "cortex-r5",
         .features = featureSet(&[_]Feature{
             .armv7_r,
             .avoid_partial_cpsr,
             .hwdiv_arm,
-            .r5,
             .ret_addr_stack,
             .slow_fp_brcc,
             .slowfpvmlx,
             .vfp3d16,
         }),
     };
-    pub const cortex_r52 = Cpu{
+    pub const cortex_r52 = CpuModel{
         .name = "cortex_r52",
         .llvm_name = "cortex-r52",
         .features = featureSet(&[_]Feature{
             .armv8_r,
             .fpao,
-            .r52,
             .use_aa,
             .use_misched,
         }),
     };
-    pub const cortex_r7 = Cpu{
+    pub const cortex_r7 = CpuModel{
         .name = "cortex_r7",
         .llvm_name = "cortex-r7",
         .features = featureSet(&[_]Feature{
@@ -2011,14 +1884,13 @@ pub const cpu = struct {
             .fp16,
             .hwdiv_arm,
             .mp,
-            .r7,
             .ret_addr_stack,
             .slow_fp_brcc,
             .slowfpvmlx,
             .vfp3d16,
         }),
     };
-    pub const cortex_r8 = Cpu{
+    pub const cortex_r8 = CpuModel{
         .name = "cortex_r8",
         .llvm_name = "cortex-r8",
         .features = featureSet(&[_]Feature{
@@ -2033,7 +1905,7 @@ pub const cpu = struct {
             .vfp3d16,
         }),
     };
-    pub const cyclone = Cpu{
+    pub const cyclone = CpuModel{
         .name = "cyclone",
         .llvm_name = "cyclone",
         .features = featureSet(&[_]Feature{
@@ -2054,14 +1926,14 @@ pub const cpu = struct {
             .zcz,
         }),
     };
-    pub const ep9312 = Cpu{
+    pub const ep9312 = CpuModel{
         .name = "ep9312",
         .llvm_name = "ep9312",
         .features = featureSet(&[_]Feature{
             .armv4t,
         }),
     };
-    pub const exynos_m1 = Cpu{
+    pub const exynos_m1 = CpuModel{
         .name = "exynos_m1",
         .llvm_name = "exynos-m1",
         .features = featureSet(&[_]Feature{
@@ -2069,7 +1941,7 @@ pub const cpu = struct {
             .exynos,
         }),
     };
-    pub const exynos_m2 = Cpu{
+    pub const exynos_m2 = CpuModel{
         .name = "exynos_m2",
         .llvm_name = "exynos-m2",
         .features = featureSet(&[_]Feature{
@@ -2077,7 +1949,7 @@ pub const cpu = struct {
             .exynos,
         }),
     };
-    pub const exynos_m3 = Cpu{
+    pub const exynos_m3 = CpuModel{
         .name = "exynos_m3",
         .llvm_name = "exynos-m3",
         .features = featureSet(&[_]Feature{
@@ -2085,7 +1957,7 @@ pub const cpu = struct {
             .exynos,
         }),
     };
-    pub const exynos_m4 = Cpu{
+    pub const exynos_m4 = CpuModel{
         .name = "exynos_m4",
         .llvm_name = "exynos-m4",
         .features = featureSet(&[_]Feature{
@@ -2095,7 +1967,7 @@ pub const cpu = struct {
             .fullfp16,
         }),
     };
-    pub const exynos_m5 = Cpu{
+    pub const exynos_m5 = CpuModel{
         .name = "exynos_m5",
         .llvm_name = "exynos-m5",
         .features = featureSet(&[_]Feature{
@@ -2105,19 +1977,19 @@ pub const cpu = struct {
             .fullfp16,
         }),
     };
-    pub const generic = Cpu{
+    pub const generic = CpuModel{
         .name = "generic",
         .llvm_name = "generic",
         .features = featureSet(&[_]Feature{}),
     };
-    pub const iwmmxt = Cpu{
+    pub const iwmmxt = CpuModel{
         .name = "iwmmxt",
         .llvm_name = "iwmmxt",
         .features = featureSet(&[_]Feature{
             .armv5te,
         }),
     };
-    pub const krait = Cpu{
+    pub const krait = CpuModel{
         .name = "krait",
         .llvm_name = "krait",
         .features = featureSet(&[_]Feature{
@@ -2126,7 +1998,6 @@ pub const cpu = struct {
             .fp16,
             .hwdiv,
             .hwdiv_arm,
-            .krait,
             .muxed_units,
             .ret_addr_stack,
             .vfp4,
@@ -2134,7 +2005,7 @@ pub const cpu = struct {
             .vmlx_forwarding,
         }),
     };
-    pub const kryo = Cpu{
+    pub const kryo = CpuModel{
         .name = "kryo",
         .llvm_name = "kryo",
         .features = featureSet(&[_]Feature{
@@ -2146,7 +2017,7 @@ pub const cpu = struct {
             .kryo,
         }),
     };
-    pub const mpcore = Cpu{
+    pub const mpcore = CpuModel{
         .name = "mpcore",
         .llvm_name = "mpcore",
         .features = featureSet(&[_]Feature{
@@ -2155,21 +2026,21 @@ pub const cpu = struct {
             .vfp2,
         }),
     };
-    pub const mpcorenovfp = Cpu{
+    pub const mpcorenovfp = CpuModel{
         .name = "mpcorenovfp",
         .llvm_name = "mpcorenovfp",
         .features = featureSet(&[_]Feature{
             .armv6k,
         }),
     };
-    pub const sc000 = Cpu{
+    pub const sc000 = CpuModel{
         .name = "sc000",
         .llvm_name = "sc000",
         .features = featureSet(&[_]Feature{
             .armv6_m,
         }),
     };
-    pub const sc300 = Cpu{
+    pub const sc300 = CpuModel{
         .name = "sc300",
         .llvm_name = "sc300",
         .features = featureSet(&[_]Feature{
@@ -2180,35 +2051,35 @@ pub const cpu = struct {
             .use_misched,
         }),
     };
-    pub const strongarm = Cpu{
+    pub const strongarm = CpuModel{
         .name = "strongarm",
         .llvm_name = "strongarm",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const strongarm110 = Cpu{
+    pub const strongarm110 = CpuModel{
         .name = "strongarm110",
         .llvm_name = "strongarm110",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const strongarm1100 = Cpu{
+    pub const strongarm1100 = CpuModel{
         .name = "strongarm1100",
         .llvm_name = "strongarm1100",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const strongarm1110 = Cpu{
+    pub const strongarm1110 = CpuModel{
         .name = "strongarm1110",
         .llvm_name = "strongarm1110",
         .features = featureSet(&[_]Feature{
             .armv4,
         }),
     };
-    pub const swift = Cpu{
+    pub const swift = CpuModel{
         .name = "swift",
         .llvm_name = "swift",
         .features = featureSet(&[_]Feature{
@@ -2235,7 +2106,7 @@ pub const cpu = struct {
             .wide_stride_vfp,
         }),
     };
-    pub const xscale = Cpu{
+    pub const xscale = CpuModel{
         .name = "xscale",
         .llvm_name = "xscale",
         .features = featureSet(&[_]Feature{
@@ -2247,7 +2118,7 @@ pub const cpu = struct {
 /// All arm CPUs, sorted alphabetically by name.
 /// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
 /// compiler has inefficient memory and CPU usage, affecting build times.
-pub const all_cpus = &[_]*const Cpu{
+pub const all_cpus = &[_]*const CpuModel{
     &cpu.arm1020e,
     &cpu.arm1020t,
     &cpu.arm1022e,