Commit 96f45c27b6

Andrew Kelley <andrew@ziglang.org>
2020-02-20 01:11:20
arm: clean up the messy sub-architecture & CPU features
1 parent 4c6f207
Changed files (1)
lib
std
target
lib/std/target/arm.zig
@@ -9,39 +9,6 @@ pub const Feature = enum {
     aclass,
     acquire_release,
     aes,
-    armv2,
-    armv2a,
-    armv3,
-    armv3m,
-    armv4,
-    armv4t,
-    armv5t,
-    armv5te,
-    armv5tej,
-    armv6,
-    armv6_m,
-    armv6j,
-    armv6k,
-    armv6kz,
-    armv6s_m,
-    armv6t2,
-    armv7_a,
-    armv7_m,
-    armv7_r,
-    armv7e_m,
-    armv7k,
-    armv7s,
-    armv7ve,
-    armv8_a,
-    armv8_m_base,
-    armv8_m_main,
-    armv8_r,
-    armv8_1_a,
-    armv8_1_m_main,
-    armv8_2_a,
-    armv8_3_a,
-    armv8_4_a,
-    armv8_5_a,
     avoid_movs_shop,
     avoid_partial_cpsr,
     cheap_predicable_cpsr,
@@ -57,13 +24,13 @@ pub const Feature = enum {
     execute_only,
     expand_fp_mlx,
     exynos,
+    fp16,
+    fp16fml,
+    fp64,
     fp_armv8,
     fp_armv8d16,
     fp_armv8d16sp,
     fp_armv8sp,
-    fp16,
-    fp16fml,
-    fp64,
     fpao,
     fpregs,
     fpregs16,
@@ -115,29 +82,46 @@ pub const Feature = enum {
     splat_vfp_neon,
     strict_align,
     swift,
-    thumb_mode,
     thumb2,
+    thumb_mode,
     trustzone,
     use_aa,
     use_misched,
+    v2,
+    v2a,
+    v3,
+    v3m,
+    v4,
     v4t,
     v5t,
     v5te,
+    v5tej,
     v6,
+    v6j,
     v6k,
+    v6kz,
     v6m,
+    v6sm,
     v6t2,
     v7,
+    v7a,
+    v7m,
+    v7r,
     v7clrex,
+    v7em,
+    v7k,
+    v7s,
+    v7ve,
     v8a,
+    v8m,
+    v8m_main,
+    v8r,
     v8_1a,
     v8_1m_main,
     v8_2a,
     v8_3a,
     v8_4a,
     v8_5a,
-    v8m,
-    v8m_main,
     vfp2,
     vfp2d16,
     vfp2d16sp,
@@ -198,368 +182,6 @@ pub const all_features = blk: {
             .neon,
         }),
     };
-    result[@enumToInt(Feature.armv2)] = .{
-        .llvm_name = "armv2",
-        .description = "ARMv2 architecture",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.armv2a)] = .{
-        .llvm_name = "armv2a",
-        .description = "ARMv2a architecture",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.armv3)] = .{
-        .llvm_name = "armv3",
-        .description = "ARMv3 architecture",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.armv3m)] = .{
-        .llvm_name = "armv3m",
-        .description = "ARMv3m architecture",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.armv4)] = .{
-        .llvm_name = "armv4",
-        .description = "ARMv4 architecture",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.armv4t)] = .{
-        .llvm_name = "armv4t",
-        .description = "ARMv4t architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .v4t,
-        }),
-    };
-    result[@enumToInt(Feature.armv5t)] = .{
-        .llvm_name = "armv5t",
-        .description = "ARMv5t architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .v5t,
-        }),
-    };
-    result[@enumToInt(Feature.armv5te)] = .{
-        .llvm_name = "armv5te",
-        .description = "ARMv5te architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .v5te,
-        }),
-    };
-    result[@enumToInt(Feature.armv5tej)] = .{
-        .llvm_name = "armv5tej",
-        .description = "ARMv5tej architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .v5te,
-        }),
-    };
-    result[@enumToInt(Feature.armv6)] = .{
-        .llvm_name = "armv6",
-        .description = "ARMv6 architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .dsp,
-            .v6,
-        }),
-    };
-    result[@enumToInt(Feature.armv6_m)] = .{
-        .llvm_name = "armv6-m",
-        .description = "ARMv6m architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .db,
-            .mclass,
-            .noarm,
-            .strict_align,
-            .thumb_mode,
-            .v6m,
-        }),
-    };
-    result[@enumToInt(Feature.armv6j)] = .{
-        .llvm_name = "armv6j",
-        .description = "ARMv7a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .armv6,
-        }),
-    };
-    result[@enumToInt(Feature.armv6k)] = .{
-        .llvm_name = "armv6k",
-        .description = "ARMv6k architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .v6k,
-        }),
-    };
-    result[@enumToInt(Feature.armv6kz)] = .{
-        .llvm_name = "armv6kz",
-        .description = "ARMv6kz architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .trustzone,
-            .v6k,
-        }),
-    };
-    result[@enumToInt(Feature.armv6s_m)] = .{
-        .llvm_name = "armv6s-m",
-        .description = "ARMv6sm architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .db,
-            .mclass,
-            .noarm,
-            .strict_align,
-            .thumb_mode,
-            .v6m,
-        }),
-    };
-    result[@enumToInt(Feature.armv6t2)] = .{
-        .llvm_name = "armv6t2",
-        .description = "ARMv6t2 architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .dsp,
-            .v6t2,
-        }),
-    };
-    result[@enumToInt(Feature.armv7_a)] = .{
-        .llvm_name = "armv7-a",
-        .description = "ARMv7a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .db,
-            .dsp,
-            .neon,
-            .v7,
-        }),
-    };
-    result[@enumToInt(Feature.armv7_m)] = .{
-        .llvm_name = "armv7-m",
-        .description = "ARMv7m architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .db,
-            .hwdiv,
-            .mclass,
-            .noarm,
-            .thumb_mode,
-            .thumb2,
-            .v7,
-        }),
-    };
-    result[@enumToInt(Feature.armv7_r)] = .{
-        .llvm_name = "armv7-r",
-        .description = "ARMv7r architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .db,
-            .dsp,
-            .hwdiv,
-            .rclass,
-            .v7,
-        }),
-    };
-    result[@enumToInt(Feature.armv7e_m)] = .{
-        .llvm_name = "armv7e-m",
-        .description = "ARMv7em architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .db,
-            .dsp,
-            .hwdiv,
-            .mclass,
-            .noarm,
-            .thumb_mode,
-            .thumb2,
-            .v7,
-        }),
-    };
-    result[@enumToInt(Feature.armv7k)] = .{
-        .llvm_name = "armv7k",
-        .description = "ARMv7a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .armv7_a,
-        }),
-    };
-    result[@enumToInt(Feature.armv7s)] = .{
-        .llvm_name = "armv7s",
-        .description = "ARMv7a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .armv7_a,
-        }),
-    };
-    result[@enumToInt(Feature.armv7ve)] = .{
-        .llvm_name = "armv7ve",
-        .description = "ARMv7ve architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .db,
-            .dsp,
-            .mp,
-            .neon,
-            .trustzone,
-            .v7,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_a)] = .{
-        .llvm_name = "armv8-a",
-        .description = "ARMv8a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .trustzone,
-            .v8a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_m_base)] = .{
-        .llvm_name = "armv8-m.base",
-        .description = "ARMv8mBaseline architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .@"8msecext",
-            .acquire_release,
-            .db,
-            .hwdiv,
-            .mclass,
-            .noarm,
-            .strict_align,
-            .thumb_mode,
-            .v7clrex,
-            .v8m,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_m_main)] = .{
-        .llvm_name = "armv8-m.main",
-        .description = "ARMv8mMainline architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .@"8msecext",
-            .acquire_release,
-            .db,
-            .hwdiv,
-            .mclass,
-            .noarm,
-            .thumb_mode,
-            .v8m_main,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_r)] = .{
-        .llvm_name = "armv8-r",
-        .description = "ARMv8r architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .crc,
-            .db,
-            .dfb,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .rclass,
-            .v8a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_1_a)] = .{
-        .llvm_name = "armv8.1-a",
-        .description = "ARMv81a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .trustzone,
-            .v8_1a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_1_m_main)] = .{
-        .llvm_name = "armv8.1-m.main",
-        .description = "ARMv81mMainline architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .@"8msecext",
-            .acquire_release,
-            .db,
-            .hwdiv,
-            .lob,
-            .mclass,
-            .noarm,
-            .ras,
-            .thumb_mode,
-            .v8_1m_main,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_2_a)] = .{
-        .llvm_name = "armv8.2-a",
-        .description = "ARMv82a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .ras,
-            .trustzone,
-            .v8_2a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_3_a)] = .{
-        .llvm_name = "armv8.3-a",
-        .description = "ARMv83a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .ras,
-            .trustzone,
-            .v8_3a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_4_a)] = .{
-        .llvm_name = "armv8.4-a",
-        .description = "ARMv84a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dotprod,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .ras,
-            .trustzone,
-            .v8_4a,
-            .virtualization,
-        }),
-    };
-    result[@enumToInt(Feature.armv8_5_a)] = .{
-        .llvm_name = "armv8.5-a",
-        .description = "ARMv85a architecture",
-        .dependencies = featureSet(&[_]Feature{
-            .aclass,
-            .crc,
-            .crypto,
-            .db,
-            .dotprod,
-            .dsp,
-            .fp_armv8,
-            .mp,
-            .neon,
-            .ras,
-            .trustzone,
-            .v8_5a,
-            .virtualization,
-        }),
-    };
     result[@enumToInt(Feature.avoid_movs_shop)] = .{
         .llvm_name = "avoid-movs-shop",
         .description = "Avoid movs instructions with shifter operand",
@@ -659,6 +281,25 @@ pub const all_features = blk: {
             .zcz,
         }),
     };
+    result[@enumToInt(Feature.fp16)] = .{
+        .llvm_name = "fp16",
+        .description = "Enable half-precision floating point",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.fp16fml)] = .{
+        .llvm_name = "fp16fml",
+        .description = "Enable full half-precision floating point fml instructions",
+        .dependencies = featureSet(&[_]Feature{
+            .fullfp16,
+        }),
+    };
+    result[@enumToInt(Feature.fp64)] = .{
+        .llvm_name = "fp64",
+        .description = "Floating point unit supports double precision",
+        .dependencies = featureSet(&[_]Feature{
+            .fpregs64,
+        }),
+    };
     result[@enumToInt(Feature.fp_armv8)] = .{
         .llvm_name = "fp-armv8",
         .description = "Enable ARMv8 FP",
@@ -693,25 +334,6 @@ pub const all_features = blk: {
             .vfp4sp,
         }),
     };
-    result[@enumToInt(Feature.fp16)] = .{
-        .llvm_name = "fp16",
-        .description = "Enable half-precision floating point",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
-    result[@enumToInt(Feature.fp16fml)] = .{
-        .llvm_name = "fp16fml",
-        .description = "Enable full half-precision floating point fml instructions",
-        .dependencies = featureSet(&[_]Feature{
-            .fullfp16,
-        }),
-    };
-    result[@enumToInt(Feature.fp64)] = .{
-        .llvm_name = "fp64",
-        .description = "Floating point unit supports double precision",
-        .dependencies = featureSet(&[_]Feature{
-            .fpregs64,
-        }),
-    };
     result[@enumToInt(Feature.fpao)] = .{
         .llvm_name = "fpao",
         .description = "Enable fast computation of positive address offsets",
@@ -993,16 +615,16 @@ pub const all_features = blk: {
         .description = "Swift ARM processors",
         .dependencies = featureSet(&[_]Feature{}),
     };
-    result[@enumToInt(Feature.thumb_mode)] = .{
-        .llvm_name = "thumb-mode",
-        .description = "Thumb mode",
-        .dependencies = featureSet(&[_]Feature{}),
-    };
     result[@enumToInt(Feature.thumb2)] = .{
         .llvm_name = "thumb2",
         .description = "Enable Thumb2 instructions",
         .dependencies = featureSet(&[_]Feature{}),
     };
+    result[@enumToInt(Feature.thumb_mode)] = .{
+        .llvm_name = "thumb-mode",
+        .description = "Thumb mode",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
     result[@enumToInt(Feature.trustzone)] = .{
         .llvm_name = "trustzone",
         .description = "Enable support for TrustZone security extensions",
@@ -1018,50 +640,116 @@ pub const all_features = blk: {
         .description = "Use the MachineScheduler",
         .dependencies = featureSet(&[_]Feature{}),
     };
+    result[@enumToInt(Feature.v2)] = .{
+        .llvm_name = "armv2",
+        .description = "ARMv2 architecture",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.v2a)] = .{
+        .llvm_name = "armv2a",
+        .description = "ARMv2a architecture",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.v3)] = .{
+        .llvm_name = "armv3",
+        .description = "ARMv3 architecture",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.v3m)] = .{
+        .llvm_name = "armv3m",
+        .description = "ARMv3m architecture",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.v4)] = .{
+        .llvm_name = "armv4",
+        .description = "ARMv4 architecture",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
     result[@enumToInt(Feature.v4t)] = .{
-        .llvm_name = "v4t",
-        .description = "Support ARM v4T instructions",
+        .llvm_name = "armv4t",
+        .description = "ARMv4t architecture",
         .dependencies = featureSet(&[_]Feature{}),
     };
     result[@enumToInt(Feature.v5t)] = .{
-        .llvm_name = "v5t",
-        .description = "Support ARM v5T instructions",
+        .llvm_name = "armv5t",
+        .description = "ARMv5t architecture",
         .dependencies = featureSet(&[_]Feature{
             .v4t,
         }),
     };
     result[@enumToInt(Feature.v5te)] = .{
-        .llvm_name = "v5te",
-        .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
+        .llvm_name = "armv5te",
+        .description = "ARMv5te architecture",
         .dependencies = featureSet(&[_]Feature{
             .v5t,
         }),
     };
+    result[@enumToInt(Feature.v5tej)] = .{
+        .llvm_name = "armv5tej",
+        .description = "ARMv5tej architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .v5te,
+        }),
+    };
     result[@enumToInt(Feature.v6)] = .{
-        .llvm_name = "v6",
-        .description = "Support ARM v6 instructions",
+        .llvm_name = "armv6",
+        .description = "ARMv6 architecture",
         .dependencies = featureSet(&[_]Feature{
+            .dsp,
             .v5te,
         }),
     };
+    result[@enumToInt(Feature.v6j)] = .{
+        .llvm_name = "armv6j",
+        .description = "ARMv7a architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .v6,
+        }),
+    };
     result[@enumToInt(Feature.v6k)] = .{
-        .llvm_name = "v6k",
-        .description = "Support ARM v6k instructions",
+        .llvm_name = "armv6k",
+        .description = "ARMv6k architecture",
         .dependencies = featureSet(&[_]Feature{
             .v6,
         }),
     };
+    result[@enumToInt(Feature.v6kz)] = .{
+        .llvm_name = "armv6kz",
+        .description = "ARMv6kz architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .trustzone,
+            .v6k,
+        }),
+    };
     result[@enumToInt(Feature.v6m)] = .{
-        .llvm_name = "v6m",
-        .description = "Support ARM v6M instructions",
+        .llvm_name = "armv6-m",
+        .description = "ARMv6m architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .db,
+            .mclass,
+            .noarm,
+            .strict_align,
+            .thumb_mode,
+            .v6,
+        }),
+    };
+    result[@enumToInt(Feature.v6sm)] = .{
+        .llvm_name = "armv6s-m",
+        .description = "ARMv6sm architecture",
         .dependencies = featureSet(&[_]Feature{
+            .db,
+            .mclass,
+            .noarm,
+            .strict_align,
+            .thumb_mode,
             .v6,
         }),
     };
     result[@enumToInt(Feature.v6t2)] = .{
-        .llvm_name = "v6t2",
-        .description = "Support ARM v6t2 instructions",
+        .llvm_name = "armv6t2",
+        .description = "ARMv6t2 architecture",
         .dependencies = featureSet(&[_]Feature{
+            .dsp,
             .thumb2,
             .v6k,
             .v8m,
@@ -1076,77 +764,199 @@ pub const all_features = blk: {
             .v7clrex,
         }),
     };
+    result[@enumToInt(Feature.v7a)] = .{
+        .llvm_name = "armv7-a",
+        .description = "ARMv7a architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .aclass,
+            .db,
+            .dsp,
+            .neon,
+            .v7,
+        }),
+    };
+    result[@enumToInt(Feature.v7m)] = .{
+        .llvm_name = "armv7-m",
+        .description = "ARMv7m architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .db,
+            .hwdiv,
+            .mclass,
+            .noarm,
+            .thumb_mode,
+            .thumb2,
+            .v7,
+        }),
+    };
+    result[@enumToInt(Feature.v7r)] = .{
+        .llvm_name = "armv7-r",
+        .description = "ARMv7r architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .db,
+            .dsp,
+            .hwdiv,
+            .rclass,
+            .v7,
+        }),
+    };
     result[@enumToInt(Feature.v7clrex)] = .{
         .llvm_name = "v7clrex",
         .description = "Has v7 clrex instruction",
         .dependencies = featureSet(&[_]Feature{}),
     };
+    result[@enumToInt(Feature.v7em)] = .{
+        .llvm_name = "armv7e-m",
+        .description = "ARMv7em architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .db,
+            .dsp,
+            .hwdiv,
+            .mclass,
+            .noarm,
+            .thumb_mode,
+            .thumb2,
+            .v7,
+        }),
+    };
+    result[@enumToInt(Feature.v7k)] = .{
+        .llvm_name = "armv7k",
+        .description = "ARMv7a architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .v7a,
+        }),
+    };
+    result[@enumToInt(Feature.v7s)] = .{
+        .llvm_name = "armv7s",
+        .description = "ARMv7a architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .v7a,
+        }),
+    };
+    result[@enumToInt(Feature.v7ve)] = .{
+        .llvm_name = "armv7ve",
+        .description = "ARMv7ve architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .aclass,
+            .db,
+            .dsp,
+            .mp,
+            .neon,
+            .trustzone,
+            .v7,
+            .virtualization,
+        }),
+    };
     result[@enumToInt(Feature.v8a)] = .{
-        .llvm_name = "v8a",
-        .description = "Support ARM v8a instructions",
+        .llvm_name = "armv8-a",
+        .description = "ARMv8a architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .aclass,
+            .acquire_release,
+            .crc,
+            .crypto,
+            .db,
+            .fp_armv8,
+            .mp,
+            .neon,
+            .trustzone,
+            .v7,
+            .virtualization,
+        }),
+    };
+    result[@enumToInt(Feature.v8m)] = .{
+        .llvm_name = "armv8-m.base",
+        .description = "ARMv8mBaseline architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .@"8msecext",
+            .acquire_release,
+            .db,
+            .hwdiv,
+            .mclass,
+            .noarm,
+            .strict_align,
+            .thumb_mode,
+            .v6m,
+            .v7clrex,
+        }),
+    };
+    result[@enumToInt(Feature.v8m_main)] = .{
+        .llvm_name = "armv8-m.main",
+        .description = "ARMv8mMainline architecture",
         .dependencies = featureSet(&[_]Feature{
+            .@"8msecext",
             .acquire_release,
+            .db,
+            .hwdiv,
+            .mclass,
+            .noarm,
+            .thumb_mode,
             .v7,
         }),
     };
+    result[@enumToInt(Feature.v8r)] = .{
+        .llvm_name = "armv8-r",
+        .description = "ARMv8r architecture",
+        .dependencies = featureSet(&[_]Feature{
+            .dfb,
+            .rclass,
+            .v8a,
+        }),
+    };
     result[@enumToInt(Feature.v8_1a)] = .{
-        .llvm_name = "v8.1a",
-        .description = "Support ARM v8.1a instructions",
+        .llvm_name = "armv8.1-a",
+        .description = "ARMv81a architecture",
         .dependencies = featureSet(&[_]Feature{
             .v8a,
         }),
     };
     result[@enumToInt(Feature.v8_1m_main)] = .{
-        .llvm_name = "v8.1m.main",
-        .description = "Support ARM v8-1M Mainline instructions",
+        .llvm_name = "armv8.1-m.main",
+        .description = "ARMv81mMainline architecture",
         .dependencies = featureSet(&[_]Feature{
+            .@"8msecext",
+            .acquire_release,
+            .db,
+            .hwdiv,
+            .lob,
+            .mclass,
+            .noarm,
+            .ras,
+            .thumb_mode,
             .v8m_main,
         }),
     };
     result[@enumToInt(Feature.v8_2a)] = .{
-        .llvm_name = "v8.2a",
-        .description = "Support ARM v8.2a instructions",
+        .llvm_name = "armv8.2-a",
+        .description = "ARMv82a architecture",
         .dependencies = featureSet(&[_]Feature{
+            .ras,
             .v8_1a,
         }),
     };
     result[@enumToInt(Feature.v8_3a)] = .{
-        .llvm_name = "v8.3a",
-        .description = "Support ARM v8.3a instructions",
+        .llvm_name = "armv8.3-a",
+        .description = "ARMv83a architecture",
         .dependencies = featureSet(&[_]Feature{
             .v8_2a,
         }),
     };
     result[@enumToInt(Feature.v8_4a)] = .{
-        .llvm_name = "v8.4a",
-        .description = "Support ARM v8.4a instructions",
+        .llvm_name = "armv8.4-a",
+        .description = "ARMv84a architecture",
         .dependencies = featureSet(&[_]Feature{
             .dotprod,
             .v8_3a,
         }),
     };
     result[@enumToInt(Feature.v8_5a)] = .{
-        .llvm_name = "v8.5a",
-        .description = "Support ARM v8.5a instructions",
+        .llvm_name = "armv8.5-a",
+        .description = "ARMv85a architecture",
         .dependencies = featureSet(&[_]Feature{
+            .dotprod,
             .sb,
             .v8_4a,
         }),
     };
-    result[@enumToInt(Feature.v8m)] = .{
-        .llvm_name = "v8m",
-        .description = "Support ARM v8M Baseline instructions",
-        .dependencies = featureSet(&[_]Feature{
-            .v6m,
-        }),
-    };
-    result[@enumToInt(Feature.v8m_main)] = .{
-        .llvm_name = "v8m.main",
-        .description = "Support ARM v8M Mainline instructions",
-        .dependencies = featureSet(&[_]Feature{
-            .v7,
-        }),
-    };
     result[@enumToInt(Feature.vfp2)] = .{
         .llvm_name = "vfp2",
         .description = "Enable VFP2 instructions",