diff --git a/Core/MIPS/JitCommon/JitBlockCache.cpp b/Core/MIPS/JitCommon/JitBlockCache.cpp index f79ff2be8f..d626ad5538 100644 --- a/Core/MIPS/JitCommon/JitBlockCache.cpp +++ b/Core/MIPS/JitCommon/JitBlockCache.cpp @@ -247,7 +247,7 @@ void JitBlockCache::GetBlockNumbersFromAddress(u32 em_address, std::vector u32 JitBlockCache::GetOriginalFirstOp(int block_num) { - if (block_num >= num_blocks) + if (block_num >= num_blocks || block_num < 0) { //PanicAlert("JitBlockCache::GetOriginalFirstOp - block_num = %u is out of range", block_num); return block_num; diff --git a/Core/MIPS/MIPSAnalyst.cpp b/Core/MIPS/MIPSAnalyst.cpp index d22d9cb107..1a91df2911 100644 --- a/Core/MIPS/MIPSAnalyst.cpp +++ b/Core/MIPS/MIPSAnalyst.cpp @@ -317,7 +317,7 @@ namespace MIPSAnalyst { Function &f=*iter; u32 hash = 0x1337babe; - for (u32 addr = f.start; addr <= f.end; addr++) + for (u32 addr = f.start; addr <= f.end; addr += 4) { u32 validbits = 0xFFFFFFFF; u32 instr = Memory::Read_Instruction(addr); diff --git a/Core/MemMap.cpp b/Core/MemMap.cpp index 8c22f5bd43..0879b20bcf 100644 --- a/Core/MemMap.cpp +++ b/Core/MemMap.cpp @@ -117,7 +117,12 @@ u32 Read_Instruction(u32 address) if (MIPS_IS_EMUHACK(inst) && MIPSComp::jit) { JitBlockCache *bc = MIPSComp::jit->GetBlockCache(); - return bc->GetOriginalFirstOp(bc->GetBlockNumberFromEmuHackOp(inst)); + int block_num = bc->GetBlockNumberFromEmuHackOp(inst); + if (block_num >= 0) { + return bc->GetOriginalFirstOp(block_num); + } else { + return inst; + } } else { return inst; }