JitCache: Return a pointer in GetBlockFromStartAddress.

This commit is contained in:
degasus
2017-01-10 23:16:07 +01:00
parent f6ec96efbd
commit d3aa8c8080
3 changed files with 25 additions and 30 deletions

View File

@ -168,34 +168,31 @@ int GetHostCode(u32* address, const u8** code, u32* code_size)
return 1;
}
int block_num = g_jit->GetBlockCache()->GetBlockNumberFromStartAddress(*address, MSR);
if (block_num < 0)
JitBlock* block = g_jit->GetBlockCache()->GetBlockFromStartAddress(*address, MSR);
if (!block)
{
for (int i = 0; i < 500; i++)
{
block_num = g_jit->GetBlockCache()->GetBlockNumberFromStartAddress(*address - 4 * i, MSR);
if (block_num >= 0)
block = g_jit->GetBlockCache()->GetBlockFromStartAddress(*address - 4 * i, MSR);
if (block)
break;
}
if (block_num >= 0)
if (block)
{
JitBlock* block = g_jit->GetBlockCache()->GetBlock(block_num);
if (!(block->effectiveAddress <= *address &&
block->originalSize + block->effectiveAddress >= *address))
block_num = -1;
block = nullptr;
}
// Do not merge this "if" with the above - block_num changes inside it.
if (block_num < 0)
if (!block)
{
*code_size = 0;
return 2;
}
}
JitBlock* block = g_jit->GetBlockCache()->GetBlock(block_num);
*code = block->checkedEntry;
*code_size = block->codeSize;
*address = block->effectiveAddress;