From 0b97e9bd8d38c18eebff30bb94774e189a07bc5c Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sat, 14 Jul 2018 07:08:44 +0100 Subject: [PATCH] emit_x64_floating_point: Fix EmitFPU64ToDouble for TowardsMinusInfinity rounding mode --- src/backend_x64/emit_x64_floating_point.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend_x64/emit_x64_floating_point.cpp b/src/backend_x64/emit_x64_floating_point.cpp index db52d822..9dc5c618 100644 --- a/src/backend_x64/emit_x64_floating_point.cpp +++ b/src/backend_x64/emit_x64_floating_point.cpp @@ -1112,6 +1112,9 @@ void EmitX64::EmitFPU64ToDouble(EmitContext& ctx, IR::Inst* inst) { code.subpd(tmp, code.MConst(xword, 0x4330000000000000, 0x4530000000000000)); code.pshufd(result, tmp, 0b01001110); code.addpd(result, tmp); + if (ctx.FPSCR_RMode() == FP::RoundingMode::TowardsMinusInfinity) { + code.pand(result, code.MConst(xword, f64_non_sign_mask)); + } } ctx.reg_alloc.DefineValue(inst, result);