Core: Update CX86RecompilerOps::COP1_D_CVT_S and CX86RecompilerOps::COP1_D_CVT_W
This commit is contained in:
parent
33d2722841
commit
2811b63ff0
|
@ -8642,30 +8642,44 @@ void CX86RecompilerOps::COP1_D_FLOOR_W()
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_CVT_S()
|
void CX86RecompilerOps::COP1_D_CVT_S()
|
||||||
{
|
{
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
if (m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double) || m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Qword))
|
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
COP1_S_CVT(CRegInfo::RoundDefault, CRegInfo::FPU_Double, CRegInfo::FPU_FloatLow);
|
||||||
}
|
}
|
||||||
if (m_Opcode.fd != m_Opcode.fs || !m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double))
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
CompileCop1Test();
|
||||||
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double) || m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Qword))
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.UnMap_FPR(m_Opcode.fd, true);
|
||||||
|
}
|
||||||
|
if (m_Opcode.fd != m_Opcode.fs || !m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double))
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
}
|
||||||
|
m_RegWorkingSet.ChangeFPURegFormat(m_Opcode.fd, CRegInfo::FPU_Double, CRegInfo::FPU_Float, CRegInfo::RoundDefault);
|
||||||
}
|
}
|
||||||
m_RegWorkingSet.ChangeFPURegFormat(m_Opcode.fd, CRegInfo::FPU_Double, CRegInfo::FPU_Float, CRegInfo::RoundDefault);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_CVT_W()
|
void CX86RecompilerOps::COP1_D_CVT_W()
|
||||||
{
|
{
|
||||||
CompileCop1Test();
|
if (FpuExceptionInRecompiler())
|
||||||
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Double) || m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Qword))
|
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.UnMap_FPR(m_Opcode.fs, true);
|
COP1_S_CVT(CRegInfo::RoundDefault, CRegInfo::FPU_Double, CRegInfo::FPU_Dword);
|
||||||
}
|
}
|
||||||
if (m_Opcode.fd != m_Opcode.fs || !m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double))
|
else
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
CompileCop1Test();
|
||||||
|
if (m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Double) || m_RegWorkingSet.RegInStack(m_Opcode.fs, CRegInfo::FPU_Qword))
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.UnMap_FPR(m_Opcode.fs, true);
|
||||||
|
}
|
||||||
|
if (m_Opcode.fd != m_Opcode.fs || !m_RegWorkingSet.RegInStack(m_Opcode.fd, CRegInfo::FPU_Double))
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.Load_FPR_ToTop(m_Opcode.fd, m_Opcode.fs, CRegInfo::FPU_Double);
|
||||||
|
}
|
||||||
|
m_RegWorkingSet.ChangeFPURegFormat(m_Opcode.fd, CRegInfo::FPU_Double, CRegInfo::FPU_Dword, CRegInfo::RoundDefault);
|
||||||
}
|
}
|
||||||
m_RegWorkingSet.ChangeFPURegFormat(m_Opcode.fd, CRegInfo::FPU_Double, CRegInfo::FPU_Dword, CRegInfo::RoundDefault);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_D_CVT_L()
|
void CX86RecompilerOps::COP1_D_CVT_L()
|
||||||
|
|
Loading…
Reference in New Issue