From e9459fb30a66a694b2012ea55b5f56e0d5612489 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sun, 5 Apr 2015 20:17:50 +1200 Subject: [PATCH] JitIL: Fix a bug in floatpoint load/store instructions. The regBuildMemAddress function already clears the address register. Not only is clearing it again pointless, regBuildMemAddress uses the bits in IInfo slightly diffrently and the second clear can clear the wrong registers causing bugs if something else actually needs to use those registers. --- Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp index a9164b0bb8..ff8b7d6cc3 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp @@ -1563,7 +1563,6 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) RI.Jit->SafeLoadToReg(RSCRATCH2, info.first, 32, info.second, regsInUse(RI), false); Jit->MOVD_xmm(reg, R(RSCRATCH2)); RI.fregs[reg] = I; - regNormalRegClear(RI, I); break; } case LoadDouble: @@ -1577,7 +1576,6 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) RI.Jit->SafeLoadToReg(RSCRATCH2, info.first, 64, info.second, regsInUse(RI), false); Jit->MOVQ_xmm(reg, R(RSCRATCH2)); RI.fregs[reg] = I; - regNormalRegClear(RI, I); break; } case LoadPaired: @@ -1624,8 +1622,6 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) if (RI.IInfo[I - RI.FirstI] & 4) fregClearInst(RI, getOp1(I)); - if (RI.IInfo[I - RI.FirstI] & 8) - regClearInst(RI, getOp2(I)); break; } case StoreDouble: @@ -1646,8 +1642,6 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) if (RI.IInfo[I - RI.FirstI] & 4) fregClearInst(RI, getOp1(I)); - if (RI.IInfo[I - RI.FirstI] & 8) - regClearInst(RI, getOp2(I)); break; } case StorePaired: