[Project64] Cleanup RecompilerOps.cpp
This commit is contained in:
parent
19303a0210
commit
6b07620b74
|
@ -72,25 +72,25 @@ void CRecompilerOps::Compile_Branch(CRecompilerOps::BranchFunction CompareFunc,
|
||||||
case BranchTypeRs: EffectDelaySlot = DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, 0); break;
|
case BranchTypeRs: EffectDelaySlot = DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, 0); break;
|
||||||
case BranchTypeRsRt: EffectDelaySlot = DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, m_Opcode.rt); break;
|
case BranchTypeRsRt: EffectDelaySlot = DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, m_Opcode.rt); break;
|
||||||
case BranchTypeCop1:
|
case BranchTypeCop1:
|
||||||
|
{
|
||||||
|
OPCODE Command;
|
||||||
|
|
||||||
|
if (!g_MMU->LW_VAddr(m_CompilePC + 4, Command.Hex))
|
||||||
{
|
{
|
||||||
OPCODE Command;
|
g_Notify->FatalError(GS(MSG_FAIL_LOAD_WORD));
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_MMU->LW_VAddr(m_CompilePC + 4, Command.Hex))
|
EffectDelaySlot = false;
|
||||||
|
if (Command.op == R4300i_CP1)
|
||||||
|
{
|
||||||
|
if ((Command.fmt == R4300i_COP1_S && (Command.funct & 0x30) == 0x30) ||
|
||||||
|
(Command.fmt == R4300i_COP1_D && (Command.funct & 0x30) == 0x30))
|
||||||
{
|
{
|
||||||
g_Notify->FatalError(GS(MSG_FAIL_LOAD_WORD));
|
EffectDelaySlot = true;
|
||||||
}
|
|
||||||
|
|
||||||
EffectDelaySlot = false;
|
|
||||||
if (Command.op == R4300i_CP1)
|
|
||||||
{
|
|
||||||
if ((Command.fmt == R4300i_COP1_S && (Command.funct & 0x30) == 0x30) ||
|
|
||||||
(Command.fmt == R4300i_COP1_D && (Command.funct & 0x30) == 0x30))
|
|
||||||
{
|
|
||||||
EffectDelaySlot = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (bHaveDebugger()) { g_Notify->DisplayError(L"Unknown branch type"); }
|
if (bHaveDebugger()) { g_Notify->DisplayError(L"Unknown branch type"); }
|
||||||
}
|
}
|
||||||
|
@ -5409,39 +5409,39 @@ void CRecompilerOps::COP0_MT()
|
||||||
AfterCallDirect(m_RegWorkingSet);
|
AfterCallDirect(m_RegWorkingSet);
|
||||||
break;
|
break;
|
||||||
case 12: //Status
|
case 12: //Status
|
||||||
|
{
|
||||||
|
x86Reg OldStatusReg = Map_TempReg(x86_Any, -1, false);
|
||||||
|
MoveVariableToX86reg(&_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd], OldStatusReg);
|
||||||
|
if (IsConst(m_Opcode.rt))
|
||||||
{
|
{
|
||||||
x86Reg OldStatusReg = Map_TempReg(x86_Any, -1, false);
|
MoveConstToVariable(GetMipsRegLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
||||||
MoveVariableToX86reg(&_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd], OldStatusReg);
|
|
||||||
if (IsConst(m_Opcode.rt))
|
|
||||||
{
|
|
||||||
MoveConstToVariable(GetMipsRegLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
|
||||||
}
|
|
||||||
else if (IsMapped(m_Opcode.rt))
|
|
||||||
{
|
|
||||||
MoveX86regToVariable(GetMipsRegMapLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MoveX86regToVariable(Map_TempReg(x86_Any, m_Opcode.rt, false), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
|
||||||
}
|
|
||||||
XorVariableToX86reg(&_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd], OldStatusReg);
|
|
||||||
TestConstToX86Reg(STATUS_FR, OldStatusReg);
|
|
||||||
JeLabel8("FpuFlagFine", 0);
|
|
||||||
Jump = m_RecompPos - 1;
|
|
||||||
BeforeCallDirect(m_RegWorkingSet);
|
|
||||||
MoveConstToX86reg((uint32_t)g_Reg, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CRegisters::FixFpuLocations), "CRegisters::FixFpuLocations");
|
|
||||||
|
|
||||||
AfterCallDirect(m_RegWorkingSet);
|
|
||||||
SetJump8(Jump, m_RecompPos);
|
|
||||||
|
|
||||||
//TestConstToX86Reg(STATUS_FR,OldStatusReg);
|
|
||||||
//BreakPoint(__FILEW__,__LINE__); //m_Section->CompileExit(m_CompilePC+4,m_RegWorkingSet,ExitResetRecompCode,false,JneLabel32);
|
|
||||||
BeforeCallDirect(m_RegWorkingSet);
|
|
||||||
MoveConstToX86reg((uint32_t)g_Reg, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CRegisters::CheckInterrupts), "CRegisters::CheckInterrupts");
|
|
||||||
AfterCallDirect(m_RegWorkingSet);
|
|
||||||
}
|
}
|
||||||
break;
|
else if (IsMapped(m_Opcode.rt))
|
||||||
|
{
|
||||||
|
MoveX86regToVariable(GetMipsRegMapLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MoveX86regToVariable(Map_TempReg(x86_Any, m_Opcode.rt, false), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
|
||||||
|
}
|
||||||
|
XorVariableToX86reg(&_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd], OldStatusReg);
|
||||||
|
TestConstToX86Reg(STATUS_FR, OldStatusReg);
|
||||||
|
JeLabel8("FpuFlagFine", 0);
|
||||||
|
Jump = m_RecompPos - 1;
|
||||||
|
BeforeCallDirect(m_RegWorkingSet);
|
||||||
|
MoveConstToX86reg((uint32_t)g_Reg, x86_ECX);
|
||||||
|
Call_Direct(AddressOf(&CRegisters::FixFpuLocations), "CRegisters::FixFpuLocations");
|
||||||
|
|
||||||
|
AfterCallDirect(m_RegWorkingSet);
|
||||||
|
SetJump8(Jump, m_RecompPos);
|
||||||
|
|
||||||
|
//TestConstToX86Reg(STATUS_FR,OldStatusReg);
|
||||||
|
//BreakPoint(__FILEW__,__LINE__); //m_Section->CompileExit(m_CompilePC+4,m_RegWorkingSet,ExitResetRecompCode,false,JneLabel32);
|
||||||
|
BeforeCallDirect(m_RegWorkingSet);
|
||||||
|
MoveConstToX86reg((uint32_t)g_Reg, x86_ECX);
|
||||||
|
Call_Direct(AddressOf(&CRegisters::CheckInterrupts), "CRegisters::CheckInterrupts");
|
||||||
|
AfterCallDirect(m_RegWorkingSet);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 6: //Wired
|
case 6: //Wired
|
||||||
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
|
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
|
||||||
UpdateCounters(m_RegWorkingSet, false, true);
|
UpdateCounters(m_RegWorkingSet, false, true);
|
||||||
|
@ -6729,4 +6729,4 @@ void CRecompilerOps::OverflowDelaySlot(bool TestTimer)
|
||||||
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
m_NextInstruction = END_BLOCK;
|
m_NextInstruction = END_BLOCK;
|
||||||
}
|
}
|
Loading…
Reference in New Issue