Reorder savestates to put memory before CoreTiming.

Also, don't clear the JIT for rounding after saving, only after loading.
This commit is contained in:
Henrik Rydgård 2023-02-14 16:43:22 +01:00
parent 5ce43215b9
commit 718cb9ee4a
2 changed files with 12 additions and 4 deletions

View File

@ -135,7 +135,9 @@ void Jit::DoState(PointerWrap &p) {
Do(p, js.startDefaultPrefix);
if (s >= 2) {
Do(p, js.hasSetRounding);
js.lastSetRounding = 0;
if (p.mode == PointerWrap::MODE_READ) {
js.lastSetRounding = 0;
}
} else {
js.hasSetRounding = 1;
}

View File

@ -335,7 +335,7 @@ namespace SaveState
void SaveStart::DoState(PointerWrap &p)
{
auto s = p.Section("SaveStart", 1, 2);
auto s = p.Section("SaveStart", 1, 3);
if (!s)
return;
@ -357,8 +357,10 @@ namespace SaveState
saveDataGeneration = 0;
}
// Gotta do CoreTiming first since we'll restore into it.
CoreTiming::DoState(p);
// Gotta do CoreTiming before HLE, but from v3 we've moved it after the memory stuff.
if (s <= 2) {
CoreTiming::DoState(p);
}
// Memory is a bit tricky when jit is enabled, since there's emuhacks in it.
auto savedReplacements = SaveAndClearReplacements();
@ -376,6 +378,10 @@ namespace SaveState
Memory::DoState(p);
}
if (s >= 3) {
CoreTiming::DoState(p);
}
// Don't bother restoring if reading, we'll deal with that in KernelModuleDoState.
// In theory, different functions might have been runtime loaded in the state.
if (p.mode != p.MODE_READ)