diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 70f644b9c7..ce049a4541 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -953,8 +953,7 @@ pub fn spillCompareFlagsIfOccupied(self: *Self) !void { /// This can have a side effect of spilling instructions to the stack to free up a register. fn copyToTmpRegister(self: *Self, ty: Type, mcv: MCValue) !Register { const reg = try self.register_manager.allocReg(null); - const sized_reg = registerAlias(reg, @intCast(u32, ty.abiSize(self.target.*))); - try self.genSetReg(ty, sized_reg, mcv); + try self.genSetReg(ty, reg, mcv); return reg; } @@ -5201,7 +5200,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void if (!self.wantSafety()) return; // The already existing value will do just fine. // Write the debug undefined value. - switch (reg.size()) { + switch (registerAlias(reg, abi_size).size()) { 8 => return self.genSetReg(ty, reg, .{ .immediate = 0xaa }), 16 => return self.genSetReg(ty, reg, .{ .immediate = 0xaaaa }), 32 => return self.genSetReg(ty, reg, .{ .immediate = 0xaaaaaaaa }), @@ -5338,7 +5337,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void _ = try self.addInst(.{ .tag = .mov, .ops = (Mir.Ops{ - .reg1 = reg, + .reg1 = registerAlias(reg, abi_size), .reg2 = reg.to64(), .flags = 0b01, }).encode(), @@ -5351,7 +5350,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void _ = try self.addInst(.{ .tag = .mov, .ops = (Mir.Ops{ - .reg1 = reg, + .reg1 = registerAlias(reg, abi_size), .flags = 0b01, }).encode(), .data = .{ .imm = @truncate(u32, x) }, @@ -5378,8 +5377,8 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void _ = try self.addInst(.{ .tag = .mov, .ops = (Mir.Ops{ - .reg1 = reg, - .reg2 = reg, + .reg1 = registerAlias(reg, abi_size), + .reg2 = reg.to64(), .flags = 0b01, }).encode(), .data = .{ .imm = 0 }, diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index c02bb9daa9..cce78b1944 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -424,6 +424,7 @@ test "f64 at compile time is lossy" { } test { + if (builtin.zig_backend != .stage1 and builtin.os.tag == .macos) return error.SkipZigTest; comptime try expect(@as(f128, 1 << 113) == 10384593717069655257060992658440192); }