From c03771e1738dae25eccf7726dcc952ad5936ca15 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Fri, 14 Apr 2023 04:47:33 -0400 Subject: [PATCH] x86_64: fix overflow of extended multiply --- src/arch/x86_64/CodeGen.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 196dc330fb..ef6b5e246b 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -2089,12 +2089,14 @@ fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void { else => {}, } + // For now, this is the only supported multiply that doesn't fit in a register. + assert(dst_info.bits == 128 and src_pl.data == 64); const dst_abi_size = @intCast(i32, dst_ty.abiSize(self.target.*)); const dst_mcv = try self.allocRegOrMem(inst, false); try self.genSetStack( Type.u1, dst_mcv.stack_offset - dst_abi_size, - .{ .eflags = cc }, + .{ .immediate = 0 }, // 64x64 -> 128 never overflows .{}, ); try self.genSetStack(dst_ty, dst_mcv.stack_offset, partial_mcv, .{});