Core: CX86RecompilerOps::COP1_CF should be able use the mapped FPStatusReg if is mapped
This commit is contained in:
parent
0998f0ff0e
commit
c9d2bbd221
|
@ -7494,7 +7494,14 @@ void CX86RecompilerOps::COP1_CF()
|
||||||
}
|
}
|
||||||
|
|
||||||
m_RegWorkingSet.Map_GPR_32bit(m_Opcode.rt, true, -1);
|
m_RegWorkingSet.Map_GPR_32bit(m_Opcode.rt, true, -1);
|
||||||
m_Assembler.MoveVariableToX86reg(m_RegWorkingSet.GetMipsRegMapLo(m_Opcode.rt), &m_Reg.m_FPCR[m_Opcode.fs], CRegName::FPR_Ctrl[m_Opcode.fs]);
|
if (m_Opcode.fs == 31 && m_RegWorkingSet.IsFPStatusRegMapped())
|
||||||
|
{
|
||||||
|
m_Assembler.mov(m_RegWorkingSet.GetMipsRegMapLo(m_Opcode.rt), m_RegWorkingSet.Map_FPStatusReg());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_Assembler.MoveVariableToX86reg(m_RegWorkingSet.GetMipsRegMapLo(m_Opcode.rt), &m_Reg.m_FPCR[m_Opcode.fs], CRegName::FPR_Ctrl[m_Opcode.fs]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::COP1_MT()
|
void CX86RecompilerOps::COP1_MT()
|
||||||
|
|
|
@ -596,6 +596,18 @@ const asmjit::x86::St & CX86RegInfo::StackPosition(int32_t Reg)
|
||||||
return Unknown;
|
return Unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CX86RegInfo::IsFPStatusRegMapped()
|
||||||
|
{
|
||||||
|
for (int32_t i = 0, n = x86RegIndex_Size; i < n; i++)
|
||||||
|
{
|
||||||
|
if (GetX86Mapped((x86RegIndex)i) == FPStatusReg_Mapped)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
asmjit::x86::Gp CX86RegInfo::FreeX86Reg()
|
asmjit::x86::Gp CX86RegInfo::FreeX86Reg()
|
||||||
{
|
{
|
||||||
if (GetX86Mapped(x86RegIndex_EDI) == NotMapped && !GetX86Protected(x86RegIndex_EDI))
|
if (GetX86Mapped(x86RegIndex_EDI) == NotMapped && !GetX86Protected(x86RegIndex_EDI))
|
||||||
|
|
|
@ -91,6 +91,7 @@ public:
|
||||||
void UnMap_FPR(int32_t Reg, bool WriteBackValue);
|
void UnMap_FPR(int32_t Reg, bool WriteBackValue);
|
||||||
const asmjit::x86::St & StackPosition(int32_t Reg);
|
const asmjit::x86::St & StackPosition(int32_t Reg);
|
||||||
|
|
||||||
|
bool IsFPStatusRegMapped();
|
||||||
asmjit::x86::Gp FreeX86Reg();
|
asmjit::x86::Gp FreeX86Reg();
|
||||||
asmjit::x86::Gp Free8BitX86Reg();
|
asmjit::x86::Gp Free8BitX86Reg();
|
||||||
void Map_GPR_32bit(int32_t MipsReg, bool SignValue, int32_t MipsRegToLoad);
|
void Map_GPR_32bit(int32_t MipsReg, bool SignValue, int32_t MipsRegToLoad);
|
||||||
|
|
Loading…
Reference in New Issue