More JIT bugfixing. How could I overlook this?
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4375 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
f768ae5586
commit
da0830ca69
|
@ -63,7 +63,7 @@ using namespace Gen;
|
||||||
bool JitBlock::ContainsAddress(u32 em_address)
|
bool JitBlock::ContainsAddress(u32 em_address)
|
||||||
{
|
{
|
||||||
// WARNING - THIS DOES NOT WORK WITH INLINING ENABLED.
|
// WARNING - THIS DOES NOT WORK WITH INLINING ENABLED.
|
||||||
return (em_address >= originalAddress && em_address < originalAddress + originalSize);
|
return (em_address >= originalAddress && em_address < originalAddress + 4 * originalSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JitBlockCache::IsFull() const
|
bool JitBlockCache::IsFull() const
|
||||||
|
@ -201,7 +201,7 @@ bool JitBlock::ContainsAddress(u32 em_address)
|
||||||
JitBlock &b = blocks[block_num];
|
JitBlock &b = blocks[block_num];
|
||||||
b.originalFirstOpcode = Memory::Read_Opcode_JIT(b.originalAddress);
|
b.originalFirstOpcode = Memory::Read_Opcode_JIT(b.originalAddress);
|
||||||
Memory::Write_Opcode_JIT(b.originalAddress, (JIT_OPCODE << 26) | block_num);
|
Memory::Write_Opcode_JIT(b.originalAddress, (JIT_OPCODE << 26) | block_num);
|
||||||
block_map[std::make_pair(b.originalAddress + b.originalSize - 1, b.originalAddress)] = block_num;
|
block_map[std::make_pair(b.originalAddress + 4 * b.originalSize - 1, b.originalAddress)] = block_num;
|
||||||
if (block_link)
|
if (block_link)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 2; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
|
@ -379,7 +379,7 @@ bool JitBlock::ContainsAddress(u32 em_address)
|
||||||
address &= ~0x1f;
|
address &= ~0x1f;
|
||||||
// destroy JIT blocks
|
// destroy JIT blocks
|
||||||
// !! this works correctly under assumption that any two overlapping blocks end at the same address
|
// !! this works correctly under assumption that any two overlapping blocks end at the same address
|
||||||
std::map<pair<u32,u32>, u32>::iterator it1 = block_map.lower_bound(std::make_pair(address, 0)), it2 = it1, it;
|
std::map<pair<u32,u32>, u32>::iterator it1 = block_map.lower_bound(std::make_pair(address, 0)), it2 = it1, it;
|
||||||
while (it2 != block_map.end() && it2->first.second < address + 0x20)
|
while (it2 != block_map.end() && it2->first.second < address + 0x20)
|
||||||
{
|
{
|
||||||
DestroyBlock(it2->second, true);
|
DestroyBlock(it2->second, true);
|
||||||
|
|
Loading…
Reference in New Issue