[Project64] Cleanup RecompilerClass.cpp
This commit is contained in:
parent
21bce73cca
commit
c3a9525006
|
@ -17,10 +17,10 @@
|
||||||
#include <Objbase.h>
|
#include <Objbase.h>
|
||||||
|
|
||||||
CRecompiler::CRecompiler(CRegisters & Registers, CProfiling & Profile, bool & EndEmulation) :
|
CRecompiler::CRecompiler(CRegisters & Registers, CProfiling & Profile, bool & EndEmulation) :
|
||||||
m_Registers(Registers),
|
m_Registers(Registers),
|
||||||
m_Profile(Profile),
|
m_Profile(Profile),
|
||||||
m_EndEmulation(EndEmulation),
|
m_EndEmulation(EndEmulation),
|
||||||
PROGRAM_COUNTER(Registers.m_PROGRAM_COUNTER)
|
PROGRAM_COUNTER(Registers.m_PROGRAM_COUNTER)
|
||||||
{
|
{
|
||||||
if (g_MMU != NULL)
|
if (g_MMU != NULL)
|
||||||
{
|
{
|
||||||
|
@ -56,16 +56,16 @@ void CRecompiler::Run()
|
||||||
#ifdef tofix
|
#ifdef tofix
|
||||||
*g_MemoryStack = (uint32_t)(RDRAM+(_GPR[29].W[0] & 0x1FFFFFFF));
|
*g_MemoryStack = (uint32_t)(RDRAM+(_GPR[29].W[0] & 0x1FFFFFFF));
|
||||||
#endif
|
#endif
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
if (g_System->LookUpMode() == FuncFind_VirtualLookup)
|
if (g_System->LookUpMode() == FuncFind_VirtualLookup)
|
||||||
{
|
{
|
||||||
if (g_System->bSMM_ValidFunc())
|
if (g_System->bSMM_ValidFunc())
|
||||||
{
|
{
|
||||||
RecompilerMain_VirtualTable_validate();
|
RecompilerMain_VirtualTable_validate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RecompilerMain_VirtualTable();
|
RecompilerMain_VirtualTable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,19 +81,19 @@ void CRecompiler::Run()
|
||||||
{
|
{
|
||||||
RecompilerMain_Lookup_validate_TLB();
|
RecompilerMain_Lookup_validate_TLB();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RecompilerMain_Lookup_TLB();
|
RecompilerMain_Lookup_TLB();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (g_System->bSMM_ValidFunc())
|
if (g_System->bSMM_ValidFunc())
|
||||||
{
|
{
|
||||||
RecompilerMain_Lookup_validate();
|
RecompilerMain_Lookup_validate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RecompilerMain_Lookup();
|
RecompilerMain_Lookup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -357,8 +357,8 @@ void CRecompiler::RecompilerMain_Lookup()
|
||||||
}
|
}
|
||||||
(info->Function())();
|
(info->Function())();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint32_t opsExecuted = 0;
|
uint32_t opsExecuted = 0;
|
||||||
|
|
||||||
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
||||||
|
@ -601,8 +601,8 @@ void CRecompiler::RecompilerMain_Lookup_validate()
|
||||||
}
|
}
|
||||||
JumpTable()[PhysicalAddr >> 2] = info;
|
JumpTable()[PhysicalAddr >> 2] = info;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (*(info->MemLocation(0)) != info->MemContents(0) ||
|
if (*(info->MemLocation(0)) != info->MemContents(0) ||
|
||||||
*(info->MemLocation(1)) != info->MemContents(1))
|
*(info->MemLocation(1)) != info->MemContents(1))
|
||||||
{
|
{
|
||||||
|
@ -613,8 +613,8 @@ void CRecompiler::RecompilerMain_Lookup_validate()
|
||||||
}
|
}
|
||||||
(info->Function())();
|
(info->Function())();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint32_t opsExecuted = 0;
|
uint32_t opsExecuted = 0;
|
||||||
|
|
||||||
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
||||||
|
@ -665,8 +665,8 @@ void CRecompiler::RecompilerMain_Lookup_validate_TLB()
|
||||||
}
|
}
|
||||||
JumpTable()[PhysicalAddr >> 2] = info;
|
JumpTable()[PhysicalAddr >> 2] = info;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (*(info->MemLocation(0)) != info->MemContents(0) ||
|
if (*(info->MemLocation(0)) != info->MemContents(0) ||
|
||||||
*(info->MemLocation(1)) != info->MemContents(1))
|
*(info->MemLocation(1)) != info->MemContents(1))
|
||||||
{
|
{
|
||||||
|
@ -674,8 +674,8 @@ void CRecompiler::RecompilerMain_Lookup_validate_TLB()
|
||||||
{
|
{
|
||||||
ClearRecompCode_Phys((PhysicalAddr - 0x1000) & ~0xFFF, 0x3000, Remove_ValidateFunc);
|
ClearRecompCode_Phys((PhysicalAddr - 0x1000) & ~0xFFF, 0x3000, Remove_ValidateFunc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ClearRecompCode_Phys(0, 0x2000, Remove_ValidateFunc);
|
ClearRecompCode_Phys(0, 0x2000, Remove_ValidateFunc);
|
||||||
}
|
}
|
||||||
info = JumpTable()[PhysicalAddr >> 2];
|
info = JumpTable()[PhysicalAddr >> 2];
|
||||||
|
@ -689,8 +689,8 @@ void CRecompiler::RecompilerMain_Lookup_validate_TLB()
|
||||||
}
|
}
|
||||||
(info->Function())();
|
(info->Function())();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint32_t opsExecuted = 0;
|
uint32_t opsExecuted = 0;
|
||||||
|
|
||||||
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
while (g_TransVaddr->TranslateVaddr(PROGRAM_COUNTER, PhysicalAddr) && PhysicalAddr >= g_System->RdramSize())
|
||||||
|
@ -740,16 +740,16 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
uint32_t Value, Addr;
|
uint32_t Value, Addr;
|
||||||
uint8_t * Block;
|
uint8_t * Block;
|
||||||
|
|
||||||
while(!EndEmulation())
|
while(!EndEmulation())
|
||||||
{
|
{
|
||||||
if (UseTlb)
|
if (UseTlb)
|
||||||
{
|
{
|
||||||
if (!TranslateVaddr(PROGRAM_COUNTER, &Addr))
|
if (!TranslateVaddr(PROGRAM_COUNTER, &Addr))
|
||||||
{
|
{
|
||||||
DoTLBMiss(NextInstruction == DELAY_SLOT,PROGRAM_COUNTER);
|
DoTLBMiss(NextInstruction == DELAY_SLOT,PROGRAM_COUNTER);
|
||||||
NextInstruction = NORMAL;
|
NextInstruction = NORMAL;
|
||||||
if (!TranslateVaddr(PROGRAM_COUNTER, &Addr))
|
if (!TranslateVaddr(PROGRAM_COUNTER, &Addr))
|
||||||
{
|
{
|
||||||
g_Notify->DisplayError(L"Failed to translate PC to a PAddr: %X\n\nEmulation stopped",PROGRAM_COUNTER);
|
g_Notify->DisplayError(L"Failed to translate PC to a PAddr: %X\n\nEmulation stopped",PROGRAM_COUNTER);
|
||||||
ExitThread(0);
|
ExitThread(0);
|
||||||
}
|
}
|
||||||
|
@ -758,39 +758,39 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
Addr = PROGRAM_COUNTER & 0x1FFFFFFF;
|
Addr = PROGRAM_COUNTER & 0x1FFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NextInstruction == DELAY_SLOT)
|
if (NextInstruction == DELAY_SLOT)
|
||||||
{
|
{
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
Value = (uint32_t)(*(DelaySlotTable + (Addr >> 12)));
|
Value = (uint32_t)(*(DelaySlotTable + (Addr >> 12)));
|
||||||
}
|
}
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
g_Notify->DisplayError(L"Executing Delay Slot from non maped space\nPROGRAM_COUNTER = 0x%X",PROGRAM_COUNTER);
|
g_Notify->DisplayError(L"Executing Delay Slot from non maped space\nPROGRAM_COUNTER = 0x%X",PROGRAM_COUNTER);
|
||||||
ExitThread(0);
|
ExitThread(0);
|
||||||
}
|
}
|
||||||
if ( (Value >> 16) == 0x7C7C)
|
if ( (Value >> 16) == 0x7C7C)
|
||||||
{
|
{
|
||||||
uint32_t Index = (Value & 0xFFFF);
|
uint32_t Index = (Value & 0xFFFF);
|
||||||
Block = (uint8_t *)OrigMem[Index].CompiledLocation;
|
Block = (uint8_t *)OrigMem[Index].CompiledLocation;
|
||||||
if (OrigMem[Index].PAddr != Addr) { Block = NULL; }
|
if (OrigMem[Index].PAddr != Addr) { Block = NULL; }
|
||||||
if (OrigMem[Index].VAddr != PROGRAM_COUNTER) { Block = NULL; }
|
if (OrigMem[Index].VAddr != PROGRAM_COUNTER) { Block = NULL; }
|
||||||
if (Index >= TargetIndex) { Block = NULL; }
|
if (Index >= TargetIndex) { Block = NULL; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Block = NULL;
|
Block = NULL;
|
||||||
}
|
}
|
||||||
if (Block == NULL)
|
if (Block == NULL)
|
||||||
{
|
{
|
||||||
uint32_t MemValue;
|
uint32_t MemValue;
|
||||||
|
|
||||||
Block = CompileDelaySlot();
|
Block = CompileDelaySlot();
|
||||||
Value = 0x7C7C0000;
|
Value = 0x7C7C0000;
|
||||||
Value += (uint16_t)(TargetIndex);
|
Value += (uint16_t)(TargetIndex);
|
||||||
MemValue = *(uint32_t *)(RDRAM + Addr);
|
MemValue = *(uint32_t *)(RDRAM + Addr);
|
||||||
if ( (MemValue >> 16) == 0x7C7C)
|
if ( (MemValue >> 16) == 0x7C7C)
|
||||||
{
|
{
|
||||||
MemValue = OrigMem[(MemValue & 0xFFFF)].OriginalValue;
|
MemValue = OrigMem[(MemValue & 0xFFFF)].OriginalValue;
|
||||||
}
|
}
|
||||||
OrigMem[(uint16_t)(TargetIndex)].OriginalValue = MemValue;
|
OrigMem[(uint16_t)(TargetIndex)].OriginalValue = MemValue;
|
||||||
|
@ -801,47 +801,47 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
*(DelaySlotTable + (Addr >> 12)) = (void *)Value;
|
*(DelaySlotTable + (Addr >> 12)) = (void *)Value;
|
||||||
NextInstruction = NORMAL;
|
NextInstruction = NORMAL;
|
||||||
}
|
}
|
||||||
_asm
|
_asm
|
||||||
{
|
{
|
||||||
pushad
|
pushad
|
||||||
call Block
|
call Block
|
||||||
popad
|
popad
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
Value = *(uint32_t *)(RDRAM + Addr);
|
Value = *(uint32_t *)(RDRAM + Addr);
|
||||||
if ( (Value >> 16) == 0x7C7C)
|
if ( (Value >> 16) == 0x7C7C)
|
||||||
{
|
{
|
||||||
uint32_t Index = (Value & 0xFFFF);
|
uint32_t Index = (Value & 0xFFFF);
|
||||||
Block = (uint8_t *)OrigMem[Index].CompiledLocation;
|
Block = (uint8_t *)OrigMem[Index].CompiledLocation;
|
||||||
if (OrigMem[Index].PAddr != Addr) { Block = NULL; }
|
if (OrigMem[Index].PAddr != Addr) { Block = NULL; }
|
||||||
if (OrigMem[Index].VAddr != PROGRAM_COUNTER) { Block = NULL; }
|
if (OrigMem[Index].VAddr != PROGRAM_COUNTER) { Block = NULL; }
|
||||||
if (Index >= TargetIndex) { Block = NULL; }
|
if (Index >= TargetIndex) { Block = NULL; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Block = NULL;
|
Block = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
g_Notify->DisplayError(GS(MSG_NONMAPPED_SPACE));
|
g_Notify->DisplayError(GS(MSG_NONMAPPED_SPACE));
|
||||||
ExitThread(0);
|
ExitThread(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Block == NULL)
|
if (Block == NULL)
|
||||||
{
|
{
|
||||||
uint32_t MemValue;
|
uint32_t MemValue;
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
Block = Compiler4300iBlock();
|
Block = Compiler4300iBlock();
|
||||||
}
|
}
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ResetRecompCode();
|
ResetRecompCode();
|
||||||
Block = Compiler4300iBlock();
|
Block = Compiler4300iBlock();
|
||||||
}
|
}
|
||||||
|
@ -849,16 +849,16 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (TargetIndex == MaxOrigMem)
|
if (TargetIndex == MaxOrigMem)
|
||||||
{
|
{
|
||||||
ResetRecompCode();
|
ResetRecompCode();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Value = 0x7C7C0000;
|
Value = 0x7C7C0000;
|
||||||
Value += (uint16_t)(TargetIndex);
|
Value += (uint16_t)(TargetIndex);
|
||||||
MemValue = *(uint32_t *)(RDRAM + Addr);
|
MemValue = *(uint32_t *)(RDRAM + Addr);
|
||||||
if ( (MemValue >> 16) == 0x7C7C)
|
if ( (MemValue >> 16) == 0x7C7C)
|
||||||
{
|
{
|
||||||
MemValue = OrigMem[(MemValue & 0xFFFF)].OriginalValue;
|
MemValue = OrigMem[(MemValue & 0xFFFF)].OriginalValue;
|
||||||
}
|
}
|
||||||
OrigMem[(uint16_t)(TargetIndex)].OriginalValue = MemValue;
|
OrigMem[(uint16_t)(TargetIndex)].OriginalValue = MemValue;
|
||||||
|
@ -869,20 +869,20 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
*(uint32_t *)(RDRAM + Addr) = Value;
|
*(uint32_t *)(RDRAM + Addr) = Value;
|
||||||
NextInstruction = NORMAL;
|
NextInstruction = NORMAL;
|
||||||
}
|
}
|
||||||
if (Profiling && IndvidualBlock)
|
if (Profiling && IndvidualBlock)
|
||||||
{
|
{
|
||||||
static uint32_t ProfAddress = 0;
|
static uint32_t ProfAddress = 0;
|
||||||
|
|
||||||
/*if ((PROGRAM_COUNTER & ~0xFFF) != ProfAddress)
|
/*if ((PROGRAM_COUNTER & ~0xFFF) != ProfAddress)
|
||||||
{
|
{
|
||||||
char Label[100];
|
char Label[100];
|
||||||
|
|
||||||
ProfAddress = PROGRAM_COUNTER & ~0xFFF;
|
ProfAddress = PROGRAM_COUNTER & ~0xFFF;
|
||||||
sprintf(Label,"PC: %X to %X",ProfAddress,ProfAddress+ 0xFFC);
|
sprintf(Label,"PC: %X to %X",ProfAddress,ProfAddress+ 0xFFC);
|
||||||
StartTimer(Label);
|
StartTimer(Label);
|
||||||
}*/
|
}*/
|
||||||
/*if (PROGRAM_COUNTER >= 0x800DD000 && PROGRAM_COUNTER <= 0x800DDFFC)
|
/*if (PROGRAM_COUNTER >= 0x800DD000 && PROGRAM_COUNTER <= 0x800DDFFC)
|
||||||
{
|
{
|
||||||
char Label[100];
|
char Label[100];
|
||||||
sprintf(Label,"PC: %X Block: %X",PROGRAM_COUNTER,Block);
|
sprintf(Label,"PC: %X Block: %X",PROGRAM_COUNTER,Block);
|
||||||
StartTimer(Label);
|
StartTimer(Label);
|
||||||
|
@ -890,11 +890,11 @@ void CRecompiler::RecompilerMain_ChangeMemory()
|
||||||
// } else if ((Profiling || ShowCPUPer) && ProfilingLabel[0] == 0) {
|
// } else if ((Profiling || ShowCPUPer) && ProfilingLabel[0] == 0) {
|
||||||
// StartTimer("r4300i Running");
|
// StartTimer("r4300i Running");
|
||||||
}
|
}
|
||||||
_asm
|
_asm
|
||||||
{
|
{
|
||||||
pushad
|
pushad
|
||||||
call Block
|
call Block
|
||||||
popad
|
popad
|
||||||
}
|
}
|
||||||
} // end for(;;)
|
} // end for(;;)
|
||||||
#endif
|
#endif
|
||||||
|
@ -989,7 +989,7 @@ void CRecompiler::ClearRecompCode_Phys(uint32_t Address, int length, REMOVE_REAS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WriteTraceF(TraceRecompiler, __FUNCTION__ ": Ignoring reset of Jump Table, Addr: %X len: %d", Address, ((length + 3) & ~3));
|
WriteTraceF(TraceRecompiler, __FUNCTION__ ": Ignoring reset of Jump Table, Addr: %X len: %d", Address, ((length + 3) & ~3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1000,39 +1000,39 @@ void CRecompiler::ClearRecompCode_Virt(uint32_t Address, int length, REMOVE_REAS
|
||||||
switch (g_System->LookUpMode())
|
switch (g_System->LookUpMode())
|
||||||
{
|
{
|
||||||
case FuncFind_VirtualLookup:
|
case FuncFind_VirtualLookup:
|
||||||
|
{
|
||||||
|
uint32_t AddressIndex = Address >> 0xC;
|
||||||
|
uint32_t WriteStart = (Address & 0xFFC);
|
||||||
|
length = ((length + 3) & ~0x3);
|
||||||
|
|
||||||
|
int DataInBlock = 0x1000 - WriteStart;
|
||||||
|
int DataToWrite = length < DataInBlock ? length : DataInBlock;
|
||||||
|
int DataLeft = length - DataToWrite;
|
||||||
|
|
||||||
|
PCCompiledFunc_TABLE & table = FunctionTable()[AddressIndex];
|
||||||
|
if (table)
|
||||||
{
|
{
|
||||||
uint32_t AddressIndex = Address >> 0xC;
|
WriteTraceF(TraceError, __FUNCTION__ ": Delete Table (%X): Index = %d", table, AddressIndex);
|
||||||
uint32_t WriteStart = (Address & 0xFFC);
|
delete table;
|
||||||
length = ((length + 3) & ~0x3);
|
table = NULL;
|
||||||
|
g_MMU->UnProtectMemory(Address, Address + length);
|
||||||
int DataInBlock = 0x1000 - WriteStart;
|
|
||||||
int DataToWrite = length < DataInBlock ? length : DataInBlock;
|
|
||||||
int DataLeft = length - DataToWrite;
|
|
||||||
|
|
||||||
PCCompiledFunc_TABLE & table = FunctionTable()[AddressIndex];
|
|
||||||
if (table)
|
|
||||||
{
|
|
||||||
WriteTraceF(TraceError, __FUNCTION__ ": Delete Table (%X): Index = %d", table, AddressIndex);
|
|
||||||
delete table;
|
|
||||||
table = NULL;
|
|
||||||
g_MMU->UnProtectMemory(Address, Address + length);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DataLeft > 0)
|
|
||||||
{
|
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
if (DataLeft > 0)
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case FuncFind_PhysicalLookup:
|
case FuncFind_PhysicalLookup:
|
||||||
|
{
|
||||||
|
uint32_t pAddr = 0;
|
||||||
|
if (g_TransVaddr->TranslateVaddr(Address, pAddr))
|
||||||
{
|
{
|
||||||
uint32_t pAddr = 0;
|
ClearRecompCode_Phys(pAddr, length, Reason);
|
||||||
if (g_TransVaddr->TranslateVaddr(Address, pAddr))
|
|
||||||
{
|
|
||||||
ClearRecompCode_Phys(pAddr, length, Reason);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
|
@ -1056,9 +1056,9 @@ void CRecompiler::ResetMemoryStackPos()
|
||||||
{
|
{
|
||||||
m_MemoryStack = (uint32_t)(g_MMU->Rdram() + pAddr);
|
m_MemoryStack = (uint32_t)(g_MMU->Rdram() + pAddr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WriteTraceF(TraceError, __FUNCTION__ ": Failed to translate SP address (%s)", m_Registers.m_GPR[29].UW[0]);
|
WriteTraceF(TraceError, __FUNCTION__ ": Failed to translate SP address (%s)", m_Registers.m_GPR[29].UW[0]);
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,7 +34,7 @@ public:
|
||||||
Remove_StoreInstruc,
|
Remove_StoreInstruc,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*DelayFunc)();
|
typedef void(*DelayFunc)();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CRecompiler(CRegisters & Registers, CProfiling & Profile, bool & EndEmulation);
|
CRecompiler(CRegisters & Registers, CProfiling & Profile, bool & EndEmulation);
|
||||||
|
@ -45,8 +45,8 @@ public:
|
||||||
void ResetRecompCode(bool bAllocate);
|
void ResetRecompCode(bool bAllocate);
|
||||||
|
|
||||||
//Self modifying code methods
|
//Self modifying code methods
|
||||||
void ClearRecompCode_Virt ( uint32_t VirtualAddress, int32_t length, REMOVE_REASON Reason );
|
void ClearRecompCode_Virt(uint32_t VirtualAddress, int32_t length, REMOVE_REASON Reason);
|
||||||
void ClearRecompCode_Phys ( uint32_t PhysicalAddress, int32_t length, REMOVE_REASON Reason );
|
void ClearRecompCode_Phys(uint32_t PhysicalAddress, int32_t length, REMOVE_REASON Reason);
|
||||||
|
|
||||||
void ResetMemoryStackPos();
|
void ResetMemoryStackPos();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue