authorgravatar for pfg@pfg.pwpfg <pfg@pfg.pw> 2020-08-04 14:32:09-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-04 14:38:33-07:00
logea3cc777ccccf3113d7724898c35473343f71080
treeded18b131d8e1c1cbcb1958a0d067aa60f8b336b
parente3352db9860ab14f7f5fc8a41f97305c049ab0fe

stage2: riscv test case


3 files changed, 38 insertions(+), 17 deletions(-)

src-self-hosted/codegen.zig+2-5
......@@ -588,7 +588,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
588588 entry.value = .dead;
589589 switch (prev_value) {
590590 .register => |reg| {
591 const reg64 = reg.to64();
591 const reg64 = if (arch == .x86_64) reg.to64() else reg;
592592 _ = branch.registers.remove(reg64);
593593 branch.markRegFree(reg64);
594594 },
......@@ -1585,10 +1585,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
15851585 if (!self.wantSafety())
15861586 return; // The already existing value will do just fine.
15871587 // Write the debug undefined value.
1588 switch (reg.size()) {
1589 64 => return self.genSetReg(src, reg, .{ .immediate = 0xaaaaaaaaaaaaaaaa }),
1590 else => unreachable,
1591 }
1588 return self.genSetReg(src, reg, .{ .immediate = 0xaaaaaaaaaaaaaaaa });
15921589 },
15931590 .immediate => |unsigned_x| {
15941591 const x = @bitCast(i64, unsigned_x);
src-self-hosted/codegen/riscv64.zig-12
......@@ -71,18 +71,6 @@ pub const Register = enum(u8) {
7171 return null;
7272 }
7373
74 /// Returns the bit-width of the register.
75 pub fn size(self: @This()) u7 {
76 return switch (@enumToInt(self)) {
77 0...31 => 64,
78 else => unreachable,
79 };
80 }
81
82 pub fn to64(self: @This()) Register {
83 return self;
84 }
85
8674 /// Returns the register's id.
8775 pub fn id(self: @This()) u5 {
8876 return @truncate(u5, @enumToInt(self));
test/stage2/compare_output.zig+36
......@@ -403,4 +403,40 @@ pub fn addCases(ctx: *TestContext) !void {
403403 "",
404404 );
405405 }
406
407 {
408 var case = ctx.exe("hello world with updates", riscv64);
409 // Regular old hello world
410 case.addCompareOutput(
411 \\export fn _start() noreturn {
412 \\ print();
413 \\
414 \\ exit();
415 \\}
416 \\
417 \\fn print() void {
418 \\ asm volatile ("ecall"
419 \\ :
420 \\ : [number] "{a7}" (64),
421 \\ [arg1] "{a0}" (1),
422 \\ [arg2] "{a1}" (@ptrToInt("Hello, World!\n")),
423 \\ [arg3] "{a2}" ("Hello, World!\n".len)
424 \\ : "rcx", "r11", "memory"
425 \\ );
426 \\ return;
427 \\}
428 \\
429 \\fn exit() noreturn {
430 \\ asm volatile ("ecall"
431 \\ :
432 \\ : [number] "{a7}" (94),
433 \\ [arg1] "{a0}" (0)
434 \\ : "rcx", "r11", "memory"
435 \\ );
436 \\ unreachable;
437 \\}
438 ,
439 "Hello, World!\n",
440 );
441 }
406442}