mirror of https://github.com/PCSX2/pcsx2.git
EE Cache: Writeback dirty cache entries when exiting the interpreter.
This commit is contained in:
parent
046b416f61
commit
313ddb7879
|
@ -163,6 +163,17 @@ void resetCache()
|
|||
std::memset(&cache, 0, sizeof(cache));
|
||||
}
|
||||
|
||||
void writebackCache()
|
||||
{
|
||||
for (int i = 0; i < 64; i++)
|
||||
{
|
||||
for (int j = 0; j < 2; j++)
|
||||
{
|
||||
cache.lineAt(i, j).writeBackIfNeeded();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool findInCache(const CacheSet& set, uptr ppf, int* way)
|
||||
{
|
||||
auto check = [&](int checkWay) -> bool {
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
#include "common/SingleRegisterTypes.h"
|
||||
|
||||
void resetCache();
|
||||
// Dumps all dirty cache entries to memory
|
||||
// This is necessary to fix a bug when enabled the recompiler while the cache was enabled.
|
||||
void writebackCache();
|
||||
void writeCache8(u32 mem, u8 value, bool validPFN = true);
|
||||
void writeCache16(u32 mem, u16 value, bool validPFN = true);
|
||||
void writeCache32(u32 mem, u32 value, bool validPFN = true);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "R5900OpcodeTables.h"
|
||||
#include "VMManager.h"
|
||||
#include "Elfheader.h"
|
||||
#include "Cache.h"
|
||||
|
||||
#include "DebugTools/Breakpoints.h"
|
||||
|
||||
|
@ -555,6 +556,8 @@ static void intEventTest()
|
|||
if (intExitExecution)
|
||||
{
|
||||
intExitExecution = false;
|
||||
if (CHECK_EEREC)
|
||||
writebackCache();
|
||||
fastjmp_jmp(&intJmpBuf, 1);
|
||||
}
|
||||
}
|
||||
|
@ -566,8 +569,12 @@ static void intSafeExitExecution()
|
|||
if (eeEventTestIsActive)
|
||||
intExitExecution = true;
|
||||
else
|
||||
{
|
||||
if (CHECK_EEREC)
|
||||
writebackCache();
|
||||
fastjmp_jmp(&intJmpBuf, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void intCancelInstruction()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue