JitCache: Use a pointer in DestroyBlock.
This commit is contained in:
parent
68c85d32f7
commit
f6ec96efbd
|
@ -71,7 +71,7 @@ void JitBaseBlockCache::Clear()
|
||||||
m_jit.js.pairedQuantizeAddresses.clear();
|
m_jit.js.pairedQuantizeAddresses.clear();
|
||||||
for (int i = 1; i < num_blocks; i++)
|
for (int i = 1; i < num_blocks; i++)
|
||||||
{
|
{
|
||||||
DestroyBlock(i, false);
|
DestroyBlock(blocks[i], false);
|
||||||
}
|
}
|
||||||
links_to.clear();
|
links_to.clear();
|
||||||
block_map.clear();
|
block_map.clear();
|
||||||
|
@ -141,10 +141,10 @@ void JitBaseBlockCache::FinalizeBlock(int block_num, bool block_link, const u8*
|
||||||
// is called both with DR/IR enabled or disabled.
|
// is called both with DR/IR enabled or disabled.
|
||||||
WARN_LOG(DYNA_REC, "Invalidating compiled block at same address %08x", b.physicalAddress);
|
WARN_LOG(DYNA_REC, "Invalidating compiled block at same address %08x", b.physicalAddress);
|
||||||
int old_block_num = start_block_map[b.physicalAddress];
|
int old_block_num = start_block_map[b.physicalAddress];
|
||||||
const JitBlock& old_b = blocks[old_block_num];
|
JitBlock& old_b = blocks[old_block_num];
|
||||||
block_map.erase(
|
block_map.erase(
|
||||||
std::make_pair(old_b.physicalAddress + 4 * old_b.originalSize - 1, old_b.physicalAddress));
|
std::make_pair(old_b.physicalAddress + 4 * old_b.originalSize - 1, old_b.physicalAddress));
|
||||||
DestroyBlock(old_block_num, true);
|
DestroyBlock(old_b, true);
|
||||||
}
|
}
|
||||||
start_block_map[b.physicalAddress] = block_num;
|
start_block_map[b.physicalAddress] = block_num;
|
||||||
FastLookupEntryForAddress(b.effectiveAddress) = block_num;
|
FastLookupEntryForAddress(b.effectiveAddress) = block_num;
|
||||||
|
@ -235,7 +235,7 @@ void JitBaseBlockCache::InvalidateICache(u32 address, const u32 length, bool for
|
||||||
auto it = block_map.lower_bound(std::make_pair(pAddr, 0));
|
auto it = block_map.lower_bound(std::make_pair(pAddr, 0));
|
||||||
while (it != block_map.end() && it->first.second < pAddr + length)
|
while (it != block_map.end() && it->first.second < pAddr + length)
|
||||||
{
|
{
|
||||||
DestroyBlock(it->second, true);
|
DestroyBlock(blocks[it->second], true);
|
||||||
it = block_map.erase(it);
|
it = block_map.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,18 +327,12 @@ void JitBaseBlockCache::UnlinkBlock(const JitBlock& b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JitBaseBlockCache::DestroyBlock(int block_num, bool invalidate)
|
void JitBaseBlockCache::DestroyBlock(JitBlock& b, bool invalidate)
|
||||||
{
|
{
|
||||||
if (block_num < 0 || block_num >= num_blocks)
|
|
||||||
{
|
|
||||||
PanicAlert("DestroyBlock: Invalid block number %d", block_num);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JitBlock& b = blocks[block_num];
|
|
||||||
if (b.invalid)
|
if (b.invalid)
|
||||||
{
|
{
|
||||||
if (invalidate)
|
if (invalidate)
|
||||||
PanicAlert("Invalidating invalid block %d", block_num);
|
PanicAlert("Invalidating invalid block %p", &b);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
b.invalid = true;
|
b.invalid = true;
|
||||||
|
@ -351,7 +345,7 @@ void JitBaseBlockCache::DestroyBlock(int block_num, bool invalidate)
|
||||||
auto it = links_to.equal_range(b.effectiveAddress);
|
auto it = links_to.equal_range(b.effectiveAddress);
|
||||||
while (it.first != it.second)
|
while (it.first != it.second)
|
||||||
{
|
{
|
||||||
if (it.first->second == block_num)
|
if (it.first->second == &b - &blocks[0])
|
||||||
it.first = links_to.erase(it.first);
|
it.first = links_to.erase(it.first);
|
||||||
else
|
else
|
||||||
it.first++;
|
it.first++;
|
||||||
|
|
|
@ -158,7 +158,7 @@ private:
|
||||||
void LinkBlockExits(JitBlock& b);
|
void LinkBlockExits(JitBlock& b);
|
||||||
void LinkBlock(JitBlock& b);
|
void LinkBlock(JitBlock& b);
|
||||||
void UnlinkBlock(const JitBlock& b);
|
void UnlinkBlock(const JitBlock& b);
|
||||||
void DestroyBlock(int block_num, bool invalidate);
|
void DestroyBlock(JitBlock& b, bool invalidate);
|
||||||
|
|
||||||
void MoveBlockIntoFastCache(u32 em_address, u32 msr);
|
void MoveBlockIntoFastCache(u32 em_address, u32 msr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue