From 601fc72ac60f0d9a0580bc5d58a484952528c1e5 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 2 Mar 2014 14:23:27 -0800 Subject: [PATCH] Don't clear js.afterOp in WriteExit*(). It needs to be handled in each exit, not just the first one. Fixes #5587. --- Core/MIPS/x86/Jit.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Core/MIPS/x86/Jit.cpp b/Core/MIPS/x86/Jit.cpp index 0e7471d3be..abe7130b30 100644 --- a/Core/MIPS/x86/Jit.cpp +++ b/Core/MIPS/x86/Jit.cpp @@ -362,6 +362,9 @@ const u8 *Jit::DoJit(u32 em_address, JitBlock *b) js.afterOp = JitState::AFTER_NONE; } + if (js.afterOp & JitState::AFTER_MEMCHECK_CLEANUP) { + js.afterOp &= ~JitState::AFTER_MEMCHECK_CLEANUP; + } js.compilerPC += 4; js.numInstructions++; @@ -539,8 +542,6 @@ void Jit::WriteExit(u32 destination, int exit_num) MOV(32, M(&mips_->pc), Imm32(js.compilerPC)); WriteSyscallExit(); SetJumpTarget(skipCheck); - - js.afterOp = JitState::AFTER_NONE; } WriteDowncount(); @@ -577,8 +578,6 @@ void Jit::WriteExitDestInReg(X64Reg reg) MOV(32, M(&mips_->pc), Imm32(js.compilerPC)); WriteSyscallExit(); SetJumpTarget(skipCheck); - - js.afterOp = JitState::AFTER_NONE; } WriteDowncount(); @@ -620,9 +619,8 @@ void Jit::WriteExitDestInReg(X64Reg reg) void Jit::WriteSyscallExit() { WriteDowncount(); - if ((js.afterOp & JitState::AFTER_MEMCHECK_CLEANUP) != 0) { + if (js.afterOp & JitState::AFTER_MEMCHECK_CLEANUP) { ABI_CallFunction(&JitMemCheckCleanup); - js.afterOp &= ~JitState::AFTER_MEMCHECK_CLEANUP; } JMP(asm_.dispatcherCheckCoreState, true); }