mirror of https://github.com/mgba-emu/mgba.git
ARM Dynarec: Fix performance regression
This commit is contained in:
parent
b6f784b3be
commit
361d9ceeec
|
@ -301,9 +301,14 @@ void ARMRun(struct ARMCore* cpu) {
|
|||
}
|
||||
|
||||
void ARMRunLoop(struct ARMCore* cpu) {
|
||||
if (cpu->dynarec.inDynarec) {
|
||||
if (cpu->dynarec.currentEntry) {
|
||||
cpu->dynarec.inDynarec = true;
|
||||
while (cpu->dynarec.currentEntry) {
|
||||
void (*entry)(struct ARMCore*) = cpu->dynarec.currentEntry;
|
||||
cpu->dynarec.currentEntry = NULL;
|
||||
entry(cpu);
|
||||
}
|
||||
cpu->dynarec.inDynarec = false;
|
||||
cpu->dynarec.currentEntry(cpu);
|
||||
return;
|
||||
}
|
||||
if (cpu->executionMode == MODE_THUMB) {
|
||||
|
|
|
@ -54,8 +54,9 @@ void ARMDynarecCountTrace(struct ARMCore* cpu, uint32_t address, enum ExecutionM
|
|||
ARMDynarecRecompileTrace(cpu, trace);
|
||||
}
|
||||
if (trace->entry) {
|
||||
cpu->dynarec.inDynarec = true;
|
||||
cpu->nextEvent = cpu->cycles;
|
||||
if (!cpu->dynarec.inDynarec) {
|
||||
cpu->nextEvent = cpu->cycles;
|
||||
}
|
||||
cpu->dynarec.currentEntry = trace->entry;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
|
|||
gba->lastJump = address;
|
||||
memory->lastPrefetchedPc = 0;
|
||||
memory->lastPrefetchedLoads = 0;
|
||||
cpu->dynarec.inDynarec = false;
|
||||
cpu->dynarec.currentEntry = NULL;
|
||||
if (newRegion == memory->activeRegion) {
|
||||
if (cpu->executor == ARM_DYNAREC && newRegion >= REGION_CART0) {
|
||||
ARMDynarecCountTrace(cpu, address,cpu->executionMode);
|
||||
|
|
Loading…
Reference in New Issue