arm: clean up the messy sub-architecture & CPU features

This commit is contained in:
Andrew Kelley 2020-02-19 19:11:20 -05:00
parent 4c6f207aff
commit 96f45c27b6
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9

View File

@ -9,39 +9,6 @@ pub const Feature = enum {
aclass, aclass,
acquire_release, acquire_release,
aes, 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_movs_shop,
avoid_partial_cpsr, avoid_partial_cpsr,
cheap_predicable_cpsr, cheap_predicable_cpsr,
@ -57,13 +24,13 @@ pub const Feature = enum {
execute_only, execute_only,
expand_fp_mlx, expand_fp_mlx,
exynos, exynos,
fp16,
fp16fml,
fp64,
fp_armv8, fp_armv8,
fp_armv8d16, fp_armv8d16,
fp_armv8d16sp, fp_armv8d16sp,
fp_armv8sp, fp_armv8sp,
fp16,
fp16fml,
fp64,
fpao, fpao,
fpregs, fpregs,
fpregs16, fpregs16,
@ -115,29 +82,46 @@ pub const Feature = enum {
splat_vfp_neon, splat_vfp_neon,
strict_align, strict_align,
swift, swift,
thumb_mode,
thumb2, thumb2,
thumb_mode,
trustzone, trustzone,
use_aa, use_aa,
use_misched, use_misched,
v2,
v2a,
v3,
v3m,
v4,
v4t, v4t,
v5t, v5t,
v5te, v5te,
v5tej,
v6, v6,
v6j,
v6k, v6k,
v6kz,
v6m, v6m,
v6sm,
v6t2, v6t2,
v7, v7,
v7a,
v7m,
v7r,
v7clrex, v7clrex,
v7em,
v7k,
v7s,
v7ve,
v8a, v8a,
v8m,
v8m_main,
v8r,
v8_1a, v8_1a,
v8_1m_main, v8_1m_main,
v8_2a, v8_2a,
v8_3a, v8_3a,
v8_4a, v8_4a,
v8_5a, v8_5a,
v8m,
v8m_main,
vfp2, vfp2,
vfp2d16, vfp2d16,
vfp2d16sp, vfp2d16sp,
@ -198,368 +182,6 @@ pub const all_features = blk: {
.neon, .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)] = .{ result[@enumToInt(Feature.avoid_movs_shop)] = .{
.llvm_name = "avoid-movs-shop", .llvm_name = "avoid-movs-shop",
.description = "Avoid movs instructions with shifter operand", .description = "Avoid movs instructions with shifter operand",
@ -659,6 +281,25 @@ pub const all_features = blk: {
.zcz, .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)] = .{ result[@enumToInt(Feature.fp_armv8)] = .{
.llvm_name = "fp-armv8", .llvm_name = "fp-armv8",
.description = "Enable ARMv8 FP", .description = "Enable ARMv8 FP",
@ -693,25 +334,6 @@ pub const all_features = blk: {
.vfp4sp, .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)] = .{ result[@enumToInt(Feature.fpao)] = .{
.llvm_name = "fpao", .llvm_name = "fpao",
.description = "Enable fast computation of positive address offsets", .description = "Enable fast computation of positive address offsets",
@ -993,16 +615,16 @@ pub const all_features = blk: {
.description = "Swift ARM processors", .description = "Swift ARM processors",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.thumb_mode)] = .{
.llvm_name = "thumb-mode",
.description = "Thumb mode",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.thumb2)] = .{ result[@enumToInt(Feature.thumb2)] = .{
.llvm_name = "thumb2", .llvm_name = "thumb2",
.description = "Enable Thumb2 instructions", .description = "Enable Thumb2 instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.thumb_mode)] = .{
.llvm_name = "thumb-mode",
.description = "Thumb mode",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.trustzone)] = .{ result[@enumToInt(Feature.trustzone)] = .{
.llvm_name = "trustzone", .llvm_name = "trustzone",
.description = "Enable support for TrustZone security extensions", .description = "Enable support for TrustZone security extensions",
@ -1018,50 +640,116 @@ pub const all_features = blk: {
.description = "Use the MachineScheduler", .description = "Use the MachineScheduler",
.dependencies = featureSet(&[_]Feature{}), .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)] = .{ result[@enumToInt(Feature.v4t)] = .{
.llvm_name = "v4t", .llvm_name = "armv4t",
.description = "Support ARM v4T instructions", .description = "ARMv4t architecture",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.v5t)] = .{ result[@enumToInt(Feature.v5t)] = .{
.llvm_name = "v5t", .llvm_name = "armv5t",
.description = "Support ARM v5T instructions", .description = "ARMv5t architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v4t, .v4t,
}), }),
}; };
result[@enumToInt(Feature.v5te)] = .{ result[@enumToInt(Feature.v5te)] = .{
.llvm_name = "v5te", .llvm_name = "armv5te",
.description = "Support ARM v5TE, v5TEj, and v5TExp instructions", .description = "ARMv5te architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v5t, .v5t,
}), }),
}; };
result[@enumToInt(Feature.v6)] = .{ result[@enumToInt(Feature.v5tej)] = .{
.llvm_name = "v6", .llvm_name = "armv5tej",
.description = "Support ARM v6 instructions", .description = "ARMv5tej architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v5te, .v5te,
}), }),
}; };
result[@enumToInt(Feature.v6k)] = .{ result[@enumToInt(Feature.v6)] = .{
.llvm_name = "v6k", .llvm_name = "armv6",
.description = "Support ARM v6k instructions", .description = "ARMv6 architecture",
.dependencies = featureSet(&[_]Feature{
.dsp,
.v5te,
}),
};
result[@enumToInt(Feature.v6j)] = .{
.llvm_name = "armv6j",
.description = "ARMv7a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v6, .v6,
}), }),
}; };
result[@enumToInt(Feature.v6m)] = .{ result[@enumToInt(Feature.v6k)] = .{
.llvm_name = "v6m", .llvm_name = "armv6k",
.description = "Support ARM v6M instructions", .description = "ARMv6k architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v6, .v6,
}), }),
}; };
result[@enumToInt(Feature.v6kz)] = .{
.llvm_name = "armv6kz",
.description = "ARMv6kz architecture",
.dependencies = featureSet(&[_]Feature{
.trustzone,
.v6k,
}),
};
result[@enumToInt(Feature.v6m)] = .{
.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)] = .{ result[@enumToInt(Feature.v6t2)] = .{
.llvm_name = "v6t2", .llvm_name = "armv6t2",
.description = "Support ARM v6t2 instructions", .description = "ARMv6t2 architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.dsp,
.thumb2, .thumb2,
.v6k, .v6k,
.v8m, .v8m,
@ -1076,77 +764,199 @@ pub const all_features = blk: {
.v7clrex, .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)] = .{ result[@enumToInt(Feature.v7clrex)] = .{
.llvm_name = "v7clrex", .llvm_name = "v7clrex",
.description = "Has v7 clrex instruction", .description = "Has v7 clrex instruction",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.v8a)] = .{ result[@enumToInt(Feature.v7em)] = .{
.llvm_name = "v8a", .llvm_name = "armv7e-m",
.description = "Support ARM v8a instructions", .description = "ARMv7em architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.acquire_release, .db,
.dsp,
.hwdiv,
.mclass,
.noarm,
.thumb_mode,
.thumb2,
.v7, .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 = "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)] = .{ result[@enumToInt(Feature.v8_1a)] = .{
.llvm_name = "v8.1a", .llvm_name = "armv8.1-a",
.description = "Support ARM v8.1a instructions", .description = "ARMv81a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v8a, .v8a,
}), }),
}; };
result[@enumToInt(Feature.v8_1m_main)] = .{ result[@enumToInt(Feature.v8_1m_main)] = .{
.llvm_name = "v8.1m.main", .llvm_name = "armv8.1-m.main",
.description = "Support ARM v8-1M Mainline instructions", .description = "ARMv81mMainline architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.@"8msecext",
.acquire_release,
.db,
.hwdiv,
.lob,
.mclass,
.noarm,
.ras,
.thumb_mode,
.v8m_main, .v8m_main,
}), }),
}; };
result[@enumToInt(Feature.v8_2a)] = .{ result[@enumToInt(Feature.v8_2a)] = .{
.llvm_name = "v8.2a", .llvm_name = "armv8.2-a",
.description = "Support ARM v8.2a instructions", .description = "ARMv82a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.ras,
.v8_1a, .v8_1a,
}), }),
}; };
result[@enumToInt(Feature.v8_3a)] = .{ result[@enumToInt(Feature.v8_3a)] = .{
.llvm_name = "v8.3a", .llvm_name = "armv8.3-a",
.description = "Support ARM v8.3a instructions", .description = "ARMv83a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.v8_2a, .v8_2a,
}), }),
}; };
result[@enumToInt(Feature.v8_4a)] = .{ result[@enumToInt(Feature.v8_4a)] = .{
.llvm_name = "v8.4a", .llvm_name = "armv8.4-a",
.description = "Support ARM v8.4a instructions", .description = "ARMv84a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.dotprod, .dotprod,
.v8_3a, .v8_3a,
}), }),
}; };
result[@enumToInt(Feature.v8_5a)] = .{ result[@enumToInt(Feature.v8_5a)] = .{
.llvm_name = "v8.5a", .llvm_name = "armv8.5-a",
.description = "Support ARM v8.5a instructions", .description = "ARMv85a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.dotprod,
.sb, .sb,
.v8_4a, .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)] = .{ result[@enumToInt(Feature.vfp2)] = .{
.llvm_name = "vfp2", .llvm_name = "vfp2",
.description = "Enable VFP2 instructions", .description = "Enable VFP2 instructions",