diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp index f83acd8991..ce22493fa4 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp @@ -7,6 +7,7 @@ #include "Common/CommonTypes.h" #include "Common/x64Emitter.h" #include "Core/ConfigManager.h" +#include "Core/CoreTiming.h" #include "Core/PowerPC/Gekko.h" #include "Core/PowerPC/Jit64/JitRegCache.h" #include "Core/PowerPC/PPCAnalyst.h" @@ -90,11 +91,12 @@ void Jit64::bx(UGeckoInstruction inst) #endif if (destination == js.compilerPC) { - // PanicAlert("Idle loop detected at %08x", destination); - // CALL(ProtectFunction(&CoreTiming::Idle, 0)); - // JMP(Asm::testExceptions, true); - // make idle loops go faster - js.downcountAmount += 8; + ABI_PushRegistersAndAdjustStack({}, 0); + ABI_CallFunction(CoreTiming::Idle); + ABI_PopRegistersAndAdjustStack({}, 0); + MOV(32, PPCSTATE(pc), Imm32(destination)); + WriteExceptionExit(); + return; } WriteExit(destination, inst.LK, js.compilerPC + 4); } diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp index 307ea6e220..7ed396fb77 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp @@ -105,6 +105,7 @@ void JitArm64::bx(UGeckoInstruction inst) gpr.Unlock(WA); WriteExceptionExit(js.compilerPC); + return; } WriteExit(destination);