mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-22 22:01:06 -06:00
use instr hash as key for restore candidates
makes Golden Sun burn a little slower through the JIT memory
This commit is contained in:
@ -1042,13 +1042,13 @@ void CompileBlock(ARM* cpu)
|
|||||||
u32 literalHash = (u32)XXH3_64bits(literalValues, numLiterals * 4);
|
u32 literalHash = (u32)XXH3_64bits(literalValues, numLiterals * 4);
|
||||||
u32 instrHash = (u32)XXH3_64bits(instrValues, i * 4);
|
u32 instrHash = (u32)XXH3_64bits(instrValues, i * 4);
|
||||||
|
|
||||||
JitBlock* prevBlock = RestoreCandidates.LookUp(pseudoPhysicalAddr);
|
JitBlock* prevBlock = RestoreCandidates.LookUp(instrHash);
|
||||||
bool mayRestore = true;
|
bool mayRestore = true;
|
||||||
if (prevBlock)
|
if (prevBlock)
|
||||||
{
|
{
|
||||||
RestoreCandidates.Remove(pseudoPhysicalAddr);
|
RestoreCandidates.Remove(instrHash);
|
||||||
|
|
||||||
mayRestore = prevBlock->LiteralHash == literalHash && prevBlock->InstrHash == instrHash;
|
mayRestore = prevBlock->PseudoPhysicalAddr == pseudoPhysicalAddr && prevBlock->LiteralHash == literalHash;
|
||||||
|
|
||||||
if (mayRestore && prevBlock->NumAddresses == numAddressRanges)
|
if (mayRestore && prevBlock->NumAddresses == numAddressRanges)
|
||||||
{
|
{
|
||||||
@ -1125,6 +1125,7 @@ void CompileBlock(ARM* cpu)
|
|||||||
void InvalidateByAddr(u32 pseudoPhysical)
|
void InvalidateByAddr(u32 pseudoPhysical)
|
||||||
{
|
{
|
||||||
JIT_DEBUGPRINT("invalidating by addr %x\n", pseudoPhysical);
|
JIT_DEBUGPRINT("invalidating by addr %x\n", pseudoPhysical);
|
||||||
|
|
||||||
AddressRange* range = &CodeRanges[pseudoPhysical / 512];
|
AddressRange* range = &CodeRanges[pseudoPhysical / 512];
|
||||||
u32 mask = 1 << ((pseudoPhysical & 0x1FF) / 16);
|
u32 mask = 1 << ((pseudoPhysical & 0x1FF) / 16);
|
||||||
|
|
||||||
@ -1203,7 +1204,7 @@ void InvalidateByAddr(u32 pseudoPhysical)
|
|||||||
|
|
||||||
if (!literalInvalidation)
|
if (!literalInvalidation)
|
||||||
{
|
{
|
||||||
JitBlock* prevBlock = RestoreCandidates.Insert(block->PseudoPhysicalAddr, block);
|
JitBlock* prevBlock = RestoreCandidates.Insert(block->InstrHash, block);
|
||||||
if (prevBlock)
|
if (prevBlock)
|
||||||
delete prevBlock;
|
delete prevBlock;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user