Commit 316b4bde6a
Changed files (13)
lib/std/target/aarch64.zig
@@ -3,6 +3,7 @@ const CpuFeature = std.Target.Cpu.Feature;
const CpuModel = std.Target.Cpu.Model;
pub const Feature = enum {
+ a34,
a65,
a76,
aes,
@@ -10,6 +11,7 @@ pub const Feature = enum {
alternate_sextload_cvt_f32_pattern,
altnzcv,
am,
+ amvs,
apple_a10,
apple_a11,
apple_a12,
@@ -18,6 +20,7 @@ pub const Feature = enum {
arith_bcc_fusion,
arith_cbz_fusion,
balance_fp_ops,
+ bf16,
bti,
call_saved_x10,
call_saved_x11,
@@ -38,9 +41,13 @@ pub const Feature = enum {
disable_latency_sched_heuristic,
dit,
dotprod,
+ ecv,
ete,
exynos_cheap_as_move,
exynosm4,
+ f32mm,
+ f64mm,
+ fgt,
fmi,
force_32bit_jump_tables,
fp_armv8,
@@ -53,6 +60,9 @@ pub const Feature = enum {
fuse_crypto_eor,
fuse_csel,
fuse_literals,
+ harden_sls_blr,
+ harden_sls_retbr,
+ i8mm,
jsconv,
lor,
lse,
@@ -96,6 +106,7 @@ pub const Feature = enum {
reserve_x27,
reserve_x28,
reserve_x3,
+ reserve_x30,
reserve_x4,
reserve_x5,
reserve_x6,
@@ -129,6 +140,7 @@ pub const Feature = enum {
trbe,
uaops,
use_aa,
+ use_experimental_zeroing_pseudos,
use_postra_scheduler,
use_reciprocal_square_root,
v8a,
@@ -137,6 +149,7 @@ pub const Feature = enum {
v8_3a,
v8_4a,
v8_5a,
+ v8_6a,
vh,
zcm,
zcz,
@@ -152,6 +165,16 @@ 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.a34)] = .{
+ .llvm_name = "a35",
+ .description = "Cortex-A34 ARM processors",
+ .dependencies = featureSet(&[_]Feature{
+ .crc,
+ .crypto,
+ .perfmon,
+ .v8a,
+ }),
+ };
result[@enumToInt(Feature.a65)] = .{
.llvm_name = "a65",
.description = "Cortex-A65 ARM processors",
@@ -206,6 +229,13 @@ pub const all_features = blk: {
.description = "Enable v8.4-A Activity Monitors extension",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.amvs)] = .{
+ .llvm_name = "amvs",
+ .description = "Enable v8.6-A Activity Monitors Virtualization support",
+ .dependencies = featureSet(&[_]Feature{
+ .am,
+ }),
+ };
result[@enumToInt(Feature.apple_a10)] = .{
.llvm_name = "apple-a10",
.description = "Apple A10",
@@ -325,6 +355,11 @@ pub const all_features = blk: {
.description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.bf16)] = .{
+ .llvm_name = "bf16",
+ .description = "Enable BFloat16 Extension",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.bti)] = .{
.llvm_name = "bti",
.description = "Enable Branch Target Identification",
@@ -431,6 +466,11 @@ pub const all_features = blk: {
.description = "Enable dot product support",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.ecv)] = .{
+ .llvm_name = "ecv",
+ .description = "Enable enhanced counter virtualization extension",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.ete)] = .{
.llvm_name = "ete",
.description = "Enable Embedded Trace Extension",
@@ -468,6 +508,25 @@ pub const all_features = blk: {
.zcz,
}),
};
+ result[@enumToInt(Feature.f32mm)] = .{
+ .llvm_name = "f32mm",
+ .description = "Enable Matrix Multiply FP32 Extension",
+ .dependencies = featureSet(&[_]Feature{
+ .sve,
+ }),
+ };
+ result[@enumToInt(Feature.f64mm)] = .{
+ .llvm_name = "f64mm",
+ .description = "Enable Matrix Multiply FP64 Extension",
+ .dependencies = featureSet(&[_]Feature{
+ .sve,
+ }),
+ };
+ result[@enumToInt(Feature.fgt)] = .{
+ .llvm_name = "fgt",
+ .description = "Enable fine grained virtualization traps extension",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.fmi)] = .{
.llvm_name = "fmi",
.description = "Enable v8.4-A Flag Manipulation Instructions",
@@ -532,9 +591,24 @@ 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 BLR instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.harden_sls_retbr)] = .{
+ .llvm_name = "harden-sls-retbr",
+ .description = "Harden against straight line speculation across RET and BR instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.i8mm)] = .{
+ .llvm_name = "i8mm",
+ .description = "Enable Matrix Multiply Int8 Extension",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.jsconv)] = .{
.llvm_name = "jsconv",
- .description = "Enable v8.3-A JavaScript FP conversion enchancement",
+ .description = "Enable v8.3-A JavaScript FP conversion instructions",
.dependencies = featureSet(&[_]Feature{
.fp_armv8,
}),
@@ -607,12 +681,12 @@ pub const all_features = blk: {
};
result[@enumToInt(Feature.nv)] = .{
.llvm_name = "nv",
- .description = "Enable v8.4-A Nested Virtualization Enchancement",
+ .description = "Enable v8.4-A Nested Virtualization extension",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.pa)] = .{
.llvm_name = "pa",
- .description = "Enable v8.3-A Pointer Authentication enchancement",
+ .description = "Enable v8.3-A Pointer Authentication extension",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.pan)] = .{
@@ -776,6 +850,11 @@ pub const all_features = blk: {
.description = "Reserve X3, making it unavailable as a GPR",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.reserve_x30)] = .{
+ .llvm_name = "reserve-x30",
+ .description = "Reserve X30, making it unavailable as a GPR",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.reserve_x4)] = .{
.llvm_name = "reserve-x4",
.description = "Reserve X4, making it unavailable as a GPR",
@@ -961,6 +1040,11 @@ pub const all_features = blk: {
.description = "Use alias analysis during codegen",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.use_experimental_zeroing_pseudos)] = .{
+ .llvm_name = "use-experimental-zeroing-pseudos",
+ .description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.use_postra_scheduler)] = .{
.llvm_name = "use-postra-scheduler",
.description = "Schedule again after register allocation",
@@ -1049,6 +1133,18 @@ pub const all_features = blk: {
.v8_4a,
}),
};
+ result[@enumToInt(Feature.v8_6a)] = .{
+ .llvm_name = "v8.6a",
+ .description = "Support ARM v8.6a instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .amvs,
+ .bf16,
+ .ecv,
+ .fgt,
+ .i8mm,
+ .v8_5a,
+ }),
+ };
result[@enumToInt(Feature.vh)] = .{
.llvm_name = "vh",
.description = "Enables ARM v8.1 Virtual Host extension",
@@ -1091,6 +1187,21 @@ pub const all_features = blk: {
};
pub const cpu = struct {
+ pub const a64fx = CpuModel{
+ .name = "a64fx",
+ .llvm_name = "a64fx",
+ .features = featureSet(&[_]Feature{
+ .complxnum,
+ .fp_armv8,
+ .fullfp16,
+ .neon,
+ .perfmon,
+ .sha2,
+ .sve,
+ .use_postra_scheduler,
+ .v8_2a,
+ }),
+ };
pub const apple_a10 = CpuModel{
.name = "apple_a10",
.llvm_name = "apple-a10",
@@ -1161,14 +1272,28 @@ pub const cpu = struct {
.apple_a12,
}),
};
+ pub const carmel = CpuModel{
+ .name = "carmel",
+ .llvm_name = "carmel",
+ .features = featureSet(&[_]Feature{
+ .crypto,
+ .fullfp16,
+ .neon,
+ .v8_2a,
+ }),
+ };
+ pub const cortex_a34 = CpuModel{
+ .name = "cortex_a34",
+ .llvm_name = "cortex-a34",
+ .features = featureSet(&[_]Feature{
+ .a34,
+ }),
+ };
pub const cortex_a35 = CpuModel{
.name = "cortex_a35",
.llvm_name = "cortex-a35",
.features = featureSet(&[_]Feature{
- .crc,
- .crypto,
- .perfmon,
- .v8a,
+ .a34,
}),
};
pub const cortex_a53 = CpuModel{
@@ -1278,6 +1403,54 @@ pub const cpu = struct {
.a76,
}),
};
+ pub const cortex_a77 = CpuModel{
+ .name = "cortex_a77",
+ .llvm_name = "cortex-a77",
+ .features = featureSet(&[_]Feature{
+ .crypto,
+ .dotprod,
+ .fp_armv8,
+ .fullfp16,
+ .neon,
+ .rcpc,
+ .v8_2a,
+ }),
+ };
+ pub const cortex_a78 = CpuModel{
+ .name = "cortex_a78",
+ .llvm_name = "cortex-a78",
+ .features = featureSet(&[_]Feature{
+ .crypto,
+ .dotprod,
+ .fp_armv8,
+ .fullfp16,
+ .fuse_aes,
+ .neon,
+ .perfmon,
+ .rcpc,
+ .spe,
+ .ssbs,
+ .use_postra_scheduler,
+ .v8_2a,
+ }),
+ };
+ pub const cortex_x1 = CpuModel{
+ .name = "cortex_x1",
+ .llvm_name = "cortex-x1",
+ .features = featureSet(&[_]Feature{
+ .crypto,
+ .dotprod,
+ .fp_armv8,
+ .fullfp16,
+ .fuse_aes,
+ .neon,
+ .perfmon,
+ .rcpc,
+ .spe,
+ .use_postra_scheduler,
+ .v8_2a,
+ }),
+ };
pub const cyclone = CpuModel{
.name = "cyclone",
.llvm_name = "cyclone",
@@ -1452,6 +1625,27 @@ pub const cpu = struct {
.v8_1a,
}),
};
+ pub const thunderx3t110 = CpuModel{
+ .name = "thunderx3t110",
+ .llvm_name = "thunderx3t110",
+ .features = featureSet(&[_]Feature{
+ .aggressive_fma,
+ .arith_bcc_fusion,
+ .balance_fp_ops,
+ .crc,
+ .crypto,
+ .fp_armv8,
+ .lse,
+ .neon,
+ .pa,
+ .perfmon,
+ .predictable_select_expensive,
+ .strict_align,
+ .use_aa,
+ .use_postra_scheduler,
+ .v8_3a,
+ }),
+ };
pub const thunderxt81 = CpuModel{
.name = "thunderxt81",
.llvm_name = "thunderxt81",
lib/std/target/amdgpu.zig
@@ -5,6 +5,7 @@ const CpuModel = std.Target.Cpu.Model;
pub const Feature = enum {
@"16_bit_insts",
DumpCode,
+ a16,
add_no_carry_insts,
aperture_regs,
atomic_fadd_insts,
@@ -21,9 +22,11 @@ pub const Feature = enum {
dot6_insts,
dpp,
dpp8,
+ ds_src2_insts,
dumpcode,
enable_ds128,
enable_prt_strict_null,
+ fast_denormal_f32,
fast_fmaf,
flat_address_space,
flat_for_global,
@@ -33,15 +36,14 @@ pub const Feature = enum {
flat_segment_offset_bug,
fma_mix_insts,
fmaf,
- fp_exceptions,
- fp16_denormals,
- fp32_denormals,
fp64,
- fp64_denormals,
- fp64_fp16_denormals,
+ g16,
gcn3_encoding,
+ get_wave_id_inst,
gfx10,
+ gfx10_3_insts,
gfx10_insts,
+ gfx10_b_encoding,
gfx7_gfx8_gfx9_insts,
gfx8_insts,
gfx9,
@@ -58,6 +60,7 @@ pub const Feature = enum {
localmemorysize0,
localmemorysize32768,
localmemorysize65536,
+ mad_mac_f32_insts,
mad_mix_insts,
mai_insts,
max_private_element_size_16,
@@ -78,6 +81,7 @@ pub const Feature = enum {
r128_a16,
register_banking,
s_memrealtime,
+ s_memtime_inst,
scalar_atomics,
scalar_flat_scratch_insts,
scalar_stores,
@@ -129,6 +133,11 @@ pub const all_features = blk: {
.description = "Dump MachineInstrs in the CodeEmitter",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.a16)] = .{
+ .llvm_name = "a16",
+ .description = "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.add_no_carry_insts)] = .{
.llvm_name = "add-no-carry-insts",
.description = "Have VALU add/sub instructions without carry out",
@@ -142,7 +151,9 @@ pub const all_features = blk: {
result[@enumToInt(Feature.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",
- .dependencies = featureSet(&[_]Feature{}),
+ .dependencies = featureSet(&[_]Feature{
+ .flat_global_insts,
+ }),
};
result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
.llvm_name = "auto-waitcnt-before-barrier",
@@ -209,6 +220,11 @@ pub const all_features = blk: {
.description = "Support DPP8 (Data Parallel Primitives) extension",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.ds_src2_insts)] = .{
+ .llvm_name = "ds-src2-insts",
+ .description = "Has ds_*_src2 instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.dumpcode)] = .{
.llvm_name = "dumpcode",
.description = "Dump MachineInstrs in the CodeEmitter",
@@ -224,6 +240,11 @@ pub const all_features = blk: {
.description = "Enable zeroing of result registers for sparse texture fetches",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.fast_denormal_f32)] = .{
+ .llvm_name = "fast-denormal-f32",
+ .description = "Enabling denormals does not cause f32 instructions to run at f64 rates",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.fast_fmaf)] = .{
.llvm_name = "fast-fmaf",
.description = "Assuming f32 fma is at least as fast as mul + add",
@@ -269,58 +290,38 @@ pub const all_features = blk: {
.description = "Enable single precision FMA (not as fast as mul+add, but fused)",
.dependencies = featureSet(&[_]Feature{}),
};
- result[@enumToInt(Feature.fp_exceptions)] = .{
- .llvm_name = "fp-exceptions",
- .description = "Enable floating point exceptions",
- .dependencies = featureSet(&[_]Feature{}),
- };
- result[@enumToInt(Feature.fp16_denormals)] = .{
- .llvm_name = "fp16-denormals",
- .description = "Enable half precision denormal handling",
- .dependencies = featureSet(&[_]Feature{
- .fp64_fp16_denormals,
- }),
- };
- result[@enumToInt(Feature.fp32_denormals)] = .{
- .llvm_name = "fp32-denormals",
- .description = "Enable single precision denormal handling",
- .dependencies = featureSet(&[_]Feature{}),
- };
result[@enumToInt(Feature.fp64)] = .{
.llvm_name = "fp64",
.description = "Enable double precision operations",
.dependencies = featureSet(&[_]Feature{}),
};
- result[@enumToInt(Feature.fp64_denormals)] = .{
- .llvm_name = "fp64-denormals",
- .description = "Enable double and half precision denormal handling",
- .dependencies = featureSet(&[_]Feature{
- .fp64,
- .fp64_fp16_denormals,
- }),
- };
- result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
- .llvm_name = "fp64-fp16-denormals",
- .description = "Enable double and half precision denormal handling",
- .dependencies = featureSet(&[_]Feature{
- .fp64,
- }),
+ result[@enumToInt(Feature.g16)] = .{
+ .llvm_name = "g16",
+ .description = "Support G16 for 16-bit gradient image operands",
+ .dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.gcn3_encoding)] = .{
.llvm_name = "gcn3-encoding",
.description = "Encoding format for VI",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.get_wave_id_inst)] = .{
+ .llvm_name = "get-wave-id-inst",
+ .description = "Has s_get_waveid_in_workgroup instruction",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.gfx10)] = .{
.llvm_name = "gfx10",
.description = "GFX10 GPU generation",
.dependencies = featureSet(&[_]Feature{
.@"16_bit_insts",
+ .a16,
.add_no_carry_insts,
.aperture_regs,
.ci_insts,
.dpp,
.dpp8,
+ .fast_denormal_f32,
.fast_fmaf,
.flat_address_space,
.flat_global_insts,
@@ -328,6 +329,7 @@ pub const all_features = blk: {
.flat_scratch_insts,
.fma_mix_insts,
.fp64,
+ .g16,
.gfx10_insts,
.gfx8_insts,
.gfx9_insts,
@@ -351,11 +353,21 @@ pub const all_features = blk: {
.vscnt,
}),
};
+ result[@enumToInt(Feature.gfx10_3_insts)] = .{
+ .llvm_name = "gfx10-3-insts",
+ .description = "Additional instructions for GFX10.3",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.gfx10_insts)] = .{
.llvm_name = "gfx10-insts",
.description = "Additional instructions for GFX10+",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.gfx10_b_encoding)] = .{
+ .llvm_name = "gfx10_b-encoding",
+ .description = "Encoding format GFX10_B",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
.llvm_name = "gfx7-gfx8-gfx9-insts",
.description = "Instructions shared in GFX7, GFX8, GFX9",
@@ -375,6 +387,8 @@ pub const all_features = blk: {
.aperture_regs,
.ci_insts,
.dpp,
+ .ds_src2_insts,
+ .fast_denormal_f32,
.fast_fmaf,
.flat_address_space,
.flat_global_insts,
@@ -388,8 +402,10 @@ pub const all_features = blk: {
.int_clamp_insts,
.inv_2pi_inline_imm,
.localmemorysize65536,
+ .mad_mac_f32_insts,
.r128_a16,
.s_memrealtime,
+ .s_memtime_inst,
.scalar_atomics,
.scalar_flat_scratch_insts,
.scalar_stores,
@@ -467,6 +483,11 @@ pub const all_features = blk: {
.description = "The size of local memory in bytes",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.mad_mac_f32_insts)] = .{
+ .llvm_name = "mad-mac-f32-insts",
+ .description = "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.mad_mix_insts)] = .{
.llvm_name = "mad-mix-insts",
.description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
@@ -554,7 +575,7 @@ pub const all_features = blk: {
};
result[@enumToInt(Feature.r128_a16)] = .{
.llvm_name = "r128-a16",
- .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
+ .description = "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128",
.dependencies = featureSet(&[_]Feature{}),
};
result[@enumToInt(Feature.register_banking)] = .{
@@ -567,6 +588,11 @@ pub const all_features = blk: {
.description = "Has s_memrealtime instruction",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.s_memtime_inst)] = .{
+ .llvm_name = "s-memtime-inst",
+ .description = "Has s_memtime instruction",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.scalar_atomics)] = .{
.llvm_name = "scalar-atomics",
.description = "Has atomic scalar memory instructions",
@@ -617,13 +643,16 @@ pub const all_features = blk: {
.description = "SEA_ISLANDS GPU generation",
.dependencies = featureSet(&[_]Feature{
.ci_insts,
+ .ds_src2_insts,
.flat_address_space,
.fp64,
.gfx7_gfx8_gfx9_insts,
.localmemorysize65536,
+ .mad_mac_f32_insts,
.mimg_r128,
.movrel,
.no_sram_ecc_support,
+ .s_memtime_inst,
.trig_reduced_range,
.wavefrontsize64,
}),
@@ -647,13 +676,16 @@ pub const all_features = blk: {
.llvm_name = "southern-islands",
.description = "SOUTHERN_ISLANDS GPU generation",
.dependencies = featureSet(&[_]Feature{
+ .ds_src2_insts,
.fp64,
.ldsbankcount32,
.localmemorysize32768,
+ .mad_mac_f32_insts,
.mimg_r128,
.movrel,
.no_sram_ecc_support,
.no_xnack_support,
+ .s_memtime_inst,
.trig_reduced_range,
.wavefrontsize64,
}),
@@ -720,6 +752,8 @@ pub const all_features = blk: {
.@"16_bit_insts",
.ci_insts,
.dpp,
+ .ds_src2_insts,
+ .fast_denormal_f32,
.flat_address_space,
.fp64,
.gcn3_encoding,
@@ -728,10 +762,12 @@ pub const all_features = blk: {
.int_clamp_insts,
.inv_2pi_inline_imm,
.localmemorysize65536,
+ .mad_mac_f32_insts,
.mimg_r128,
.movrel,
.no_sram_ecc_support,
.s_memrealtime,
+ .s_memtime_inst,
.scalar_stores,
.sdwa,
.sdwa_mav,
@@ -840,16 +876,20 @@ pub const cpu = struct {
.features = featureSet(&[_]Feature{
.code_object_v3,
.dl_insts,
+ .ds_src2_insts,
.flat_segment_offset_bug,
+ .get_wave_id_inst,
.gfx10,
.inst_fwd_prefetch_bug,
.lds_branch_vmem_war_hazard,
.lds_misaligned_bug,
.ldsbankcount32,
+ .mad_mac_f32_insts,
.no_xnack_support,
.nsa_encoding,
.nsa_to_vmem_bug,
.offset_3f_bug,
+ .s_memtime_inst,
.scalar_atomics,
.scalar_flat_scratch_insts,
.scalar_stores,
@@ -870,15 +910,19 @@ pub const cpu = struct {
.dot2_insts,
.dot5_insts,
.dot6_insts,
+ .ds_src2_insts,
.flat_segment_offset_bug,
+ .get_wave_id_inst,
.gfx10,
.inst_fwd_prefetch_bug,
.lds_branch_vmem_war_hazard,
.ldsbankcount32,
+ .mad_mac_f32_insts,
.no_xnack_support,
.nsa_encoding,
.nsa_to_vmem_bug,
.offset_3f_bug,
+ .s_memtime_inst,
.scalar_atomics,
.scalar_flat_scratch_insts,
.scalar_stores,
@@ -899,16 +943,20 @@ pub const cpu = struct {
.dot2_insts,
.dot5_insts,
.dot6_insts,
+ .ds_src2_insts,
.flat_segment_offset_bug,
+ .get_wave_id_inst,
.gfx10,
.inst_fwd_prefetch_bug,
.lds_branch_vmem_war_hazard,
.lds_misaligned_bug,
.ldsbankcount32,
+ .mad_mac_f32_insts,
.no_xnack_support,
.nsa_encoding,
.nsa_to_vmem_bug,
.offset_3f_bug,
+ .s_memtime_inst,
.scalar_atomics,
.scalar_flat_scratch_insts,
.scalar_stores,
@@ -919,6 +967,25 @@ pub const cpu = struct {
.wavefrontsize32,
}),
};
+ pub const gfx1030 = CpuModel{
+ .name = "gfx1030",
+ .llvm_name = "gfx1030",
+ .features = featureSet(&[_]Feature{
+ .code_object_v3,
+ .dl_insts,
+ .dot1_insts,
+ .dot2_insts,
+ .dot5_insts,
+ .dot6_insts,
+ .gfx10,
+ .gfx10_3_insts,
+ .gfx10_b_encoding,
+ .ldsbankcount32,
+ .no_xnack_support,
+ .nsa_encoding,
+ .wavefrontsize32,
+ }),
+ };
pub const gfx600 = CpuModel{
.name = "gfx600",
.llvm_name = "gfx600",
lib/std/target/arm.zig
@@ -11,6 +11,16 @@ pub const Feature = enum {
aes,
avoid_movs_shop,
avoid_partial_cpsr,
+ bf16,
+ cde,
+ cdecp0,
+ cdecp1,
+ cdecp2,
+ cdecp3,
+ cdecp4,
+ cdecp5,
+ cdecp6,
+ cdecp7,
cheap_predicable_cpsr,
crc,
crypto,
@@ -53,11 +63,13 @@ pub const Feature = enum {
has_v8_3a,
has_v8_4a,
has_v8_5a,
+ has_v8_6a,
has_v8,
has_v8m,
has_v8m_main,
hwdiv,
hwdiv_arm,
+ i8mm,
iwmmxt,
iwmmxt2,
lob,
@@ -141,6 +153,7 @@ pub const Feature = enum {
v8_3a,
v8_4a,
v8_5a,
+ v8_6a,
vfp2,
vfp2sp,
vfp3,
@@ -209,6 +222,76 @@ pub const all_features = blk: {
.description = "Avoid CPSR partial update for OOO execution",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.bf16)] = .{
+ .llvm_name = "bf16",
+ .description = "Enable support for BFloat16 instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .neon,
+ }),
+ };
+ result[@enumToInt(Feature.cde)] = .{
+ .llvm_name = "cde",
+ .description = "Support CDE instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .v8m_main,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp0)] = .{
+ .llvm_name = "cdecp0",
+ .description = "Coprocessor 0 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp1)] = .{
+ .llvm_name = "cdecp1",
+ .description = "Coprocessor 1 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp2)] = .{
+ .llvm_name = "cdecp2",
+ .description = "Coprocessor 2 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp3)] = .{
+ .llvm_name = "cdecp3",
+ .description = "Coprocessor 3 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp4)] = .{
+ .llvm_name = "cdecp4",
+ .description = "Coprocessor 4 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp5)] = .{
+ .llvm_name = "cdecp5",
+ .description = "Coprocessor 5 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp6)] = .{
+ .llvm_name = "cdecp6",
+ .description = "Coprocessor 6 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
+ result[@enumToInt(Feature.cdecp7)] = .{
+ .llvm_name = "cdecp7",
+ .description = "Coprocessor 7 ISA is CDEv1",
+ .dependencies = featureSet(&[_]Feature{
+ .cde,
+ }),
+ };
result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
.llvm_name = "cheap-predicable-cpsr",
.description = "Disable +1 predication cost for instructions updating CPSR",
@@ -508,6 +591,15 @@ pub const all_features = blk: {
.has_v8_4a,
}),
};
+ result[@enumToInt(Feature.has_v8_6a)] = .{
+ .llvm_name = "v8.6a",
+ .description = "Support ARM v8.6a instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .bf16,
+ .i8mm,
+ .has_v8_5a,
+ }),
+ };
result[@enumToInt(Feature.has_v8m)] = .{
.llvm_name = "v8m",
.description = "Support ARM v8M Baseline instructions",
@@ -532,6 +624,13 @@ pub const all_features = blk: {
.description = "Enable divide instructions in ARM mode",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.i8mm)] = .{
+ .llvm_name = "i8mm",
+ .description = "Enable Matrix Multiply Int8 Extension",
+ .dependencies = featureSet(&[_]Feature{
+ .neon,
+ }),
+ };
result[@enumToInt(Feature.iwmmxt)] = .{
.llvm_name = "iwmmxt",
.description = "ARMv5te architecture",
@@ -1177,6 +1276,25 @@ pub const all_features = blk: {
.virtualization,
}),
};
+ result[@enumToInt(Feature.v8_6a)] = .{
+ .llvm_name = "armv8.6-a",
+ .description = "ARMv86a architecture",
+ .dependencies = featureSet(&[_]Feature{
+ .aclass,
+ .crc,
+ .crypto,
+ .db,
+ .dotprod,
+ .dsp,
+ .fp_armv8,
+ .mp,
+ .neon,
+ .ras,
+ .trustzone,
+ .has_v8_6a,
+ .virtualization,
+ }),
+ };
result[@enumToInt(Feature.vfp2)] = .{
.llvm_name = "vfp2",
.description = "Enable VFP2 instructions",
@@ -1722,6 +1840,32 @@ pub const cpu = struct {
.hwdiv_arm,
}),
};
+ pub const cortex_a77 = CpuModel{
+ .name = "cortex_a77",
+ .llvm_name = "cortex-a77",
+ .features = featureSet(&[_]Feature{
+ .v8_2a,
+ .crc,
+ .crypto,
+ .dotprod,
+ .fullfp16,
+ .hwdiv,
+ .hwdiv_arm,
+ }),
+ };
+ pub const cortex_a78 = CpuModel{
+ .name = "cortex_a78",
+ .llvm_name = "cortex-a78",
+ .features = featureSet(&[_]Feature{
+ .v8_2a,
+ .crc,
+ .crypto,
+ .dotprod,
+ .fullfp16,
+ .hwdiv,
+ .hwdiv_arm,
+ }),
+ };
pub const cortex_a8 = CpuModel{
.name = "cortex_a8",
.llvm_name = "cortex-a8",
@@ -1837,6 +1981,20 @@ pub const cpu = struct {
.vfp4d16sp,
}),
};
+ pub const cortex_m55 = CpuModel{
+ .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,
+ }),
+ };
pub const cortex_m7 = CpuModel{
.name = "cortex_m7",
.llvm_name = "cortex-m7",
@@ -1924,6 +2082,19 @@ pub const cpu = struct {
.vfp3d16,
}),
};
+ pub const cortex_x1 = CpuModel{
+ .name = "cortex_x1",
+ .llvm_name = "cortex-x1",
+ .features = featureSet(&[_]Feature{
+ .v8_2a,
+ .crc,
+ .crypto,
+ .dotprod,
+ .fullfp16,
+ .hwdiv,
+ .hwdiv_arm,
+ }),
+ };
pub const cyclone = CpuModel{
.name = "cyclone",
.llvm_name = "cyclone",
lib/std/target/avr.zig
@@ -25,6 +25,7 @@ pub const Feature = enum {
jmpcall,
lpm,
lpmx,
+ memmappedregs,
movw,
mul,
rmw,
@@ -60,6 +61,7 @@ pub const all_features = blk: {
.dependencies = featureSet(&[_]Feature{
.avr0,
.lpm,
+ .memmappedregs,
}),
};
result[@enumToInt(Feature.avr2)] = .{
@@ -156,6 +158,7 @@ pub const all_features = blk: {
.dependencies = featureSet(&[_]Feature{
.avr0,
.@"break",
+ .memmappedregs,
.sram,
.tinyencoding,
}),
@@ -205,6 +208,11 @@ pub const all_features = blk: {
.description = "The device supports the `LPM Rd, Z[+]` instruction",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.memmappedregs)] = .{
+ .llvm_name = "memmappedregs",
+ .description = "The device has CPU registers mapped in data address space",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.movw)] = .{
.llvm_name = "movw",
.description = "The device supports the 16-bit MOVW instruction",
@@ -239,6 +247,7 @@ pub const all_features = blk: {
.jmpcall,
.lpm,
.lpmx,
+ .memmappedregs,
.movw,
.mul,
.rmw,
@@ -271,10 +280,22 @@ pub const all_features = blk: {
.llvm_name = "xmega",
.description = "The device is a part of the xmega family",
.dependencies = featureSet(&[_]Feature{
- .avr51,
+ .addsubiw,
+ .avr0,
+ .@"break",
.des,
.eijmpcall,
+ .elpm,
+ .elpmx,
+ .ijmpcall,
+ .jmpcall,
+ .lpm,
+ .lpmx,
+ .movw,
+ .mul,
+ .spm,
.spmx,
+ .sram,
}),
};
result[@enumToInt(Feature.xmegau)] = .{
lib/std/target/hexagon.zig
@@ -3,6 +3,8 @@ const CpuFeature = std.Target.Cpu.Feature;
const CpuModel = std.Target.Cpu.Model;
pub const Feature = enum {
+ audio,
+ compound,
duplex,
hvx,
hvx_length128b,
@@ -11,6 +13,7 @@ pub const Feature = enum {
hvxv62,
hvxv65,
hvxv66,
+ hvxv67,
long_calls,
mem_noshuf,
memops,
@@ -18,14 +21,18 @@ pub const Feature = enum {
nvj,
nvs,
packets,
+ prev65,
reserved_r19,
small_data,
+ tinycore,
+ unsafe_fp,
v5,
v55,
v60,
v62,
v65,
v66,
+ v67,
zreg,
};
@@ -35,6 +42,16 @@ 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.audio)] = .{
+ .llvm_name = "audio",
+ .description = "Hexagon Audio extension instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.compound)] = .{
+ .llvm_name = "compound",
+ .description = "Use compound instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.duplex)] = .{
.llvm_name = "duplex",
.description = "Enable generation of duplex instruction",
@@ -94,6 +111,16 @@ pub const all_features = blk: {
.zreg,
}),
};
+ result[@enumToInt(Feature.hvxv67)] = .{
+ .llvm_name = "hvxv67",
+ .description = "Hexagon HVX instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .hvxv60,
+ .hvxv62,
+ .hvxv65,
+ .hvxv66,
+ }),
+ };
result[@enumToInt(Feature.long_calls)] = .{
.llvm_name = "long-calls",
.description = "Use constant-extended calls",
@@ -133,6 +160,11 @@ pub const all_features = blk: {
.description = "Support for instruction packets",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.prev65)] = .{
+ .llvm_name = "prev65",
+ .description = "Support features deprecated in v65",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.reserved_r19)] = .{
.llvm_name = "reserved-r19",
.description = "Reserve register R19",
@@ -143,6 +175,16 @@ pub const all_features = blk: {
.description = "Allow GP-relative addressing of global variables",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.tinycore)] = .{
+ .llvm_name = "tinycore",
+ .description = "Hexagon Tiny Core",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.unsafe_fp)] = .{
+ .llvm_name = "unsafe-fp",
+ .description = "Use unsafe FP math",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.v5)] = .{
.llvm_name = "v5",
.description = "Enable Hexagon V5 architecture",
@@ -173,6 +215,11 @@ pub const all_features = blk: {
.description = "Enable Hexagon V66 architecture",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.v67)] = .{
+ .llvm_name = "v67",
+ .description = "Enable Hexagon V67 architecture",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.zreg)] = .{
.llvm_name = "zreg",
.description = "Hexagon ZReg extension instructions",
@@ -191,11 +238,13 @@ pub const cpu = struct {
.name = "generic",
.llvm_name = "generic",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.memops,
.nvj,
.nvs,
.packets,
+ .prev65,
.small_data,
.v5,
.v55,
@@ -206,11 +255,13 @@ pub const cpu = struct {
.name = "hexagonv5",
.llvm_name = "hexagonv5",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.memops,
.nvj,
.nvs,
.packets,
+ .prev65,
.small_data,
.v5,
}),
@@ -219,11 +270,13 @@ pub const cpu = struct {
.name = "hexagonv55",
.llvm_name = "hexagonv55",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.memops,
.nvj,
.nvs,
.packets,
+ .prev65,
.small_data,
.v5,
.v55,
@@ -233,11 +286,13 @@ pub const cpu = struct {
.name = "hexagonv60",
.llvm_name = "hexagonv60",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.memops,
.nvj,
.nvs,
.packets,
+ .prev65,
.small_data,
.v5,
.v55,
@@ -248,11 +303,13 @@ pub const cpu = struct {
.name = "hexagonv62",
.llvm_name = "hexagonv62",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.memops,
.nvj,
.nvs,
.packets,
+ .prev65,
.small_data,
.v5,
.v55,
@@ -264,6 +321,7 @@ pub const cpu = struct {
.name = "hexagonv65",
.llvm_name = "hexagonv65",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.mem_noshuf,
.memops,
@@ -282,6 +340,7 @@ pub const cpu = struct {
.name = "hexagonv66",
.llvm_name = "hexagonv66",
.features = featureSet(&[_]Feature{
+ .compound,
.duplex,
.mem_noshuf,
.memops,
@@ -297,4 +356,46 @@ pub const cpu = struct {
.v66,
}),
};
+ pub const hexagonv67 = CpuModel{
+ .name = "hexagonv67",
+ .llvm_name = "hexagonv67",
+ .features = featureSet(&[_]Feature{
+ .compound,
+ .duplex,
+ .mem_noshuf,
+ .memops,
+ .nvj,
+ .nvs,
+ .packets,
+ .small_data,
+ .v5,
+ .v55,
+ .v60,
+ .v62,
+ .v65,
+ .v66,
+ .v67,
+ }),
+ };
+ pub const hexagonv67t = CpuModel{
+ .name = "hexagonv67t",
+ .llvm_name = "hexagonv67t",
+ .features = featureSet(&[_]Feature{
+ .audio,
+ .compound,
+ .mem_noshuf,
+ .memops,
+ .nvs,
+ .packets,
+ .small_data,
+ .tinycore,
+ .v5,
+ .v55,
+ .v60,
+ .v62,
+ .v65,
+ .v66,
+ .v67,
+ }),
+ };
};
lib/std/target/mips.zig
@@ -28,6 +28,7 @@ pub const Feature = enum {
mips32r6,
mips3_32,
mips3_32r2,
+ mips3d,
mips4,
mips4_32,
mips4_32r2,
@@ -222,6 +223,11 @@ pub const all_features = blk: {
.description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.mips3d)] = .{
+ .llvm_name = "mips3d",
+ .description = "Mips 3D ASE",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.mips4)] = .{
.llvm_name = "mips4",
.description = "MIPS IV ISA Support",
lib/std/target/nvptx.zig
@@ -13,6 +13,8 @@ pub const Feature = enum {
ptx61,
ptx63,
ptx64,
+ ptx65,
+ ptx70,
sm_20,
sm_21,
sm_30,
@@ -28,6 +30,7 @@ pub const Feature = enum {
sm_70,
sm_72,
sm_75,
+ sm_80,
};
pub usingnamespace CpuFeature.feature_set_fns(Feature);
@@ -86,6 +89,16 @@ pub const all_features = blk: {
.description = "Use PTX version 6.4",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.ptx65)] = .{
+ .llvm_name = "ptx65",
+ .description = "Use PTX version 6.5",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.ptx70)] = .{
+ .llvm_name = "ptx70",
+ .description = "Use PTX version 7.0",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.sm_20)] = .{
.llvm_name = "sm_20",
.description = "Target SM 2.0",
@@ -161,6 +174,11 @@ pub const all_features = blk: {
.description = "Target SM 7.5",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.sm_80)] = .{
+ .llvm_name = "sm_80",
+ .description = "Target SM 8.0",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
const ti = @typeInfo(Feature);
for (result) |*elem, i| {
elem.index = i;
@@ -286,4 +304,12 @@ pub const cpu = struct {
.sm_75,
}),
};
+ pub const sm_80 = CpuModel{
+ .name = "sm_80",
+ .llvm_name = "sm_80",
+ .features = featureSet(&[_]Feature{
+ .ptx70,
+ .sm_80,
+ }),
+ };
};
lib/std/target/powerpc.zig
@@ -25,11 +25,15 @@ pub const Feature = enum {
frsqrte,
frsqrtes,
fsqrt,
+ fuse_addi_load,
+ fuse_addis_load,
+ fusion,
hard_float,
htm,
icbt,
invariant_function_descriptors,
isa_v30_instructions,
+ isa_v31_instructions,
isel,
ldbrx,
lfiwax,
@@ -37,7 +41,9 @@ pub const Feature = enum {
mfocrf,
msync,
partword_atomics,
+ pcrelative_memops,
popcntd,
+ power10_vector,
power8_altivec,
power8_vector,
power9_altivec,
@@ -46,6 +52,8 @@ pub const Feature = enum {
ppc_prera_sched,
ppc4xx,
ppc6xx,
+ predictable_select_expensive,
+ prefix_instrs,
qpx,
recipprec,
secure_plt,
@@ -201,6 +209,25 @@ pub const all_features = blk: {
.fpu,
}),
};
+ result[@enumToInt(Feature.fuse_addi_load)] = .{
+ .llvm_name = "fuse-addi-load",
+ .description = "Power8 Addi-Load fusion",
+ .dependencies = featureSet(&[_]Feature{
+ .fusion,
+ }),
+ };
+ result[@enumToInt(Feature.fuse_addis_load)] = .{
+ .llvm_name = "fuse-addis-load",
+ .description = "Power8 Addis-Load fusion",
+ .dependencies = featureSet(&[_]Feature{
+ .fusion,
+ }),
+ };
+ result[@enumToInt(Feature.fusion)] = .{
+ .llvm_name = "fusion",
+ .description = "Target supports instruction fusion",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.hard_float)] = .{
.llvm_name = "hard-float",
.description = "Enable floating-point instructions",
@@ -223,9 +250,16 @@ pub const all_features = blk: {
};
result[@enumToInt(Feature.isa_v30_instructions)] = .{
.llvm_name = "isa-v30-instructions",
- .description = "Enable instructions added in ISA 3.0.",
+ .description = "Enable instructions in ISA 3.0.",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.isa_v31_instructions)] = .{
+ .llvm_name = "isa-v31-instructions",
+ .description = "Enable instructions in ISA 3.1.",
+ .dependencies = featureSet(&[_]Feature{
+ .isa_v30_instructions,
+ }),
+ };
result[@enumToInt(Feature.isel)] = .{
.llvm_name = "isel",
.description = "Enable the isel instruction",
@@ -265,11 +299,26 @@ pub const all_features = blk: {
.description = "Enable l[bh]arx and st[bh]cx.",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.pcrelative_memops)] = .{
+ .llvm_name = "pcrelative-memops",
+ .description = "Enable PC relative Memory Ops",
+ .dependencies = featureSet(&[_]Feature{
+ .isa_v30_instructions,
+ }),
+ };
result[@enumToInt(Feature.popcntd)] = .{
.llvm_name = "popcntd",
.description = "Enable the popcnt[dw] instructions",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.power10_vector)] = .{
+ .llvm_name = "power10-vector",
+ .description = "Enable POWER10 vector instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .isa_v31_instructions,
+ .power9_vector,
+ }),
+ };
result[@enumToInt(Feature.power8_altivec)] = .{
.llvm_name = "power8-altivec",
.description = "Enable POWER8 Altivec instructions",
@@ -322,6 +371,20 @@ pub const all_features = blk: {
.description = "Enable PPC 6xx instructions",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.predictable_select_expensive)] = .{
+ .llvm_name = "predictable-select-expensive",
+ .description = "Prefer likely predicted branches over selects",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.prefix_instrs)] = .{
+ .llvm_name = "prefix-instrs",
+ .description = "Enable prefixed instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .isa_v30_instructions,
+ .power8_vector,
+ .power9_altivec,
+ }),
+ };
result[@enumToInt(Feature.qpx)] = .{
.llvm_name = "qpx",
.description = "Enable QPX instructions",
@@ -567,6 +630,7 @@ pub const cpu = struct {
.booke,
.icbt,
.isel,
+ .msync,
.spe,
}),
};
@@ -615,16 +679,21 @@ pub const cpu = struct {
.htm,
.icbt,
.isa_v30_instructions,
+ .isa_v31_instructions,
.isel,
.ldbrx,
.lfiwax,
.mfocrf,
.partword_atomics,
+ .pcrelative_memops,
.popcntd,
+ .power10_vector,
.power8_altivec,
.power8_vector,
.power9_altivec,
.power9_vector,
+ .predictable_select_expensive,
+ .prefix_instrs,
.recipprec,
.stfiwx,
.two_const_nr,
@@ -724,6 +793,8 @@ pub const cpu = struct {
.frsqrte,
.frsqrtes,
.fsqrt,
+ .fuse_addi_load,
+ .fuse_addis_load,
.htm,
.icbt,
.isel,
@@ -734,6 +805,51 @@ pub const cpu = struct {
.popcntd,
.power8_altivec,
.power8_vector,
+ .predictable_select_expensive,
+ .recipprec,
+ .stfiwx,
+ .two_const_nr,
+ .vsx,
+ }),
+ };
+ pub const pwr10 = CpuModel{
+ .name = "pwr10",
+ .llvm_name = "pwr10",
+ .features = featureSet(&[_]Feature{
+ .@"64bit",
+ .allow_unaligned_fp_access,
+ .altivec,
+ .bpermd,
+ .cmpb,
+ .crypto,
+ .direct_move,
+ .extdiv,
+ .fcpsgn,
+ .fpcvt,
+ .fprnd,
+ .fre,
+ .fres,
+ .frsqrte,
+ .frsqrtes,
+ .fsqrt,
+ .htm,
+ .icbt,
+ .isa_v30_instructions,
+ .isa_v31_instructions,
+ .isel,
+ .ldbrx,
+ .lfiwax,
+ .mfocrf,
+ .partword_atomics,
+ .pcrelative_memops,
+ .popcntd,
+ .power10_vector,
+ .power8_altivec,
+ .power8_vector,
+ .power9_altivec,
+ .power9_vector,
+ .predictable_select_expensive,
+ .prefix_instrs,
.recipprec,
.stfiwx,
.two_const_nr,
@@ -885,6 +1001,8 @@ pub const cpu = struct {
.frsqrte,
.frsqrtes,
.fsqrt,
+ .fuse_addi_load,
+ .fuse_addis_load,
.htm,
.icbt,
.isel,
@@ -895,6 +1013,7 @@ pub const cpu = struct {
.popcntd,
.power8_altivec,
.power8_vector,
+ .predictable_select_expensive,
.recipprec,
.stfiwx,
.two_const_nr,
@@ -936,6 +1055,7 @@ pub const cpu = struct {
.power9_vector,
.ppc_postra_sched,
.ppc_prera_sched,
+ .predictable_select_expensive,
.recipprec,
.stfiwx,
.two_const_nr,
lib/std/target/riscv.zig
@@ -8,8 +8,21 @@ pub const Feature = enum {
c,
d,
e,
+ experimental_b,
+ experimental_v,
+ experimental_zbb,
+ experimental_zbc,
+ experimental_zbe,
+ experimental_zbf,
+ experimental_zbm,
+ experimental_zbp,
+ experimental_zbproposedc,
+ experimental_zbr,
+ experimental_zbs,
+ experimental_zbt,
f,
m,
+ no_rvc_hints,
relax,
reserve_x1,
reserve_x10,
@@ -42,7 +55,7 @@ pub const Feature = enum {
reserve_x7,
reserve_x8,
reserve_x9,
- rvc_hints,
+ save_restore,
};
pub usingnamespace CpuFeature.feature_set_fns(Feature);
@@ -78,6 +91,78 @@ pub const all_features = blk: {
.description = "Implements RV32E (provides 16 rather than 32 GPRs)",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.experimental_b)] = .{
+ .llvm_name = "experimental-b",
+ .description = "'B' (Bit Manipulation Instructions)",
+ .dependencies = featureSet(&[_]Feature{
+ .experimental_zbb,
+ .experimental_zbc,
+ .experimental_zbe,
+ .experimental_zbf,
+ .experimental_zbm,
+ .experimental_zbp,
+ .experimental_zbr,
+ .experimental_zbs,
+ .experimental_zbt,
+ }),
+ };
+ result[@enumToInt(Feature.experimental_v)] = .{
+ .llvm_name = "experimental-v",
+ .description = "'V' (Vector Instructions)",
+ .dependencies = featureSet(&[_]Feature{
+ .f,
+ }),
+ };
+ result[@enumToInt(Feature.experimental_zbb)] = .{
+ .llvm_name = "experimental-zbb",
+ .description = "'Zbb' (Base 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbc)] = .{
+ .llvm_name = "experimental-zbc",
+ .description = "'Zbc' (Carry-Less 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbe)] = .{
+ .llvm_name = "experimental-zbe",
+ .description = "'Zbe' (Extract-Deposit 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbf)] = .{
+ .llvm_name = "experimental-zbf",
+ .description = "'Zbf' (Bit-Field 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbm)] = .{
+ .llvm_name = "experimental-zbm",
+ .description = "'Zbm' (Matrix 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbp)] = .{
+ .llvm_name = "experimental-zbp",
+ .description = "'Zbp' (Permutation 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbproposedc)] = .{
+ .llvm_name = "experimental-zbproposedc",
+ .description = "'Zbproposedc' (Proposed Compressed 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbr)] = .{
+ .llvm_name = "experimental-zbr",
+ .description = "'Zbr' (Polynomial Reduction 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbs)] = .{
+ .llvm_name = "experimental-zbs",
+ .description = "'Zbs' (Single-Bit 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.experimental_zbt)] = .{
+ .llvm_name = "experimental-zbt",
+ .description = "'Zbt' (Ternary 'B' Instructions)",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.f)] = .{
.llvm_name = "f",
.description = "'F' (Single-Precision Floating-Point)",
@@ -88,6 +173,11 @@ pub const all_features = blk: {
.description = "'M' (Integer Multiplication and Division)",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.no_rvc_hints)] = .{
+ .llvm_name = "no-rvc-hints",
+ .description = "Disable RVC Hint Instructions.",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.relax)] = .{
.llvm_name = "relax",
.description = "Enable Linker relaxation.",
@@ -248,9 +338,9 @@ pub const all_features = blk: {
.description = "Reserve X9",
.dependencies = featureSet(&[_]Feature{}),
};
- result[@enumToInt(Feature.rvc_hints)] = .{
- .llvm_name = "rvc-hints",
- .description = "Enable RVC Hint Instructions.",
+ result[@enumToInt(Feature.save_restore)] = .{
+ .llvm_name = "save-restore",
+ .description = "Enable save/restore.",
.dependencies = featureSet(&[_]Feature{}),
};
const ti = @typeInfo(Feature);
@@ -273,7 +363,6 @@ pub const cpu = struct {
.m,
}),
};
-
pub const baseline_rv64 = CpuModel{
.name = "baseline_rv64",
.llvm_name = null,
@@ -286,20 +375,49 @@ pub const cpu = struct {
.m,
}),
};
-
pub const generic_rv32 = CpuModel{
.name = "generic_rv32",
- .llvm_name = null,
- .features = featureSet(&[_]Feature{
- .rvc_hints,
- }),
+ .llvm_name = "generic-rv32",
+ .features = featureSet(&[_]Feature{}),
};
pub const generic_rv64 = CpuModel{
.name = "generic_rv64",
- .llvm_name = null,
+ .llvm_name = "generic-rv64",
.features = featureSet(&[_]Feature{
.@"64bit",
- .rvc_hints,
+ }),
+ };
+ pub const rocket_rv32 = CpuModel{
+ .name = "rocket_rv32",
+ .llvm_name = "rocket-rv32",
+ .features = featureSet(&[_]Feature{}),
+ };
+ pub const rocket_rv64 = CpuModel{
+ .name = "rocket_rv64",
+ .llvm_name = "rocket-rv64",
+ .features = featureSet(&[_]Feature{
+ .@"64bit",
+ }),
+ };
+ pub const sifive_e31 = CpuModel{
+ .name = "sifive_e31",
+ .llvm_name = "sifive-e31",
+ .features = featureSet(&[_]Feature{
+ .a,
+ .c,
+ .m,
+ }),
+ };
+ pub const sifive_u54 = CpuModel{
+ .name = "sifive_u54",
+ .llvm_name = "sifive-u54",
+ .features = featureSet(&[_]Feature{
+ .@"64bit",
+ .a,
+ .c,
+ .d,
+ .f,
+ .m,
}),
};
};
lib/std/target/systemz.zig
@@ -32,6 +32,7 @@ pub const Feature = enum {
population_count,
processor_assist,
reset_reference_bits_multiple,
+ soft_float,
transactional_execution,
vector,
vector_enhancements_1,
@@ -191,6 +192,11 @@ pub const all_features = blk: {
.description = "Assume that the reset-reference-bits-multiple facility is installed",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.soft_float)] = .{
+ .llvm_name = "soft-float",
+ .description = "Use software emulation for floating point",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.transactional_execution)] = .{
.llvm_name = "transactional-execution",
.description = "Assume that the transactional-execution facility is installed",
lib/std/target/wasm.zig
@@ -9,6 +9,7 @@ pub const Feature = enum {
multivalue,
mutable_globals,
nontrapping_fptoint,
+ reference_types,
sign_ext,
simd128,
tail_call,
@@ -51,6 +52,11 @@ pub const all_features = blk: {
.description = "Enable non-trapping float-to-int conversion operators",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.reference_types)] = .{
+ .llvm_name = "reference-types",
+ .description = "Enable reference types",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.sign_ext)] = .{
.llvm_name = "sign-ext",
.description = "Enable sign extension operators",
@@ -87,10 +93,12 @@ pub const cpu = struct {
.llvm_name = "bleeding-edge",
.features = featureSet(&[_]Feature{
.atomics,
+ .bulk_memory,
.mutable_globals,
.nontrapping_fptoint,
.sign_ext,
.simd128,
+ .tail_call,
}),
};
pub const generic = CpuModel{
lib/std/target/x86.zig
@@ -8,6 +8,9 @@ pub const Feature = enum {
@"64bit",
adx,
aes,
+ amx_bf16,
+ amx_int8,
+ amx_tile,
avx,
avx2,
avx512bf16,
@@ -42,6 +45,7 @@ pub const Feature = enum {
false_deps_popcnt,
fast_11bytenop,
fast_15bytenop,
+ fast_7bytenop,
fast_bextr,
fast_gather,
fast_hops,
@@ -62,6 +66,8 @@ pub const Feature = enum {
invpcid,
lea_sp,
lea_uses_ag,
+ lvi_cfi,
+ lvi_load_hardening,
lwp,
lzcnt,
macrofusion,
@@ -93,6 +99,8 @@ pub const Feature = enum {
retpoline_indirect_calls,
rtm,
sahf,
+ serialize,
+ seses,
sgx,
sha,
shstk,
@@ -115,6 +123,7 @@ pub const Feature = enum {
sse4a,
ssse3,
tbm,
+ tsxldtrk,
use_aa,
use_glm_div_sqrt_costs,
vaes,
@@ -167,6 +176,25 @@ pub const all_features = blk: {
.sse2,
}),
};
+ result[@enumToInt(Feature.amx_bf16)] = .{
+ .llvm_name = "amx-bf16",
+ .description = "Support AMX-BF16 instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .amx_tile,
+ }),
+ };
+ result[@enumToInt(Feature.amx_int8)] = .{
+ .llvm_name = "amx-int8",
+ .description = "Support AMX-INT8 instructions",
+ .dependencies = featureSet(&[_]Feature{
+ .amx_tile,
+ }),
+ };
+ result[@enumToInt(Feature.amx_tile)] = .{
+ .llvm_name = "amx-tile",
+ .description = "Support AMX-TILE instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.avx)] = .{
.llvm_name = "avx",
.description = "Enable AVX instructions",
@@ -377,6 +405,11 @@ pub const all_features = blk: {
.description = "Target can quickly decode up to 15 byte NOPs",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.fast_7bytenop)] = .{
+ .llvm_name = "fast-7bytenop",
+ .description = "Target can quickly decode up to 7 byte NOPs",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.fast_bextr)] = .{
.llvm_name = "fast-bextr",
.description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
@@ -484,6 +517,16 @@ pub const all_features = blk: {
.description = "LEA instruction needs inputs at AG stage",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.lvi_cfi)] = .{
+ .llvm_name = "lvi-cfi",
+ .description = "Prevent indirect calls/branches from using a memory operand, and precede all indirect calls/branches from a register with an LFENCE instruction to serialize control flow. Also decompose RET instructions into a POP+LFENCE+JMP sequence.",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.lvi_load_hardening)] = .{
+ .llvm_name = "lvi-load-hardening",
+ .description = "Insert LFENCE instructions to prevent data speculatively injected into loads from being used maliciously.",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.lwp)] = .{
.llvm_name = "lwp",
.description = "Enable LWP instructions",
@@ -646,6 +689,18 @@ pub const all_features = blk: {
.description = "Support LAHF and SAHF instructions",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.serialize)] = .{
+ .llvm_name = "serialize",
+ .description = "Has serialize instruction",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
+ result[@enumToInt(Feature.seses)] = .{
+ .llvm_name = "seses",
+ .description = "Prevent speculative execution side channel timing attacks by inserting a speculation barrier before memory reads, memory writes, and conditional branches. Implies LVI Control Flow integrity.",
+ .dependencies = featureSet(&[_]Feature{
+ .lvi_cfi,
+ }),
+ };
result[@enumToInt(Feature.sgx)] = .{
.llvm_name = "sgx",
.description = "Enable Software Guard Extensions",
@@ -770,6 +825,11 @@ pub const all_features = blk: {
.description = "Enable TBM instructions",
.dependencies = featureSet(&[_]Feature{}),
};
+ result[@enumToInt(Feature.tsxldtrk)] = .{
+ .llvm_name = "tsxldtrk",
+ .description = "Support TSXLDTRK instructions",
+ .dependencies = featureSet(&[_]Feature{}),
+ };
result[@enumToInt(Feature.use_aa)] = .{
.llvm_name = "use-aa",
.description = "Use alias analysis during codegen",
@@ -831,17 +891,23 @@ pub const all_features = blk: {
result[@enumToInt(Feature.xsavec)] = .{
.llvm_name = "xsavec",
.description = "Support xsavec instructions",
- .dependencies = featureSet(&[_]Feature{}),
+ .dependencies = featureSet(&[_]Feature{
+ .xsave,
+ }),
};
result[@enumToInt(Feature.xsaveopt)] = .{
.llvm_name = "xsaveopt",
.description = "Support xsaveopt instructions",
- .dependencies = featureSet(&[_]Feature{}),
+ .dependencies = featureSet(&[_]Feature{
+ .xsave,
+ }),
};
result[@enumToInt(Feature.xsaves)] = .{
.llvm_name = "xsaves",
.description = "Support xsaves instructions",
- .dependencies = featureSet(&[_]Feature{}),
+ .dependencies = featureSet(&[_]Feature{
+ .xsave,
+ }),
};
const ti = @typeInfo(Feature);
for (result) |*elem, i| {
@@ -866,6 +932,7 @@ pub const cpu = struct {
.lzcnt,
.nopl,
.popcnt,
+ .prfchw,
.sahf,
.slow_shld,
.sse4a,
@@ -1043,6 +1110,7 @@ pub const cpu = struct {
.lzcnt,
.nopl,
.popcnt,
+ .prfchw,
.sahf,
.slow_shld,
.sse4a,
@@ -1169,11 +1237,13 @@ pub const cpu = struct {
.lwp,
.lzcnt,
.mmx,
+ .movbe,
.mwaitx,
.nopl,
.pclmul,
.popcnt,
.prfchw,
+ .rdrnd,
.sahf,
.slow_shld,
.tbm,
@@ -1226,6 +1296,7 @@ pub const cpu = struct {
.f16c,
.false_deps_lzcnt_tzcnt,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fast_variable_shuffle,
@@ -1362,6 +1433,7 @@ pub const cpu = struct {
.cx8,
.ermsb,
.f16c,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -1423,6 +1495,7 @@ pub const cpu = struct {
.ermsb,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -1483,6 +1556,7 @@ pub const cpu = struct {
.ermsb,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -1528,6 +1602,7 @@ pub const cpu = struct {
.cx8,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fsgsbase,
@@ -1566,6 +1641,7 @@ pub const cpu = struct {
.f16c,
.false_deps_lzcnt_tzcnt,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fast_variable_shuffle,
@@ -1640,6 +1716,7 @@ pub const cpu = struct {
.cx16,
.cx8,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fxsr,
@@ -1773,6 +1850,7 @@ pub const cpu = struct {
.f16c,
.false_deps_lzcnt_tzcnt,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fast_variable_shuffle,
@@ -1867,6 +1945,7 @@ pub const cpu = struct {
.cx8,
.ermsb,
.f16c,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -1936,6 +2015,7 @@ pub const cpu = struct {
.cx8,
.ermsb,
.f16c,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -1989,6 +2069,7 @@ pub const cpu = struct {
.cx8,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fsgsbase,
@@ -2414,6 +2495,7 @@ pub const cpu = struct {
.cx16,
.cx8,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_scalar_fsqrt,
.fast_shld_rotate,
.fxsr,
@@ -2443,6 +2525,7 @@ pub const cpu = struct {
.cx16,
.cx8,
.false_deps_popcnt,
+ .fast_7bytenop,
.fxsr,
.idivq_to_divl,
.mmx,
@@ -2487,6 +2570,7 @@ pub const cpu = struct {
.ermsb,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -2539,6 +2623,7 @@ pub const cpu = struct {
.ermsb,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -2596,6 +2681,7 @@ pub const cpu = struct {
.ermsb,
.f16c,
.false_deps_popcnt,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -2639,6 +2725,7 @@ pub const cpu = struct {
.cx16,
.cx8,
.false_deps_popcnt,
+ .fast_7bytenop,
.fxsr,
.idivq_to_divl,
.mmx,
@@ -2689,6 +2776,7 @@ pub const cpu = struct {
.cx8,
.ermsb,
.f16c,
+ .fast_15bytenop,
.fast_gather,
.fast_scalar_fsqrt,
.fast_shld_rotate,
@@ -2738,8 +2826,8 @@ pub const cpu = struct {
.features = featureSet(&[_]Feature{
.@"64bit",
.aes,
- .cldemote,
.clflushopt,
+ .clwb,
.cmov,
.cx16,
.cx8,
@@ -2748,8 +2836,6 @@ pub const cpu = struct {
.gfni,
.mmx,
.movbe,
- .movdir64b,
- .movdiri,
.nopl,
.pclmul,
.popcnt,
@@ -2768,7 +2854,6 @@ pub const cpu = struct {
.ssse3,
.use_glm_div_sqrt_costs,
.vzeroupper,
- .waitpkg,
.x87,
.xsave,
.xsavec,
@@ -2824,6 +2909,7 @@ pub const cpu = struct {
.cmov,
.cx8,
.fxsr,
+ .idivq_to_divl,
.macrofusion,
.mmx,
.nopl,
lib/std/target.zig
@@ -485,7 +485,7 @@ pub const Target = struct {
pub const Set = struct {
ints: [usize_count]usize,
- pub const needed_bit_count = 155;
+ pub const needed_bit_count = 168;
pub const byte_count = (needed_bit_count + 7) / 8;
pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
pub const Index = std.math.Log2Int(std.meta.Int(false, usize_count * @bitSizeOf(usize)));