import data from llvm 9

This commit is contained in:
Andrew Kelley 2020-01-20 22:21:45 -05:00
parent f3dd9bbdac
commit 6e88883edf
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
15 changed files with 12100 additions and 14879 deletions

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

@ -1,75 +1,77 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_alu32 = Feature{
.name = "alu32",
.llvm_name = "alu32",
.description = "Enable ALU32 instructions",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
alu32,
dummy,
dwarfris,
};
pub const feature_dummy = Feature{
.name = "dummy",
.llvm_name = "dummy",
.description = "unused feature",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.alu32)] = .{
.index = @enumToInt(Feature.alu32),
.name = @tagName(Feature.alu32),
.llvm_name = "alu32",
.description = "Enable ALU32 instructions",
.dependencies = 0,
};
result[@enumToInt(Feature.dummy)] = .{
.index = @enumToInt(Feature.dummy),
.name = @tagName(Feature.dummy),
.llvm_name = "dummy",
.description = "unused feature",
.dependencies = 0,
};
result[@enumToInt(Feature.dwarfris)] = .{
.index = @enumToInt(Feature.dwarfris),
.name = @tagName(Feature.dwarfris),
.llvm_name = "dwarfris",
.description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
.dependencies = 0,
};
break :blk result;
};
pub const feature_dwarfris = Feature{
.name = "dwarfris",
.llvm_name = "dwarfris",
.description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.features = 0,
};
pub const probe = Cpu{
.name = "probe",
.llvm_name = "probe",
.features = 0,
};
pub const v1 = Cpu{
.name = "v1",
.llvm_name = "v1",
.features = 0,
};
pub const v2 = Cpu{
.name = "v2",
.llvm_name = "v2",
.features = 0,
};
pub const v3 = Cpu{
.name = "v3",
.llvm_name = "v3",
.features = 0,
};
};
pub const features = &[_]*const Feature {
&feature_alu32,
&feature_dummy,
&feature_dwarfris,
};
pub const cpu_generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_probe = Cpu{
.name = "probe",
.llvm_name = "probe",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_v1 = Cpu{
.name = "v1",
.llvm_name = "v1",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_v2 = Cpu{
.name = "v2",
.llvm_name = "v2",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_v3 = Cpu{
.name = "v3",
.llvm_name = "v3",
.dependencies = &[_]*const Feature {
},
};
pub const cpus = &[_]*const Cpu {
&cpu_generic,
&cpu_probe,
&cpu_v1,
&cpu_v2,
&cpu_v3,
/// All bpf CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.generic,
&cpu.probe,
&cpu.v1,
&cpu.v2,
&cpu.v3,
};

View File

@ -1,200 +1,355 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_duplex = Feature{
.name = "duplex",
.llvm_name = "duplex",
.description = "Enable generation of duplex instruction",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
duplex,
hvx,
hvx_length128b,
hvx_length64b,
hvxv60,
hvxv62,
hvxv65,
hvxv66,
long_calls,
mem_noshuf,
memops,
noreturn_stack_elim,
nvj,
nvs,
packets,
reserved_r19,
small_data,
v5,
v55,
v60,
v62,
v65,
v66,
zreg,
};
pub const feature_longCalls = Feature{
.name = "longCalls",
.llvm_name = "long-calls",
.description = "Use constant-extended calls",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.duplex)] = .{
.index = @enumToInt(Feature.duplex),
.name = @tagName(Feature.duplex),
.llvm_name = "duplex",
.description = "Enable generation of duplex instruction",
.dependencies = 0,
};
result[@enumToInt(Feature.hvx)] = .{
.index = @enumToInt(Feature.hvx),
.name = @tagName(Feature.hvx),
.llvm_name = "hvx",
.description = "Hexagon HVX instructions",
.dependencies = 0,
};
result[@enumToInt(Feature.hvx_length128b)] = .{
.index = @enumToInt(Feature.hvx_length128b),
.name = @tagName(Feature.hvx_length128b),
.llvm_name = "hvx-length128b",
.description = "Hexagon HVX 128B instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
}),
};
result[@enumToInt(Feature.hvx_length64b)] = .{
.index = @enumToInt(Feature.hvx_length64b),
.name = @tagName(Feature.hvx_length64b),
.llvm_name = "hvx-length64b",
.description = "Hexagon HVX 64B instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
}),
};
result[@enumToInt(Feature.hvxv60)] = .{
.index = @enumToInt(Feature.hvxv60),
.name = @tagName(Feature.hvxv60),
.llvm_name = "hvxv60",
.description = "Hexagon HVX instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
}),
};
result[@enumToInt(Feature.hvxv62)] = .{
.index = @enumToInt(Feature.hvxv62),
.name = @tagName(Feature.hvxv62),
.llvm_name = "hvxv62",
.description = "Hexagon HVX instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
.hvxv60,
}),
};
result[@enumToInt(Feature.hvxv65)] = .{
.index = @enumToInt(Feature.hvxv65),
.name = @tagName(Feature.hvxv65),
.llvm_name = "hvxv65",
.description = "Hexagon HVX instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
.hvxv60,
.hvxv62,
}),
};
result[@enumToInt(Feature.hvxv66)] = .{
.index = @enumToInt(Feature.hvxv66),
.name = @tagName(Feature.hvxv66),
.llvm_name = "hvxv66",
.description = "Hexagon HVX instructions",
.dependencies = featureSet(&[_]Feature{
.hvx,
.hvxv60,
.hvxv62,
.hvxv65,
.zreg,
}),
};
result[@enumToInt(Feature.long_calls)] = .{
.index = @enumToInt(Feature.long_calls),
.name = @tagName(Feature.long_calls),
.llvm_name = "long-calls",
.description = "Use constant-extended calls",
.dependencies = 0,
};
result[@enumToInt(Feature.mem_noshuf)] = .{
.index = @enumToInt(Feature.mem_noshuf),
.name = @tagName(Feature.mem_noshuf),
.llvm_name = "mem_noshuf",
.description = "Supports mem_noshuf feature",
.dependencies = 0,
};
result[@enumToInt(Feature.memops)] = .{
.index = @enumToInt(Feature.memops),
.name = @tagName(Feature.memops),
.llvm_name = "memops",
.description = "Use memop instructions",
.dependencies = 0,
};
result[@enumToInt(Feature.noreturn_stack_elim)] = .{
.index = @enumToInt(Feature.noreturn_stack_elim),
.name = @tagName(Feature.noreturn_stack_elim),
.llvm_name = "noreturn-stack-elim",
.description = "Eliminate stack allocation in a noreturn function when possible",
.dependencies = 0,
};
result[@enumToInt(Feature.nvj)] = .{
.index = @enumToInt(Feature.nvj),
.name = @tagName(Feature.nvj),
.llvm_name = "nvj",
.description = "Support for new-value jumps",
.dependencies = featureSet(&[_]Feature{
.packets,
}),
};
result[@enumToInt(Feature.nvs)] = .{
.index = @enumToInt(Feature.nvs),
.name = @tagName(Feature.nvs),
.llvm_name = "nvs",
.description = "Support for new-value stores",
.dependencies = featureSet(&[_]Feature{
.packets,
}),
};
result[@enumToInt(Feature.packets)] = .{
.index = @enumToInt(Feature.packets),
.name = @tagName(Feature.packets),
.llvm_name = "packets",
.description = "Support for instruction packets",
.dependencies = 0,
};
result[@enumToInt(Feature.reserved_r19)] = .{
.index = @enumToInt(Feature.reserved_r19),
.name = @tagName(Feature.reserved_r19),
.llvm_name = "reserved-r19",
.description = "Reserve register R19",
.dependencies = 0,
};
result[@enumToInt(Feature.small_data)] = .{
.index = @enumToInt(Feature.small_data),
.name = @tagName(Feature.small_data),
.llvm_name = "small-data",
.description = "Allow GP-relative addressing of global variables",
.dependencies = 0,
};
result[@enumToInt(Feature.v5)] = .{
.index = @enumToInt(Feature.v5),
.name = @tagName(Feature.v5),
.llvm_name = "v5",
.description = "Enable Hexagon V5 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.v55)] = .{
.index = @enumToInt(Feature.v55),
.name = @tagName(Feature.v55),
.llvm_name = "v55",
.description = "Enable Hexagon V55 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.v60)] = .{
.index = @enumToInt(Feature.v60),
.name = @tagName(Feature.v60),
.llvm_name = "v60",
.description = "Enable Hexagon V60 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.v62)] = .{
.index = @enumToInt(Feature.v62),
.name = @tagName(Feature.v62),
.llvm_name = "v62",
.description = "Enable Hexagon V62 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.v65)] = .{
.index = @enumToInt(Feature.v65),
.name = @tagName(Feature.v65),
.llvm_name = "v65",
.description = "Enable Hexagon V65 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.v66)] = .{
.index = @enumToInt(Feature.v66),
.name = @tagName(Feature.v66),
.llvm_name = "v66",
.description = "Enable Hexagon V66 architecture",
.dependencies = 0,
};
result[@enumToInt(Feature.zreg)] = .{
.index = @enumToInt(Feature.zreg),
.name = @tagName(Feature.zreg),
.llvm_name = "zreg",
.description = "Hexagon ZReg extension instructions",
.dependencies = 0,
};
break :blk result;
};
pub const feature_mem_noshuf = Feature{
.name = "mem_noshuf",
.llvm_name = "mem_noshuf",
.description = "Supports mem_noshuf feature",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.features = featureSet(&[_]Feature{
.duplex,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
.v60,
}),
};
pub const hexagonv5 = Cpu{
.name = "hexagonv5",
.llvm_name = "hexagonv5",
.features = featureSet(&[_]Feature{
.duplex,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
}),
};
pub const hexagonv55 = Cpu{
.name = "hexagonv55",
.llvm_name = "hexagonv55",
.features = featureSet(&[_]Feature{
.duplex,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
}),
};
pub const hexagonv60 = Cpu{
.name = "hexagonv60",
.llvm_name = "hexagonv60",
.features = featureSet(&[_]Feature{
.duplex,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
.v60,
}),
};
pub const hexagonv62 = Cpu{
.name = "hexagonv62",
.llvm_name = "hexagonv62",
.features = featureSet(&[_]Feature{
.duplex,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
.v60,
.v62,
}),
};
pub const hexagonv65 = Cpu{
.name = "hexagonv65",
.llvm_name = "hexagonv65",
.features = featureSet(&[_]Feature{
.duplex,
.mem_noshuf,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
.v60,
.v62,
.v65,
}),
};
pub const hexagonv66 = Cpu{
.name = "hexagonv66",
.llvm_name = "hexagonv66",
.features = featureSet(&[_]Feature{
.duplex,
.mem_noshuf,
.memops,
.nvj,
.nvs,
.packets,
.small_data,
.v5,
.v55,
.v60,
.v62,
.v65,
.v66,
}),
};
};
pub const feature_memops = Feature{
.name = "memops",
.llvm_name = "memops",
.description = "Use memop instructions",
.dependencies = &[_]*const Feature {
},
};
pub const feature_nvj = Feature{
.name = "nvj",
.llvm_name = "nvj",
.description = "Support for new-value jumps",
.dependencies = &[_]*const Feature {
&feature_packets,
},
};
pub const feature_nvs = Feature{
.name = "nvs",
.llvm_name = "nvs",
.description = "Support for new-value stores",
.dependencies = &[_]*const Feature {
&feature_packets,
},
};
pub const feature_noreturnStackElim = Feature{
.name = "noreturnStackElim",
.llvm_name = "noreturn-stack-elim",
.description = "Eliminate stack allocation in a noreturn function when possible",
.dependencies = &[_]*const Feature {
},
};
pub const feature_packets = Feature{
.name = "packets",
.llvm_name = "packets",
.description = "Support for instruction packets",
.dependencies = &[_]*const Feature {
},
};
pub const feature_reservedR19 = Feature{
.name = "reservedR19",
.llvm_name = "reserved-r19",
.description = "Reserve register R19",
.dependencies = &[_]*const Feature {
},
};
pub const feature_smallData = Feature{
.name = "smallData",
.llvm_name = "small-data",
.description = "Allow GP-relative addressing of global variables",
.dependencies = &[_]*const Feature {
},
};
pub const features = &[_]*const Feature {
&feature_duplex,
&feature_longCalls,
&feature_mem_noshuf,
&feature_memops,
&feature_nvj,
&feature_nvs,
&feature_noreturnStackElim,
&feature_packets,
&feature_reservedR19,
&feature_smallData,
};
pub const cpu_generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv5 = Cpu{
.name = "hexagonv5",
.llvm_name = "hexagonv5",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv55 = Cpu{
.name = "hexagonv55",
.llvm_name = "hexagonv55",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv60 = Cpu{
.name = "hexagonv60",
.llvm_name = "hexagonv60",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv62 = Cpu{
.name = "hexagonv62",
.llvm_name = "hexagonv62",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv65 = Cpu{
.name = "hexagonv65",
.llvm_name = "hexagonv65",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_mem_noshuf,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpu_hexagonv66 = Cpu{
.name = "hexagonv66",
.llvm_name = "hexagonv66",
.dependencies = &[_]*const Feature {
&feature_duplex,
&feature_mem_noshuf,
&feature_memops,
&feature_packets,
&feature_nvj,
&feature_nvs,
&feature_smallData,
},
};
pub const cpus = &[_]*const Cpu {
&cpu_generic,
&cpu_hexagonv5,
&cpu_hexagonv55,
&cpu_hexagonv60,
&cpu_hexagonv62,
&cpu_hexagonv65,
&cpu_hexagonv66,
/// All hexagon CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.generic,
&cpu.hexagonv5,
&cpu.hexagonv55,
&cpu.hexagonv60,
&cpu.hexagonv62,
&cpu.hexagonv65,
&cpu.hexagonv66,
};

File diff suppressed because it is too large Load Diff

View File

@ -1,69 +1,75 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_hwmult16 = Feature{
.name = "hwmult16",
.llvm_name = "hwmult16",
.description = "Enable 16-bit hardware multiplier",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
ext,
hwmult16,
hwmult32,
hwmultf5,
};
pub const feature_hwmult32 = Feature{
.name = "hwmult32",
.llvm_name = "hwmult32",
.description = "Enable 32-bit hardware multiplier",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.ext)] = .{
.index = @enumToInt(Feature.ext),
.name = @tagName(Feature.ext),
.llvm_name = "ext",
.description = "Enable MSP430-X extensions",
.dependencies = 0,
};
result[@enumToInt(Feature.hwmult16)] = .{
.index = @enumToInt(Feature.hwmult16),
.name = @tagName(Feature.hwmult16),
.llvm_name = "hwmult16",
.description = "Enable 16-bit hardware multiplier",
.dependencies = 0,
};
result[@enumToInt(Feature.hwmult32)] = .{
.index = @enumToInt(Feature.hwmult32),
.name = @tagName(Feature.hwmult32),
.llvm_name = "hwmult32",
.description = "Enable 32-bit hardware multiplier",
.dependencies = 0,
};
result[@enumToInt(Feature.hwmultf5)] = .{
.index = @enumToInt(Feature.hwmultf5),
.name = @tagName(Feature.hwmultf5),
.llvm_name = "hwmultf5",
.description = "Enable F5 series hardware multiplier",
.dependencies = 0,
};
break :blk result;
};
pub const feature_hwmultf5 = Feature{
.name = "hwmultf5",
.llvm_name = "hwmultf5",
.description = "Enable F5 series hardware multiplier",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.features = 0,
};
pub const msp430 = Cpu{
.name = "msp430",
.llvm_name = "msp430",
.features = 0,
};
pub const msp430x = Cpu{
.name = "msp430x",
.llvm_name = "msp430x",
.features = featureSet(&[_]Feature{
.ext,
}),
};
};
pub const feature_ext = Feature{
.name = "ext",
.llvm_name = "ext",
.description = "Enable MSP430-X extensions",
.dependencies = &[_]*const Feature {
},
};
pub const features = &[_]*const Feature {
&feature_hwmult16,
&feature_hwmult32,
&feature_hwmultf5,
&feature_ext,
};
pub const cpu_generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_msp430 = Cpu{
.name = "msp430",
.llvm_name = "msp430",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_msp430x = Cpu{
.name = "msp430x",
.llvm_name = "msp430x",
.dependencies = &[_]*const Feature {
&feature_ext,
},
};
pub const cpus = &[_]*const Cpu {
&cpu_generic,
&cpu_msp430,
&cpu_msp430x,
/// All msp430 CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.generic,
&cpu.msp430,
&cpu.msp430x,
};

View File

@ -1,379 +1,354 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_ptx32 = Feature{
.name = "ptx32",
.llvm_name = "ptx32",
.description = "Use PTX version 3.2",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
ptx32,
ptx40,
ptx41,
ptx42,
ptx43,
ptx50,
ptx60,
ptx61,
ptx63,
ptx64,
sm_20,
sm_21,
sm_30,
sm_32,
sm_35,
sm_37,
sm_50,
sm_52,
sm_53,
sm_60,
sm_61,
sm_62,
sm_70,
sm_72,
sm_75,
};
pub const feature_ptx40 = Feature{
.name = "ptx40",
.llvm_name = "ptx40",
.description = "Use PTX version 4.0",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.ptx32)] = .{
.index = @enumToInt(Feature.ptx32),
.name = @tagName(Feature.ptx32),
.llvm_name = "ptx32",
.description = "Use PTX version 3.2",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx40)] = .{
.index = @enumToInt(Feature.ptx40),
.name = @tagName(Feature.ptx40),
.llvm_name = "ptx40",
.description = "Use PTX version 4.0",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx41)] = .{
.index = @enumToInt(Feature.ptx41),
.name = @tagName(Feature.ptx41),
.llvm_name = "ptx41",
.description = "Use PTX version 4.1",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx42)] = .{
.index = @enumToInt(Feature.ptx42),
.name = @tagName(Feature.ptx42),
.llvm_name = "ptx42",
.description = "Use PTX version 4.2",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx43)] = .{
.index = @enumToInt(Feature.ptx43),
.name = @tagName(Feature.ptx43),
.llvm_name = "ptx43",
.description = "Use PTX version 4.3",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx50)] = .{
.index = @enumToInt(Feature.ptx50),
.name = @tagName(Feature.ptx50),
.llvm_name = "ptx50",
.description = "Use PTX version 5.0",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx60)] = .{
.index = @enumToInt(Feature.ptx60),
.name = @tagName(Feature.ptx60),
.llvm_name = "ptx60",
.description = "Use PTX version 6.0",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx61)] = .{
.index = @enumToInt(Feature.ptx61),
.name = @tagName(Feature.ptx61),
.llvm_name = "ptx61",
.description = "Use PTX version 6.1",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx63)] = .{
.index = @enumToInt(Feature.ptx63),
.name = @tagName(Feature.ptx63),
.llvm_name = "ptx63",
.description = "Use PTX version 6.3",
.dependencies = 0,
};
result[@enumToInt(Feature.ptx64)] = .{
.index = @enumToInt(Feature.ptx64),
.name = @tagName(Feature.ptx64),
.llvm_name = "ptx64",
.description = "Use PTX version 6.4",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_20)] = .{
.index = @enumToInt(Feature.sm_20),
.name = @tagName(Feature.sm_20),
.llvm_name = "sm_20",
.description = "Target SM 2.0",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_21)] = .{
.index = @enumToInt(Feature.sm_21),
.name = @tagName(Feature.sm_21),
.llvm_name = "sm_21",
.description = "Target SM 2.1",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_30)] = .{
.index = @enumToInt(Feature.sm_30),
.name = @tagName(Feature.sm_30),
.llvm_name = "sm_30",
.description = "Target SM 3.0",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_32)] = .{
.index = @enumToInt(Feature.sm_32),
.name = @tagName(Feature.sm_32),
.llvm_name = "sm_32",
.description = "Target SM 3.2",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_35)] = .{
.index = @enumToInt(Feature.sm_35),
.name = @tagName(Feature.sm_35),
.llvm_name = "sm_35",
.description = "Target SM 3.5",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_37)] = .{
.index = @enumToInt(Feature.sm_37),
.name = @tagName(Feature.sm_37),
.llvm_name = "sm_37",
.description = "Target SM 3.7",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_50)] = .{
.index = @enumToInt(Feature.sm_50),
.name = @tagName(Feature.sm_50),
.llvm_name = "sm_50",
.description = "Target SM 5.0",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_52)] = .{
.index = @enumToInt(Feature.sm_52),
.name = @tagName(Feature.sm_52),
.llvm_name = "sm_52",
.description = "Target SM 5.2",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_53)] = .{
.index = @enumToInt(Feature.sm_53),
.name = @tagName(Feature.sm_53),
.llvm_name = "sm_53",
.description = "Target SM 5.3",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_60)] = .{
.index = @enumToInt(Feature.sm_60),
.name = @tagName(Feature.sm_60),
.llvm_name = "sm_60",
.description = "Target SM 6.0",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_61)] = .{
.index = @enumToInt(Feature.sm_61),
.name = @tagName(Feature.sm_61),
.llvm_name = "sm_61",
.description = "Target SM 6.1",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_62)] = .{
.index = @enumToInt(Feature.sm_62),
.name = @tagName(Feature.sm_62),
.llvm_name = "sm_62",
.description = "Target SM 6.2",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_70)] = .{
.index = @enumToInt(Feature.sm_70),
.name = @tagName(Feature.sm_70),
.llvm_name = "sm_70",
.description = "Target SM 7.0",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_72)] = .{
.index = @enumToInt(Feature.sm_72),
.name = @tagName(Feature.sm_72),
.llvm_name = "sm_72",
.description = "Target SM 7.2",
.dependencies = 0,
};
result[@enumToInt(Feature.sm_75)] = .{
.index = @enumToInt(Feature.sm_75),
.name = @tagName(Feature.sm_75),
.llvm_name = "sm_75",
.description = "Target SM 7.5",
.dependencies = 0,
};
break :blk result;
};
pub const feature_ptx41 = Feature{
.name = "ptx41",
.llvm_name = "ptx41",
.description = "Use PTX version 4.1",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const sm_20 = Cpu{
.name = "sm_20",
.llvm_name = "sm_20",
.features = featureSet(&[_]Feature{
.sm_20,
}),
};
pub const sm_21 = Cpu{
.name = "sm_21",
.llvm_name = "sm_21",
.features = featureSet(&[_]Feature{
.sm_21,
}),
};
pub const sm_30 = Cpu{
.name = "sm_30",
.llvm_name = "sm_30",
.features = featureSet(&[_]Feature{
.sm_30,
}),
};
pub const sm_32 = Cpu{
.name = "sm_32",
.llvm_name = "sm_32",
.features = featureSet(&[_]Feature{
.ptx40,
.sm_32,
}),
};
pub const sm_35 = Cpu{
.name = "sm_35",
.llvm_name = "sm_35",
.features = featureSet(&[_]Feature{
.sm_35,
}),
};
pub const sm_37 = Cpu{
.name = "sm_37",
.llvm_name = "sm_37",
.features = featureSet(&[_]Feature{
.ptx41,
.sm_37,
}),
};
pub const sm_50 = Cpu{
.name = "sm_50",
.llvm_name = "sm_50",
.features = featureSet(&[_]Feature{
.ptx40,
.sm_50,
}),
};
pub const sm_52 = Cpu{
.name = "sm_52",
.llvm_name = "sm_52",
.features = featureSet(&[_]Feature{
.ptx41,
.sm_52,
}),
};
pub const sm_53 = Cpu{
.name = "sm_53",
.llvm_name = "sm_53",
.features = featureSet(&[_]Feature{
.ptx42,
.sm_53,
}),
};
pub const sm_60 = Cpu{
.name = "sm_60",
.llvm_name = "sm_60",
.features = featureSet(&[_]Feature{
.ptx50,
.sm_60,
}),
};
pub const sm_61 = Cpu{
.name = "sm_61",
.llvm_name = "sm_61",
.features = featureSet(&[_]Feature{
.ptx50,
.sm_61,
}),
};
pub const sm_62 = Cpu{
.name = "sm_62",
.llvm_name = "sm_62",
.features = featureSet(&[_]Feature{
.ptx50,
.sm_62,
}),
};
pub const sm_70 = Cpu{
.name = "sm_70",
.llvm_name = "sm_70",
.features = featureSet(&[_]Feature{
.ptx60,
.sm_70,
}),
};
pub const sm_72 = Cpu{
.name = "sm_72",
.llvm_name = "sm_72",
.features = featureSet(&[_]Feature{
.ptx61,
.sm_72,
}),
};
pub const sm_75 = Cpu{
.name = "sm_75",
.llvm_name = "sm_75",
.features = featureSet(&[_]Feature{
.ptx63,
.sm_75,
}),
};
};
pub const feature_ptx42 = Feature{
.name = "ptx42",
.llvm_name = "ptx42",
.description = "Use PTX version 4.2",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx43 = Feature{
.name = "ptx43",
.llvm_name = "ptx43",
.description = "Use PTX version 4.3",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx50 = Feature{
.name = "ptx50",
.llvm_name = "ptx50",
.description = "Use PTX version 5.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx60 = Feature{
.name = "ptx60",
.llvm_name = "ptx60",
.description = "Use PTX version 6.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx61 = Feature{
.name = "ptx61",
.llvm_name = "ptx61",
.description = "Use PTX version 6.1",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx63 = Feature{
.name = "ptx63",
.llvm_name = "ptx63",
.description = "Use PTX version 6.3",
.dependencies = &[_]*const Feature {
},
};
pub const feature_ptx64 = Feature{
.name = "ptx64",
.llvm_name = "ptx64",
.description = "Use PTX version 6.4",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_20 = Feature{
.name = "sm_20",
.llvm_name = "sm_20",
.description = "Target SM 2.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_21 = Feature{
.name = "sm_21",
.llvm_name = "sm_21",
.description = "Target SM 2.1",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_30 = Feature{
.name = "sm_30",
.llvm_name = "sm_30",
.description = "Target SM 3.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_32 = Feature{
.name = "sm_32",
.llvm_name = "sm_32",
.description = "Target SM 3.2",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_35 = Feature{
.name = "sm_35",
.llvm_name = "sm_35",
.description = "Target SM 3.5",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_37 = Feature{
.name = "sm_37",
.llvm_name = "sm_37",
.description = "Target SM 3.7",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_50 = Feature{
.name = "sm_50",
.llvm_name = "sm_50",
.description = "Target SM 5.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_52 = Feature{
.name = "sm_52",
.llvm_name = "sm_52",
.description = "Target SM 5.2",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_53 = Feature{
.name = "sm_53",
.llvm_name = "sm_53",
.description = "Target SM 5.3",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_60 = Feature{
.name = "sm_60",
.llvm_name = "sm_60",
.description = "Target SM 6.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_61 = Feature{
.name = "sm_61",
.llvm_name = "sm_61",
.description = "Target SM 6.1",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_62 = Feature{
.name = "sm_62",
.llvm_name = "sm_62",
.description = "Target SM 6.2",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_70 = Feature{
.name = "sm_70",
.llvm_name = "sm_70",
.description = "Target SM 7.0",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_72 = Feature{
.name = "sm_72",
.llvm_name = "sm_72",
.description = "Target SM 7.2",
.dependencies = &[_]*const Feature {
},
};
pub const feature_sm_75 = Feature{
.name = "sm_75",
.llvm_name = "sm_75",
.description = "Target SM 7.5",
.dependencies = &[_]*const Feature {
},
};
pub const features = &[_]*const Feature {
&feature_ptx32,
&feature_ptx40,
&feature_ptx41,
&feature_ptx42,
&feature_ptx43,
&feature_ptx50,
&feature_ptx60,
&feature_ptx61,
&feature_ptx63,
&feature_ptx64,
&feature_sm_20,
&feature_sm_21,
&feature_sm_30,
&feature_sm_32,
&feature_sm_35,
&feature_sm_37,
&feature_sm_50,
&feature_sm_52,
&feature_sm_53,
&feature_sm_60,
&feature_sm_61,
&feature_sm_62,
&feature_sm_70,
&feature_sm_72,
&feature_sm_75,
};
pub const cpu_sm_20 = Cpu{
.name = "sm_20",
.llvm_name = "sm_20",
.dependencies = &[_]*const Feature {
&feature_sm_20,
},
};
pub const cpu_sm_21 = Cpu{
.name = "sm_21",
.llvm_name = "sm_21",
.dependencies = &[_]*const Feature {
&feature_sm_21,
},
};
pub const cpu_sm_30 = Cpu{
.name = "sm_30",
.llvm_name = "sm_30",
.dependencies = &[_]*const Feature {
&feature_sm_30,
},
};
pub const cpu_sm_32 = Cpu{
.name = "sm_32",
.llvm_name = "sm_32",
.dependencies = &[_]*const Feature {
&feature_ptx40,
&feature_sm_32,
},
};
pub const cpu_sm_35 = Cpu{
.name = "sm_35",
.llvm_name = "sm_35",
.dependencies = &[_]*const Feature {
&feature_sm_35,
},
};
pub const cpu_sm_37 = Cpu{
.name = "sm_37",
.llvm_name = "sm_37",
.dependencies = &[_]*const Feature {
&feature_ptx41,
&feature_sm_37,
},
};
pub const cpu_sm_50 = Cpu{
.name = "sm_50",
.llvm_name = "sm_50",
.dependencies = &[_]*const Feature {
&feature_ptx40,
&feature_sm_50,
},
};
pub const cpu_sm_52 = Cpu{
.name = "sm_52",
.llvm_name = "sm_52",
.dependencies = &[_]*const Feature {
&feature_ptx41,
&feature_sm_52,
},
};
pub const cpu_sm_53 = Cpu{
.name = "sm_53",
.llvm_name = "sm_53",
.dependencies = &[_]*const Feature {
&feature_ptx42,
&feature_sm_53,
},
};
pub const cpu_sm_60 = Cpu{
.name = "sm_60",
.llvm_name = "sm_60",
.dependencies = &[_]*const Feature {
&feature_ptx50,
&feature_sm_60,
},
};
pub const cpu_sm_61 = Cpu{
.name = "sm_61",
.llvm_name = "sm_61",
.dependencies = &[_]*const Feature {
&feature_ptx50,
&feature_sm_61,
},
};
pub const cpu_sm_62 = Cpu{
.name = "sm_62",
.llvm_name = "sm_62",
.dependencies = &[_]*const Feature {
&feature_ptx50,
&feature_sm_62,
},
};
pub const cpu_sm_70 = Cpu{
.name = "sm_70",
.llvm_name = "sm_70",
.dependencies = &[_]*const Feature {
&feature_ptx60,
&feature_sm_70,
},
};
pub const cpu_sm_72 = Cpu{
.name = "sm_72",
.llvm_name = "sm_72",
.dependencies = &[_]*const Feature {
&feature_ptx61,
&feature_sm_72,
},
};
pub const cpu_sm_75 = Cpu{
.name = "sm_75",
.llvm_name = "sm_75",
.dependencies = &[_]*const Feature {
&feature_ptx63,
&feature_sm_75,
},
};
pub const cpus = &[_]*const Cpu {
&cpu_sm_20,
&cpu_sm_21,
&cpu_sm_30,
&cpu_sm_32,
&cpu_sm_35,
&cpu_sm_37,
&cpu_sm_50,
&cpu_sm_52,
&cpu_sm_53,
&cpu_sm_60,
&cpu_sm_61,
&cpu_sm_62,
&cpu_sm_70,
&cpu_sm_72,
&cpu_sm_75,
/// All nvptx CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.sm_20,
&cpu.sm_21,
&cpu.sm_30,
&cpu.sm_32,
&cpu.sm_35,
&cpu.sm_37,
&cpu.sm_50,
&cpu.sm_52,
&cpu.sm_53,
&cpu.sm_60,
&cpu.sm_61,
&cpu.sm_62,
&cpu.sm_70,
&cpu.sm_72,
&cpu.sm_75,
};

File diff suppressed because it is too large Load Diff

View File

@ -1,98 +1,103 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_bit64 = Feature{
.name = "bit64",
.llvm_name = "64bit",
.description = "Implements RV64",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
@"64bit",
a,
c,
d,
e,
f,
m,
relax,
};
pub const feature_e = Feature{
.name = "e",
.llvm_name = "e",
.description = "Implements RV32E (provides 16 rather than 32 GPRs)",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.@"64bit")] = .{
.index = @enumToInt(Feature.@"64bit"),
.name = @tagName(Feature.@"64bit"),
.llvm_name = "64bit",
.description = "Implements RV64",
.dependencies = 0,
};
result[@enumToInt(Feature.a)] = .{
.index = @enumToInt(Feature.a),
.name = @tagName(Feature.a),
.llvm_name = "a",
.description = "'A' (Atomic Instructions)",
.dependencies = 0,
};
result[@enumToInt(Feature.c)] = .{
.index = @enumToInt(Feature.c),
.name = @tagName(Feature.c),
.llvm_name = "c",
.description = "'C' (Compressed Instructions)",
.dependencies = 0,
};
result[@enumToInt(Feature.d)] = .{
.index = @enumToInt(Feature.d),
.name = @tagName(Feature.d),
.llvm_name = "d",
.description = "'D' (Double-Precision Floating-Point)",
.dependencies = featureSet(&[_]Feature{
.f,
}),
};
result[@enumToInt(Feature.e)] = .{
.index = @enumToInt(Feature.e),
.name = @tagName(Feature.e),
.llvm_name = "e",
.description = "Implements RV32E (provides 16 rather than 32 GPRs)",
.dependencies = 0,
};
result[@enumToInt(Feature.f)] = .{
.index = @enumToInt(Feature.f),
.name = @tagName(Feature.f),
.llvm_name = "f",
.description = "'F' (Single-Precision Floating-Point)",
.dependencies = 0,
};
result[@enumToInt(Feature.m)] = .{
.index = @enumToInt(Feature.m),
.name = @tagName(Feature.m),
.llvm_name = "m",
.description = "'M' (Integer Multiplication and Division)",
.dependencies = 0,
};
result[@enumToInt(Feature.relax)] = .{
.index = @enumToInt(Feature.relax),
.name = @tagName(Feature.relax),
.llvm_name = "relax",
.description = "Enable Linker relaxation.",
.dependencies = 0,
};
break :blk result;
};
pub const feature_relax = Feature{
.name = "relax",
.llvm_name = "relax",
.description = "Enable Linker relaxation.",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const generic_rv32 = Cpu{
.name = "generic_rv32",
.llvm_name = "generic-rv32",
.features = 0,
};
pub const generic_rv64 = Cpu{
.name = "generic_rv64",
.llvm_name = "generic-rv64",
.features = featureSet(&[_]Feature{
.@"64bit",
}),
};
};
pub const feature_a = Feature{
.name = "a",
.llvm_name = "a",
.description = "'A' (Atomic Instructions)",
.dependencies = &[_]*const Feature {
},
};
pub const feature_c = Feature{
.name = "c",
.llvm_name = "c",
.description = "'C' (Compressed Instructions)",
.dependencies = &[_]*const Feature {
},
};
pub const feature_d = Feature{
.name = "d",
.llvm_name = "d",
.description = "'D' (Double-Precision Floating-Point)",
.dependencies = &[_]*const Feature {
&feature_f,
},
};
pub const feature_f = Feature{
.name = "f",
.llvm_name = "f",
.description = "'F' (Single-Precision Floating-Point)",
.dependencies = &[_]*const Feature {
},
};
pub const feature_m = Feature{
.name = "m",
.llvm_name = "m",
.description = "'M' (Integer Multiplication and Division)",
.dependencies = &[_]*const Feature {
},
};
pub const features = &[_]*const Feature {
&feature_bit64,
&feature_e,
&feature_relax,
&feature_a,
&feature_c,
&feature_d,
&feature_f,
&feature_m,
};
pub const cpu_genericRv32 = Cpu{
.name = "genericRv32",
.llvm_name = "generic-rv32",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_genericRv64 = Cpu{
.name = "genericRv64",
.llvm_name = "generic-rv64",
.dependencies = &[_]*const Feature {
&feature_bit64,
},
};
pub const cpus = &[_]*const Cpu {
&cpu_genericRv32,
&cpu_genericRv64,
/// All riscv CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.generic_rv32,
&cpu.generic_rv64,
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +1,129 @@
const Feature = @import("std").target.Feature;
const Cpu = @import("std").target.Cpu;
const std = @import("../std.zig");
const Cpu = std.Target.Cpu;
pub const feature_atomics = Feature{
.name = "atomics",
.llvm_name = "atomics",
.description = "Enable Atomics",
.dependencies = &[_]*const Feature {
},
pub const Feature = enum {
atomics,
bulk_memory,
exception_handling,
multivalue,
mutable_globals,
nontrapping_fptoint,
sign_ext,
simd128,
tail_call,
unimplemented_simd128,
};
pub const feature_bulkMemory = Feature{
.name = "bulkMemory",
.llvm_name = "bulk-memory",
.description = "Enable bulk memory operations",
.dependencies = &[_]*const Feature {
},
pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
pub const all_features = blk: {
const len = @typeInfo(Feature).Enum.fields.len;
std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
var result: [len]Cpu.Feature = undefined;
result[@enumToInt(Feature.atomics)] = .{
.index = @enumToInt(Feature.atomics),
.name = @tagName(Feature.atomics),
.llvm_name = "atomics",
.description = "Enable Atomics",
.dependencies = 0,
};
result[@enumToInt(Feature.bulk_memory)] = .{
.index = @enumToInt(Feature.bulk_memory),
.name = @tagName(Feature.bulk_memory),
.llvm_name = "bulk-memory",
.description = "Enable bulk memory operations",
.dependencies = 0,
};
result[@enumToInt(Feature.exception_handling)] = .{
.index = @enumToInt(Feature.exception_handling),
.name = @tagName(Feature.exception_handling),
.llvm_name = "exception-handling",
.description = "Enable Wasm exception handling",
.dependencies = 0,
};
result[@enumToInt(Feature.multivalue)] = .{
.index = @enumToInt(Feature.multivalue),
.name = @tagName(Feature.multivalue),
.llvm_name = "multivalue",
.description = "Enable multivalue blocks, instructions, and functions",
.dependencies = 0,
};
result[@enumToInt(Feature.mutable_globals)] = .{
.index = @enumToInt(Feature.mutable_globals),
.name = @tagName(Feature.mutable_globals),
.llvm_name = "mutable-globals",
.description = "Enable mutable globals",
.dependencies = 0,
};
result[@enumToInt(Feature.nontrapping_fptoint)] = .{
.index = @enumToInt(Feature.nontrapping_fptoint),
.name = @tagName(Feature.nontrapping_fptoint),
.llvm_name = "nontrapping-fptoint",
.description = "Enable non-trapping float-to-int conversion operators",
.dependencies = 0,
};
result[@enumToInt(Feature.sign_ext)] = .{
.index = @enumToInt(Feature.sign_ext),
.name = @tagName(Feature.sign_ext),
.llvm_name = "sign-ext",
.description = "Enable sign extension operators",
.dependencies = 0,
};
result[@enumToInt(Feature.simd128)] = .{
.index = @enumToInt(Feature.simd128),
.name = @tagName(Feature.simd128),
.llvm_name = "simd128",
.description = "Enable 128-bit SIMD",
.dependencies = 0,
};
result[@enumToInt(Feature.tail_call)] = .{
.index = @enumToInt(Feature.tail_call),
.name = @tagName(Feature.tail_call),
.llvm_name = "tail-call",
.description = "Enable tail call instructions",
.dependencies = 0,
};
result[@enumToInt(Feature.unimplemented_simd128)] = .{
.index = @enumToInt(Feature.unimplemented_simd128),
.name = @tagName(Feature.unimplemented_simd128),
.llvm_name = "unimplemented-simd128",
.description = "Enable 128-bit SIMD not yet implemented in engines",
.dependencies = featureSet(&[_]Feature{
.simd128,
}),
};
break :blk result;
};
pub const feature_exceptionHandling = Feature{
.name = "exceptionHandling",
.llvm_name = "exception-handling",
.description = "Enable Wasm exception handling",
.dependencies = &[_]*const Feature {
},
pub const cpu = struct {
pub const bleeding_edge = Cpu{
.name = "bleeding_edge",
.llvm_name = "bleeding-edge",
.features = featureSet(&[_]Feature{
.atomics,
.mutable_globals,
.nontrapping_fptoint,
.sign_ext,
.simd128,
}),
};
pub const generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.features = 0,
};
pub const mvp = Cpu{
.name = "mvp",
.llvm_name = "mvp",
.features = 0,
};
};
pub const feature_multivalue = Feature{
.name = "multivalue",
.llvm_name = "multivalue",
.description = "Enable multivalue blocks, instructions, and functions",
.dependencies = &[_]*const Feature {
},
};
pub const feature_mutableGlobals = Feature{
.name = "mutableGlobals",
.llvm_name = "mutable-globals",
.description = "Enable mutable globals",
.dependencies = &[_]*const Feature {
},
};
pub const feature_nontrappingFptoint = Feature{
.name = "nontrappingFptoint",
.llvm_name = "nontrapping-fptoint",
.description = "Enable non-trapping float-to-int conversion operators",
.dependencies = &[_]*const Feature {
},
};
pub const feature_simd128 = Feature{
.name = "simd128",
.llvm_name = "simd128",
.description = "Enable 128-bit SIMD",
.dependencies = &[_]*const Feature {
},
};
pub const feature_signExt = Feature{
.name = "signExt",
.llvm_name = "sign-ext",
.description = "Enable sign extension operators",
.dependencies = &[_]*const Feature {
},
};
pub const feature_tailCall = Feature{
.name = "tailCall",
.llvm_name = "tail-call",
.description = "Enable tail call instructions",
.dependencies = &[_]*const Feature {
},
};
pub const feature_unimplementedSimd128 = Feature{
.name = "unimplementedSimd128",
.llvm_name = "unimplemented-simd128",
.description = "Enable 128-bit SIMD not yet implemented in engines",
.dependencies = &[_]*const Feature {
&feature_simd128,
},
};
pub const features = &[_]*const Feature {
&feature_atomics,
&feature_bulkMemory,
&feature_exceptionHandling,
&feature_multivalue,
&feature_mutableGlobals,
&feature_nontrappingFptoint,
&feature_simd128,
&feature_signExt,
&feature_tailCall,
&feature_unimplementedSimd128,
};
pub const cpu_bleedingEdge = Cpu{
.name = "bleedingEdge",
.llvm_name = "bleeding-edge",
.dependencies = &[_]*const Feature {
&feature_atomics,
&feature_mutableGlobals,
&feature_nontrappingFptoint,
&feature_simd128,
&feature_signExt,
},
};
pub const cpu_generic = Cpu{
.name = "generic",
.llvm_name = "generic",
.dependencies = &[_]*const Feature {
},
};
pub const cpu_mvp = Cpu{
.name = "mvp",
.llvm_name = "mvp",
.dependencies = &[_]*const Feature {
},
};
pub const cpus = &[_]*const Cpu {
&cpu_bleedingEdge,
&cpu_generic,
&cpu_mvp,
/// All wasm CPUs, sorted alphabetically by name.
/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
/// compiler has inefficient memory and CPU usage, affecting build times.
pub const all_cpus = &[_]*const Cpu{
&cpu.bleeding_edge,
&cpu.generic,
&cpu.mvp,
};

File diff suppressed because it is too large Load Diff