[Project64] Add CArmRecompilerOps::LB_KnownAddress
This commit is contained in:
parent
ba7315922f
commit
6467d0e9f0
|
@ -2019,7 +2019,10 @@ void CArmRecompilerOps::LB()
|
||||||
|
|
||||||
if (IsConst(m_Opcode.base))
|
if (IsConst(m_Opcode.base))
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__,__LINE__);
|
uint32_t Address = (GetMipsRegLo(m_Opcode.base) + (int16_t)m_Opcode.offset) ^ 3;
|
||||||
|
Map_GPR_32bit(m_Opcode.rt, true, -1);
|
||||||
|
LB_KnownAddress(GetMipsRegMapLo(m_Opcode.rt), Address, true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (IsMapped(m_Opcode.rt))
|
if (IsMapped(m_Opcode.rt))
|
||||||
{
|
{
|
||||||
|
@ -4660,4 +4663,44 @@ void CArmRecompilerOps::OverflowDelaySlot(bool TestTimer)
|
||||||
m_NextInstruction = END_BLOCK;
|
m_NextInstruction = END_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CArmRecompilerOps::LB_KnownAddress(ArmReg Reg, uint32_t VAddr, bool SignExtend)
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.SetArmRegProtected(Reg, true);
|
||||||
|
|
||||||
|
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
|
||||||
|
{
|
||||||
|
if (bHaveDebugger()) { g_Notify->BreakPoint(__FILE__, __LINE__); }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t PAddr;
|
||||||
|
if (!g_TransVaddr->TranslateVaddr(VAddr, PAddr))
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArmReg TempReg = Arm_Unknown;
|
||||||
|
switch (PAddr & 0xFFF00000)
|
||||||
|
{
|
||||||
|
case 0x00000000:
|
||||||
|
case 0x00100000:
|
||||||
|
case 0x00200000:
|
||||||
|
case 0x00300000:
|
||||||
|
case 0x00400000:
|
||||||
|
case 0x00500000:
|
||||||
|
case 0x00600000:
|
||||||
|
case 0x00700000:
|
||||||
|
case 0x10000000:
|
||||||
|
TempReg = Map_TempReg(Arm_Any, -1, false);
|
||||||
|
MoveConstToArmReg(TempReg, (uint32_t)PAddr + (uint32_t)g_MMU->Rdram(), stdstr_f("RDRAM + %X", PAddr).c_str());
|
||||||
|
LoadArmRegPointerByteToArmReg(Reg, TempReg, 0);
|
||||||
|
SignExtendByte(Reg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CPU_Message(" Should be loading from %08X ?!?", VAddr);
|
||||||
|
if (bHaveDebugger()) { g_Notify->BreakPoint(__FILE__, __LINE__); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -247,6 +247,7 @@ private:
|
||||||
|
|
||||||
static inline void ProtectGPR(uint32_t Reg) { m_RegWorkingSet.ProtectGPR(Reg); }
|
static inline void ProtectGPR(uint32_t Reg) { m_RegWorkingSet.ProtectGPR(Reg); }
|
||||||
|
|
||||||
|
void LB_KnownAddress(ArmReg Reg, uint32_t VAddr, bool SignExtend);
|
||||||
void CompileInterpterCall (void * Function, const char * FunctionName);
|
void CompileInterpterCall (void * Function, const char * FunctionName);
|
||||||
void OverflowDelaySlot(bool TestTimer);
|
void OverflowDelaySlot(bool TestTimer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue