diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-02-27 01:49:09 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-02-27 01:49:35 -0700 |
| commit | a9f19221e99d9470d936f63ecfa20c735e175a2c (patch) | |
| tree | a4fbff925d0cef1cce369b4e78b01690504f2e0e /tools/update_cpu_features.zig | |
| parent | 50a5fc98dc7d458cb731980d1231ee6e1a7eb880 (diff) | |
| download | zig-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.zig | 60 |
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( |
