authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-05 21:35:59+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-05 22:51:12+02:00
loge3160ec573882108e2b51cefcf3abc5b346f70c0
tree9d07b795388f0cc47bd445ec52668c4ab61077bc
parent0728847ce74aace8fe8e2a8f61da09002cd4ad7e

x64: mul_with_overflow: cannot reuse operand if not the result


1 files changed, 1 insertions(+), 4 deletions(-)

src/arch/x86_64/CodeGen.zig+1-4
...@@ -1496,11 +1496,8 @@ fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void {...@@ -1496,11 +1496,8 @@ fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
1496 rhs.freezeIfRegister(&self.register_manager);1496 rhs.freezeIfRegister(&self.register_manager);
1497 defer rhs.unfreezeIfRegister(&self.register_manager);1497 defer rhs.unfreezeIfRegister(&self.register_manager);
14981498
1499 // TODO check if we could reuse rhs instead, and swap the values out.
1500 const dst_reg: Register = blk: {1499 const dst_reg: Register = blk: {
1501 if (self.reuseOperand(inst, bin_op.lhs, 0, lhs)) {1500 if (lhs.isRegister()) break :blk lhs.register;
1502 if (lhs.isRegister()) break :blk lhs.register;
1503 }
1504 break :blk try self.copyToTmpRegister(ty, lhs);1501 break :blk try self.copyToTmpRegister(ty, lhs);
1505 };1502 };
1506 self.register_manager.freezeRegs(&.{dst_reg});1503 self.register_manager.freezeRegs(&.{dst_reg});