aboutsummaryrefslogtreecommitdiff
path: root/tools/update_cpu_features.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-02-27 01:49:09 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-02-27 01:49:35 -0700
commita9f19221e99d9470d936f63ecfa20c735e175a2c (patch)
treea4fbff925d0cef1cce369b4e78b01690504f2e0e /tools/update_cpu_features.zig
parent50a5fc98dc7d458cb731980d1231ee6e1a7eb880 (diff)
downloadzig-a9f19221e99d9470d936f63ecfa20c735e175a2c.tar.gz
zig-a9f19221e99d9470d936f63ecfa20c735e175a2c.zip
update RISC-V target CPU features
Diffstat (limited to 'tools/update_cpu_features.zig')
-rw-r--r--tools/update_cpu_features.zig60
1 files changed, 58 insertions, 2 deletions
diff --git a/tools/update_cpu_features.zig b/tools/update_cpu_features.zig
index e85db627e8..acdc53c8df 100644
--- a/tools/update_cpu_features.zig
+++ b/tools/update_cpu_features.zig
@@ -11,11 +11,18 @@ const FeatureOverride = struct {
desc: ?[]const u8 = null,
};
+const ExtraCpu = struct {
+ llvm_name: ?[]const u8,
+ zig_name: []const u8,
+ features: []const []const u8,
+};
+
const LlvmTarget = struct {
zig_name: []const u8,
llvm_name: []const u8,
td_name: []const u8,
feature_overrides: []const FeatureOverride = &.{},
+ extra_cpus: []const ExtraCpu = &.{},
branch_quota: ?usize = null,
};
@@ -98,6 +105,18 @@ const llvm_targets = [_]LlvmTarget{
.zig_name = "riscv",
.llvm_name = "RISCV",
.td_name = "RISCV.td",
+ .extra_cpus = &.{
+ .{
+ .llvm_name = null,
+ .zig_name = "baseline_rv32",
+ .features = &.{ "a", "c", "d", "f", "m" },
+ },
+ .{
+ .llvm_name = null,
+ .zig_name = "baseline_rv64",
+ .features = &.{ "64bit", "a", "c", "d", "f", "m" },
+ },
+ },
},
.{
.zig_name = "sparc",
@@ -433,7 +452,44 @@ fn processOneTarget(job: Job) anyerror!void {
\\pub const cpu = struct {
\\
);
-
+ for (llvm_target.extra_cpus) |extra_cpu| {
+ try w.print(
+ \\ pub const {} = CpuModel{{
+ \\ .name = "{}",
+ \\
+ , .{
+ std.zig.fmtId(extra_cpu.zig_name),
+ std.zig.fmtEscapes(extra_cpu.zig_name),
+ });
+ if (extra_cpu.llvm_name) |llvm_name| {
+ try w.print(
+ \\ .llvm_name = "{}",
+ \\ .features = featureSet(&[_]Feature{{
+ , .{std.zig.fmtEscapes(llvm_name)});
+ } else {
+ try w.writeAll(
+ \\ .llvm_name = null,
+ \\ .features = featureSet(&[_]Feature{
+ );
+ }
+ if (extra_cpu.features.len == 0) {
+ try w.writeAll(
+ \\}),
+ \\ };
+ \\
+ );
+ } else {
+ try w.writeAll("\n");
+ for (extra_cpu.features) |feature_zig_name| {
+ try w.print(" .{},\n", .{std.zig.fmtId(feature_zig_name)});
+ }
+ try w.writeAll(
+ \\ }),
+ \\ };
+ \\
+ );
+ }
+ }
for (all_cpus.items) |obj| {
const llvm_name = obj.get("Name").?.String;
var deps_set = std.StringHashMap(void).init(arena);
@@ -516,7 +572,7 @@ fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn {
fn objectLessThan(context: void, a: *json.ObjectMap, b: *json.ObjectMap) bool {
const a_key = a.get("Name").?.String;
const b_key = b.get("Name").?.String;
- return std.mem.lessThan(u8, a_key, b_key);
+ return std.ascii.lessThanIgnoreCase(a_key, b_key);
}
fn llvmNameToZigName(