diff options
| author | skidau <skidau@gmail.com> | 2012-01-03 10:20:20 +1100 |
|---|---|---|
| committer | skidau <skidau@gmail.com> | 2012-01-03 10:20:20 +1100 |
| commit | d399e6b26d698f2e43f46e54bfac9db4b40f14cd (patch) | |
| tree | 748dba5098d180eb15ce8803c28dffbec2532e65 /Source/Core | |
| parent | 67e38fb6c654cae2e693fabe520f5c3a94970850 (diff) | |
Reordered the safe write path of the stfd instruction.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp index 46e888f935..41c9a3ceb7 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp @@ -172,6 +172,11 @@ void Jit64::stfd(UGeckoInstruction inst) int s = inst.RS; int a = inst.RA; + if (!a) + { + Default(inst); + return; + } u32 mem_mask = Memory::ADDR_MASK_HW_ACCESS; if (Core::g_CoreStartupParameter.bMMU || @@ -219,13 +224,14 @@ void Jit64::stfd(UGeckoInstruction inst) // Safe but slow routine MOVAPD(XMM0, fpr.R(s)); + PSRLQ(XMM0, 32); MOVD_xmm(R(EAX), XMM0); - SafeWriteRegToReg(EAX, ABI_PARAM1, 32, 4); + SafeWriteRegToReg(EAX, ABI_PARAM1, 32, 0); - PSRLQ(XMM0, 32); + MOVAPD(XMM0, fpr.R(s)); MOVD_xmm(R(EAX), XMM0); LEA(32, ABI_PARAM1, MDisp(gpr.R(a).GetSimpleReg(), offset)); - SafeWriteRegToReg(EAX, ABI_PARAM1, 32, 0); + SafeWriteRegToReg(EAX, ABI_PARAM1, 32, 4); SetJumpTarget(exit); |
