Add builtin.zig support

master
Layne Gustafson 2020-01-08 21:35:26 -05:00 committed by Andrew Kelley
parent c61856ebcf
commit 03dd376b55
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
18 changed files with 3483 additions and 3426 deletions

View File

@ -1988,10 +1988,16 @@ pub const LibExeObjStep = struct {
},
.features => |features| {
try zig_args.append("--features");
var feature_str_buffer = try std.Buffer.initSize(builder.allocator, 0);
defer feature_str_buffer.deinit();
for (features) |feature| {
try zig_args.append(feature.name);
try zig_args.append(",");
try feature_str_buffer.append(feature.name);
try feature_str_buffer.append(",");
}
try zig_args.append(feature_str_buffer.toOwnedSlice());
},
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ pub const feature_duplex = Feature{
};
pub const feature_longCalls = Feature{
.name = "long-calls",
.name = "longCalls",
.llvm_name = "long-calls",
.description = "Use constant-extended calls",
.dependencies = &[_]*const Feature {
@ -52,7 +52,7 @@ pub const feature_nvs = Feature{
};
pub const feature_noreturnStackElim = Feature{
.name = "noreturn-stack-elim",
.name = "noreturnStackElim",
.llvm_name = "noreturn-stack-elim",
.description = "Eliminate stack allocation in a noreturn function when possible",
.dependencies = &[_]*const Feature {
@ -68,7 +68,7 @@ pub const feature_packets = Feature{
};
pub const feature_reservedR19 = Feature{
.name = "reserved-r19",
.name = "reservedR19",
.llvm_name = "reserved-r19",
.description = "Reserve register R19",
.dependencies = &[_]*const Feature {
@ -76,7 +76,7 @@ pub const feature_reservedR19 = Feature{
};
pub const feature_smallData = Feature{
.name = "small-data",
.name = "smallData",
.llvm_name = "small-data",
.description = "Allow GP-relative addressing of global variables",
.dependencies = &[_]*const Feature {

View File

@ -22,14 +22,14 @@ pub const feature_cnmips = Feature{
.llvm_name = "cnmips",
.description = "Octeon cnMIPS Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -100,7 +100,7 @@ pub const feature_gp64 = Feature{
};
pub const feature_longCalls = Feature{
.name = "long-calls",
.name = "longCalls",
.llvm_name = "long-calls",
.description = "Disable use of the jal instruction",
.dependencies = &[_]*const Feature {
@ -163,9 +163,9 @@ pub const feature_mips3 = Feature{
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips3_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips3_32,
&feature_gp64,
&feature_fp64,
},
};
@ -192,11 +192,11 @@ pub const feature_mips4 = Feature{
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_fp64,
&feature_mips3_32,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32,
&feature_fp64,
},
};
@ -221,14 +221,14 @@ pub const feature_mips5 = Feature{
.llvm_name = "mips5",
.description = "MIPS V ISA Support [highly experimental]",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -253,9 +253,9 @@ pub const feature_mips32 = Feature{
.llvm_name = "mips32",
.description = "Mips32 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips4_32,
&feature_mips3_32,
&feature_mips4_32,
&feature_mips1,
},
};
@ -264,12 +264,12 @@ pub const feature_mips32r2 = Feature{
.llvm_name = "mips32r2",
.description = "Mips32r2 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
},
};
@ -278,12 +278,12 @@ pub const feature_mips32r3 = Feature{
.llvm_name = "mips32r3",
.description = "Mips32r3 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
},
};
@ -292,12 +292,12 @@ pub const feature_mips32r5 = Feature{
.llvm_name = "mips32r5",
.description = "Mips32r5 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
},
};
@ -306,15 +306,15 @@ pub const feature_mips32r6 = Feature{
.llvm_name = "mips32r6",
.description = "Mips32r6 ISA Support [experimental]",
.dependencies = &[_]*const Feature {
&feature_abs2008,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_nan2008,
&feature_mips5_32r2,
&feature_fp64,
&feature_mips4_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_abs2008,
&feature_fp64,
},
};
@ -323,14 +323,14 @@ pub const feature_mips64 = Feature{
.llvm_name = "mips64",
.description = "Mips64 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -339,14 +339,14 @@ pub const feature_mips64r2 = Feature{
.llvm_name = "mips64r2",
.description = "Mips64r2 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -355,14 +355,14 @@ pub const feature_mips64r3 = Feature{
.llvm_name = "mips64r3",
.description = "Mips64r3 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -371,14 +371,14 @@ pub const feature_mips64r5 = Feature{
.llvm_name = "mips64r5",
.description = "Mips64r5 ISA Support",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
},
};
@ -387,16 +387,16 @@ pub const feature_mips64r6 = Feature{
.llvm_name = "mips64r6",
.description = "Mips64r6 ISA Support [experimental]",
.dependencies = &[_]*const Feature {
&feature_abs2008,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_nan2008,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_abs2008,
&feature_fp64,
},
};
@ -433,7 +433,7 @@ pub const feature_ptr64 = Feature{
};
pub const feature_singleFloat = Feature{
.name = "single-float",
.name = "singleFloat",
.llvm_name = "single-float",
.description = "Only supports single precision float",
.dependencies = &[_]*const Feature {
@ -441,7 +441,7 @@ pub const feature_singleFloat = Feature{
};
pub const feature_softFloat = Feature{
.name = "soft-float",
.name = "softFloat",
.llvm_name = "soft-float",
.description = "Does not support floating point instructions",
.dependencies = &[_]*const Feature {
@ -457,7 +457,7 @@ pub const feature_sym32 = Feature{
};
pub const feature_useIndirectJumpHazard = Feature{
.name = "use-indirect-jump-hazard",
.name = "useIndirectJumpHazard",
.llvm_name = "use-indirect-jump-hazard",
.description = "Use indirect jump guards to prevent certain speculation based attacks",
.dependencies = &[_]*const Feature {
@ -465,7 +465,7 @@ pub const feature_useIndirectJumpHazard = Feature{
};
pub const feature_useTccInDiv = Feature{
.name = "use-tcc-in-div",
.name = "useTccInDiv",
.llvm_name = "use-tcc-in-div",
.description = "Force the assembler to use trapping",
.dependencies = &[_]*const Feature {
@ -501,12 +501,12 @@ pub const feature_p5600 = Feature{
.llvm_name = "p5600",
.description = "The P5600 Processor",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
},
};
@ -586,9 +586,9 @@ pub const cpu_mips3 = Cpu{
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips3_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips3_32,
&feature_gp64,
&feature_fp64,
&feature_mips3,
},
};
@ -597,9 +597,9 @@ pub const cpu_mips32 = Cpu{
.name = "mips32",
.llvm_name = "mips32",
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips4_32,
&feature_mips3_32,
&feature_mips4_32,
&feature_mips1,
&feature_mips32,
},
};
@ -608,12 +608,12 @@ pub const cpu_mips32r2 = Cpu{
.name = "mips32r2",
.llvm_name = "mips32r2",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_mips32r2,
},
};
@ -622,12 +622,12 @@ pub const cpu_mips32r3 = Cpu{
.name = "mips32r3",
.llvm_name = "mips32r3",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_mips32r3,
},
};
@ -636,12 +636,12 @@ pub const cpu_mips32r5 = Cpu{
.name = "mips32r5",
.llvm_name = "mips32r5",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_mips32r5,
},
};
@ -650,15 +650,15 @@ pub const cpu_mips32r6 = Cpu{
.name = "mips32r6",
.llvm_name = "mips32r6",
.dependencies = &[_]*const Feature {
&feature_abs2008,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_nan2008,
&feature_mips5_32r2,
&feature_fp64,
&feature_mips4_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_abs2008,
&feature_fp64,
&feature_mips32r6,
},
};
@ -669,11 +669,11 @@ pub const cpu_mips4 = Cpu{
.dependencies = &[_]*const Feature {
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_fp64,
&feature_mips3_32,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32,
&feature_fp64,
&feature_mips4,
},
};
@ -682,14 +682,14 @@ pub const cpu_mips5 = Cpu{
.name = "mips5",
.llvm_name = "mips5",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_mips5,
},
};
@ -698,14 +698,14 @@ pub const cpu_mips64 = Cpu{
.name = "mips64",
.llvm_name = "mips64",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_mips64,
},
};
@ -714,14 +714,14 @@ pub const cpu_mips64r2 = Cpu{
.name = "mips64r2",
.llvm_name = "mips64r2",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_mips64r2,
},
};
@ -730,14 +730,14 @@ pub const cpu_mips64r3 = Cpu{
.name = "mips64r3",
.llvm_name = "mips64r3",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_mips64r3,
},
};
@ -746,14 +746,14 @@ pub const cpu_mips64r5 = Cpu{
.name = "mips64r5",
.llvm_name = "mips64r5",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_mips64r5,
},
};
@ -762,16 +762,16 @@ pub const cpu_mips64r6 = Cpu{
.name = "mips64r6",
.llvm_name = "mips64r6",
.dependencies = &[_]*const Feature {
&feature_abs2008,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_nan2008,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_abs2008,
&feature_fp64,
&feature_mips64r6,
},
};
@ -780,14 +780,14 @@ pub const cpu_octeon = Cpu{
.name = "octeon",
.llvm_name = "octeon",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_fp64,
&feature_gp64,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_gp64,
&feature_mips4_32,
&feature_fp64,
&feature_cnmips,
&feature_mips64r2,
},
@ -797,12 +797,12 @@ pub const cpu_p5600 = Cpu{
.name = "p5600",
.llvm_name = "p5600",
.dependencies = &[_]*const Feature {
&feature_mips5_32r2,
&feature_mips1,
&feature_mips3_32r2,
&feature_mips4_32,
&feature_mips5_32r2,
&feature_mips4_32r2,
&feature_mips3_32,
&feature_mips4_32r2,
&feature_mips4_32,
&feature_p5600,
},
};

View File

@ -2,7 +2,7 @@ const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
pub const feature_bit64 = Feature{
.name = "64bit",
.name = "bit64",
.llvm_name = "64bit",
.description = "Enable 64-bit instructions",
.dependencies = &[_]*const Feature {
@ -10,7 +10,7 @@ pub const feature_bit64 = Feature{
};
pub const feature_bitregs64 = Feature{
.name = "64bitregs",
.name = "bitregs64",
.llvm_name = "64bitregs",
.description = "Enable 64-bit registers usage for ppc32 [beta]",
.dependencies = &[_]*const Feature {
@ -60,7 +60,7 @@ pub const feature_crbits = Feature{
};
pub const feature_directMove = Feature{
.name = "direct-move",
.name = "directMove",
.llvm_name = "direct-move",
.description = "Enable Power8 direct move instructions",
.dependencies = &[_]*const Feature {
@ -183,7 +183,7 @@ pub const feature_htm = Feature{
};
pub const feature_hardFloat = Feature{
.name = "hard-float",
.name = "hardFloat",
.llvm_name = "hard-float",
.description = "Enable floating-point instructions",
.dependencies = &[_]*const Feature {
@ -199,7 +199,7 @@ pub const feature_icbt = Feature{
};
pub const feature_isaV30Instructions = Feature{
.name = "isa-v30-instructions",
.name = "isaV30Instructions",
.llvm_name = "isa-v30-instructions",
.description = "Enable instructions added in ISA 3.0.",
.dependencies = &[_]*const Feature {
@ -215,7 +215,7 @@ pub const feature_isel = Feature{
};
pub const feature_invariantFunctionDescriptors = Feature{
.name = "invariant-function-descriptors",
.name = "invariantFunctionDescriptors",
.llvm_name = "invariant-function-descriptors",
.description = "Assume function descriptors are invariant",
.dependencies = &[_]*const Feature {
@ -265,7 +265,7 @@ pub const feature_msync = Feature{
};
pub const feature_power8Altivec = Feature{
.name = "power8-altivec",
.name = "power8Altivec",
.llvm_name = "power8-altivec",
.description = "Enable POWER8 Altivec instructions",
.dependencies = &[_]*const Feature {
@ -283,7 +283,7 @@ pub const feature_crypto = Feature{
};
pub const feature_power8Vector = Feature{
.name = "power8-vector",
.name = "power8Vector",
.llvm_name = "power8-vector",
.description = "Enable POWER8 vector instructions",
.dependencies = &[_]*const Feature {
@ -292,7 +292,7 @@ pub const feature_power8Vector = Feature{
};
pub const feature_power9Altivec = Feature{
.name = "power9-altivec",
.name = "power9Altivec",
.llvm_name = "power9-altivec",
.description = "Enable POWER9 Altivec instructions",
.dependencies = &[_]*const Feature {
@ -302,7 +302,7 @@ pub const feature_power9Altivec = Feature{
};
pub const feature_power9Vector = Feature{
.name = "power9-vector",
.name = "power9Vector",
.llvm_name = "power9-vector",
.description = "Enable POWER9 vector instructions",
.dependencies = &[_]*const Feature {
@ -336,7 +336,7 @@ pub const feature_ppc6xx = Feature{
};
pub const feature_ppcPostraSched = Feature{
.name = "ppc-postra-sched",
.name = "ppcPostraSched",
.llvm_name = "ppc-postra-sched",
.description = "Use PowerPC post-RA scheduling strategy",
.dependencies = &[_]*const Feature {
@ -344,7 +344,7 @@ pub const feature_ppcPostraSched = Feature{
};
pub const feature_ppcPreraSched = Feature{
.name = "ppc-prera-sched",
.name = "ppcPreraSched",
.llvm_name = "ppc-prera-sched",
.description = "Use PowerPC pre-RA scheduling strategy",
.dependencies = &[_]*const Feature {
@ -352,7 +352,7 @@ pub const feature_ppcPreraSched = Feature{
};
pub const feature_partwordAtomics = Feature{
.name = "partword-atomics",
.name = "partwordAtomics",
.llvm_name = "partword-atomics",
.description = "Enable l[bh]arx and st[bh]cx.",
.dependencies = &[_]*const Feature {
@ -395,7 +395,7 @@ pub const feature_stfiwx = Feature{
};
pub const feature_securePlt = Feature{
.name = "secure-plt",
.name = "securePlt",
.llvm_name = "secure-plt",
.description = "Enable secure plt mode",
.dependencies = &[_]*const Feature {
@ -403,7 +403,7 @@ pub const feature_securePlt = Feature{
};
pub const feature_slowPopcntd = Feature{
.name = "slow-popcntd",
.name = "slowPopcntd",
.llvm_name = "slow-popcntd",
.description = "Has slow popcnt[dw] instructions",
.dependencies = &[_]*const Feature {
@ -411,7 +411,7 @@ pub const feature_slowPopcntd = Feature{
};
pub const feature_twoConstNr = Feature{
.name = "two-const-nr",
.name = "twoConstNr",
.llvm_name = "two-const-nr",
.description = "Requires two constant Newton-Raphson computation",
.dependencies = &[_]*const Feature {
@ -428,7 +428,7 @@ pub const feature_vsx = Feature{
};
pub const feature_vectorsUseTwoUnits = Feature{
.name = "vectors-use-two-units",
.name = "vectorsUseTwoUnits",
.llvm_name = "vectors-use-two-units",
.description = "Vectors use two units",
.dependencies = &[_]*const Feature {
@ -546,7 +546,7 @@ pub const cpu_603 = Cpu{
};
pub const cpu_e603 = Cpu{
.name = "603e",
.name = "e603",
.llvm_name = "603e",
.dependencies = &[_]*const Feature {
&feature_hardFloat,
@ -556,7 +556,7 @@ pub const cpu_e603 = Cpu{
};
pub const cpu_ev603 = Cpu{
.name = "603ev",
.name = "ev603",
.llvm_name = "603ev",
.dependencies = &[_]*const Feature {
&feature_hardFloat,
@ -576,7 +576,7 @@ pub const cpu_604 = Cpu{
};
pub const cpu_e604 = Cpu{
.name = "604e",
.name = "e604",
.llvm_name = "604e",
.dependencies = &[_]*const Feature {
&feature_hardFloat,
@ -755,7 +755,7 @@ pub const cpu_g4 = Cpu{
};
pub const cpu_g4Plus = Cpu{
.name = "g4+",
.name = "g4Plus",
.llvm_name = "g4+",
.dependencies = &[_]*const Feature {
&feature_hardFloat,

View File

@ -2,7 +2,7 @@ const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
pub const feature_bit64 = Feature{
.name = "64bit",
.name = "bit64",
.llvm_name = "64bit",
.description = "Implements RV64",
.dependencies = &[_]*const Feature {
@ -18,7 +18,7 @@ pub const feature_e = Feature{
};
pub const feature_rvcHints = Feature{
.name = "rvc-hints",
.name = "rvcHints",
.llvm_name = "rvc-hints",
.description = "Enable RVC Hint Instructions.",
.dependencies = &[_]*const Feature {
@ -87,7 +87,7 @@ pub const features = &[_]*const Feature {
};
pub const cpu_genericRv32 = Cpu{
.name = "generic-rv32",
.name = "genericRv32",
.llvm_name = "generic-rv32",
.dependencies = &[_]*const Feature {
&feature_rvcHints,
@ -95,7 +95,7 @@ pub const cpu_genericRv32 = Cpu{
};
pub const cpu_genericRv64 = Cpu{
.name = "generic-rv64",
.name = "genericRv64",
.llvm_name = "generic-rv64",
.dependencies = &[_]*const Feature {
&feature_bit64,

View File

@ -2,7 +2,7 @@ const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
pub const feature_hardQuadFloat = Feature{
.name = "hard-quad-float",
.name = "hardQuadFloat",
.llvm_name = "hard-quad-float",
.description = "Enable quad-word floating point instructions",
.dependencies = &[_]*const Feature {
@ -18,7 +18,7 @@ pub const feature_leon = Feature{
};
pub const feature_noFmuls = Feature{
.name = "no-fmuls",
.name = "noFmuls",
.llvm_name = "no-fmuls",
.description = "Disable the fmuls instruction.",
.dependencies = &[_]*const Feature {
@ -26,7 +26,7 @@ pub const feature_noFmuls = Feature{
};
pub const feature_noFsmuld = Feature{
.name = "no-fsmuld",
.name = "noFsmuld",
.llvm_name = "no-fsmuld",
.description = "Disable the fsmuld instruction.",
.dependencies = &[_]*const Feature {
@ -42,7 +42,7 @@ pub const feature_leonpwrpsr = Feature{
};
pub const feature_softFloat = Feature{
.name = "soft-float",
.name = "softFloat",
.llvm_name = "soft-float",
.description = "Use software emulation for floating point",
.dependencies = &[_]*const Feature {
@ -50,7 +50,7 @@ pub const feature_softFloat = Feature{
};
pub const feature_softMulDiv = Feature{
.name = "soft-mul-div",
.name = "softMulDiv",
.llvm_name = "soft-mul-div",
.description = "Use software emulation for integer multiply and divide",
.dependencies = &[_]*const Feature {
@ -58,7 +58,7 @@ pub const feature_softMulDiv = Feature{
};
pub const feature_deprecatedV8 = Feature{
.name = "deprecated-v8",
.name = "deprecatedV8",
.llvm_name = "deprecated-v8",
.description = "Enable deprecated V8 instructions in V9 mode",
.dependencies = &[_]*const Feature {
@ -287,7 +287,7 @@ pub const cpu_myriad2 = Cpu{
};
pub const cpu_myriad21 = Cpu{
.name = "myriad2.1",
.name = "myriad21",
.llvm_name = "myriad2.1",
.dependencies = &[_]*const Feature {
&feature_leon,
@ -295,7 +295,7 @@ pub const cpu_myriad21 = Cpu{
};
pub const cpu_myriad22 = Cpu{
.name = "myriad2.2",
.name = "myriad22",
.llvm_name = "myriad2.2",
.dependencies = &[_]*const Feature {
&feature_leon,
@ -303,7 +303,7 @@ pub const cpu_myriad22 = Cpu{
};
pub const cpu_myriad23 = Cpu{
.name = "myriad2.3",
.name = "myriad23",
.llvm_name = "myriad2.3",
.dependencies = &[_]*const Feature {
&feature_leon,

View File

@ -2,7 +2,7 @@ const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
pub const feature_dfpPackedConversion = Feature{
.name = "dfp-packed-conversion",
.name = "dfpPackedConversion",
.llvm_name = "dfp-packed-conversion",
.description = "Assume that the DFP packed-conversion facility is installed",
.dependencies = &[_]*const Feature {
@ -10,7 +10,7 @@ pub const feature_dfpPackedConversion = Feature{
};
pub const feature_dfpZonedConversion = Feature{
.name = "dfp-zoned-conversion",
.name = "dfpZonedConversion",
.llvm_name = "dfp-zoned-conversion",
.description = "Assume that the DFP zoned-conversion facility is installed",
.dependencies = &[_]*const Feature {
@ -18,7 +18,7 @@ pub const feature_dfpZonedConversion = Feature{
};
pub const feature_deflateConversion = Feature{
.name = "deflate-conversion",
.name = "deflateConversion",
.llvm_name = "deflate-conversion",
.description = "Assume that the deflate-conversion facility is installed",
.dependencies = &[_]*const Feature {
@ -26,7 +26,7 @@ pub const feature_deflateConversion = Feature{
};
pub const feature_distinctOps = Feature{
.name = "distinct-ops",
.name = "distinctOps",
.llvm_name = "distinct-ops",
.description = "Assume that the distinct-operands facility is installed",
.dependencies = &[_]*const Feature {
@ -34,7 +34,7 @@ pub const feature_distinctOps = Feature{
};
pub const feature_enhancedDat2 = Feature{
.name = "enhanced-dat-2",
.name = "enhancedDat2",
.llvm_name = "enhanced-dat-2",
.description = "Assume that the enhanced-DAT facility 2 is installed",
.dependencies = &[_]*const Feature {
@ -42,7 +42,7 @@ pub const feature_enhancedDat2 = Feature{
};
pub const feature_enhancedSort = Feature{
.name = "enhanced-sort",
.name = "enhancedSort",
.llvm_name = "enhanced-sort",
.description = "Assume that the enhanced-sort facility is installed",
.dependencies = &[_]*const Feature {
@ -50,7 +50,7 @@ pub const feature_enhancedSort = Feature{
};
pub const feature_executionHint = Feature{
.name = "execution-hint",
.name = "executionHint",
.llvm_name = "execution-hint",
.description = "Assume that the execution-hint facility is installed",
.dependencies = &[_]*const Feature {
@ -58,7 +58,7 @@ pub const feature_executionHint = Feature{
};
pub const feature_fpExtension = Feature{
.name = "fp-extension",
.name = "fpExtension",
.llvm_name = "fp-extension",
.description = "Assume that the floating-point extension facility is installed",
.dependencies = &[_]*const Feature {
@ -66,7 +66,7 @@ pub const feature_fpExtension = Feature{
};
pub const feature_fastSerialization = Feature{
.name = "fast-serialization",
.name = "fastSerialization",
.llvm_name = "fast-serialization",
.description = "Assume that the fast-serialization facility is installed",
.dependencies = &[_]*const Feature {
@ -74,7 +74,7 @@ pub const feature_fastSerialization = Feature{
};
pub const feature_guardedStorage = Feature{
.name = "guarded-storage",
.name = "guardedStorage",
.llvm_name = "guarded-storage",
.description = "Assume that the guarded-storage facility is installed",
.dependencies = &[_]*const Feature {
@ -82,7 +82,7 @@ pub const feature_guardedStorage = Feature{
};
pub const feature_highWord = Feature{
.name = "high-word",
.name = "highWord",
.llvm_name = "high-word",
.description = "Assume that the high-word facility is installed",
.dependencies = &[_]*const Feature {
@ -90,7 +90,7 @@ pub const feature_highWord = Feature{
};
pub const feature_insertReferenceBitsMultiple = Feature{
.name = "insert-reference-bits-multiple",
.name = "insertReferenceBitsMultiple",
.llvm_name = "insert-reference-bits-multiple",
.description = "Assume that the insert-reference-bits-multiple facility is installed",
.dependencies = &[_]*const Feature {
@ -98,7 +98,7 @@ pub const feature_insertReferenceBitsMultiple = Feature{
};
pub const feature_interlockedAccess1 = Feature{
.name = "interlocked-access1",
.name = "interlockedAccess1",
.llvm_name = "interlocked-access1",
.description = "Assume that interlocked-access facility 1 is installed",
.dependencies = &[_]*const Feature {
@ -106,7 +106,7 @@ pub const feature_interlockedAccess1 = Feature{
};
pub const feature_loadAndTrap = Feature{
.name = "load-and-trap",
.name = "loadAndTrap",
.llvm_name = "load-and-trap",
.description = "Assume that the load-and-trap facility is installed",
.dependencies = &[_]*const Feature {
@ -114,7 +114,7 @@ pub const feature_loadAndTrap = Feature{
};
pub const feature_loadAndZeroRightmostByte = Feature{
.name = "load-and-zero-rightmost-byte",
.name = "loadAndZeroRightmostByte",
.llvm_name = "load-and-zero-rightmost-byte",
.description = "Assume that the load-and-zero-rightmost-byte facility is installed",
.dependencies = &[_]*const Feature {
@ -122,7 +122,7 @@ pub const feature_loadAndZeroRightmostByte = Feature{
};
pub const feature_loadStoreOnCond = Feature{
.name = "load-store-on-cond",
.name = "loadStoreOnCond",
.llvm_name = "load-store-on-cond",
.description = "Assume that the load/store-on-condition facility is installed",
.dependencies = &[_]*const Feature {
@ -130,7 +130,7 @@ pub const feature_loadStoreOnCond = Feature{
};
pub const feature_loadStoreOnCond2 = Feature{
.name = "load-store-on-cond-2",
.name = "loadStoreOnCond2",
.llvm_name = "load-store-on-cond-2",
.description = "Assume that the load/store-on-condition facility 2 is installed",
.dependencies = &[_]*const Feature {
@ -138,7 +138,7 @@ pub const feature_loadStoreOnCond2 = Feature{
};
pub const feature_messageSecurityAssistExtension3 = Feature{
.name = "message-security-assist-extension3",
.name = "messageSecurityAssistExtension3",
.llvm_name = "message-security-assist-extension3",
.description = "Assume that the message-security-assist extension facility 3 is installed",
.dependencies = &[_]*const Feature {
@ -146,7 +146,7 @@ pub const feature_messageSecurityAssistExtension3 = Feature{
};
pub const feature_messageSecurityAssistExtension4 = Feature{
.name = "message-security-assist-extension4",
.name = "messageSecurityAssistExtension4",
.llvm_name = "message-security-assist-extension4",
.description = "Assume that the message-security-assist extension facility 4 is installed",
.dependencies = &[_]*const Feature {
@ -154,7 +154,7 @@ pub const feature_messageSecurityAssistExtension4 = Feature{
};
pub const feature_messageSecurityAssistExtension5 = Feature{
.name = "message-security-assist-extension5",
.name = "messageSecurityAssistExtension5",
.llvm_name = "message-security-assist-extension5",
.description = "Assume that the message-security-assist extension facility 5 is installed",
.dependencies = &[_]*const Feature {
@ -162,7 +162,7 @@ pub const feature_messageSecurityAssistExtension5 = Feature{
};
pub const feature_messageSecurityAssistExtension7 = Feature{
.name = "message-security-assist-extension7",
.name = "messageSecurityAssistExtension7",
.llvm_name = "message-security-assist-extension7",
.description = "Assume that the message-security-assist extension facility 7 is installed",
.dependencies = &[_]*const Feature {
@ -170,7 +170,7 @@ pub const feature_messageSecurityAssistExtension7 = Feature{
};
pub const feature_messageSecurityAssistExtension8 = Feature{
.name = "message-security-assist-extension8",
.name = "messageSecurityAssistExtension8",
.llvm_name = "message-security-assist-extension8",
.description = "Assume that the message-security-assist extension facility 8 is installed",
.dependencies = &[_]*const Feature {
@ -178,7 +178,7 @@ pub const feature_messageSecurityAssistExtension8 = Feature{
};
pub const feature_messageSecurityAssistExtension9 = Feature{
.name = "message-security-assist-extension9",
.name = "messageSecurityAssistExtension9",
.llvm_name = "message-security-assist-extension9",
.description = "Assume that the message-security-assist extension facility 9 is installed",
.dependencies = &[_]*const Feature {
@ -186,7 +186,7 @@ pub const feature_messageSecurityAssistExtension9 = Feature{
};
pub const feature_miscellaneousExtensions = Feature{
.name = "miscellaneous-extensions",
.name = "miscellaneousExtensions",
.llvm_name = "miscellaneous-extensions",
.description = "Assume that the miscellaneous-extensions facility is installed",
.dependencies = &[_]*const Feature {
@ -194,7 +194,7 @@ pub const feature_miscellaneousExtensions = Feature{
};
pub const feature_miscellaneousExtensions2 = Feature{
.name = "miscellaneous-extensions-2",
.name = "miscellaneousExtensions2",
.llvm_name = "miscellaneous-extensions-2",
.description = "Assume that the miscellaneous-extensions facility 2 is installed",
.dependencies = &[_]*const Feature {
@ -202,7 +202,7 @@ pub const feature_miscellaneousExtensions2 = Feature{
};
pub const feature_miscellaneousExtensions3 = Feature{
.name = "miscellaneous-extensions-3",
.name = "miscellaneousExtensions3",
.llvm_name = "miscellaneous-extensions-3",
.description = "Assume that the miscellaneous-extensions facility 3 is installed",
.dependencies = &[_]*const Feature {
@ -210,7 +210,7 @@ pub const feature_miscellaneousExtensions3 = Feature{
};
pub const feature_populationCount = Feature{
.name = "population-count",
.name = "populationCount",
.llvm_name = "population-count",
.description = "Assume that the population-count facility is installed",
.dependencies = &[_]*const Feature {
@ -218,7 +218,7 @@ pub const feature_populationCount = Feature{
};
pub const feature_processorAssist = Feature{
.name = "processor-assist",
.name = "processorAssist",
.llvm_name = "processor-assist",
.description = "Assume that the processor-assist facility is installed",
.dependencies = &[_]*const Feature {
@ -226,7 +226,7 @@ pub const feature_processorAssist = Feature{
};
pub const feature_resetReferenceBitsMultiple = Feature{
.name = "reset-reference-bits-multiple",
.name = "resetReferenceBitsMultiple",
.llvm_name = "reset-reference-bits-multiple",
.description = "Assume that the reset-reference-bits-multiple facility is installed",
.dependencies = &[_]*const Feature {
@ -234,7 +234,7 @@ pub const feature_resetReferenceBitsMultiple = Feature{
};
pub const feature_transactionalExecution = Feature{
.name = "transactional-execution",
.name = "transactionalExecution",
.llvm_name = "transactional-execution",
.description = "Assume that the transactional-execution facility is installed",
.dependencies = &[_]*const Feature {
@ -250,7 +250,7 @@ pub const feature_vector = Feature{
};
pub const feature_vectorEnhancements1 = Feature{
.name = "vector-enhancements-1",
.name = "vectorEnhancements1",
.llvm_name = "vector-enhancements-1",
.description = "Assume that the vector enhancements facility 1 is installed",
.dependencies = &[_]*const Feature {
@ -258,7 +258,7 @@ pub const feature_vectorEnhancements1 = Feature{
};
pub const feature_vectorEnhancements2 = Feature{
.name = "vector-enhancements-2",
.name = "vectorEnhancements2",
.llvm_name = "vector-enhancements-2",
.description = "Assume that the vector enhancements facility 2 is installed",
.dependencies = &[_]*const Feature {
@ -266,7 +266,7 @@ pub const feature_vectorEnhancements2 = Feature{
};
pub const feature_vectorPackedDecimal = Feature{
.name = "vector-packed-decimal",
.name = "vectorPackedDecimal",
.llvm_name = "vector-packed-decimal",
.description = "Assume that the vector packed decimal facility is installed",
.dependencies = &[_]*const Feature {
@ -274,7 +274,7 @@ pub const feature_vectorPackedDecimal = Feature{
};
pub const feature_vectorPackedDecimalEnhancement = Feature{
.name = "vector-packed-decimal-enhancement",
.name = "vectorPackedDecimalEnhancement",
.llvm_name = "vector-packed-decimal-enhancement",
.description = "Assume that the vector packed decimal enhancement facility is installed",
.dependencies = &[_]*const Feature {

View File

@ -10,7 +10,7 @@ pub const feature_atomics = Feature{
};
pub const feature_bulkMemory = Feature{
.name = "bulk-memory",
.name = "bulkMemory",
.llvm_name = "bulk-memory",
.description = "Enable bulk memory operations",
.dependencies = &[_]*const Feature {
@ -18,7 +18,7 @@ pub const feature_bulkMemory = Feature{
};
pub const feature_exceptionHandling = Feature{
.name = "exception-handling",
.name = "exceptionHandling",
.llvm_name = "exception-handling",
.description = "Enable Wasm exception handling",
.dependencies = &[_]*const Feature {
@ -34,7 +34,7 @@ pub const feature_multivalue = Feature{
};
pub const feature_mutableGlobals = Feature{
.name = "mutable-globals",
.name = "mutableGlobals",
.llvm_name = "mutable-globals",
.description = "Enable mutable globals",
.dependencies = &[_]*const Feature {
@ -42,7 +42,7 @@ pub const feature_mutableGlobals = Feature{
};
pub const feature_nontrappingFptoint = Feature{
.name = "nontrapping-fptoint",
.name = "nontrappingFptoint",
.llvm_name = "nontrapping-fptoint",
.description = "Enable non-trapping float-to-int conversion operators",
.dependencies = &[_]*const Feature {
@ -58,7 +58,7 @@ pub const feature_simd128 = Feature{
};
pub const feature_signExt = Feature{
.name = "sign-ext",
.name = "signExt",
.llvm_name = "sign-ext",
.description = "Enable sign extension operators",
.dependencies = &[_]*const Feature {
@ -66,7 +66,7 @@ pub const feature_signExt = Feature{
};
pub const feature_tailCall = Feature{
.name = "tail-call",
.name = "tailCall",
.llvm_name = "tail-call",
.description = "Enable tail call instructions",
.dependencies = &[_]*const Feature {
@ -74,7 +74,7 @@ pub const feature_tailCall = Feature{
};
pub const feature_unimplementedSimd128 = Feature{
.name = "unimplemented-simd128",
.name = "unimplementedSimd128",
.llvm_name = "unimplemented-simd128",
.description = "Enable 128-bit SIMD not yet implemented in engines",
.dependencies = &[_]*const Feature {
@ -96,7 +96,7 @@ pub const features = &[_]*const Feature {
};
pub const cpu_bleedingEdge = Cpu{
.name = "bleeding-edge",
.name = "bleedingEdge",
.llvm_name = "bleeding-edge",
.dependencies = &[_]*const Feature {
&feature_atomics,

View File

@ -2,7 +2,7 @@ const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
pub const feature_dnow3 = Feature{
.name = "3dnow",
.name = "dnow3",
.llvm_name = "3dnow",
.description = "Enable 3DNow! instructions",
.dependencies = &[_]*const Feature {
@ -11,7 +11,7 @@ pub const feature_dnow3 = Feature{
};
pub const feature_dnowa3 = Feature{
.name = "3dnowa",
.name = "dnowa3",
.llvm_name = "3dnowa",
.description = "Enable 3DNow! Athlon instructions",
.dependencies = &[_]*const Feature {
@ -20,7 +20,7 @@ pub const feature_dnowa3 = Feature{
};
pub const feature_bit64 = Feature{
.name = "64bit",
.name = "bit64",
.llvm_name = "64bit",
.description = "Support 64-bit instructions",
.dependencies = &[_]*const Feature {
@ -274,7 +274,7 @@ pub const feature_fxsr = Feature{
};
pub const feature_fast11bytenop = Feature{
.name = "fast-11bytenop",
.name = "fast11bytenop",
.llvm_name = "fast-11bytenop",
.description = "Target can quickly decode up to 11 byte NOPs",
.dependencies = &[_]*const Feature {
@ -282,7 +282,7 @@ pub const feature_fast11bytenop = Feature{
};
pub const feature_fast15bytenop = Feature{
.name = "fast-15bytenop",
.name = "fast15bytenop",
.llvm_name = "fast-15bytenop",
.description = "Target can quickly decode up to 15 byte NOPs",
.dependencies = &[_]*const Feature {
@ -290,7 +290,7 @@ pub const feature_fast15bytenop = Feature{
};
pub const feature_fastBextr = Feature{
.name = "fast-bextr",
.name = "fastBextr",
.llvm_name = "fast-bextr",
.description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
.dependencies = &[_]*const Feature {
@ -298,7 +298,7 @@ pub const feature_fastBextr = Feature{
};
pub const feature_fastHops = Feature{
.name = "fast-hops",
.name = "fastHops",
.llvm_name = "fast-hops",
.description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
.dependencies = &[_]*const Feature {
@ -307,7 +307,7 @@ pub const feature_fastHops = Feature{
};
pub const feature_fastLzcnt = Feature{
.name = "fast-lzcnt",
.name = "fastLzcnt",
.llvm_name = "fast-lzcnt",
.description = "LZCNT instructions are as fast as most simple integer ops",
.dependencies = &[_]*const Feature {
@ -315,7 +315,7 @@ pub const feature_fastLzcnt = Feature{
};
pub const feature_fastPartialYmmOrZmmWrite = Feature{
.name = "fast-partial-ymm-or-zmm-write",
.name = "fastPartialYmmOrZmmWrite",
.llvm_name = "fast-partial-ymm-or-zmm-write",
.description = "Partial writes to YMM/ZMM registers are fast",
.dependencies = &[_]*const Feature {
@ -323,7 +323,7 @@ pub const feature_fastPartialYmmOrZmmWrite = Feature{
};
pub const feature_fastShldRotate = Feature{
.name = "fast-shld-rotate",
.name = "fastShldRotate",
.llvm_name = "fast-shld-rotate",
.description = "SHLD can be used as a faster rotate",
.dependencies = &[_]*const Feature {
@ -331,7 +331,7 @@ pub const feature_fastShldRotate = Feature{
};
pub const feature_fastScalarFsqrt = Feature{
.name = "fast-scalar-fsqrt",
.name = "fastScalarFsqrt",
.llvm_name = "fast-scalar-fsqrt",
.description = "Scalar SQRT is fast (disable Newton-Raphson)",
.dependencies = &[_]*const Feature {
@ -339,7 +339,7 @@ pub const feature_fastScalarFsqrt = Feature{
};
pub const feature_fastScalarShiftMasks = Feature{
.name = "fast-scalar-shift-masks",
.name = "fastScalarShiftMasks",
.llvm_name = "fast-scalar-shift-masks",
.description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
.dependencies = &[_]*const Feature {
@ -347,7 +347,7 @@ pub const feature_fastScalarShiftMasks = Feature{
};
pub const feature_fastVariableShuffle = Feature{
.name = "fast-variable-shuffle",
.name = "fastVariableShuffle",
.llvm_name = "fast-variable-shuffle",
.description = "Shuffles with variable masks are fast",
.dependencies = &[_]*const Feature {
@ -355,7 +355,7 @@ pub const feature_fastVariableShuffle = Feature{
};
pub const feature_fastVectorFsqrt = Feature{
.name = "fast-vector-fsqrt",
.name = "fastVectorFsqrt",
.llvm_name = "fast-vector-fsqrt",
.description = "Vector SQRT is fast (disable Newton-Raphson)",
.dependencies = &[_]*const Feature {
@ -363,7 +363,7 @@ pub const feature_fastVectorFsqrt = Feature{
};
pub const feature_fastVectorShiftMasks = Feature{
.name = "fast-vector-shift-masks",
.name = "fastVectorShiftMasks",
.llvm_name = "fast-vector-shift-masks",
.description = "Prefer a left/right vector logical shift pair over a shift+and pair",
.dependencies = &[_]*const Feature {
@ -380,7 +380,7 @@ pub const feature_gfni = Feature{
};
pub const feature_fastGather = Feature{
.name = "fast-gather",
.name = "fastGather",
.llvm_name = "fast-gather",
.description = "Indicates if gather is reasonably fast",
.dependencies = &[_]*const Feature {
@ -413,7 +413,7 @@ pub const feature_sahf = Feature{
};
pub const feature_leaSp = Feature{
.name = "lea-sp",
.name = "leaSp",
.llvm_name = "lea-sp",
.description = "Use LEA for adjusting the stack pointer",
.dependencies = &[_]*const Feature {
@ -421,7 +421,7 @@ pub const feature_leaSp = Feature{
};
pub const feature_leaUsesAg = Feature{
.name = "lea-uses-ag",
.name = "leaUsesAg",
.llvm_name = "lea-uses-ag",
.description = "LEA instruction needs inputs at AG stage",
.dependencies = &[_]*const Feature {
@ -445,7 +445,7 @@ pub const feature_lzcnt = Feature{
};
pub const feature_falseDepsLzcntTzcnt = Feature{
.name = "false-deps-lzcnt-tzcnt",
.name = "falseDepsLzcntTzcnt",
.llvm_name = "false-deps-lzcnt-tzcnt",
.description = "LZCNT/TZCNT have a false dependency on dest register",
.dependencies = &[_]*const Feature {
@ -501,7 +501,7 @@ pub const feature_macrofusion = Feature{
};
pub const feature_mergeToThreewayBranch = Feature{
.name = "merge-to-threeway-branch",
.name = "mergeToThreewayBranch",
.llvm_name = "merge-to-threeway-branch",
.description = "Merge branches to a three-way conditional branch",
.dependencies = &[_]*const Feature {
@ -559,7 +559,7 @@ pub const feature_popcnt = Feature{
};
pub const feature_falseDepsPopcnt = Feature{
.name = "false-deps-popcnt",
.name = "falseDepsPopcnt",
.llvm_name = "false-deps-popcnt",
.description = "POPCNT has a false dependency on dest register",
.dependencies = &[_]*const Feature {
@ -591,7 +591,7 @@ pub const feature_ptwrite = Feature{
};
pub const feature_padShortFunctions = Feature{
.name = "pad-short-functions",
.name = "padShortFunctions",
.llvm_name = "pad-short-functions",
.description = "Pad short functions",
.dependencies = &[_]*const Feature {
@ -599,7 +599,7 @@ pub const feature_padShortFunctions = Feature{
};
pub const feature_prefer128Bit = Feature{
.name = "prefer-128-bit",
.name = "prefer128Bit",
.llvm_name = "prefer-128-bit",
.description = "Prefer 128-bit AVX instructions",
.dependencies = &[_]*const Feature {
@ -607,7 +607,7 @@ pub const feature_prefer128Bit = Feature{
};
pub const feature_prefer256Bit = Feature{
.name = "prefer-256-bit",
.name = "prefer256Bit",
.llvm_name = "prefer-256-bit",
.description = "Prefer 256-bit AVX instructions",
.dependencies = &[_]*const Feature {
@ -657,7 +657,7 @@ pub const feature_retpoline = Feature{
};
pub const feature_retpolineExternalThunk = Feature{
.name = "retpoline-external-thunk",
.name = "retpolineExternalThunk",
.llvm_name = "retpoline-external-thunk",
.description = "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature",
.dependencies = &[_]*const Feature {
@ -666,7 +666,7 @@ pub const feature_retpolineExternalThunk = Feature{
};
pub const feature_retpolineIndirectBranches = Feature{
.name = "retpoline-indirect-branches",
.name = "retpolineIndirectBranches",
.llvm_name = "retpoline-indirect-branches",
.description = "Remove speculation of indirect branches from the generated code",
.dependencies = &[_]*const Feature {
@ -674,7 +674,7 @@ pub const feature_retpolineIndirectBranches = Feature{
};
pub const feature_retpolineIndirectCalls = Feature{
.name = "retpoline-indirect-calls",
.name = "retpolineIndirectCalls",
.llvm_name = "retpoline-indirect-calls",
.description = "Remove speculation of indirect calls from the generated code",
.dependencies = &[_]*const Feature {
@ -742,7 +742,7 @@ pub const feature_sse4a = Feature{
};
pub const feature_sse41 = Feature{
.name = "sse4.1",
.name = "sse41",
.llvm_name = "sse4.1",
.description = "Enable SSE 4.1 instructions",
.dependencies = &[_]*const Feature {
@ -751,7 +751,7 @@ pub const feature_sse41 = Feature{
};
pub const feature_sse42 = Feature{
.name = "sse4.2",
.name = "sse42",
.llvm_name = "sse4.2",
.description = "Enable SSE 4.2 instructions",
.dependencies = &[_]*const Feature {
@ -760,7 +760,7 @@ pub const feature_sse42 = Feature{
};
pub const feature_sseUnalignedMem = Feature{
.name = "sse-unaligned-mem",
.name = "sseUnalignedMem",
.llvm_name = "sse-unaligned-mem",
.description = "Allow unaligned memory operands with SSE instructions",
.dependencies = &[_]*const Feature {
@ -777,7 +777,7 @@ pub const feature_ssse3 = Feature{
};
pub const feature_slow3opsLea = Feature{
.name = "slow-3ops-lea",
.name = "slow3opsLea",
.llvm_name = "slow-3ops-lea",
.description = "LEA instruction with 3 ops or certain registers is slow",
.dependencies = &[_]*const Feature {
@ -785,7 +785,7 @@ pub const feature_slow3opsLea = Feature{
};
pub const feature_idivlToDivb = Feature{
.name = "idivl-to-divb",
.name = "idivlToDivb",
.llvm_name = "idivl-to-divb",
.description = "Use 8-bit divide for positive values less than 256",
.dependencies = &[_]*const Feature {
@ -793,7 +793,7 @@ pub const feature_idivlToDivb = Feature{
};
pub const feature_idivqToDivl = Feature{
.name = "idivq-to-divl",
.name = "idivqToDivl",
.llvm_name = "idivq-to-divl",
.description = "Use 32-bit divide for positive values less than 2^32",
.dependencies = &[_]*const Feature {
@ -801,7 +801,7 @@ pub const feature_idivqToDivl = Feature{
};
pub const feature_slowIncdec = Feature{
.name = "slow-incdec",
.name = "slowIncdec",
.llvm_name = "slow-incdec",
.description = "INC and DEC instructions are slower than ADD and SUB",
.dependencies = &[_]*const Feature {
@ -809,7 +809,7 @@ pub const feature_slowIncdec = Feature{
};
pub const feature_slowLea = Feature{
.name = "slow-lea",
.name = "slowLea",
.llvm_name = "slow-lea",
.description = "LEA instruction with certain arguments is slow",
.dependencies = &[_]*const Feature {
@ -817,7 +817,7 @@ pub const feature_slowLea = Feature{
};
pub const feature_slowPmaddwd = Feature{
.name = "slow-pmaddwd",
.name = "slowPmaddwd",
.llvm_name = "slow-pmaddwd",
.description = "PMADDWD is slower than PMULLD",
.dependencies = &[_]*const Feature {
@ -825,7 +825,7 @@ pub const feature_slowPmaddwd = Feature{
};
pub const feature_slowPmulld = Feature{
.name = "slow-pmulld",
.name = "slowPmulld",
.llvm_name = "slow-pmulld",
.description = "PMULLD instruction is slow",
.dependencies = &[_]*const Feature {
@ -833,7 +833,7 @@ pub const feature_slowPmulld = Feature{
};
pub const feature_slowShld = Feature{
.name = "slow-shld",
.name = "slowShld",
.llvm_name = "slow-shld",
.description = "SHLD instruction is slow",
.dependencies = &[_]*const Feature {
@ -841,7 +841,7 @@ pub const feature_slowShld = Feature{
};
pub const feature_slowTwoMemOps = Feature{
.name = "slow-two-mem-ops",
.name = "slowTwoMemOps",
.llvm_name = "slow-two-mem-ops",
.description = "Two memory operand instructions are slow",
.dependencies = &[_]*const Feature {
@ -849,7 +849,7 @@ pub const feature_slowTwoMemOps = Feature{
};
pub const feature_slowUnalignedMem16 = Feature{
.name = "slow-unaligned-mem-16",
.name = "slowUnalignedMem16",
.llvm_name = "slow-unaligned-mem-16",
.description = "Slow unaligned 16-byte memory access",
.dependencies = &[_]*const Feature {
@ -857,7 +857,7 @@ pub const feature_slowUnalignedMem16 = Feature{
};
pub const feature_slowUnalignedMem32 = Feature{
.name = "slow-unaligned-mem-32",
.name = "slowUnalignedMem32",
.llvm_name = "slow-unaligned-mem-32",
.description = "Slow unaligned 32-byte memory access",
.dependencies = &[_]*const Feature {
@ -865,7 +865,7 @@ pub const feature_slowUnalignedMem32 = Feature{
};
pub const feature_softFloat = Feature{
.name = "soft-float",
.name = "softFloat",
.llvm_name = "soft-float",
.description = "Use software floating point features",
.dependencies = &[_]*const Feature {
@ -881,7 +881,7 @@ pub const feature_tbm = Feature{
};
pub const feature_useAa = Feature{
.name = "use-aa",
.name = "useAa",
.llvm_name = "use-aa",
.description = "Use alias analysis during codegen",
.dependencies = &[_]*const Feature {
@ -1026,7 +1026,7 @@ pub const feature_xsaves = Feature{
};
pub const feature_bitMode16 = Feature{
.name = "16bit-mode",
.name = "bitMode16",
.llvm_name = "16bit-mode",
.description = "16-bit mode (i8086)",
.dependencies = &[_]*const Feature {
@ -1034,7 +1034,7 @@ pub const feature_bitMode16 = Feature{
};
pub const feature_bitMode32 = Feature{
.name = "32bit-mode",
.name = "bitMode32",
.llvm_name = "32bit-mode",
.description = "32-bit mode (80386)",
.dependencies = &[_]*const Feature {
@ -1042,7 +1042,7 @@ pub const feature_bitMode32 = Feature{
};
pub const feature_bitMode64 = Feature{
.name = "64bit-mode",
.name = "bitMode64",
.llvm_name = "64bit-mode",
.description = "64-bit mode (x86_64)",
.dependencies = &[_]*const Feature {
@ -1217,7 +1217,7 @@ pub const cpu_athlon = Cpu{
};
pub const cpu_athlon4 = Cpu{
.name = "athlon-4",
.name = "athlon4",
.llvm_name = "athlon-4",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1234,7 +1234,7 @@ pub const cpu_athlon4 = Cpu{
};
pub const cpu_athlonFx = Cpu{
.name = "athlon-fx",
.name = "athlonFx",
.llvm_name = "athlon-fx",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1254,7 +1254,7 @@ pub const cpu_athlonFx = Cpu{
};
pub const cpu_athlonMp = Cpu{
.name = "athlon-mp",
.name = "athlonMp",
.llvm_name = "athlon-mp",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1271,7 +1271,7 @@ pub const cpu_athlonMp = Cpu{
};
pub const cpu_athlonTbird = Cpu{
.name = "athlon-tbird",
.name = "athlonTbird",
.llvm_name = "athlon-tbird",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1286,7 +1286,7 @@ pub const cpu_athlonTbird = Cpu{
};
pub const cpu_athlonXp = Cpu{
.name = "athlon-xp",
.name = "athlonXp",
.llvm_name = "athlon-xp",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1323,7 +1323,7 @@ pub const cpu_athlon64 = Cpu{
};
pub const cpu_athlon64Sse3 = Cpu{
.name = "athlon64-sse3",
.name = "athlon64Sse3",
.llvm_name = "athlon64-sse3",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -1678,7 +1678,7 @@ pub const cpu_c3 = Cpu{
};
pub const cpu_c32 = Cpu{
.name = "c3-2",
.name = "c32",
.llvm_name = "c3-2",
.dependencies = &[_]*const Feature {
&feature_cmov,
@ -1874,7 +1874,7 @@ pub const cpu_cooperlake = Cpu{
};
pub const cpu_coreAvxI = Cpu{
.name = "core-avx-i",
.name = "coreAvxI",
.llvm_name = "core-avx-i",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -1908,7 +1908,7 @@ pub const cpu_coreAvxI = Cpu{
};
pub const cpu_coreAvx2 = Cpu{
.name = "core-avx2",
.name = "coreAvx2",
.llvm_name = "core-avx2",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -1991,7 +1991,7 @@ pub const cpu_corei7 = Cpu{
};
pub const cpu_corei7Avx = Cpu{
.name = "corei7-avx",
.name = "corei7Avx",
.llvm_name = "corei7-avx",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -2081,7 +2081,7 @@ pub const cpu_goldmont = Cpu{
};
pub const cpu_goldmontPlus = Cpu{
.name = "goldmont-plus",
.name = "goldmontPlus",
.llvm_name = "goldmont-plus",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -2202,7 +2202,7 @@ pub const cpu_i686 = Cpu{
};
pub const cpu_icelakeClient = Cpu{
.name = "icelake-client",
.name = "icelakeClient",
.llvm_name = "icelake-client",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -2272,7 +2272,7 @@ pub const cpu_icelakeClient = Cpu{
};
pub const cpu_icelakeServer = Cpu{
.name = "icelake-server",
.name = "icelakeServer",
.llvm_name = "icelake-server",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -2389,7 +2389,7 @@ pub const cpu_k6 = Cpu{
};
pub const cpu_k62 = Cpu{
.name = "k6-2",
.name = "k62",
.llvm_name = "k6-2",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -2401,7 +2401,7 @@ pub const cpu_k62 = Cpu{
};
pub const cpu_k63 = Cpu{
.name = "k6-3",
.name = "k63",
.llvm_name = "k6-3",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -2433,7 +2433,7 @@ pub const cpu_k8 = Cpu{
};
pub const cpu_k8Sse3 = Cpu{
.name = "k8-sse3",
.name = "k8Sse3",
.llvm_name = "k8-sse3",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -2610,7 +2610,7 @@ pub const cpu_opteron = Cpu{
};
pub const cpu_opteronSse3 = Cpu{
.name = "opteron-sse3",
.name = "opteronSse3",
.llvm_name = "opteron-sse3",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -2661,7 +2661,7 @@ pub const cpu_pentium = Cpu{
};
pub const cpu_pentiumM = Cpu{
.name = "pentium-m",
.name = "pentiumM",
.llvm_name = "pentium-m",
.dependencies = &[_]*const Feature {
&feature_cmov,
@ -2677,7 +2677,7 @@ pub const cpu_pentiumM = Cpu{
};
pub const cpu_pentiumMmx = Cpu{
.name = "pentium-mmx",
.name = "pentiumMmx",
.llvm_name = "pentium-mmx",
.dependencies = &[_]*const Feature {
&feature_cx8,
@ -2964,7 +2964,7 @@ pub const cpu_skylake = Cpu{
};
pub const cpu_skylakeAvx512 = Cpu{
.name = "skylake-avx512",
.name = "skylakeAvx512",
.llvm_name = "skylake-avx512",
.dependencies = &[_]*const Feature {
&feature_bit64,
@ -3192,7 +3192,7 @@ pub const cpu_westmere = Cpu{
};
pub const cpu_winchipC6 = Cpu{
.name = "winchip-c6",
.name = "winchipC6",
.llvm_name = "winchip-c6",
.dependencies = &[_]*const Feature {
&feature_mmx,
@ -3213,7 +3213,7 @@ pub const cpu_winchip2 = Cpu{
};
pub const cpu_x8664 = Cpu{
.name = "x86-64",
.name = "x8664",
.llvm_name = "x86-64",
.dependencies = &[_]*const Feature {
&feature_bit64,

View File

@ -623,6 +623,8 @@ const Stage2TargetDetails = struct {
llvm_cpu_str: [:0]const u8,
llvm_features_str: [:0]const u8,
builtin_str: [:0]const u8,
};
// ABI warning
@ -662,6 +664,16 @@ fn parseCpu(arch: @TagType(std.Target.Arch), str: []const u8) !*Stage2TargetDeta
if (std.mem.eql(u8, str, cpu.name)) {
const allocator = std.heap.c_allocator;
var builtin_str_buffer = try std.Buffer.init(
allocator,
"@import(\"std\").target.TargetDetails{.cpu=&@import(\"std\").target.");
defer builtin_str_buffer.deinit();
try builtin_str_buffer.append(@tagName(arch));
try builtin_str_buffer.append(".cpu_");
try builtin_str_buffer.append(cpu.name);
try builtin_str_buffer.append("};");
const ptr = try allocator.create(Stage2TargetDetails);
ptr.* = .{
.allocator = allocator,
@ -670,6 +682,7 @@ fn parseCpu(arch: @TagType(std.Target.Arch), str: []const u8) !*Stage2TargetDeta
},
.llvm_cpu_str = cpu.name,
.llvm_features_str = "",
.builtin_str = builtin_str_buffer.toOwnedSlice(),
};
return ptr;
@ -687,6 +700,11 @@ fn parseFeatures(arch: @TagType(std.Target.Arch), str: []const u8) !*Stage2Targe
var features = std.ArrayList(*const std.target.Feature).init(allocator);
defer features.deinit();
var builtin_str_buffer = try std.Buffer.init(
allocator,
"@import(\"std\").target.TargetDetails{.features=&[_]*const @import(\"std\").target.Feature{\n");
defer builtin_str_buffer.deinit();
var start: usize = 0;
while (start < str.len) {
const next_comma_pos = std.mem.indexOfScalar(u8, str[start..], ',') orelse str.len - start;
@ -706,10 +724,18 @@ fn parseFeatures(arch: @TagType(std.Target.Arch), str: []const u8) !*Stage2Targe
if (feature) |f| {
features.append(f) catch @panic("out of memory");
try builtin_str_buffer.append("&@import(\"std\").target.");
try builtin_str_buffer.append(@tagName(arch));
try builtin_str_buffer.append(".feature_");
try builtin_str_buffer.append(f.name);
try builtin_str_buffer.append(",");
} else {
return error.InvalidFeature;
}
}
try builtin_str_buffer.append("}};");
const features_slice = features.toOwnedSlice();
@ -730,6 +756,7 @@ fn parseFeatures(arch: @TagType(std.Target.Arch), str: []const u8) !*Stage2Targe
},
.llvm_cpu_str = "",
.llvm_features_str = llvm_features_buffer.toOwnedSlice(),
.builtin_str = builtin_str_buffer.toOwnedSlice(),
};
return ptr;
@ -764,3 +791,12 @@ export fn stage2_target_details_get_llvm_features(target_details: ?*const Stage2
return @as([*:0]const u8, "");
}
// ABI warning
export fn stage2_target_details_get_builtin_str(target_details: ?*const Stage2TargetDetails) [*:0]const u8 {
if (target_details) |td| {
return @as([*:0]const u8, td.builtin_str);
}
return @as([*:0]const u8, "");
}

View File

@ -8607,6 +8607,14 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
"pub var test_functions: []TestFn = undefined; // overwritten later\n"
);
}
buf_appendf(contents, "pub const target_details: ?@import(\"std\").target.TargetDetails = ");
if (g->target_details) {
buf_appendf(contents, "%s", stage2_target_details_get_builtin_str(g->target_details));
} else {
buf_appendf(contents, "null;");
}
buf_appendf(contents, "\n");
return contents;
}

View File

@ -1074,6 +1074,24 @@ int main(int argc, char **argv) {
}
}
Stage2TargetDetails *target_details = nullptr;
if (cpu && features) {
fprintf(stderr, "--cpu and --features options not allowed together\n");
return main_exit(root_progress_node, EXIT_FAILURE);
} else if (cpu) {
target_details = stage2_target_details_parse_cpu(target_arch_name(target.arch), cpu);
if (!target_details) {
fprintf(stderr, "invalid --cpu value\n");
return main_exit(root_progress_node, EXIT_FAILURE);
}
} else if (features) {
target_details = stage2_target_details_parse_features(target_arch_name(target.arch), features);
if (!target_details) {
fprintf(stderr, "invalid --features value\n");
return main_exit(root_progress_node, EXIT_FAILURE);
}
}
if (output_dir != nullptr && enable_cache == CacheOptOn) {
fprintf(stderr, "`--output-dir` is incompatible with --cache on.\n");
return print_error_usage(arg0);
@ -1124,6 +1142,7 @@ int main(int argc, char **argv) {
g->want_stack_check = want_stack_check;
g->want_sanitize_c = want_sanitize_c;
g->want_single_threaded = want_single_threaded;
g->target_details = target_details;
Buf *builtin_source = codegen_generate_builtin_source(g);
if (fwrite(buf_ptr(builtin_source), 1, buf_len(builtin_source), stdout) != buf_len(builtin_source)) {
fprintf(stderr, "unable to write to stdout: %s\n", strerror(ferror(stdout)));
@ -1278,24 +1297,6 @@ int main(int argc, char **argv) {
codegen_add_rpath(g, rpath_list.at(i));
}
Stage2TargetDetails *target_details = nullptr;
if (cpu && features) {
fprintf(stderr, "--cpu and --features options not allowed together\n");
return main_exit(root_progress_node, EXIT_FAILURE);
} else if (cpu) {
target_details = stage2_target_details_parse_cpu(target_arch_name(target.arch), cpu);
if (!target_details) {
fprintf(stderr, "invalid --cpu value\n");
return main_exit(root_progress_node, EXIT_FAILURE);
}
} else if (features) {
target_details = stage2_target_details_parse_features(target_arch_name(target.arch), features);
if (!target_details) {
fprintf(stderr, "invalid --features value\n");
return main_exit(root_progress_node, EXIT_FAILURE);
}
}
g->target_details = target_details;
codegen_set_rdynamic(g, rdynamic);

View File

@ -106,3 +106,6 @@ const char *stage2_target_details_get_llvm_cpu(const Stage2TargetDetails *target
const char *stage2_target_details_get_llvm_features(const Stage2TargetDetails *target_details) {
return "";
}
const char *stage2_target_details_get_builtin_str(const Stage2TargetDetails *target_details) {
return "";
}

View File

@ -198,4 +198,7 @@ ZIG_EXTERN_C const char *stage2_target_details_get_llvm_cpu(const Stage2TargetDe
// ABI warning
ZIG_EXTERN_C const char *stage2_target_details_get_llvm_features(const Stage2TargetDetails *target_details);
// ABI warning
ZIG_EXTERN_C const char *stage2_target_details_get_builtin_str(const Stage2TargetDetails *target_details);
#endif