diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp index 7faccf3d02..941b0c4e6a 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp @@ -653,9 +653,7 @@ static void regWriteExit(RegInfo& RI, InstLoc dest) { if (isImm(*dest)) { RI.Jit->WriteExit(RI.Build->GetImmValue(dest), RI.exitNumber++); } else { - if (!regLocForInst(RI, dest).IsSimpleReg(EAX)) - RI.Jit->MOV(32, R(EAX), regLocForInst(RI, dest)); - RI.Jit->WriteExitDestInEAX(RI.exitNumber++); + RI.Jit->WriteExitDestInOpArg(regLocForInst(RI, dest), RI.exitNumber++); } } @@ -1608,7 +1606,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, bool UseProfile, bool Mak } case InterpreterBranch: { Jit->MOV(32, R(EAX), M(&NPC)); - Jit->WriteExitDestInEAX(0); + Jit->WriteExitDestInOpArg(R(EAX), 0); break; } case RFIExit: { @@ -1625,7 +1623,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, bool UseProfile, bool Mak Jit->MOV(32, M(&MSR), R(EAX)); // NPC = SRR0; Jit->MOV(32, R(EAX), M(&SRR0)); - Jit->WriteRfiExitDestInEAX(); + Jit->WriteRfiExitDestInOpArg(R(EAX)); break; } case FPExceptionCheckStart: { diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index 2175a05492..249a31975c 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -227,7 +227,7 @@ void JitIL::WriteCallInterpreter(UGeckoInstruction inst) if (js.isLastInstruction) { MOV(32, R(EAX), M(&NPC)); - WriteRfiExitDestInEAX(); + WriteRfiExitDestInOpArg(R(EAX)); } } @@ -248,7 +248,7 @@ void JitIL::HLEFunction(UGeckoInstruction _inst) { ABI_CallFunctionCC((void*)&HLE::Execute, js.compilerPC, _inst.hex); MOV(32, R(EAX), M(&NPC)); - WriteExitDestInEAX(0); + WriteExitDestInOpArg(R(EAX), 0); } void JitIL::DoNothing(UGeckoInstruction _inst) @@ -316,17 +316,17 @@ void JitIL::WriteExit(u32 destination, int exit_num) } } -void JitIL::WriteExitDestInEAX(int exit_num) +void JitIL::WriteExitDestInOpArg(const Gen::OpArg& arg, int exit_num) { - MOV(32, M(&PC), R(EAX)); + MOV(32, M(&PC), arg); Cleanup(); SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.dispatcher, true); } -void JitIL::WriteRfiExitDestInEAX() +void JitIL::WriteRfiExitDestInOpArg(const Gen::OpArg& arg) { - MOV(32, M(&PC), R(EAX)); + MOV(32, M(&PC), arg); Cleanup(); SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.testExceptions, true); diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h index 9e5a37d380..ea49791e41 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -110,9 +110,9 @@ public: // Utilities for use by opcodes void WriteExit(u32 destination, int exit_num); - void WriteExitDestInEAX(int exit_num); + void WriteExitDestInOpArg(const Gen::OpArg& arg, int exit_num); void WriteExceptionExit(); - void WriteRfiExitDestInEAX(); + void WriteRfiExitDestInOpArg(const Gen::OpArg& arg); void WriteCallInterpreter(UGeckoInstruction _inst); void Cleanup();