diff --git a/lib/std/target/arm.zig b/lib/std/target/arm.zig index b717120de3..ecd08f2861 100644 --- a/lib/std/target/arm.zig +++ b/lib/std/target/arm.zig @@ -1,8 +1,5 @@ -// SPDX-License-Identifier: MIT -// Copyright (c) 2015-2021 Zig Contributors -// This file is part of [zig](https://ziglang.org/), which is MIT licensed. -// The MIT license requires this copyright notice to be included in all copies -// and substantial portions of the software. +//! This file is auto-generated by tools/update_cpu_features.zig. + const std = @import("../std.zig"); const CpuFeature = std.Target.Cpu.Feature; const CpuModel = std.Target.Cpu.Model; @@ -53,6 +50,8 @@ pub const Feature = enum { fullfp16, fuse_aes, fuse_literals, + harden_sls_blr, + harden_sls_retbr, has_v4t, has_v5t, has_v5te, @@ -62,6 +61,7 @@ pub const Feature = enum { has_v6t2, has_v7, has_v7clrex, + has_v8, has_v8_1a, has_v8_1m_main, has_v8_2a, @@ -69,7 +69,7 @@ pub const Feature = enum { has_v8_4a, has_v8_5a, has_v8_6a, - has_v8, + has_v8_7a, has_v8m, has_v8m_main, hwdiv, @@ -85,10 +85,10 @@ pub const Feature = enum { mp, muxed_units, mve, - mve_fp, mve1beat, mve2beat, mve4beat, + mve_fp, nacl_trap, neon, neon_fpmovs, @@ -148,10 +148,6 @@ pub const Feature = enum { v7r, v7s, v7ve, - v8a, - v8m, - v8m_main, - v8r, v8_1a, v8_1m_main, v8_2a, @@ -159,6 +155,11 @@ pub const Feature = enum { v8_4a, v8_5a, v8_6a, + v8_7a, + v8a, + v8m, + v8m_main, + v8r, vfp2, vfp2sp, vfp3, @@ -238,7 +239,7 @@ pub const all_features = blk: { .llvm_name = "cde", .description = "Support CDE instructions", .dependencies = featureSet(&[_]Feature{ - .v8m_main, + .has_v8m_main, }), }; result[@enumToInt(Feature.cdecp0)] = .{ @@ -312,7 +313,6 @@ pub const all_features = blk: { .description = "Enable support for Cryptography extensions", .dependencies = featureSet(&[_]Feature{ .aes, - .neon, .sha2, }), }; @@ -419,7 +419,6 @@ pub const all_features = blk: { .description = "Enable ARMv8 FP with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ .fp_armv8d16sp, - .fp64, .vfp4d16, }), }; @@ -434,7 +433,6 @@ pub const all_features = blk: { .llvm_name = "fp-armv8sp", .description = "Enable ARMv8 FP with no double precision", .dependencies = featureSet(&[_]Feature{ - .d32, .fp_armv8d16sp, .vfp4sp, }), @@ -481,6 +479,16 @@ pub const all_features = blk: { .description = "CPU fuses literal generation operations", .dependencies = featureSet(&[_]Feature{}), }; + result[@enumToInt(Feature.harden_sls_blr)] = .{ + .llvm_name = "harden-sls-blr", + .description = "Harden against straight line speculation across indirect calls", + .dependencies = featureSet(&[_]Feature{}), + }; + result[@enumToInt(Feature.harden_sls_retbr)] = .{ + .llvm_name = "harden-sls-retbr", + .description = "Harden against straight line speculation across RETurn and BranchRegister instructions", + .dependencies = featureSet(&[_]Feature{}), + }; result[@enumToInt(Feature.has_v4t)] = .{ .llvm_name = "v4t", .description = "Support ARM v4T instructions", @@ -525,18 +533,18 @@ pub const all_features = blk: { .llvm_name = "v6t2", .description = "Support ARM v6t2 instructions", .dependencies = featureSet(&[_]Feature{ - .thumb2, .has_v6k, .has_v8m, + .thumb2, }), }; result[@enumToInt(Feature.has_v7)] = .{ .llvm_name = "v7", .description = "Support ARM v7 instructions", .dependencies = featureSet(&[_]Feature{ - .perfmon, .has_v6t2, .has_v7clrex, + .perfmon, }), }; result[@enumToInt(Feature.has_v7clrex)] = .{ @@ -592,8 +600,8 @@ pub const all_features = blk: { .llvm_name = "v8.5a", .description = "Support ARM v8.5a instructions", .dependencies = featureSet(&[_]Feature{ - .sb, .has_v8_4a, + .sb, }), }; result[@enumToInt(Feature.has_v8_6a)] = .{ @@ -601,8 +609,15 @@ pub const all_features = blk: { .description = "Support ARM v8.6a instructions", .dependencies = featureSet(&[_]Feature{ .bf16, - .i8mm, .has_v8_5a, + .i8mm, + }), + }; + result[@enumToInt(Feature.has_v8_7a)] = .{ + .llvm_name = "v8.7a", + .description = "Support ARM v8.7a instructions", + .dependencies = featureSet(&[_]Feature{ + .has_v8_6a, }), }; result[@enumToInt(Feature.has_v8m)] = .{ @@ -640,14 +655,14 @@ pub const all_features = blk: { .llvm_name = "iwmmxt", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ - .has_v5te, + .v5te, }), }; result[@enumToInt(Feature.iwmmxt2)] = .{ .llvm_name = "iwmmxt2", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ - .has_v5te, + .v5te, }), }; result[@enumToInt(Feature.lob)] = .{ @@ -695,15 +710,6 @@ pub const all_features = blk: { .has_v8_1m_main, }), }; - result[@enumToInt(Feature.mve_fp)] = .{ - .llvm_name = "mve.fp", - .description = "Support M-Class Vector Extension with integer and floating ops", - .dependencies = featureSet(&[_]Feature{ - .fp_armv8d16sp, - .fullfp16, - .mve, - }), - }; result[@enumToInt(Feature.mve1beat)] = .{ .llvm_name = "mve1beat", .description = "Model MVE instructions as a 1 beat per tick architecture", @@ -719,6 +725,14 @@ pub const all_features = blk: { .description = "Model MVE instructions as a 4 beats per tick architecture", .dependencies = featureSet(&[_]Feature{}), }; + result[@enumToInt(Feature.mve_fp)] = .{ + .llvm_name = "mve.fp", + .description = "Support M-Class Vector Extension with integer and floating ops", + .dependencies = featureSet(&[_]Feature{ + .fullfp16, + .mve, + }), + }; result[@enumToInt(Feature.nacl_trap)] = .{ .llvm_name = "nacl-trap", .description = "NaCl trap", @@ -944,32 +958,32 @@ pub const all_features = blk: { .llvm_name = "armv4t", .description = "ARMv4t architecture", .dependencies = featureSet(&[_]Feature{ - .strict_align, .has_v4t, + .strict_align, }), }; result[@enumToInt(Feature.v5t)] = .{ .llvm_name = "armv5t", .description = "ARMv5t architecture", .dependencies = featureSet(&[_]Feature{ - .strict_align, .has_v5t, + .strict_align, }), }; result[@enumToInt(Feature.v5te)] = .{ .llvm_name = "armv5te", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ - .strict_align, .has_v5te, + .strict_align, }), }; result[@enumToInt(Feature.v5tej)] = .{ .llvm_name = "armv5tej", .description = "ARMv5tej architecture", .dependencies = featureSet(&[_]Feature{ - .strict_align, .has_v5te, + .strict_align, }), }; result[@enumToInt(Feature.v6)] = .{ @@ -980,18 +994,6 @@ pub const all_features = blk: { .has_v6, }), }; - result[@enumToInt(Feature.v6m)] = .{ - .llvm_name = "armv6-m", - .description = "ARMv6m architecture", - .dependencies = featureSet(&[_]Feature{ - .db, - .mclass, - .noarm, - .strict_align, - .thumb_mode, - .has_v6m, - }), - }; result[@enumToInt(Feature.v6j)] = .{ .llvm_name = "armv6j", .description = "ARMv7a architecture", @@ -1010,8 +1012,20 @@ pub const all_features = blk: { .llvm_name = "armv6kz", .description = "ARMv6kz architecture", .dependencies = featureSet(&[_]Feature{ - .trustzone, .has_v6k, + .trustzone, + }), + }; + result[@enumToInt(Feature.v6m)] = .{ + .llvm_name = "armv6-m", + .description = "ARMv6m architecture", + .dependencies = featureSet(&[_]Feature{ + .db, + .has_v6m, + .mclass, + .noarm, + .strict_align, + .thumb_mode, }), }; result[@enumToInt(Feature.v6sm)] = .{ @@ -1019,11 +1033,11 @@ pub const all_features = blk: { .description = "ARMv6sm architecture", .dependencies = featureSet(&[_]Feature{ .db, + .has_v6m, .mclass, .noarm, .strict_align, .thumb_mode, - .has_v6m, }), }; result[@enumToInt(Feature.v6t2)] = .{ @@ -1041,32 +1055,8 @@ pub const all_features = blk: { .aclass, .db, .dsp, + .has_v7, .neon, - .has_v7, - }), - }; - result[@enumToInt(Feature.v7m)] = .{ - .llvm_name = "armv7-m", - .description = "ARMv7m architecture", - .dependencies = featureSet(&[_]Feature{ - .db, - .hwdiv, - .mclass, - .noarm, - .thumb_mode, - .thumb2, - .has_v7, - }), - }; - result[@enumToInt(Feature.v7r)] = .{ - .llvm_name = "armv7-r", - .description = "ARMv7r architecture", - .dependencies = featureSet(&[_]Feature{ - .db, - .dsp, - .hwdiv, - .rclass, - .has_v7, }), }; result[@enumToInt(Feature.v7em)] = .{ @@ -1075,12 +1065,11 @@ pub const all_features = blk: { .dependencies = featureSet(&[_]Feature{ .db, .dsp, + .has_v7, .hwdiv, .mclass, .noarm, .thumb_mode, - .thumb2, - .has_v7, }), }; result[@enumToInt(Feature.v7k)] = .{ @@ -1090,6 +1079,29 @@ pub const all_features = blk: { .v7a, }), }; + result[@enumToInt(Feature.v7m)] = .{ + .llvm_name = "armv7-m", + .description = "ARMv7m architecture", + .dependencies = featureSet(&[_]Feature{ + .db, + .has_v7, + .hwdiv, + .mclass, + .noarm, + .thumb_mode, + }), + }; + result[@enumToInt(Feature.v7r)] = .{ + .llvm_name = "armv7-r", + .description = "ARMv7r architecture", + .dependencies = featureSet(&[_]Feature{ + .db, + .dsp, + .has_v7, + .hwdiv, + .rclass, + }), + }; result[@enumToInt(Feature.v7s)] = .{ .llvm_name = "armv7s", .description = "ARMv7a architecture", @@ -1104,73 +1116,10 @@ pub const all_features = blk: { .aclass, .db, .dsp, - .mp, - .neon, - .trustzone, .has_v7, - .virtualization, - }), - }; - result[@enumToInt(Feature.v8a)] = .{ - .llvm_name = "armv8-a", - .description = "ARMv8a architecture", - .dependencies = featureSet(&[_]Feature{ - .aclass, - .crc, - .crypto, - .db, - .dsp, - .fp_armv8, .mp, .neon, .trustzone, - .has_v8, - .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, - .has_v7clrex, - .has_v8m, - }), - }; - 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, - .has_v8m_main, - }), - }; - result[@enumToInt(Feature.v8r)] = .{ - .llvm_name = "armv8-r", - .description = "ARMv8r architecture", - .dependencies = featureSet(&[_]Feature{ - .crc, - .db, - .dfb, - .dsp, - .fp_armv8, - .mp, - .neon, - .rclass, - .has_v8, .virtualization, }), }; @@ -1184,10 +1133,9 @@ pub const all_features = blk: { .db, .dsp, .fp_armv8, - .mp, - .neon, - .trustzone, .has_v8_1a, + .mp, + .trustzone, .virtualization, }), }; @@ -1198,13 +1146,13 @@ pub const all_features = blk: { .@"8msecext", .acquire_release, .db, + .has_v8_1m_main, .hwdiv, .lob, .mclass, .noarm, .ras, .thumb_mode, - .has_v8_1m_main, }), }; result[@enumToInt(Feature.v8_2a)] = .{ @@ -1217,11 +1165,10 @@ pub const all_features = blk: { .db, .dsp, .fp_armv8, + .has_v8_2a, .mp, - .neon, .ras, .trustzone, - .has_v8_2a, .virtualization, }), }; @@ -1235,11 +1182,10 @@ pub const all_features = blk: { .db, .dsp, .fp_armv8, + .has_v8_3a, .mp, - .neon, .ras, .trustzone, - .has_v8_3a, .virtualization, }), }; @@ -1251,14 +1197,12 @@ pub const all_features = blk: { .crc, .crypto, .db, - .dotprod, .dsp, .fp_armv8, + .has_v8_4a, .mp, - .neon, .ras, .trustzone, - .has_v8_4a, .virtualization, }), }; @@ -1270,14 +1214,12 @@ pub const all_features = blk: { .crc, .crypto, .db, - .dotprod, .dsp, .fp_armv8, + .has_v8_5a, .mp, - .neon, .ras, .trustzone, - .has_v8_5a, .virtualization, }), }; @@ -1289,14 +1231,91 @@ pub const all_features = blk: { .crc, .crypto, .db, - .dotprod, .dsp, .fp_armv8, + .has_v8_6a, .mp, - .neon, .ras, .trustzone, - .has_v8_6a, + .virtualization, + }), + }; + result[@enumToInt(Feature.v8_7a)] = .{ + .llvm_name = "armv8.7-a", + .description = "ARMv86a architecture", + .dependencies = featureSet(&[_]Feature{ + .aclass, + .crc, + .crypto, + .db, + .dsp, + .fp_armv8, + .has_v8_7a, + .mp, + .ras, + .trustzone, + .virtualization, + }), + }; + result[@enumToInt(Feature.v8a)] = .{ + .llvm_name = "armv8-a", + .description = "ARMv8a architecture", + .dependencies = featureSet(&[_]Feature{ + .aclass, + .crc, + .crypto, + .db, + .dsp, + .fp_armv8, + .has_v8, + .mp, + .trustzone, + .virtualization, + }), + }; + result[@enumToInt(Feature.v8m)] = .{ + .llvm_name = "armv8-m.base", + .description = "ARMv8mBaseline architecture", + .dependencies = featureSet(&[_]Feature{ + .@"8msecext", + .acquire_release, + .db, + .has_v7clrex, + .has_v8m, + .hwdiv, + .mclass, + .noarm, + .strict_align, + .thumb_mode, + }), + }; + result[@enumToInt(Feature.v8m_main)] = .{ + .llvm_name = "armv8-m.main", + .description = "ARMv8mMainline architecture", + .dependencies = featureSet(&[_]Feature{ + .@"8msecext", + .acquire_release, + .db, + .has_v8m_main, + .hwdiv, + .mclass, + .noarm, + .thumb_mode, + }), + }; + result[@enumToInt(Feature.v8r)] = .{ + .llvm_name = "armv8-r", + .description = "ARMv8r architecture", + .dependencies = featureSet(&[_]Feature{ + .crc, + .db, + .dfb, + .dsp, + .fp_armv8, + .has_v8, + .mp, + .neon, + .rclass, .virtualization, }), }; @@ -1327,7 +1346,6 @@ pub const all_features = blk: { .llvm_name = "vfp3d16", .description = "Enable VFP3 instructions with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ - .fp64, .vfp2, .vfp3d16sp, }), @@ -1351,7 +1369,6 @@ pub const all_features = blk: { .llvm_name = "vfp4", .description = "Enable VFP4 instructions", .dependencies = featureSet(&[_]Feature{ - .fp16, .vfp3, .vfp4d16, .vfp4sp, @@ -1361,8 +1378,6 @@ pub const all_features = blk: { .llvm_name = "vfp4d16", .description = "Enable VFP4 instructions with only 16 d-registers", .dependencies = featureSet(&[_]Feature{ - .fp16, - .fp64, .vfp3d16, .vfp4d16sp, }), @@ -1379,8 +1394,6 @@ pub const all_features = blk: { .llvm_name = "vfp4sp", .description = "Enable VFP4 instructions with no double precision", .dependencies = featureSet(&[_]Feature{ - .d32, - .fp16, .vfp3sp, .vfp4d16sp, }), @@ -1417,7 +1430,7 @@ pub const all_features = blk: { .llvm_name = "xscale", .description = "ARMv5te architecture", .dependencies = featureSet(&[_]Feature{ - .has_v5te, + .v5te, }), }; result[@enumToInt(Feature.zcz)] = .{ @@ -1480,8 +1493,8 @@ pub const cpu = struct { .name = "arm1136jf_s", .llvm_name = "arm1136jf-s", .features = featureSet(&[_]Feature{ - .v6, .slowfpvmlx, + .v6, .vfp2, }), }; @@ -1496,8 +1509,8 @@ pub const cpu = struct { .name = "arm1156t2f_s", .llvm_name = "arm1156t2f-s", .features = featureSet(&[_]Feature{ - .v6t2, .slowfpvmlx, + .v6t2, .vfp2, }), }; @@ -1519,8 +1532,8 @@ pub const cpu = struct { .name = "arm1176jzf_s", .llvm_name = "arm1176jzf-s", .features = featureSet(&[_]Feature{ - .v6kz, .slowfpvmlx, + .v6kz, .vfp2, }), }; @@ -1654,11 +1667,11 @@ pub const cpu = struct { .name = "cortex_a12", .llvm_name = "cortex-a12", .features = featureSet(&[_]Feature{ - .v7a, .avoid_partial_cpsr, .mp, .ret_addr_stack, .trustzone, + .v7a, .vfp4, .virtualization, .vmlx_forwarding, @@ -1668,14 +1681,13 @@ pub const cpu = struct { .name = "cortex_a15", .llvm_name = "cortex-a15", .features = featureSet(&[_]Feature{ - .v7a, .avoid_partial_cpsr, - .dont_widen_vmovs, .mp, .muxed_units, .ret_addr_stack, .splat_vfp_neon, .trustzone, + .v7a, .vfp4, .virtualization, .vldn_align, @@ -1685,11 +1697,11 @@ pub const cpu = struct { .name = "cortex_a17", .llvm_name = "cortex-a17", .features = featureSet(&[_]Feature{ - .v7a, .avoid_partial_cpsr, .mp, .ret_addr_stack, .trustzone, + .v7a, .vfp4, .virtualization, .vmlx_forwarding, @@ -1699,10 +1711,6 @@ pub const cpu = struct { .name = "cortex_a32", .llvm_name = "cortex-a32", .features = featureSet(&[_]Feature{ - .crc, - .crypto, - .hwdiv, - .hwdiv_arm, .v8a, }), }; @@ -1710,10 +1718,6 @@ pub const cpu = struct { .name = "cortex_a35", .llvm_name = "cortex-a35", .features = featureSet(&[_]Feature{ - .crc, - .crypto, - .hwdiv, - .hwdiv_arm, .v8a, }), }; @@ -1721,13 +1725,13 @@ pub const cpu = struct { .name = "cortex_a5", .llvm_name = "cortex-a5", .features = featureSet(&[_]Feature{ - .v7a, .mp, .ret_addr_stack, .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, .trustzone, + .v7a, .vfp4, .vmlx_forwarding, }), @@ -1736,49 +1740,39 @@ pub const cpu = struct { .name = "cortex_a53", .llvm_name = "cortex-a53", .features = featureSet(&[_]Feature{ - .v8a, - .crc, - .crypto, .fpao, - .hwdiv, - .hwdiv_arm, + .v8a, }), }; pub const cortex_a55 = CpuModel{ .name = "cortex_a55", .llvm_name = "cortex-a55", .features = featureSet(&[_]Feature{ - .v8_2a, .dotprod, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cortex_a57 = CpuModel{ .name = "cortex_a57", .llvm_name = "cortex-a57", .features = featureSet(&[_]Feature{ - .v8a, .avoid_partial_cpsr, .cheap_predicable_cpsr, - .crc, - .crypto, .fpao, - .hwdiv, - .hwdiv_arm, + .v8a, }), }; pub const cortex_a7 = CpuModel{ .name = "cortex_a7", .llvm_name = "cortex-a7", .features = featureSet(&[_]Feature{ - .v7a, .mp, .ret_addr_stack, .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, .trustzone, + .v7a, .vfp4, .virtualization, .vmlx_forwarding, @@ -1790,10 +1784,6 @@ pub const cpu = struct { .llvm_name = "cortex-a72", .features = featureSet(&[_]Feature{ .v8a, - .crc, - .crypto, - .hwdiv, - .hwdiv_arm, }), }; pub const cortex_a73 = CpuModel{ @@ -1801,20 +1791,14 @@ pub const cpu = struct { .llvm_name = "cortex-a73", .features = featureSet(&[_]Feature{ .v8a, - .crc, - .crypto, - .hwdiv, - .hwdiv_arm, }), }; pub const cortex_a75 = CpuModel{ .name = "cortex_a75", .llvm_name = "cortex-a75", .features = featureSet(&[_]Feature{ - .v8_2a, .dotprod, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cortex_a76 = CpuModel{ @@ -1822,13 +1806,9 @@ pub const cpu = struct { .llvm_name = "cortex-a76", .features = featureSet(&[_]Feature{ .a76, - .v8_2a, - .crc, - .crypto, .dotprod, .fullfp16, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cortex_a76ae = CpuModel{ @@ -1836,52 +1816,49 @@ pub const cpu = struct { .llvm_name = "cortex-a76ae", .features = featureSet(&[_]Feature{ .a76, - .v8_2a, - .crc, - .crypto, .dotprod, .fullfp16, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cortex_a77 = CpuModel{ .name = "cortex_a77", .llvm_name = "cortex-a77", .features = featureSet(&[_]Feature{ - .v8_2a, - .crc, - .crypto, .dotprod, .fullfp16, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cortex_a78 = CpuModel{ .name = "cortex_a78", .llvm_name = "cortex-a78", .features = featureSet(&[_]Feature{ - .v8_2a, - .crc, - .crypto, .dotprod, .fullfp16, - .hwdiv, - .hwdiv_arm, + .v8_2a, + }), + }; + pub const cortex_a78c = CpuModel{ + .name = "cortex_a78c", + .llvm_name = "cortex-a78c", + .features = featureSet(&[_]Feature{ + .dotprod, + .fullfp16, + .v8_2a, }), }; pub const cortex_a8 = CpuModel{ .name = "cortex_a8", .llvm_name = "cortex-a8", .features = featureSet(&[_]Feature{ - .v7a, .nonpipelined_vfp, .ret_addr_stack, .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, .trustzone, + .v7a, .vmlx_forwarding, .vmlx_hazards, }), @@ -1890,7 +1867,6 @@ pub const cpu = struct { .name = "cortex_a9", .llvm_name = "cortex-a9", .features = featureSet(&[_]Feature{ - .v7a, .avoid_partial_cpsr, .expand_fp_mlx, .fp16, @@ -1900,6 +1876,7 @@ pub const cpu = struct { .prefer_vmovsr, .ret_addr_stack, .trustzone, + .v7a, .vldn_align, .vmlx_forwarding, .vmlx_hazards, @@ -1930,26 +1907,25 @@ pub const cpu = struct { .name = "cortex_m23", .llvm_name = "cortex-m23", .features = featureSet(&[_]Feature{ - .v8m, .no_movt, + .v8m, }), }; pub const cortex_m3 = CpuModel{ .name = "cortex_m3", .llvm_name = "cortex-m3", .features = featureSet(&[_]Feature{ - .v7m, .loop_align, .m3, .no_branch_predictor, .use_misched, + .v7m, }), }; pub const cortex_m33 = CpuModel{ .name = "cortex_m33", .llvm_name = "cortex-m33", .features = featureSet(&[_]Feature{ - .v8m_main, .dsp, .fp_armv8d16sp, .loop_align, @@ -1957,13 +1933,13 @@ pub const cpu = struct { .slowfpvfmx, .slowfpvmlx, .use_misched, + .v8m_main, }), }; pub const cortex_m35p = CpuModel{ .name = "cortex_m35p", .llvm_name = "cortex-m35p", .features = featureSet(&[_]Feature{ - .v8m_main, .dsp, .fp_armv8d16sp, .loop_align, @@ -1971,18 +1947,19 @@ pub const cpu = struct { .slowfpvfmx, .slowfpvmlx, .use_misched, + .v8m_main, }), }; pub const cortex_m4 = CpuModel{ .name = "cortex_m4", .llvm_name = "cortex-m4", .features = featureSet(&[_]Feature{ - .v7em, .loop_align, .no_branch_predictor, .slowfpvfmx, .slowfpvmlx, .use_misched, + .v7em, .vfp4d16sp, }), }; @@ -1990,45 +1967,45 @@ pub const cpu = struct { .name = "cortex_m55", .llvm_name = "cortex-m55", .features = featureSet(&[_]Feature{ - .v8_1m_main, - .dsp, .fp_armv8d16, .loop_align, .mve_fp, .no_branch_predictor, .slowfpvmlx, .use_misched, + .v8_1m_main, }), }; pub const cortex_m7 = CpuModel{ .name = "cortex_m7", .llvm_name = "cortex-m7", .features = featureSet(&[_]Feature{ - .v7em, .fp_armv8d16, + .use_misched, + .v7em, }), }; pub const cortex_r4 = CpuModel{ .name = "cortex_r4", .llvm_name = "cortex-r4", .features = featureSet(&[_]Feature{ - .v7r, .avoid_partial_cpsr, .r4, .ret_addr_stack, + .v7r, }), }; pub const cortex_r4f = CpuModel{ .name = "cortex_r4f", .llvm_name = "cortex-r4f", .features = featureSet(&[_]Feature{ - .v7r, .avoid_partial_cpsr, .r4, .ret_addr_stack, .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, + .v7r, .vfp3d16, }), }; @@ -2036,13 +2013,13 @@ pub const cpu = struct { .name = "cortex_r5", .llvm_name = "cortex-r5", .features = featureSet(&[_]Feature{ - .v7r, .avoid_partial_cpsr, .hwdiv_arm, .ret_addr_stack, .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, + .v7r, .vfp3d16, }), }; @@ -2050,16 +2027,15 @@ pub const cpu = struct { .name = "cortex_r52", .llvm_name = "cortex-r52", .features = featureSet(&[_]Feature{ - .v8r, .fpao, .use_misched, + .v8r, }), }; pub const cortex_r7 = CpuModel{ .name = "cortex_r7", .llvm_name = "cortex-r7", .features = featureSet(&[_]Feature{ - .v7r, .avoid_partial_cpsr, .fp16, .hwdiv_arm, @@ -2068,6 +2044,7 @@ pub const cpu = struct { .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, + .v7r, .vfp3d16, }), }; @@ -2075,7 +2052,6 @@ pub const cpu = struct { .name = "cortex_r8", .llvm_name = "cortex-r8", .features = featureSet(&[_]Feature{ - .v7r, .avoid_partial_cpsr, .fp16, .hwdiv_arm, @@ -2084,6 +2060,7 @@ pub const cpu = struct { .slow_fp_brcc, .slowfpvfmx, .slowfpvmlx, + .v7r, .vfp3d16, }), }; @@ -2091,34 +2068,25 @@ pub const cpu = struct { .name = "cortex_x1", .llvm_name = "cortex-x1", .features = featureSet(&[_]Feature{ - .v8_2a, - .crc, - .crypto, .dotprod, .fullfp16, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const cyclone = CpuModel{ .name = "cyclone", .llvm_name = "cyclone", .features = featureSet(&[_]Feature{ - .v8a, .avoid_movs_shop, .avoid_partial_cpsr, - .crypto, .disable_postra_scheduler, - .hwdiv, - .hwdiv_arm, - .mp, .neonfp, .ret_addr_stack, .slowfpvfmx, .slowfpvmlx, .swift, .use_misched, - .vfp4, + .v8a, .zcz, }), }; @@ -2133,34 +2101,34 @@ pub const cpu = struct { .name = "exynos_m1", .llvm_name = null, .features = featureSet(&[_]Feature{ - .v8a, .exynos, + .v8a, }), }; pub const exynos_m2 = CpuModel{ .name = "exynos_m2", .llvm_name = null, .features = featureSet(&[_]Feature{ - .v8a, .exynos, + .v8a, }), }; pub const exynos_m3 = CpuModel{ .name = "exynos_m3", .llvm_name = "exynos-m3", .features = featureSet(&[_]Feature{ - .v8_2a, .exynos, + .v8a, }), }; pub const exynos_m4 = CpuModel{ .name = "exynos_m4", .llvm_name = "exynos-m4", .features = featureSet(&[_]Feature{ - .v8_2a, .dotprod, .exynos, .fullfp16, + .v8_2a, }), }; pub const exynos_m5 = CpuModel{ @@ -2190,7 +2158,6 @@ pub const cpu = struct { .llvm_name = "krait", .features = featureSet(&[_]Feature{ .avoid_partial_cpsr, - .fp16, .hwdiv, .hwdiv_arm, .muxed_units, @@ -2205,10 +2172,6 @@ pub const cpu = struct { .name = "kryo", .llvm_name = "kryo", .features = featureSet(&[_]Feature{ - .crc, - .crypto, - .hwdiv, - .hwdiv_arm, .v8a, }), }; @@ -2216,8 +2179,8 @@ pub const cpu = struct { .name = "mpcore", .llvm_name = "mpcore", .features = featureSet(&[_]Feature{ - .v6k, .slowfpvmlx, + .v6k, .vfp2, }), }; @@ -2232,36 +2195,27 @@ pub const cpu = struct { .name = "neoverse_n1", .llvm_name = "neoverse-n1", .features = featureSet(&[_]Feature{ - .v8_2a, - .crc, - .crypto, .dotprod, - .hwdiv, - .hwdiv_arm, + .v8_2a, }), }; pub const neoverse_n2 = CpuModel{ .name = "neoverse_n2", .llvm_name = "neoverse-n2", .features = featureSet(&[_]Feature{ - .v8_5a, .bf16, .i8mm, - .perfmon, + .v8_5a, }), }; pub const neoverse_v1 = CpuModel{ .name = "neoverse_v1", .llvm_name = "neoverse-v1", .features = featureSet(&[_]Feature{ - .v8_4a, .bf16, - .crc, - .crypto, .fullfp16, - .hwdiv, - .hwdiv_arm, .i8mm, + .v8_4a, }), }; pub const sc000 = CpuModel{ @@ -2275,10 +2229,10 @@ pub const cpu = struct { .name = "sc300", .llvm_name = "sc300", .features = featureSet(&[_]Feature{ - .v7m, .m3, .no_branch_predictor, .use_misched, + .v7m, }), }; pub const strongarm = CpuModel{ @@ -2313,7 +2267,6 @@ pub const cpu = struct { .name = "swift", .llvm_name = "swift", .features = featureSet(&[_]Feature{ - .v7a, .avoid_movs_shop, .avoid_partial_cpsr, .disable_postra_scheduler, @@ -2332,6 +2285,7 @@ pub const cpu = struct { .slowfpvmlx, .swift, .use_misched, + .v7a, .vfp4, .vmlx_hazards, .wide_stride_vfp, diff --git a/tools/update_cpu_features.zig b/tools/update_cpu_features.zig index 5b730a91b5..d389afefe4 100644 --- a/tools/update_cpu_features.zig +++ b/tools/update_cpu_features.zig @@ -266,6 +266,358 @@ const llvm_targets = [_]LlvmTarget{ .llvm_name = "ARM", .td_name = "ARM.td", .branch_quota = 10000, + .extra_cpus = &.{ + .{ + .llvm_name = "generic", + .zig_name = "baseline", + .features = &.{"v7a"}, + }, + .{ + .llvm_name = null, + .zig_name = "exynos_m1", + .features = &.{ "v8a", "exynos" }, + }, + .{ + .llvm_name = null, + .zig_name = "exynos_m2", + .features = &.{ "v8a", "exynos" }, + }, + }, + .feature_overrides = &.{ + .{ + .llvm_name = "cortex-a78", + .flatten = true, + }, + .{ + .llvm_name = "r5", + .flatten = true, + }, + .{ + .llvm_name = "r52", + .flatten = true, + }, + .{ + .llvm_name = "r7", + .flatten = true, + }, + .{ + .llvm_name = "m7", + .flatten = true, + }, + .{ + .llvm_name = "krait", + .flatten = true, + }, + .{ + .llvm_name = "kryo", + .flatten = true, + }, + .{ + .llvm_name = "cortex-x1", + .flatten = true, + }, + .{ + .llvm_name = "neoverse-v1", + .flatten = true, + }, + .{ + .llvm_name = "a5", + .flatten = true, + }, + .{ + .llvm_name = "a7", + .flatten = true, + }, + .{ + .llvm_name = "a8", + .flatten = true, + }, + .{ + .llvm_name = "a9", + .flatten = true, + }, + .{ + .llvm_name = "a12", + .flatten = true, + }, + .{ + .llvm_name = "a15", + .flatten = true, + }, + .{ + .llvm_name = "a17", + .flatten = true, + }, + .{ + .llvm_name = "a32", + .flatten = true, + }, + .{ + .llvm_name = "a35", + .flatten = true, + }, + .{ + .llvm_name = "a53", + .flatten = true, + }, + .{ + .llvm_name = "a55", + .flatten = true, + }, + .{ + .llvm_name = "a57", + .flatten = true, + }, + .{ + .llvm_name = "a72", + .flatten = true, + }, + .{ + .llvm_name = "a73", + .flatten = true, + }, + .{ + .llvm_name = "a75", + .flatten = true, + }, + .{ + .llvm_name = "a77", + .flatten = true, + }, + .{ + .llvm_name = "a78c", + .flatten = true, + }, + .{ + .llvm_name = "armv2", + .zig_name = "v2", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv2a", + .zig_name = "v2a", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv3", + .zig_name = "v3", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv3m", + .zig_name = "v3m", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv4", + .zig_name = "v4", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv4t", + .zig_name = "v4t", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv5t", + .zig_name = "v5t", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv5te", + .zig_name = "v5te", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv5tej", + .zig_name = "v5tej", + .extra_deps = &.{"strict_align"}, + }, + .{ + .llvm_name = "armv6", + .zig_name = "v6", + }, + .{ + .llvm_name = "armv6-m", + .zig_name = "v6m", + }, + .{ + .llvm_name = "armv6j", + .zig_name = "v6j", + }, + .{ + .llvm_name = "armv6k", + .zig_name = "v6k", + }, + .{ + .llvm_name = "armv6kz", + .zig_name = "v6kz", + }, + .{ + .llvm_name = "armv6s-m", + .zig_name = "v6sm", + }, + .{ + .llvm_name = "armv6t2", + .zig_name = "v6t2", + }, + .{ + .llvm_name = "armv7-a", + .zig_name = "v7a", + }, + .{ + .llvm_name = "armv7-m", + .zig_name = "v7m", + }, + .{ + .llvm_name = "armv7-r", + .zig_name = "v7r", + }, + .{ + .llvm_name = "armv7e-m", + .zig_name = "v7em", + }, + .{ + .llvm_name = "armv7k", + .zig_name = "v7k", + }, + .{ + .llvm_name = "armv7s", + .zig_name = "v7s", + }, + .{ + .llvm_name = "armv7ve", + .zig_name = "v7ve", + }, + .{ + .llvm_name = "armv8.1-a", + .zig_name = "v8_1a", + }, + .{ + .llvm_name = "armv8.1-m.main", + .zig_name = "v8_1m_main", + }, + .{ + .llvm_name = "armv8.2-a", + .zig_name = "v8_2a", + }, + .{ + .llvm_name = "armv8.3-a", + .zig_name = "v8_3a", + }, + .{ + .llvm_name = "armv8.4-a", + .zig_name = "v8_4a", + }, + .{ + .llvm_name = "armv8.5-a", + .zig_name = "v8_5a", + }, + .{ + .llvm_name = "armv8.6-a", + .zig_name = "v8_6a", + }, + .{ + .llvm_name = "armv8.7-a", + .zig_name = "v8_7a", + }, + .{ + .llvm_name = "armv8-a", + .zig_name = "v8a", + }, + .{ + .llvm_name = "armv8-m.base", + .zig_name = "v8m", + }, + .{ + .llvm_name = "armv8-m.main", + .zig_name = "v8m_main", + }, + .{ + .llvm_name = "armv8-r", + .zig_name = "v8r", + }, + .{ + .llvm_name = "v4t", + .zig_name = "has_v4t", + }, + .{ + .llvm_name = "v5t", + .zig_name = "has_v5t", + }, + .{ + .llvm_name = "v5te", + .zig_name = "has_v5te", + }, + .{ + .llvm_name = "v6", + .zig_name = "has_v6", + }, + .{ + .llvm_name = "v6k", + .zig_name = "has_v6k", + }, + .{ + .llvm_name = "v6m", + .zig_name = "has_v6m", + }, + .{ + .llvm_name = "v6t2", + .zig_name = "has_v6t2", + }, + .{ + .llvm_name = "v7", + .zig_name = "has_v7", + }, + .{ + .llvm_name = "v7clrex", + .zig_name = "has_v7clrex", + }, + .{ + .llvm_name = "v8", + .zig_name = "has_v8", + }, + .{ + .llvm_name = "v8m", + .zig_name = "has_v8m", + }, + .{ + .llvm_name = "v8m.main", + .zig_name = "has_v8m_main", + }, + .{ + .llvm_name = "v8.1a", + .zig_name = "has_v8_1a", + }, + .{ + .llvm_name = "v8.1m.main", + .zig_name = "has_v8_1m_main", + }, + .{ + .llvm_name = "v8.2a", + .zig_name = "has_v8_2a", + }, + .{ + .llvm_name = "v8.3a", + .zig_name = "has_v8_3a", + }, + .{ + .llvm_name = "v8.4a", + .zig_name = "has_v8_4a", + }, + .{ + .llvm_name = "v8.5a", + .zig_name = "has_v8_5a", + }, + .{ + .llvm_name = "v8.6a", + .zig_name = "has_v8_6a", + }, + .{ + .llvm_name = "v8.7a", + .zig_name = "has_v8_7a", + }, + }, }, .{ .zig_name = "avr",