update target CPU features with LLVM 13 rc1 data

This commit is contained in:
Andrew Kelley 2021-08-15 23:09:55 -07:00
parent d6467dcf71
commit 7adf15682c
13 changed files with 720 additions and 80 deletions

View file

@ -430,6 +430,7 @@ pub const Target = struct {
}; };
pub const aarch64 = @import("target/aarch64.zig"); pub const aarch64 = @import("target/aarch64.zig");
pub const arc = @import("target/arc.zig");
pub const amdgpu = @import("target/amdgpu.zig"); pub const amdgpu = @import("target/amdgpu.zig");
pub const arm = @import("target/arm.zig"); pub const arm = @import("target/arm.zig");
pub const avr = @import("target/avr.zig"); pub const avr = @import("target/avr.zig");

View file

@ -65,6 +65,7 @@ pub const Feature = enum {
fuse_csel, fuse_csel,
fuse_literals, fuse_literals,
harden_sls_blr, harden_sls_blr,
harden_sls_nocomdat,
harden_sls_retbr, harden_sls_retbr,
hcx, hcx,
i8mm, i8mm,
@ -81,6 +82,7 @@ pub const Feature = enum {
neoverse_n2, neoverse_n2,
neoverse_v1, neoverse_v1,
no_neg_immediates, no_neg_immediates,
no_zcz_fp,
nv, nv,
outline_atomics, outline_atomics,
pan, pan,
@ -120,6 +122,7 @@ pub const Feature = enum {
reserve_x6, reserve_x6,
reserve_x7, reserve_x7,
reserve_x9, reserve_x9,
rme,
sb, sb,
sel2, sel2,
sha2, sha2,
@ -128,6 +131,9 @@ pub const Feature = enum {
slow_paired_128, slow_paired_128,
slow_strqro_store, slow_strqro_store,
sm4, sm4,
sme,
sme_f64,
sme_i64,
spe, spe,
spe_eef, spe_eef,
specrestrict, specrestrict,
@ -148,7 +154,6 @@ pub const Feature = enum {
tracev8_4, tracev8_4,
trbe, trbe,
uaops, uaops,
use_aa,
use_experimental_zeroing_pseudos, use_experimental_zeroing_pseudos,
use_postra_scheduler, use_postra_scheduler,
use_reciprocal_square_root, use_reciprocal_square_root,
@ -166,7 +171,6 @@ pub const Feature = enum {
xs, xs,
zcm, zcm,
zcz, zcz,
zcz_fp,
zcz_fp_workaround, zcz_fp_workaround,
zcz_gp, zcz_gp,
}; };
@ -594,6 +598,11 @@ pub const all_features = blk: {
.description = "Harden against straight line speculation across BLR instructions", .description = "Harden against straight line speculation across BLR instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.harden_sls_nocomdat)] = .{
.llvm_name = "harden-sls-nocomdat",
.description = "Generate thunk code for SLS mitigation in the normal text section",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.harden_sls_retbr)] = .{ result[@enumToInt(Feature.harden_sls_retbr)] = .{
.llvm_name = "harden-sls-retbr", .llvm_name = "harden-sls-retbr",
.description = "Harden against straight line speculation across RET and BR instructions", .description = "Harden against straight line speculation across RET and BR instructions",
@ -660,8 +669,10 @@ pub const all_features = blk: {
.crypto, .crypto,
.dotprod, .dotprod,
.fullfp16, .fullfp16,
.fuse_aes,
.rcpc, .rcpc,
.ssbs, .ssbs,
.use_postra_scheduler,
.v8_2a, .v8_2a,
}), }),
}; };
@ -672,9 +683,11 @@ pub const all_features = blk: {
.crypto, .crypto,
.dotprod, .dotprod,
.fullfp16, .fullfp16,
.fuse_aes,
.rcpc, .rcpc,
.spe, .spe,
.ssbs, .ssbs,
.use_postra_scheduler,
.v8_2a, .v8_2a,
}), }),
}; };
@ -683,10 +696,13 @@ pub const all_features = blk: {
.description = "Neoverse N2 ARM processors", .description = "Neoverse N2 ARM processors",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.bf16, .bf16,
.crypto,
.ete, .ete,
.fuse_aes,
.i8mm, .i8mm,
.mte, .mte,
.sve2_bitperm, .sve2_bitperm,
.use_postra_scheduler,
.v8_5a, .v8_5a,
}), }),
}; };
@ -714,6 +730,11 @@ pub const all_features = blk: {
.description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.no_zcz_fp)] = .{
.llvm_name = "no-zcz-fp",
.description = "Has no zero-cycle zeroing instructions for FP registers",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.nv)] = .{ result[@enumToInt(Feature.nv)] = .{
.llvm_name = "nv", .llvm_name = "nv",
.description = "Enable v8.4-A Nested Virtualization Enchancement", .description = "Enable v8.4-A Nested Virtualization Enchancement",
@ -913,6 +934,11 @@ pub const all_features = blk: {
.description = "Reserve X9, making it unavailable as a GPR", .description = "Reserve X9, making it unavailable as a GPR",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.rme)] = .{
.llvm_name = "rme",
.description = "Enable Realm Management Extension",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.sb)] = .{ result[@enumToInt(Feature.sb)] = .{
.llvm_name = "sb", .llvm_name = "sb",
.description = "Enable v8.5 Speculation Barrier", .description = "Enable v8.5 Speculation Barrier",
@ -959,6 +985,28 @@ pub const all_features = blk: {
.neon, .neon,
}), }),
}; };
result[@enumToInt(Feature.sme)] = .{
.llvm_name = "sme",
.description = "Enable Scalable Matrix Extension (SME)",
.dependencies = featureSet(&[_]Feature{
.bf16,
.sve2,
}),
};
result[@enumToInt(Feature.sme_f64)] = .{
.llvm_name = "sme-f64",
.description = "Enable Scalable Matrix Extension (SME) F64F64 instructions",
.dependencies = featureSet(&[_]Feature{
.sme,
}),
};
result[@enumToInt(Feature.sme_i64)] = .{
.llvm_name = "sme-i64",
.description = "Enable Scalable Matrix Extension (SME) I16I64 instructions",
.dependencies = featureSet(&[_]Feature{
.sme,
}),
};
result[@enumToInt(Feature.spe)] = .{ result[@enumToInt(Feature.spe)] = .{
.llvm_name = "spe", .llvm_name = "spe",
.description = "Enable Statistical Profiling extension", .description = "Enable Statistical Profiling extension",
@ -1074,11 +1122,6 @@ pub const all_features = blk: {
.description = "Enable v8.2 UAO PState", .description = "Enable v8.2 UAO PState",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.use_aa)] = .{
.llvm_name = "use-aa",
.description = "Use alias analysis during codegen",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.use_experimental_zeroing_pseudos)] = .{ result[@enumToInt(Feature.use_experimental_zeroing_pseudos)] = .{
.llvm_name = "use-experimental-zeroing-pseudos", .llvm_name = "use-experimental-zeroing-pseudos",
.description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations", .description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations",
@ -1251,15 +1294,9 @@ pub const all_features = blk: {
.llvm_name = "zcz", .llvm_name = "zcz",
.description = "Has zero-cycle zeroing instructions", .description = "Has zero-cycle zeroing instructions",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.zcz_fp,
.zcz_gp, .zcz_gp,
}), }),
}; };
result[@enumToInt(Feature.zcz_fp)] = .{
.llvm_name = "zcz-fp",
.description = "Has zero-cycle zeroing instructions for FP registers",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.zcz_fp_workaround)] = .{ result[@enumToInt(Feature.zcz_fp_workaround)] = .{
.llvm_name = "zcz-fp-workaround", .llvm_name = "zcz-fp-workaround",
.description = "The zero-cycle floating-point zeroing instruction has a bug", .description = "The zero-cycle floating-point zeroing instruction has a bug",
@ -1403,7 +1440,62 @@ pub const cpu = struct {
.name = "apple_latest", .name = "apple_latest",
.llvm_name = "apple-latest", .llvm_name = "apple-latest",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.apple_a13, .aggressive_fma,
.alternate_sextload_cvt_f32_pattern,
.altnzcv,
.arith_bcc_fusion,
.arith_cbz_fusion,
.ccdp,
.crypto,
.disable_latency_sched_heuristic,
.fp16fml,
.fptoint,
.fuse_address,
.fuse_aes,
.fuse_arith_logic,
.fuse_crypto_eor,
.fuse_csel,
.fuse_literals,
.perfmon,
.predres,
.sb,
.sha3,
.specrestrict,
.ssbs,
.v8_4a,
.zcm,
.zcz,
}),
};
pub const apple_m1 = CpuModel{
.name = "apple_m1",
.llvm_name = "apple-m1",
.features = featureSet(&[_]Feature{
.aggressive_fma,
.alternate_sextload_cvt_f32_pattern,
.altnzcv,
.arith_bcc_fusion,
.arith_cbz_fusion,
.ccdp,
.crypto,
.disable_latency_sched_heuristic,
.fp16fml,
.fptoint,
.fuse_address,
.fuse_aes,
.fuse_arith_logic,
.fuse_crypto_eor,
.fuse_csel,
.fuse_literals,
.perfmon,
.predres,
.sb,
.sha3,
.specrestrict,
.ssbs,
.v8_4a,
.zcm,
.zcz,
}), }),
}; };
pub const apple_s4 = CpuModel{ pub const apple_s4 = CpuModel{
@ -1459,7 +1551,6 @@ pub const cpu = struct {
.custom_cheap_as_move, .custom_cheap_as_move,
.fuse_aes, .fuse_aes,
.perfmon, .perfmon,
.use_aa,
.use_postra_scheduler, .use_postra_scheduler,
.v8a, .v8a,
}), }),
@ -1474,6 +1565,7 @@ pub const cpu = struct {
.fuse_aes, .fuse_aes,
.perfmon, .perfmon,
.rcpc, .rcpc,
.use_postra_scheduler,
.v8_2a, .v8_2a,
}), }),
}; };
@ -1649,7 +1741,6 @@ pub const cpu = struct {
.use_postra_scheduler, .use_postra_scheduler,
.use_reciprocal_square_root, .use_reciprocal_square_root,
.v8a, .v8a,
.zcz_fp,
}), }),
}; };
pub const exynos_m2 = CpuModel{ pub const exynos_m2 = CpuModel{
@ -1666,7 +1757,6 @@ pub const cpu = struct {
.slow_paired_128, .slow_paired_128,
.use_postra_scheduler, .use_postra_scheduler,
.v8a, .v8a,
.zcz_fp,
}), }),
}; };
pub const exynos_m3 = CpuModel{ pub const exynos_m3 = CpuModel{
@ -1686,7 +1776,6 @@ pub const cpu = struct {
.predictable_select_expensive, .predictable_select_expensive,
.use_postra_scheduler, .use_postra_scheduler,
.v8a, .v8a,
.zcz_fp,
}), }),
}; };
pub const exynos_m4 = CpuModel{ pub const exynos_m4 = CpuModel{
@ -1824,7 +1913,6 @@ pub const cpu = struct {
.perfmon, .perfmon,
.predictable_select_expensive, .predictable_select_expensive,
.strict_align, .strict_align,
.use_aa,
.use_postra_scheduler, .use_postra_scheduler,
.v8_3a, .v8_3a,
}), }),

View file

@ -9,6 +9,7 @@ pub const Feature = enum {
a16, a16,
add_no_carry_insts, add_no_carry_insts,
aperture_regs, aperture_regs,
architected_flat_scratch,
atomic_fadd_insts, atomic_fadd_insts,
auto_waitcnt_before_barrier, auto_waitcnt_before_barrier,
ci_insts, ci_insts,
@ -20,11 +21,14 @@ pub const Feature = enum {
dot4_insts, dot4_insts,
dot5_insts, dot5_insts,
dot6_insts, dot6_insts,
dot7_insts,
dpp, dpp,
dpp8, dpp8,
dpp_64bit,
ds_src2_insts, ds_src2_insts,
enable_ds128, enable_ds128,
enable_prt_strict_null, enable_prt_strict_null,
extended_image_insts,
fast_denormal_f32, fast_denormal_f32,
fast_fmaf, fast_fmaf,
flat_address_space, flat_address_space,
@ -36,16 +40,19 @@ pub const Feature = enum {
fma_mix_insts, fma_mix_insts,
fmaf, fmaf,
fp64, fp64,
full_rate_64_ops,
g16, g16,
gcn3_encoding, gcn3_encoding,
get_wave_id_inst, get_wave_id_inst,
gfx10, gfx10,
gfx10_3_insts, gfx10_3_insts,
gfx10_a_encoding,
gfx10_b_encoding, gfx10_b_encoding,
gfx10_insts, gfx10_insts,
gfx7_gfx8_gfx9_insts, gfx7_gfx8_gfx9_insts,
gfx8_insts, gfx8_insts,
gfx9, gfx9,
gfx90a_insts,
gfx9_insts, gfx9_insts,
half_rate_64_ops, half_rate_64_ops,
image_gather4_d16_bug, image_gather4_d16_bug,
@ -70,11 +77,18 @@ pub const Feature = enum {
mfma_inline_literal_bug, mfma_inline_literal_bug,
mimg_r128, mimg_r128,
movrel, movrel,
negative_scratch_offset_bug,
negative_unaligned_scratch_offset_bug,
no_data_dep_hazard, no_data_dep_hazard,
no_sdst_cmpx, no_sdst_cmpx,
nsa_clause_bug,
nsa_encoding, nsa_encoding,
nsa_max_size_13,
nsa_max_size_5,
nsa_to_vmem_bug, nsa_to_vmem_bug,
offset_3f_bug, offset_3f_bug,
packed_fp32_ops,
packed_tid,
pk_fmac_f16_inst, pk_fmac_f16_inst,
promote_alloca, promote_alloca,
r128_a16, r128_a16,
@ -92,11 +106,13 @@ pub const Feature = enum {
sdwa_sdst, sdwa_sdst,
sea_islands, sea_islands,
sgpr_init_bug, sgpr_init_bug,
shader_cycles_register,
si_scheduler, si_scheduler,
smem_to_vector_write_hazard, smem_to_vector_write_hazard,
southern_islands, southern_islands,
sramecc, sramecc,
sramecc_support, sramecc_support,
tgsplit,
trap_handler, trap_handler,
trig_reduced_range, trig_reduced_range,
unaligned_access_mode, unaligned_access_mode,
@ -149,6 +165,11 @@ pub const all_features = blk: {
.description = "Has Memory Aperture Base and Size Registers", .description = "Has Memory Aperture Base and Size Registers",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.architected_flat_scratch)] = .{
.llvm_name = "architected-flat-scratch",
.description = "Flat Scratch register is a readonly SPI initialized architected register",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.atomic_fadd_insts)] = .{ result[@enumToInt(Feature.atomic_fadd_insts)] = .{
.llvm_name = "atomic-fadd-insts", .llvm_name = "atomic-fadd-insts",
.description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions", .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
@ -183,7 +204,7 @@ pub const all_features = blk: {
}; };
result[@enumToInt(Feature.dot2_insts)] = .{ result[@enumToInt(Feature.dot2_insts)] = .{
.llvm_name = "dot2-insts", .llvm_name = "dot2-insts",
.description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions", .description = "Has v_dot2_i32_i16, v_dot2_u32_u16 instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.dot3_insts)] = .{ result[@enumToInt(Feature.dot3_insts)] = .{
@ -206,6 +227,11 @@ pub const all_features = blk: {
.description = "Has v_dot4c_i32_i8 instruction", .description = "Has v_dot4c_i32_i8 instruction",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.dot7_insts)] = .{
.llvm_name = "dot7-insts",
.description = "Has v_dot2_f32_f16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.dpp)] = .{ result[@enumToInt(Feature.dpp)] = .{
.llvm_name = "dpp", .llvm_name = "dpp",
.description = "Support DPP (Data Parallel Primitives) extension", .description = "Support DPP (Data Parallel Primitives) extension",
@ -216,6 +242,11 @@ pub const all_features = blk: {
.description = "Support DPP8 (Data Parallel Primitives) extension", .description = "Support DPP8 (Data Parallel Primitives) extension",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.dpp_64bit)] = .{
.llvm_name = "dpp-64bit",
.description = "Support DPP (Data Parallel Primitives) extension",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.ds_src2_insts)] = .{ result[@enumToInt(Feature.ds_src2_insts)] = .{
.llvm_name = "ds-src2-insts", .llvm_name = "ds-src2-insts",
.description = "Has ds_*_src2 instructions", .description = "Has ds_*_src2 instructions",
@ -231,6 +262,11 @@ pub const all_features = blk: {
.description = "Enable zeroing of result registers for sparse texture fetches", .description = "Enable zeroing of result registers for sparse texture fetches",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.extended_image_insts)] = .{
.llvm_name = "extended-image-insts",
.description = "Support mips != 0, lod != 0, gather4, and get_lod",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.fast_denormal_f32)] = .{ result[@enumToInt(Feature.fast_denormal_f32)] = .{
.llvm_name = "fast-denormal-f32", .llvm_name = "fast-denormal-f32",
.description = "Enabling denormals does not cause f32 instructions to run at f64 rates", .description = "Enabling denormals does not cause f32 instructions to run at f64 rates",
@ -268,7 +304,7 @@ pub const all_features = blk: {
}; };
result[@enumToInt(Feature.flat_segment_offset_bug)] = .{ result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
.llvm_name = "flat-segment-offset-bug", .llvm_name = "flat-segment-offset-bug",
.description = "GFX10 bug, inst_offset ignored in flat segment", .description = "GFX10 bug where inst_offset is ignored when flat instructions access global memory",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.fma_mix_insts)] = .{ result[@enumToInt(Feature.fma_mix_insts)] = .{
@ -286,6 +322,11 @@ pub const all_features = blk: {
.description = "Enable double precision operations", .description = "Enable double precision operations",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.full_rate_64_ops)] = .{
.llvm_name = "full-rate-64-ops",
.description = "Most fp64 instructions are full rate",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.g16)] = .{ result[@enumToInt(Feature.g16)] = .{
.llvm_name = "g16", .llvm_name = "g16",
.description = "Support G16 for 16-bit gradient image operands", .description = "Support G16 for 16-bit gradient image operands",
@ -312,6 +353,7 @@ pub const all_features = blk: {
.ci_insts, .ci_insts,
.dpp, .dpp,
.dpp8, .dpp8,
.extended_image_insts,
.fast_denormal_f32, .fast_denormal_f32,
.fast_fmaf, .fast_fmaf,
.flat_address_space, .flat_address_space,
@ -334,6 +376,7 @@ pub const all_features = blk: {
.pk_fmac_f16_inst, .pk_fmac_f16_inst,
.register_banking, .register_banking,
.s_memrealtime, .s_memrealtime,
.s_memtime_inst,
.sdwa, .sdwa,
.sdwa_omod, .sdwa_omod,
.sdwa_scalar, .sdwa_scalar,
@ -350,6 +393,11 @@ pub const all_features = blk: {
.description = "Additional instructions for GFX10.3", .description = "Additional instructions for GFX10.3",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.gfx10_a_encoding)] = .{
.llvm_name = "gfx10_a-encoding",
.description = "Has BVH ray tracing instructions",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.gfx10_b_encoding)] = .{ result[@enumToInt(Feature.gfx10_b_encoding)] = .{
.llvm_name = "gfx10_b-encoding", .llvm_name = "gfx10_b-encoding",
.description = "Encoding format GFX10_B", .description = "Encoding format GFX10_B",
@ -379,7 +427,6 @@ pub const all_features = blk: {
.aperture_regs, .aperture_regs,
.ci_insts, .ci_insts,
.dpp, .dpp,
.ds_src2_insts,
.fast_denormal_f32, .fast_denormal_f32,
.fast_fmaf, .fast_fmaf,
.flat_address_space, .flat_address_space,
@ -394,7 +441,7 @@ pub const all_features = blk: {
.int_clamp_insts, .int_clamp_insts,
.inv_2pi_inline_imm, .inv_2pi_inline_imm,
.localmemorysize65536, .localmemorysize65536,
.mad_mac_f32_insts, .negative_scratch_offset_bug,
.r128_a16, .r128_a16,
.s_memrealtime, .s_memrealtime,
.s_memtime_inst, .s_memtime_inst,
@ -413,6 +460,11 @@ pub const all_features = blk: {
.xnack_support, .xnack_support,
}), }),
}; };
result[@enumToInt(Feature.gfx90a_insts)] = .{
.llvm_name = "gfx90a-insts",
.description = "Additional instructions for GFX90A+",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.gfx9_insts)] = .{ result[@enumToInt(Feature.gfx9_insts)] = .{
.llvm_name = "gfx9-insts", .llvm_name = "gfx9-insts",
.description = "Additional instructions for GFX9+", .description = "Additional instructions for GFX9+",
@ -533,6 +585,16 @@ pub const all_features = blk: {
.description = "Has v_movrel*_b32 instructions", .description = "Has v_movrel*_b32 instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.negative_scratch_offset_bug)] = .{
.llvm_name = "negative-scratch-offset-bug",
.description = "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.negative_unaligned_scratch_offset_bug)] = .{
.llvm_name = "negative-unaligned-scratch-offset-bug",
.description = "Scratch instructions with a VGPR offset and a negative immediate offset that is not a multiple of 4 read wrong memory on GFX10",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.no_data_dep_hazard)] = .{ result[@enumToInt(Feature.no_data_dep_hazard)] = .{
.llvm_name = "no-data-dep-hazard", .llvm_name = "no-data-dep-hazard",
.description = "Does not need SW waitstates", .description = "Does not need SW waitstates",
@ -543,11 +605,26 @@ pub const all_features = blk: {
.description = "V_CMPX does not write VCC/SGPR in addition to EXEC", .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.nsa_clause_bug)] = .{
.llvm_name = "nsa-clause-bug",
.description = "MIMG-NSA in a hard clause has unpredictable results on GFX10.1",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.nsa_encoding)] = .{ result[@enumToInt(Feature.nsa_encoding)] = .{
.llvm_name = "nsa-encoding", .llvm_name = "nsa-encoding",
.description = "Support NSA encoding for image instructions", .description = "Support NSA encoding for image instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.nsa_max_size_13)] = .{
.llvm_name = "nsa-max-size-13",
.description = "The maximum non-sequential address size in VGPRs.",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.nsa_max_size_5)] = .{
.llvm_name = "nsa-max-size-5",
.description = "The maximum non-sequential address size in VGPRs.",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{ result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
.llvm_name = "nsa-to-vmem-bug", .llvm_name = "nsa-to-vmem-bug",
.description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero", .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
@ -558,6 +635,16 @@ pub const all_features = blk: {
.description = "Branch offset of 3f hardware bug", .description = "Branch offset of 3f hardware bug",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.packed_fp32_ops)] = .{
.llvm_name = "packed-fp32-ops",
.description = "Support packed fp32 instructions",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.packed_tid)] = .{
.llvm_name = "packed-tid",
.description = "Workitem IDs are packed into v0 at kernel launch",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{ result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
.llvm_name = "pk-fmac-f16-inst", .llvm_name = "pk-fmac-f16-inst",
.description = "Has v_pk_fmac_f16 instruction", .description = "Has v_pk_fmac_f16 instruction",
@ -639,6 +726,7 @@ pub const all_features = blk: {
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.ci_insts, .ci_insts,
.ds_src2_insts, .ds_src2_insts,
.extended_image_insts,
.flat_address_space, .flat_address_space,
.fp64, .fp64,
.gfx7_gfx8_gfx9_insts, .gfx7_gfx8_gfx9_insts,
@ -657,6 +745,11 @@ pub const all_features = blk: {
.description = "VI SGPR initialization bug requiring a fixed SGPR allocation size", .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.shader_cycles_register)] = .{
.llvm_name = "shader-cycles-register",
.description = "Has SHADER_CYCLES hardware register",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.si_scheduler)] = .{ result[@enumToInt(Feature.si_scheduler)] = .{
.llvm_name = "si-scheduler", .llvm_name = "si-scheduler",
.description = "Enable SI Machine Scheduler", .description = "Enable SI Machine Scheduler",
@ -672,6 +765,7 @@ pub const all_features = blk: {
.description = "SOUTHERN_ISLANDS GPU generation", .description = "SOUTHERN_ISLANDS GPU generation",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.ds_src2_insts, .ds_src2_insts,
.extended_image_insts,
.fp64, .fp64,
.ldsbankcount32, .ldsbankcount32,
.localmemorysize32768, .localmemorysize32768,
@ -693,6 +787,11 @@ pub const all_features = blk: {
.description = "Hardware supports SRAMECC", .description = "Hardware supports SRAMECC",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.tgsplit)] = .{
.llvm_name = "tgsplit",
.description = "Enable threadgroup split execution",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.trap_handler)] = .{ result[@enumToInt(Feature.trap_handler)] = .{
.llvm_name = "trap-handler", .llvm_name = "trap-handler",
.description = "Trap handler support", .description = "Trap handler support",
@ -761,6 +860,7 @@ pub const all_features = blk: {
.ci_insts, .ci_insts,
.dpp, .dpp,
.ds_src2_insts, .ds_src2_insts,
.extended_image_insts,
.fast_denormal_f32, .fast_denormal_f32,
.flat_address_space, .flat_address_space,
.fp64, .fp64,
@ -892,10 +992,12 @@ pub const cpu = struct {
.lds_misaligned_bug, .lds_misaligned_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts, .mad_mac_f32_insts,
.negative_unaligned_scratch_offset_bug,
.nsa_clause_bug,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_5,
.nsa_to_vmem_bug, .nsa_to_vmem_bug,
.offset_3f_bug, .offset_3f_bug,
.s_memtime_inst,
.scalar_atomics, .scalar_atomics,
.scalar_flat_scratch_insts, .scalar_flat_scratch_insts,
.scalar_stores, .scalar_stores,
@ -916,6 +1018,7 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.ds_src2_insts, .ds_src2_insts,
.flat_segment_offset_bug, .flat_segment_offset_bug,
.get_wave_id_inst, .get_wave_id_inst,
@ -925,10 +1028,12 @@ pub const cpu = struct {
.lds_misaligned_bug, .lds_misaligned_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts, .mad_mac_f32_insts,
.negative_unaligned_scratch_offset_bug,
.nsa_clause_bug,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_5,
.nsa_to_vmem_bug, .nsa_to_vmem_bug,
.offset_3f_bug, .offset_3f_bug,
.s_memtime_inst,
.scalar_atomics, .scalar_atomics,
.scalar_flat_scratch_insts, .scalar_flat_scratch_insts,
.scalar_stores, .scalar_stores,
@ -949,6 +1054,7 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.ds_src2_insts, .ds_src2_insts,
.flat_segment_offset_bug, .flat_segment_offset_bug,
.get_wave_id_inst, .get_wave_id_inst,
@ -958,10 +1064,44 @@ pub const cpu = struct {
.lds_misaligned_bug, .lds_misaligned_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts, .mad_mac_f32_insts,
.negative_unaligned_scratch_offset_bug,
.nsa_clause_bug,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_5,
.nsa_to_vmem_bug,
.offset_3f_bug,
.scalar_atomics,
.scalar_flat_scratch_insts,
.scalar_stores,
.smem_to_vector_write_hazard,
.vcmpx_exec_war_hazard,
.vcmpx_permlane_hazard,
.vmem_to_scalar_write_hazard,
.wavefrontsize32,
.xnack_support,
}),
};
pub const gfx1013 = CpuModel{
.name = "gfx1013",
.llvm_name = "gfx1013",
.features = featureSet(&[_]Feature{
.dl_insts,
.ds_src2_insts,
.flat_segment_offset_bug,
.get_wave_id_inst,
.gfx10,
.gfx10_a_encoding,
.inst_fwd_prefetch_bug,
.lds_branch_vmem_war_hazard,
.lds_misaligned_bug,
.ldsbankcount32,
.mad_mac_f32_insts,
.negative_unaligned_scratch_offset_bug,
.nsa_clause_bug,
.nsa_encoding,
.nsa_max_size_5,
.nsa_to_vmem_bug, .nsa_to_vmem_bug,
.offset_3f_bug, .offset_3f_bug,
.s_memtime_inst,
.scalar_atomics, .scalar_atomics,
.scalar_flat_scratch_insts, .scalar_flat_scratch_insts,
.scalar_stores, .scalar_stores,
@ -982,11 +1122,15 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.gfx10, .gfx10,
.gfx10_3_insts, .gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding, .gfx10_b_encoding,
.ldsbankcount32, .ldsbankcount32,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32, .wavefrontsize32,
}), }),
}; };
@ -999,11 +1143,15 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.gfx10, .gfx10,
.gfx10_3_insts, .gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding, .gfx10_b_encoding,
.ldsbankcount32, .ldsbankcount32,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32, .wavefrontsize32,
}), }),
}; };
@ -1016,11 +1164,15 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.gfx10, .gfx10,
.gfx10_3_insts, .gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding, .gfx10_b_encoding,
.ldsbankcount32, .ldsbankcount32,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32, .wavefrontsize32,
}), }),
}; };
@ -1033,11 +1185,57 @@ pub const cpu = struct {
.dot2_insts, .dot2_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.gfx10, .gfx10,
.gfx10_3_insts, .gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding, .gfx10_b_encoding,
.ldsbankcount32, .ldsbankcount32,
.nsa_encoding, .nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32,
}),
};
pub const gfx1034 = CpuModel{
.name = "gfx1034",
.llvm_name = "gfx1034",
.features = featureSet(&[_]Feature{
.dl_insts,
.dot1_insts,
.dot2_insts,
.dot5_insts,
.dot6_insts,
.dot7_insts,
.gfx10,
.gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding,
.ldsbankcount32,
.nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32,
}),
};
pub const gfx1035 = CpuModel{
.name = "gfx1035",
.llvm_name = "gfx1035",
.features = featureSet(&[_]Feature{
.dl_insts,
.dot1_insts,
.dot2_insts,
.dot5_insts,
.dot6_insts,
.dot7_insts,
.gfx10,
.gfx10_3_insts,
.gfx10_a_encoding,
.gfx10_b_encoding,
.ldsbankcount32,
.nsa_encoding,
.nsa_max_size_13,
.shader_cycles_register,
.wavefrontsize32, .wavefrontsize32,
}), }),
}; };
@ -1171,9 +1369,12 @@ pub const cpu = struct {
.name = "gfx900", .name = "gfx900",
.llvm_name = "gfx900", .llvm_name = "gfx900",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.ds_src2_insts,
.extended_image_insts,
.gfx9, .gfx9,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.mad_mix_insts, .mad_mix_insts,
}), }),
}; };
@ -1181,9 +1382,12 @@ pub const cpu = struct {
.name = "gfx902", .name = "gfx902",
.llvm_name = "gfx902", .llvm_name = "gfx902",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.ds_src2_insts,
.extended_image_insts,
.gfx9, .gfx9,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.mad_mix_insts, .mad_mix_insts,
}), }),
}; };
@ -1191,10 +1395,13 @@ pub const cpu = struct {
.name = "gfx904", .name = "gfx904",
.llvm_name = "gfx904", .llvm_name = "gfx904",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.ds_src2_insts,
.extended_image_insts,
.fma_mix_insts, .fma_mix_insts,
.gfx9, .gfx9,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
}), }),
}; };
pub const gfx906 = CpuModel{ pub const gfx906 = CpuModel{
@ -1204,11 +1411,15 @@ pub const cpu = struct {
.dl_insts, .dl_insts,
.dot1_insts, .dot1_insts,
.dot2_insts, .dot2_insts,
.dot7_insts,
.ds_src2_insts,
.extended_image_insts,
.fma_mix_insts, .fma_mix_insts,
.gfx9, .gfx9,
.half_rate_64_ops, .half_rate_64_ops,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.sramecc_support, .sramecc_support,
}), }),
}; };
@ -1224,11 +1435,15 @@ pub const cpu = struct {
.dot4_insts, .dot4_insts,
.dot5_insts, .dot5_insts,
.dot6_insts, .dot6_insts,
.dot7_insts,
.ds_src2_insts,
.extended_image_insts,
.fma_mix_insts, .fma_mix_insts,
.gfx9, .gfx9,
.half_rate_64_ops, .half_rate_64_ops,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.mai_insts, .mai_insts,
.mfma_inline_literal_bug, .mfma_inline_literal_bug,
.pk_fmac_f16_inst, .pk_fmac_f16_inst,
@ -1239,21 +1454,53 @@ pub const cpu = struct {
.name = "gfx909", .name = "gfx909",
.llvm_name = "gfx909", .llvm_name = "gfx909",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.ds_src2_insts,
.extended_image_insts,
.gfx9, .gfx9,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.mad_mix_insts, .mad_mix_insts,
}), }),
}; };
pub const gfx90a = CpuModel{
.name = "gfx90a",
.llvm_name = "gfx90a",
.features = featureSet(&[_]Feature{
.atomic_fadd_insts,
.dl_insts,
.dot1_insts,
.dot2_insts,
.dot3_insts,
.dot4_insts,
.dot5_insts,
.dot6_insts,
.dot7_insts,
.dpp_64bit,
.fma_mix_insts,
.full_rate_64_ops,
.gfx9,
.gfx90a_insts,
.ldsbankcount32,
.mad_mac_f32_insts,
.mai_insts,
.packed_fp32_ops,
.packed_tid,
.pk_fmac_f16_inst,
.sramecc_support,
}),
};
pub const gfx90c = CpuModel{ pub const gfx90c = CpuModel{
.name = "gfx90c", .name = "gfx90c",
.llvm_name = "gfx90c", .llvm_name = "gfx90c",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.ds_src2_insts,
.extended_image_insts,
.gfx9, .gfx9,
.image_gather4_d16_bug, .image_gather4_d16_bug,
.ldsbankcount32, .ldsbankcount32,
.mad_mac_f32_insts,
.mad_mix_insts, .mad_mix_insts,
.xnack,
}), }),
}; };
pub const hainan = CpuModel{ pub const hainan = CpuModel{

39
lib/std/target/arc.zig Normal file
View file

@ -0,0 +1,39 @@
//! 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;
pub const Feature = enum {
norm,
};
pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet;
pub const featureSetHas = CpuFeature.feature_set_fns(Feature).featureSetHas;
pub const featureSetHasAny = CpuFeature.feature_set_fns(Feature).featureSetHasAny;
pub const featureSetHasAll = CpuFeature.feature_set_fns(Feature).featureSetHasAll;
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
var result: [len]CpuFeature = undefined;
result[@enumToInt(Feature.norm)] = .{
.llvm_name = "norm",
.description = "Enable support for norm instruction.",
.dependencies = featureSet(&[_]Feature{}),
};
const ti = @typeInfo(Feature);
for (result) |*elem, i| {
elem.index = i;
elem.name = ti.Enum.fields[i].name;
}
break :blk result;
};
pub const cpu = struct {
pub const generic = CpuModel{
.name = "generic",
.llvm_name = "generic",
.features = featureSet(&[_]Feature{}),
};
};

View file

@ -51,6 +51,7 @@ pub const Feature = enum {
fuse_aes, fuse_aes,
fuse_literals, fuse_literals,
harden_sls_blr, harden_sls_blr,
harden_sls_nocomdat,
harden_sls_retbr, harden_sls_retbr,
has_v4t, has_v4t,
has_v5t, has_v5t,
@ -487,6 +488,11 @@ pub const all_features = blk: {
.description = "Harden against straight line speculation across indirect calls", .description = "Harden against straight line speculation across indirect calls",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.harden_sls_nocomdat)] = .{
.llvm_name = "harden-sls-nocomdat",
.description = "Generate thunk code for SLS mitigation in the normal text section",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.harden_sls_retbr)] = .{ result[@enumToInt(Feature.harden_sls_retbr)] = .{
.llvm_name = "harden-sls-retbr", .llvm_name = "harden-sls-retbr",
.description = "Harden against straight line speculation across RETurn and BranchRegister instructions", .description = "Harden against straight line speculation across RETurn and BranchRegister instructions",
@ -1245,7 +1251,7 @@ pub const all_features = blk: {
}; };
result[@enumToInt(Feature.v8_7a)] = .{ result[@enumToInt(Feature.v8_7a)] = .{
.llvm_name = "armv8.7-a", .llvm_name = "armv8.7-a",
.description = "ARMv86a architecture", .description = "ARMv87a architecture",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.aclass, .aclass,
.crc, .crc,
@ -1517,13 +1523,6 @@ pub const cpu = struct {
.vfp2, .vfp2,
}), }),
}; };
pub const arm1176j_s = CpuModel{
.name = "arm1176j_s",
.llvm_name = "arm1176j-s",
.features = featureSet(&[_]Feature{
.v6kz,
}),
};
pub const arm1176jz_s = CpuModel{ pub const arm1176jz_s = CpuModel{
.name = "arm1176jz_s", .name = "arm1176jz_s",
.llvm_name = "arm1176jz-s", .llvm_name = "arm1176jz-s",
@ -1889,6 +1888,7 @@ pub const cpu = struct {
.name = "cortex_m0", .name = "cortex_m0",
.llvm_name = "cortex-m0", .llvm_name = "cortex-m0",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.no_branch_predictor,
.v6m, .v6m,
}), }),
}; };
@ -1896,6 +1896,7 @@ pub const cpu = struct {
.name = "cortex_m0plus", .name = "cortex_m0plus",
.llvm_name = "cortex-m0plus", .llvm_name = "cortex-m0plus",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.no_branch_predictor,
.v6m, .v6m,
}), }),
}; };
@ -1903,6 +1904,7 @@ pub const cpu = struct {
.name = "cortex_m1", .name = "cortex_m1",
.llvm_name = "cortex-m1", .llvm_name = "cortex-m1",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.no_branch_predictor,
.v6m, .v6m,
}), }),
}; };
@ -1910,6 +1912,7 @@ pub const cpu = struct {
.name = "cortex_m23", .name = "cortex_m23",
.llvm_name = "cortex-m23", .llvm_name = "cortex-m23",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.no_branch_predictor,
.no_movt, .no_movt,
.v8m, .v8m,
}), }),
@ -2225,6 +2228,7 @@ pub const cpu = struct {
.name = "sc000", .name = "sc000",
.llvm_name = "sc000", .llvm_name = "sc000",
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.no_branch_predictor,
.v6m, .v6m,
}), }),
}; };

View file

@ -16,6 +16,7 @@ pub const Feature = enum {
hvxv65, hvxv65,
hvxv66, hvxv66,
hvxv67, hvxv67,
hvxv68,
long_calls, long_calls,
mem_noshuf, mem_noshuf,
memops, memops,
@ -35,6 +36,7 @@ pub const Feature = enum {
v65, v65,
v66, v66,
v67, v67,
v68,
zreg, zreg,
}; };
@ -117,6 +119,13 @@ pub const all_features = blk: {
.hvxv66, .hvxv66,
}), }),
}; };
result[@enumToInt(Feature.hvxv68)] = .{
.llvm_name = "hvxv68",
.description = "Hexagon HVX instructions",
.dependencies = featureSet(&[_]Feature{
.hvxv67,
}),
};
result[@enumToInt(Feature.long_calls)] = .{ result[@enumToInt(Feature.long_calls)] = .{
.llvm_name = "long-calls", .llvm_name = "long-calls",
.description = "Use constant-extended calls", .description = "Use constant-extended calls",
@ -216,6 +225,11 @@ pub const all_features = blk: {
.description = "Enable Hexagon V67 architecture", .description = "Enable Hexagon V67 architecture",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.v68)] = .{
.llvm_name = "v68",
.description = "Enable Hexagon V68 architecture",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.zreg)] = .{ result[@enumToInt(Feature.zreg)] = .{
.llvm_name = "zreg", .llvm_name = "zreg",
.description = "Hexagon ZReg extension instructions", .description = "Hexagon ZReg extension instructions",
@ -385,4 +399,25 @@ pub const cpu = struct {
.v67, .v67,
}), }),
}; };
pub const hexagonv68 = CpuModel{
.name = "hexagonv68",
.llvm_name = "hexagonv68",
.features = featureSet(&[_]Feature{
.compound,
.duplex,
.mem_noshuf,
.memops,
.nvj,
.nvs,
.small_data,
.v5,
.v55,
.v60,
.v62,
.v65,
.v66,
.v67,
.v68,
}),
};
}; };

View file

@ -17,6 +17,8 @@ pub const Feature = enum {
ptx64, ptx64,
ptx65, ptx65,
ptx70, ptx70,
ptx71,
ptx72,
sm_20, sm_20,
sm_21, sm_21,
sm_30, sm_30,
@ -33,6 +35,7 @@ pub const Feature = enum {
sm_72, sm_72,
sm_75, sm_75,
sm_80, sm_80,
sm_86,
}; };
pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet; pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet;
@ -104,6 +107,16 @@ pub const all_features = blk: {
.description = "Use PTX version 7.0", .description = "Use PTX version 7.0",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.ptx71)] = .{
.llvm_name = "ptx71",
.description = "Use PTX version 7.1",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.ptx72)] = .{
.llvm_name = "ptx72",
.description = "Use PTX version 7.2",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.sm_20)] = .{ result[@enumToInt(Feature.sm_20)] = .{
.llvm_name = "sm_20", .llvm_name = "sm_20",
.description = "Target SM 2.0", .description = "Target SM 2.0",
@ -184,6 +197,11 @@ pub const all_features = blk: {
.description = "Target SM 8.0", .description = "Target SM 8.0",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.sm_86)] = .{
.llvm_name = "sm_86",
.description = "Target SM 8.6",
.dependencies = featureSet(&[_]Feature{}),
};
const ti = @typeInfo(Feature); const ti = @typeInfo(Feature);
for (result) |*elem, i| { for (result) |*elem, i| {
elem.index = i; elem.index = i;
@ -317,4 +335,12 @@ pub const cpu = struct {
.sm_80, .sm_80,
}), }),
}; };
pub const sm_86 = CpuModel{
.name = "sm_86",
.llvm_name = "sm_86",
.features = featureSet(&[_]Feature{
.ptx71,
.sm_86,
}),
};
}; };

View file

@ -37,6 +37,7 @@ pub const Feature = enum {
htm, htm,
icbt, icbt,
invariant_function_descriptors, invariant_function_descriptors,
isa_v207_instructions,
isa_v30_instructions, isa_v30_instructions,
isa_v31_instructions, isa_v31_instructions,
isel, isel,
@ -62,7 +63,10 @@ pub const Feature = enum {
ppc_prera_sched, ppc_prera_sched,
predictable_select_expensive, predictable_select_expensive,
prefix_instrs, prefix_instrs,
privileged,
quadword_atomics,
recipprec, recipprec,
rop_protect,
secure_plt, secure_plt,
slow_popcntd, slow_popcntd,
spe, spe,
@ -277,10 +281,17 @@ pub const all_features = blk: {
.description = "Assume function descriptors are invariant", .description = "Assume function descriptors are invariant",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.isa_v207_instructions)] = .{
.llvm_name = "isa-v207-instructions",
.description = "Enable instructions in ISA 2.07.",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.isa_v30_instructions)] = .{ result[@enumToInt(Feature.isa_v30_instructions)] = .{
.llvm_name = "isa-v30-instructions", .llvm_name = "isa-v30-instructions",
.description = "Enable instructions in ISA 3.0.", .description = "Enable instructions in ISA 3.0.",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{
.isa_v207_instructions,
}),
}; };
result[@enumToInt(Feature.isa_v31_instructions)] = .{ result[@enumToInt(Feature.isa_v31_instructions)] = .{
.llvm_name = "isa-v31-instructions", .llvm_name = "isa-v31-instructions",
@ -433,11 +444,26 @@ pub const all_features = blk: {
.power9_altivec, .power9_altivec,
}), }),
}; };
result[@enumToInt(Feature.privileged)] = .{
.llvm_name = "privileged",
.description = "Add privileged instructions",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.quadword_atomics)] = .{
.llvm_name = "quadword-atomics",
.description = "Enable lqarx and stqcx.",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.recipprec)] = .{ result[@enumToInt(Feature.recipprec)] = .{
.llvm_name = "recipprec", .llvm_name = "recipprec",
.description = "Assume higher precision reciprocal estimates", .description = "Assume higher precision reciprocal estimates",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.rop_protect)] = .{
.llvm_name = "rop-protect",
.description = "Add ROP protect",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.secure_plt)] = .{ result[@enumToInt(Feature.secure_plt)] = .{
.llvm_name = "secure-plt", .llvm_name = "secure-plt",
.description = "Enable secure plt mode", .description = "Enable secure plt mode",
@ -696,6 +722,7 @@ pub const cpu = struct {
.ppc_postra_sched, .ppc_postra_sched,
.ppc_prera_sched, .ppc_prera_sched,
.predictable_select_expensive, .predictable_select_expensive,
.quadword_atomics,
.recipprec, .recipprec,
.stfiwx, .stfiwx,
.two_const_nr, .two_const_nr,
@ -790,6 +817,7 @@ pub const cpu = struct {
.fuse_addis_load, .fuse_addis_load,
.htm, .htm,
.icbt, .icbt,
.isa_v207_instructions,
.isel, .isel,
.ldbrx, .ldbrx,
.lfiwax, .lfiwax,
@ -798,6 +826,7 @@ pub const cpu = struct {
.popcntd, .popcntd,
.power8_vector, .power8_vector,
.predictable_select_expensive, .predictable_select_expensive,
.quadword_atomics,
.recipprec, .recipprec,
.stfiwx, .stfiwx,
.two_const_nr, .two_const_nr,
@ -837,6 +866,7 @@ pub const cpu = struct {
.ppc_postra_sched, .ppc_postra_sched,
.ppc_prera_sched, .ppc_prera_sched,
.predictable_select_expensive, .predictable_select_expensive,
.quadword_atomics,
.recipprec, .recipprec,
.stfiwx, .stfiwx,
.two_const_nr, .two_const_nr,
@ -989,6 +1019,7 @@ pub const cpu = struct {
.fuse_addis_load, .fuse_addis_load,
.htm, .htm,
.icbt, .icbt,
.isa_v207_instructions,
.isel, .isel,
.ldbrx, .ldbrx,
.lfiwax, .lfiwax,
@ -997,6 +1028,7 @@ pub const cpu = struct {
.popcntd, .popcntd,
.power8_vector, .power8_vector,
.predictable_select_expensive, .predictable_select_expensive,
.quadword_atomics,
.recipprec, .recipprec,
.stfiwx, .stfiwx,
.two_const_nr, .two_const_nr,
@ -1033,6 +1065,7 @@ pub const cpu = struct {
.ppc_postra_sched, .ppc_postra_sched,
.ppc_prera_sched, .ppc_prera_sched,
.predictable_select_expensive, .predictable_select_expensive,
.quadword_atomics,
.recipprec, .recipprec,
.stfiwx, .stfiwx,
.two_const_nr, .two_const_nr,

View file

@ -185,7 +185,7 @@ pub const all_features = blk: {
}; };
result[@enumToInt(Feature.experimental_zvamo)] = .{ result[@enumToInt(Feature.experimental_zvamo)] = .{
.llvm_name = "experimental-zvamo", .llvm_name = "experimental-zvamo",
.description = "'Zvamo'(Vector AMO Operations)", .description = "'Zvamo' (Vector AMO Operations)",
.dependencies = featureSet(&[_]Feature{ .dependencies = featureSet(&[_]Feature{
.experimental_v, .experimental_v,
}), }),

View file

@ -5,6 +5,7 @@ const CpuFeature = std.Target.Cpu.Feature;
const CpuModel = std.Target.Cpu.Model; const CpuModel = std.Target.Cpu.Model;
pub const Feature = enum { pub const Feature = enum {
bear_enhancement,
deflate_conversion, deflate_conversion,
dfp_packed_conversion, dfp_packed_conversion,
dfp_zoned_conversion, dfp_zoned_conversion,
@ -31,8 +32,11 @@ pub const Feature = enum {
miscellaneous_extensions, miscellaneous_extensions,
miscellaneous_extensions_2, miscellaneous_extensions_2,
miscellaneous_extensions_3, miscellaneous_extensions_3,
nnp_assist,
population_count, population_count,
processor_activity_instrumentation,
processor_assist, processor_assist,
reset_dat_protection,
reset_reference_bits_multiple, reset_reference_bits_multiple,
soft_float, soft_float,
transactional_execution, transactional_execution,
@ -41,6 +45,7 @@ pub const Feature = enum {
vector_enhancements_2, vector_enhancements_2,
vector_packed_decimal, vector_packed_decimal,
vector_packed_decimal_enhancement, vector_packed_decimal_enhancement,
vector_packed_decimal_enhancement_2,
}; };
pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet; pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet;
@ -52,6 +57,11 @@ pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len; const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= CpuFeature.Set.needed_bit_count); std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
var result: [len]CpuFeature = undefined; var result: [len]CpuFeature = undefined;
result[@enumToInt(Feature.bear_enhancement)] = .{
.llvm_name = "bear-enhancement",
.description = "Assume that the BEAR-enhancement facility is installed",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.deflate_conversion)] = .{ result[@enumToInt(Feature.deflate_conversion)] = .{
.llvm_name = "deflate-conversion", .llvm_name = "deflate-conversion",
.description = "Assume that the deflate-conversion facility is installed", .description = "Assume that the deflate-conversion facility is installed",
@ -182,16 +192,31 @@ pub const all_features = blk: {
.description = "Assume that the miscellaneous-extensions facility 3 is installed", .description = "Assume that the miscellaneous-extensions facility 3 is installed",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.nnp_assist)] = .{
.llvm_name = "nnp-assist",
.description = "Assume that the NNP-assist facility is installed",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.population_count)] = .{ result[@enumToInt(Feature.population_count)] = .{
.llvm_name = "population-count", .llvm_name = "population-count",
.description = "Assume that the population-count facility is installed", .description = "Assume that the population-count facility is installed",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.processor_activity_instrumentation)] = .{
.llvm_name = "processor-activity-instrumentation",
.description = "Assume that the processor-activity-instrumentation facility is installed",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.processor_assist)] = .{ result[@enumToInt(Feature.processor_assist)] = .{
.llvm_name = "processor-assist", .llvm_name = "processor-assist",
.description = "Assume that the processor-assist facility is installed", .description = "Assume that the processor-assist facility is installed",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.reset_dat_protection)] = .{
.llvm_name = "reset-dat-protection",
.description = "Assume that the reset-DAT-protection facility is installed",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{ result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
.llvm_name = "reset-reference-bits-multiple", .llvm_name = "reset-reference-bits-multiple",
.description = "Assume that the reset-reference-bits-multiple facility is installed", .description = "Assume that the reset-reference-bits-multiple facility is installed",
@ -232,6 +257,11 @@ pub const all_features = blk: {
.description = "Assume that the vector packed decimal enhancement facility is installed", .description = "Assume that the vector packed decimal enhancement facility is installed",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.vector_packed_decimal_enhancement_2)] = .{
.llvm_name = "vector-packed-decimal-enhancement-2",
.description = "Assume that the vector packed decimal enhancement facility 2 is installed",
.dependencies = featureSet(&[_]Feature{}),
};
const ti = @typeInfo(Feature); const ti = @typeInfo(Feature);
for (result) |*elem, i| { for (result) |*elem, i| {
elem.index = i; elem.index = i;
@ -368,6 +398,52 @@ pub const cpu = struct {
.vector_packed_decimal_enhancement, .vector_packed_decimal_enhancement,
}), }),
}; };
pub const arch14 = CpuModel{
.name = "arch14",
.llvm_name = "arch14",
.features = featureSet(&[_]Feature{
.bear_enhancement,
.deflate_conversion,
.dfp_packed_conversion,
.dfp_zoned_conversion,
.distinct_ops,
.enhanced_dat_2,
.enhanced_sort,
.execution_hint,
.fast_serialization,
.fp_extension,
.guarded_storage,
.high_word,
.insert_reference_bits_multiple,
.interlocked_access1,
.load_and_trap,
.load_and_zero_rightmost_byte,
.load_store_on_cond,
.load_store_on_cond_2,
.message_security_assist_extension3,
.message_security_assist_extension4,
.message_security_assist_extension5,
.message_security_assist_extension7,
.message_security_assist_extension8,
.message_security_assist_extension9,
.miscellaneous_extensions,
.miscellaneous_extensions_2,
.miscellaneous_extensions_3,
.nnp_assist,
.population_count,
.processor_activity_instrumentation,
.processor_assist,
.reset_dat_protection,
.reset_reference_bits_multiple,
.transactional_execution,
.vector,
.vector_enhancements_1,
.vector_enhancements_2,
.vector_packed_decimal,
.vector_packed_decimal_enhancement,
.vector_packed_decimal_enhancement_2,
}),
};
pub const arch8 = CpuModel{ pub const arch8 = CpuModel{
.name = "arch8", .name = "arch8",
.llvm_name = "arch8", .llvm_name = "arch8",

View file

@ -15,7 +15,6 @@ pub const Feature = enum {
sign_ext, sign_ext,
simd128, simd128,
tail_call, tail_call,
unimplemented_simd128,
}; };
pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet; pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet;
@ -77,13 +76,6 @@ pub const all_features = blk: {
.description = "Enable tail call instructions", .description = "Enable tail call instructions",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.unimplemented_simd128)] = .{
.llvm_name = "unimplemented-simd128",
.description = "Enable 128-bit SIMD not yet implemented in engines",
.dependencies = featureSet(&[_]Feature{
.simd128,
}),
};
const ti = @typeInfo(Feature); const ti = @typeInfo(Feature);
for (result) |*elem, i| { for (result) |*elem, i| {
elem.index = i; elem.index = i;

View file

@ -55,10 +55,12 @@ pub const Feature = enum {
fast_gather, fast_gather,
fast_hops, fast_hops,
fast_lzcnt, fast_lzcnt,
fast_movbe,
fast_scalar_fsqrt, fast_scalar_fsqrt,
fast_scalar_shift_masks, fast_scalar_shift_masks,
fast_shld_rotate, fast_shld_rotate,
fast_variable_shuffle, fast_variable_crosslane_shuffle,
fast_variable_perlane_shuffle,
fast_vector_fsqrt, fast_vector_fsqrt,
fast_vector_shift_masks, fast_vector_shift_masks,
fma, fma,
@ -458,6 +460,11 @@ pub const all_features = blk: {
.description = "LZCNT instructions are as fast as most simple integer ops", .description = "LZCNT instructions are as fast as most simple integer ops",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.fast_movbe)] = .{
.llvm_name = "fast-movbe",
.description = "Prefer a movbe over a single-use load + bswap / single-use bswap + store",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{ result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
.llvm_name = "fast-scalar-fsqrt", .llvm_name = "fast-scalar-fsqrt",
.description = "Scalar SQRT is fast (disable Newton-Raphson)", .description = "Scalar SQRT is fast (disable Newton-Raphson)",
@ -473,9 +480,14 @@ pub const all_features = blk: {
.description = "SHLD can be used as a faster rotate", .description = "SHLD can be used as a faster rotate",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.fast_variable_shuffle)] = .{ result[@enumToInt(Feature.fast_variable_crosslane_shuffle)] = .{
.llvm_name = "fast-variable-shuffle", .llvm_name = "fast-variable-crosslane-shuffle",
.description = "Shuffles with variable masks are fast", .description = "Cross-lane shuffles with variable masks are fast",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.fast_variable_perlane_shuffle)] = .{
.llvm_name = "fast-variable-perlane-shuffle",
.description = "Per-lane shuffles with variable masks are fast",
.dependencies = featureSet(&[_]Feature{}), .dependencies = featureSet(&[_]Feature{}),
}; };
result[@enumToInt(Feature.fast_vector_fsqrt)] = .{ result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
@ -1010,26 +1022,27 @@ pub const cpu = struct {
.features = featureSet(&[_]Feature{ .features = featureSet(&[_]Feature{
.@"64bit", .@"64bit",
.adx, .adx,
.aes,
.avxvnni, .avxvnni,
.bmi, .bmi,
.bmi2, .bmi2,
.cldemote, .cldemote,
.clflushopt, .clflushopt,
.clwb,
.cmov, .cmov,
.cx16, .cx16,
.ermsb,
.f16c, .f16c,
.false_deps_popcnt, .false_deps_popcnt,
.fast_15bytenop, .fast_15bytenop,
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fma, .fma,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.gfni,
.hreset, .hreset,
.idivq_to_divl, .idivq_to_divl,
.invpcid, .invpcid,
@ -1037,19 +1050,27 @@ pub const cpu = struct {
.macrofusion, .macrofusion,
.mmx, .mmx,
.movbe, .movbe,
.movdir64b,
.movdiri,
.nopl, .nopl,
.pclmul, .pconfig,
.pku,
.popcnt, .popcnt,
.prfchw, .prfchw,
.ptwrite, .ptwrite,
.rdpid,
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.serialize, .serialize,
.sgx, .sha,
.shstk,
.slow_3ops_lea, .slow_3ops_lea,
.vaes,
.vpclmulqdq,
.vzeroupper, .vzeroupper,
.waitpkg, .waitpkg,
.widekl,
.x87, .x87,
.xsavec, .xsavec,
.xsaveopt, .xsaveopt,
@ -1292,6 +1313,7 @@ pub const cpu = struct {
.f16c, .f16c,
.fast_11bytenop, .fast_11bytenop,
.fast_bextr, .fast_bextr,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fma, .fma,
.fxsr, .fxsr,
@ -1324,6 +1346,7 @@ pub const cpu = struct {
.f16c, .f16c,
.fast_11bytenop, .fast_11bytenop,
.fast_bextr, .fast_bextr,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fma, .fma,
.fsgsbase, .fsgsbase,
@ -1359,6 +1382,7 @@ pub const cpu = struct {
.f16c, .f16c,
.fast_11bytenop, .fast_11bytenop,
.fast_bextr, .fast_bextr,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fma, .fma,
.fsgsbase, .fsgsbase,
@ -1424,7 +1448,8 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fma, .fma,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1485,6 +1510,7 @@ pub const cpu = struct {
.fast_bextr, .fast_bextr,
.fast_hops, .fast_hops,
.fast_lzcnt, .fast_lzcnt,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fast_vector_shift_masks, .fast_vector_shift_masks,
.fxsr, .fxsr,
@ -1548,7 +1574,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1567,7 +1594,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.slow_3ops_lea, .slow_3ops_lea,
.vzeroupper, .vzeroupper,
@ -1601,7 +1627,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1652,7 +1679,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1714,7 +1742,8 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fma, .fma,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1844,6 +1873,7 @@ pub const cpu = struct {
.cmov, .cmov,
.cx16, .cx16,
.false_deps_popcnt, .false_deps_popcnt,
.fast_movbe,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.mmx, .mmx,
@ -1877,6 +1907,7 @@ pub const cpu = struct {
.clflushopt, .clflushopt,
.cmov, .cmov,
.cx16, .cx16,
.fast_movbe,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.mmx, .mmx,
@ -1890,7 +1921,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.slow_incdec, .slow_incdec,
.slow_lea, .slow_lea,
@ -1921,7 +1951,8 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fma, .fma,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -1960,7 +1991,6 @@ pub const cpu = struct {
.bmi, .bmi,
.bmi2, .bmi2,
.clflushopt, .clflushopt,
.clwb,
.cmov, .cmov,
.cx16, .cx16,
.ermsb, .ermsb,
@ -1968,7 +1998,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fsrm, .fsrm,
@ -1989,7 +2020,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.slow_3ops_lea, .slow_3ops_lea,
.vaes, .vaes,
@ -2027,7 +2057,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fsrm, .fsrm,
@ -2049,7 +2080,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.slow_3ops_lea, .slow_3ops_lea,
.vaes, .vaes,
@ -2175,6 +2205,7 @@ pub const cpu = struct {
.cmov, .cmov,
.cx16, .cx16,
.fast_gather, .fast_gather,
.fast_movbe,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
@ -2214,6 +2245,7 @@ pub const cpu = struct {
.cmov, .cmov,
.cx16, .cx16,
.fast_gather, .fast_gather,
.fast_movbe,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
@ -2472,6 +2504,64 @@ pub const cpu = struct {
.x87, .x87,
}), }),
}; };
pub const rocketlake = CpuModel{
.name = "rocketlake",
.llvm_name = "rocketlake",
.features = featureSet(&[_]Feature{
.@"64bit",
.adx,
.avx512bitalg,
.avx512cd,
.avx512dq,
.avx512ifma,
.avx512vbmi,
.avx512vbmi2,
.avx512vl,
.avx512vnni,
.avx512vpopcntdq,
.bmi,
.bmi2,
.clflushopt,
.cmov,
.cx16,
.ermsb,
.fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt,
.fsgsbase,
.fsrm,
.fxsr,
.gfni,
.idivq_to_divl,
.invpcid,
.lzcnt,
.macrofusion,
.mmx,
.movbe,
.nopl,
.pku,
.popcnt,
.prefer_256_bit,
.prfchw,
.rdpid,
.rdrnd,
.rdseed,
.sahf,
.sha,
.slow_3ops_lea,
.vaes,
.vpclmulqdq,
.vzeroupper,
.x87,
.xsavec,
.xsaveopt,
.xsaves,
}),
};
pub const sandybridge = CpuModel{ pub const sandybridge = CpuModel{
.name = "sandybridge", .name = "sandybridge",
.llvm_name = "sandybridge", .llvm_name = "sandybridge",
@ -2532,7 +2622,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fsrm, .fsrm,
@ -2558,7 +2649,6 @@ pub const cpu = struct {
.rdseed, .rdseed,
.sahf, .sahf,
.serialize, .serialize,
.sgx,
.sha, .sha,
.shstk, .shstk,
.slow_3ops_lea, .slow_3ops_lea,
@ -2584,6 +2674,7 @@ pub const cpu = struct {
.cx16, .cx16,
.false_deps_popcnt, .false_deps_popcnt,
.fast_7bytenop, .fast_7bytenop,
.fast_movbe,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
.mmx, .mmx,
@ -2626,7 +2717,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -2673,7 +2765,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fma, .fma,
.fsgsbase, .fsgsbase,
@ -2691,7 +2784,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.slow_3ops_lea, .slow_3ops_lea,
.vzeroupper, .vzeroupper,
.x87, .x87,
@ -2723,7 +2815,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
@ -2759,6 +2852,7 @@ pub const cpu = struct {
.cx16, .cx16,
.false_deps_popcnt, .false_deps_popcnt,
.fast_7bytenop, .fast_7bytenop,
.fast_movbe,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
.mmx, .mmx,
@ -2805,7 +2899,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fsgsbase, .fsgsbase,
.fsrm, .fsrm,
@ -2828,7 +2923,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.shstk, .shstk,
.slow_3ops_lea, .slow_3ops_lea,
@ -2851,6 +2945,7 @@ pub const cpu = struct {
.clwb, .clwb,
.cmov, .cmov,
.cx16, .cx16,
.fast_movbe,
.fsgsbase, .fsgsbase,
.fxsr, .fxsr,
.gfni, .gfni,
@ -2865,7 +2960,6 @@ pub const cpu = struct {
.rdrnd, .rdrnd,
.rdseed, .rdseed,
.sahf, .sahf,
.sgx,
.sha, .sha,
.slow_incdec, .slow_incdec,
.slow_lea, .slow_lea,
@ -2978,7 +3072,8 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fma, .fma,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
@ -3013,7 +3108,8 @@ pub const cpu = struct {
.fast_gather, .fast_gather,
.fast_scalar_fsqrt, .fast_scalar_fsqrt,
.fast_shld_rotate, .fast_shld_rotate,
.fast_variable_shuffle, .fast_variable_crosslane_shuffle,
.fast_variable_perlane_shuffle,
.fast_vector_fsqrt, .fast_vector_fsqrt,
.fxsr, .fxsr,
.idivq_to_divl, .idivq_to_divl,
@ -3065,6 +3161,7 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_bextr, .fast_bextr,
.fast_lzcnt, .fast_lzcnt,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fma, .fma,
.fsgsbase, .fsgsbase,
@ -3110,6 +3207,7 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_bextr, .fast_bextr,
.fast_lzcnt, .fast_lzcnt,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fma, .fma,
.fsgsbase, .fsgsbase,
@ -3156,13 +3254,16 @@ pub const cpu = struct {
.fast_15bytenop, .fast_15bytenop,
.fast_bextr, .fast_bextr,
.fast_lzcnt, .fast_lzcnt,
.fast_movbe,
.fast_scalar_shift_masks, .fast_scalar_shift_masks,
.fast_variable_perlane_shuffle,
.fma, .fma,
.fsgsbase, .fsgsbase,
.fsrm, .fsrm,
.fxsr, .fxsr,
.invpcid, .invpcid,
.lzcnt, .lzcnt,
.macrofusion,
.mmx, .mmx,
.movbe, .movbe,
.mwaitx, .mwaitx,

View file

@ -219,7 +219,6 @@ const llvm_targets = [_]LlvmTarget{
"use_postra_scheduler", "use_postra_scheduler",
"use_reciprocal_square_root", "use_reciprocal_square_root",
"v8a", "v8a",
"zcz_fp",
}, },
}, },
.{ .{
@ -236,7 +235,6 @@ const llvm_targets = [_]LlvmTarget{
"slow_paired_128", "slow_paired_128",
"use_postra_scheduler", "use_postra_scheduler",
"v8a", "v8a",
"zcz_fp",
}, },
}, },
.{ .{