From 918d7fa3d13d7d788017a5f9dfc19fdd5ffe6562 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Fri, 24 Mar 2017 10:34:47 +0000 Subject: [PATCH] EmuCodeBlock: Place ConvertDoubleToSingle temporaries on the stack --- .../Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp b/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp index 7408765a68..9f36894334 100644 --- a/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp +++ b/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp @@ -855,9 +855,6 @@ void EmuCodeBlock::Force25BitPrecision(X64Reg output, const OpArg& input, X64Reg } } -alignas(16) static u32 temp32; -alignas(16) static u64 temp64; - // Since the following float conversion functions are used in non-arithmetic PPC float instructions, // they must convert floats bitexact and never flush denormals to zero or turn SNaNs into QNaNs. // This means we can't use CVTSS2SD/CVTSD2SS :( @@ -986,10 +983,13 @@ void EmuCodeBlock::ConvertDoubleToSingle(X64Reg dst, X64Reg src) FixupBranch continue2 = J(true); SetJumpTarget(denormalConversion); - MOVSD(M(&temp64), src); - FLD(64, M(&temp64)); - FSTP(32, M(&temp32)); - MOVSS(dst, M(&temp32)); + // We're using 8 bytes on the stack + SUB(64, R(RSP), Imm8(8)); + MOVSD(MatR(RSP), src); + FLD(64, MatR(RSP)); + FSTP(32, MatR(RSP)); + MOVSS(dst, MatR(RSP)); + ADD(64, R(RSP), Imm8(8)); FixupBranch continue3 = J(true); SwitchToNearCode();