From b2338de7fde695d755b4c33600fc98c408a09ebe Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Sat, 29 Jan 2022 13:01:47 +0100 Subject: [PATCH] stage2 AArch64: Move to new regalloc freeze API --- src/arch/aarch64/CodeGen.zig | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 145fb2e931..b68f214dfa 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -637,6 +637,9 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .wrap_errunion_err => try self.airWrapErrUnionErr(inst), // zig fmt: on } + + assert(!self.register_manager.frozenRegsExist()); + if (std.debug.runtime_safety) { if (self.air_bookkeeping < old_air_bookkeeping + 1) { std.debug.panic("in codegen.zig, handling of AIR instruction %{d} ('{}') did not do proper bookkeeping. Look for a missing call to finishAir.", .{ inst, air_tags[inst] }); @@ -1264,14 +1267,16 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo .register => { return self.fail("TODO implement loading from MCValue.register for {}", .{self.target.cpu.arch}); }, - .memory => |addr| { + .memory, + .stack_offset, + => { const reg = try self.register_manager.allocReg(null, &.{}); - try self.genSetReg(ptr_ty, reg, .{ .memory = addr }); + self.register_manager.freezeRegs(&.{reg}); + defer self.register_manager.unfreezeRegs(&.{reg}); + + try self.genSetReg(ptr_ty, reg, ptr); try self.load(dst_mcv, .{ .register = reg }, ptr_ty); }, - .stack_offset => { - return self.fail("TODO implement loading from MCValue.stack_offset", .{}); - }, } } @@ -1711,6 +1716,11 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { else => true, }; + if (lhs_is_register) self.register_manager.freezeRegs(&.{lhs.register}); + defer if (lhs_is_register) self.register_manager.unfreezeRegs(&.{lhs.register}); + if (rhs_is_register) self.register_manager.freezeRegs(&.{rhs.register}); + defer if (rhs_is_register) self.register_manager.unfreezeRegs(&.{rhs.register}); + var lhs_mcv = lhs; var rhs_mcv = rhs;