mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
Merge pull request #4687 from lioncash/ppc-state
PowerPC: Explicitly savestate PowerPCState members
This commit is contained in:
@ -2,12 +2,14 @@
|
|||||||
// Licensed under GPLv2+
|
// Licensed under GPLv2+
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "Core/PowerPC/PPCCache.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
#include "Common/ChunkFile.h"
|
||||||
#include "Common/CommonFuncs.h"
|
#include "Common/CommonFuncs.h"
|
||||||
#include "Core/HW/Memmap.h"
|
#include "Core/HW/Memmap.h"
|
||||||
#include "Core/PowerPC/JitInterface.h"
|
#include "Core/PowerPC/JitInterface.h"
|
||||||
#include "Core/PowerPC/PPCCache.h"
|
|
||||||
#include "Core/PowerPC/PowerPC.h"
|
#include "Core/PowerPC/PowerPC.h"
|
||||||
|
|
||||||
namespace PowerPC
|
namespace PowerPC
|
||||||
@ -148,4 +150,17 @@ u32 InstructionCache::ReadInstruction(u32 addr)
|
|||||||
u32 res = Common::swap32(data[set][t][(addr >> 2) & 7]);
|
u32 res = Common::swap32(data[set][t][(addr >> 2) & 7]);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InstructionCache::DoState(PointerWrap& p)
|
||||||
|
{
|
||||||
|
p.DoArray(data);
|
||||||
|
p.DoArray(tags);
|
||||||
|
p.DoArray(plru);
|
||||||
|
p.DoArray(valid);
|
||||||
|
p.DoArray(way_from_valid);
|
||||||
|
p.DoArray(way_from_plru);
|
||||||
|
p.DoArray(lookup_table);
|
||||||
|
p.DoArray(lookup_table_ex);
|
||||||
|
p.DoArray(lookup_table_vmem);
|
||||||
}
|
}
|
||||||
|
} // namespace PowerPC
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
class PointerWrap;
|
||||||
|
|
||||||
namespace PowerPC
|
namespace PowerPC
|
||||||
{
|
{
|
||||||
const u32 ICACHE_SETS = 128;
|
const u32 ICACHE_SETS = 128;
|
||||||
@ -35,5 +37,6 @@ struct InstructionCache
|
|||||||
void Invalidate(u32 addr);
|
void Invalidate(u32 addr);
|
||||||
void Init();
|
void Init();
|
||||||
void Reset();
|
void Reset();
|
||||||
|
void DoState(PointerWrap& p);
|
||||||
};
|
};
|
||||||
}
|
} // namespace PowerPC
|
||||||
|
@ -72,7 +72,26 @@ void DoState(PointerWrap& p)
|
|||||||
// *((u64 *)&TL) = SystemTimers::GetFakeTimeBase(); //works since we are little endian and TL
|
// *((u64 *)&TL) = SystemTimers::GetFakeTimeBase(); //works since we are little endian and TL
|
||||||
// comes first :)
|
// comes first :)
|
||||||
|
|
||||||
p.DoPOD(ppcState);
|
p.DoArray(ppcState.gpr);
|
||||||
|
p.Do(ppcState.pc);
|
||||||
|
p.Do(ppcState.npc);
|
||||||
|
p.DoArray(ppcState.cr_val);
|
||||||
|
p.Do(ppcState.msr);
|
||||||
|
p.Do(ppcState.fpscr);
|
||||||
|
p.Do(ppcState.Exceptions);
|
||||||
|
p.Do(ppcState.downcount);
|
||||||
|
p.Do(ppcState.xer_ca);
|
||||||
|
p.Do(ppcState.xer_so_ov);
|
||||||
|
p.Do(ppcState.xer_stringctrl);
|
||||||
|
p.DoArray(ppcState.ps);
|
||||||
|
p.DoArray(ppcState.sr);
|
||||||
|
p.DoArray(ppcState.spr);
|
||||||
|
p.DoArray(ppcState.tlb);
|
||||||
|
p.Do(ppcState.pagetable_base);
|
||||||
|
p.Do(ppcState.pagetable_hashmask);
|
||||||
|
|
||||||
|
ppcState.iCache.DoState(p);
|
||||||
|
|
||||||
if (p.GetMode() == PointerWrap::MODE_READ)
|
if (p.GetMode() == PointerWrap::MODE_READ)
|
||||||
{
|
{
|
||||||
IBATUpdated();
|
IBATUpdated();
|
||||||
|
@ -71,7 +71,7 @@ static Common::Event g_compressAndDumpStateSyncEvent;
|
|||||||
static std::thread g_save_thread;
|
static std::thread g_save_thread;
|
||||||
|
|
||||||
// Don't forget to increase this after doing changes on the savestate system
|
// Don't forget to increase this after doing changes on the savestate system
|
||||||
static const u32 STATE_VERSION = 70; // Last changed in PR 4679
|
static const u32 STATE_VERSION = 71; // Last changed in PR 4687
|
||||||
|
|
||||||
// Maps savestate versions to Dolphin versions.
|
// Maps savestate versions to Dolphin versions.
|
||||||
// Versions after 42 don't need to be added to this list,
|
// Versions after 42 don't need to be added to this list,
|
||||||
|
Reference in New Issue
Block a user