|
|
|
|
@ -836,12 +836,8 @@ void InvalidCodeFunction()
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void InvalidateBlocksWithPageIndex(u32 page_index)
|
|
|
|
|
static void InvalidateBlock(CodeBlock* block)
|
|
|
|
|
{
|
|
|
|
|
DebugAssert(page_index < Bus::RAM_8MB_CODE_PAGE_COUNT);
|
|
|
|
|
auto& blocks = m_ram_block_map[page_index];
|
|
|
|
|
for (CodeBlock* block : blocks)
|
|
|
|
|
{
|
|
|
|
|
// Invalidate forces the block to be checked again.
|
|
|
|
|
Log_DebugPrintf("Invalidating block at 0x%08X", block->GetPC());
|
|
|
|
|
block->invalidated = true;
|
|
|
|
|
@ -867,13 +863,34 @@ void InvalidateBlocksWithPageIndex(u32 page_index)
|
|
|
|
|
#ifdef WITH_RECOMPILER
|
|
|
|
|
SetFastMap(block->GetPC(), FastCompileBlockFunction);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void InvalidateBlocksWithPageIndex(u32 page_index)
|
|
|
|
|
{
|
|
|
|
|
DebugAssert(page_index < Bus::RAM_8MB_CODE_PAGE_COUNT);
|
|
|
|
|
auto& blocks = m_ram_block_map[page_index];
|
|
|
|
|
for (CodeBlock* block : blocks)
|
|
|
|
|
InvalidateBlock(block);
|
|
|
|
|
|
|
|
|
|
// Block will be re-added next execution.
|
|
|
|
|
blocks.clear();
|
|
|
|
|
Bus::ClearRAMCodePage(page_index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void InvalidateAll()
|
|
|
|
|
{
|
|
|
|
|
for (auto& it : s_blocks)
|
|
|
|
|
{
|
|
|
|
|
CodeBlock* block = it.second;
|
|
|
|
|
if (block && !block->invalidated)
|
|
|
|
|
InvalidateBlock(block);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Bus::ClearRAMCodePageFlags();
|
|
|
|
|
for (auto& it : m_ram_block_map)
|
|
|
|
|
it.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RemoveReferencesToBlock(CodeBlock* block)
|
|
|
|
|
{
|
|
|
|
|
BlockMap::iterator iter = s_blocks.find(block->key.GetPC());
|
|
|
|
|
|