| ... | @@ -11,11 +11,18 @@ const FeatureOverride = struct { | ... | @@ -11,11 +11,18 @@ const FeatureOverride = struct { |
| 11 | desc: ?[]const u8 = null, | 11 | desc: ?[]const u8 = null, |
| 12 | }; | 12 | }; |
| 13 | | 13 | |
| | 14 | const ExtraCpu = struct { |
| | 15 | llvm_name: ?[]const u8, |
| | 16 | zig_name: []const u8, |
| | 17 | features: []const []const u8, |
| | 18 | }; |
| | 19 | |
| 14 | const LlvmTarget = struct { | 20 | const LlvmTarget = struct { |
| 15 | zig_name: []const u8, | 21 | zig_name: []const u8, |
| 16 | llvm_name: []const u8, | 22 | llvm_name: []const u8, |
| 17 | td_name: []const u8, | 23 | td_name: []const u8, |
| 18 | feature_overrides: []const FeatureOverride = &.{}, | 24 | feature_overrides: []const FeatureOverride = &.{}, |
| | 25 | extra_cpus: []const ExtraCpu = &.{}, |
| 19 | branch_quota: ?usize = null, | 26 | branch_quota: ?usize = null, |
| 20 | }; | 27 | }; |
| 21 | | 28 | |
| ... | @@ -98,6 +105,18 @@ const llvm_targets = [_]LlvmTarget{ | ... | @@ -98,6 +105,18 @@ const llvm_targets = [_]LlvmTarget{ |
| 98 | .zig_name = "riscv", | 105 | .zig_name = "riscv", |
| 99 | .llvm_name = "RISCV", | 106 | .llvm_name = "RISCV", |
| 100 | .td_name = "RISCV.td", | 107 | .td_name = "RISCV.td", |
| | 108 | .extra_cpus = &.{ |
| | 109 | .{ |
| | 110 | .llvm_name = null, |
| | 111 | .zig_name = "baseline_rv32", |
| | 112 | .features = &.{ "a", "c", "d", "f", "m" }, |
| | 113 | }, |
| | 114 | .{ |
| | 115 | .llvm_name = null, |
| | 116 | .zig_name = "baseline_rv64", |
| | 117 | .features = &.{ "64bit", "a", "c", "d", "f", "m" }, |
| | 118 | }, |
| | 119 | }, |
| 101 | }, | 120 | }, |
| 102 | .{ | 121 | .{ |
| 103 | .zig_name = "sparc", | 122 | .zig_name = "sparc", |
| ... | @@ -433,7 +452,44 @@ fn processOneTarget(job: Job) anyerror!void { | ... | @@ -433,7 +452,44 @@ fn processOneTarget(job: Job) anyerror!void { |
| 433 | \\pub const cpu = struct { | 452 | \\pub const cpu = struct { |
| 434 | \\ | 453 | \\ |
| 435 | ); | 454 | ); |
| 436 | | 455 | for (llvm_target.extra_cpus) |extra_cpu| { |
| | 456 | try w.print( |
| | 457 | \\ pub const {} = CpuModel{{ |
| | 458 | \\ .name = "{}", |
| | 459 | \\ |
| | 460 | , .{ |
| | 461 | std.zig.fmtId(extra_cpu.zig_name), |
| | 462 | std.zig.fmtEscapes(extra_cpu.zig_name), |
| | 463 | }); |
| | 464 | if (extra_cpu.llvm_name) |llvm_name| { |
| | 465 | try w.print( |
| | 466 | \\ .llvm_name = "{}", |
| | 467 | \\ .features = featureSet(&[_]Feature{{ |
| | 468 | , .{std.zig.fmtEscapes(llvm_name)}); |
| | 469 | } else { |
| | 470 | try w.writeAll( |
| | 471 | \\ .llvm_name = null, |
| | 472 | \\ .features = featureSet(&[_]Feature{ |
| | 473 | ); |
| | 474 | } |
| | 475 | if (extra_cpu.features.len == 0) { |
| | 476 | try w.writeAll( |
| | 477 | \\}), |
| | 478 | \\ }; |
| | 479 | \\ |
| | 480 | ); |
| | 481 | } else { |
| | 482 | try w.writeAll("\n"); |
| | 483 | for (extra_cpu.features) |feature_zig_name| { |
| | 484 | try w.print(" .{},\n", .{std.zig.fmtId(feature_zig_name)}); |
| | 485 | } |
| | 486 | try w.writeAll( |
| | 487 | \\ }), |
| | 488 | \\ }; |
| | 489 | \\ |
| | 490 | ); |
| | 491 | } |
| | 492 | } |
| 437 | for (all_cpus.items) |obj| { | 493 | for (all_cpus.items) |obj| { |
| 438 | const llvm_name = obj.get("Name").?.String; | 494 | const llvm_name = obj.get("Name").?.String; |
| 439 | var deps_set = std.StringHashMap(void).init(arena); | 495 | var deps_set = std.StringHashMap(void).init(arena); |
| ... | @@ -516,7 +572,7 @@ fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { | ... | @@ -516,7 +572,7 @@ fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { |
| 516 | fn objectLessThan(context: void, a: *json.ObjectMap, b: *json.ObjectMap) bool { | 572 | fn objectLessThan(context: void, a: *json.ObjectMap, b: *json.ObjectMap) bool { |
| 517 | const a_key = a.get("Name").?.String; | 573 | const a_key = a.get("Name").?.String; |
| 518 | const b_key = b.get("Name").?.String; | 574 | const b_key = b.get("Name").?.String; |
| 519 | return std.mem.lessThan(u8, a_key, b_key); | 575 | return std.ascii.lessThanIgnoreCase(a_key, b_key); |
| 520 | } | 576 | } |
| 521 | | 577 | |
| 522 | fn llvmNameToZigName( | 578 | fn llvmNameToZigName( |