From 199377db43080e00bffda3b955c083689901a04c Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Mon, 8 Sep 2014 23:25:18 +1200 Subject: [PATCH 1/2] Fix bug in Load Paired so JitIL actually runs again. Was broken in the PowerPCState Register PR a few days ago. --- Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp index d266023df5..587a1d76e6 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp @@ -1592,10 +1592,11 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) // 0b0011111100000111, or 0x3F07. Jit->MOV(32, R(RSCRATCH), Imm32(0x3F07)); Jit->AND(32, R(RSCRATCH), M(((char *)&GQR(quantreg)) + 2)); - Jit->OR(32, R(RSCRATCH), Imm8(w << 3)); + Jit->MOVZX(32, 8, RSCRATCH2, R(RSCRATCH)); + Jit->OR(32, R(RSCRATCH2), Imm8(w << 3)); - Jit->MOV(32, R(RSCRATCH2), regLocForInst(RI, getOp1(I))); - Jit->CALLptr(MScaled(RSCRATCH, SCALE_8, (u32)(u64)(((JitIL *)jit)->asm_routines.pairedLoadQuantized))); + Jit->MOV(32, R(RSCRATCH_EXTRA), regLocForInst(RI, getOp1(I))); + Jit->CALLptr(MScaled(RSCRATCH2, SCALE_8, (u32)(u64)(((JitIL *)jit)->asm_routines.pairedLoadQuantized))); Jit->MOVAPD(reg, R(XMM0)); RI.fregs[reg] = I; regNormalRegClear(RI, I); From 1bbc7b4dbb36c536bcc3b0a8ecad8e5d68915bb6 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Mon, 8 Sep 2014 23:57:00 +1200 Subject: [PATCH 2/2] JitIL: Fix matching bug in Store Paired. Most non-wii, non-mmu games run now. --- Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp index 587a1d76e6..d87b531769 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp @@ -1645,7 +1645,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress) Jit->AND(32, R(RSCRATCH), PPCSTATE(spr[SPR_GQR0 + quantreg])); Jit->MOVZX(32, 8, RSCRATCH2, R(RSCRATCH)); - Jit->MOV(32, R(RSCRATCH2), regLocForInst(RI, getOp2(I))); + Jit->MOV(32, R(RSCRATCH_EXTRA), regLocForInst(RI, getOp2(I))); Jit->MOVAPD(XMM0, fregLocForInst(RI, getOp1(I))); Jit->CALLptr(MScaled(RSCRATCH2, SCALE_8, (u32)(u64)(((JitIL *)jit)->asm_routines.pairedStoreQuantized))); if (RI.IInfo[I - RI.FirstI] & 4)