From 25cc09b81bd67b122b29f4944835e888ba78926e Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 6 Jul 2013 13:04:19 -0700 Subject: [PATCH] Improve perf when ignore illegal is off. Most users will have it on, but this improves perf a bit when it isn't. --- Core/MIPS/x86/Jit.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Core/MIPS/x86/Jit.cpp b/Core/MIPS/x86/Jit.cpp index 058cffe908..02f36eab48 100644 --- a/Core/MIPS/x86/Jit.cpp +++ b/Core/MIPS/x86/Jit.cpp @@ -294,15 +294,23 @@ const u8 *Jit::DoJit(u32 em_address, JitBlock *b) FlushAll(); CMP(32, M((void*)&coreState), Imm32(CORE_RUNNING)); FixupBranch skipCheck1 = J_CC(CC_E); - CMP(32, M((void*)&coreState), Imm32(CORE_NEXTFRAME)); - FixupBranch skipCheck2 = J_CC(CC_E); + if (js.afterOp & JitState::AFTER_REWIND_PC_BAD_STATE) + { + // If we're rewinding, CORE_NEXTFRAME should not cause a rewind. + // It doesn't really matter either way if we're not rewinding. + CMP(32, M((void*)&coreState), Imm32(CORE_NEXTFRAME)); + FixupBranch skipCheck2 = J_CC(CC_E); MOV(32, M(&mips_->pc), Imm32(js.compilerPC)); + WriteSyscallExit(); + SetJumpTarget(skipCheck2); + } else + { MOV(32, M(&mips_->pc), Imm32(js.compilerPC + 4)); - WriteSyscallExit(); + WriteSyscallExit(); + } SetJumpTarget(skipCheck1); - SetJumpTarget(skipCheck2); js.afterOp = JitState::AFTER_NONE; }