summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorMerryMage <MerryMage@users.noreply.github.com>2017-03-24 10:34:47 +0000
committerMerryMage <MerryMage@users.noreply.github.com>2017-03-24 10:59:55 +0000
commit918d7fa3d13d7d788017a5f9dfc19fdd5ffe6562 (patch)
tree2cb8fc8c9005d985f72c63497032e0d9428ad2d3 /Source/Core
parentc5cc781205be6125c9214cf0100b241e36491bd2 (diff)
EmuCodeBlock: Place ConvertDoubleToSingle temporaries on the stack
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp14
1 files 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();