Core: Make sure precision is set to 53bit
This commit is contained in:
parent
290040d945
commit
97ec1f533b
|
@ -287,22 +287,24 @@ void CX86RegInfo::FixRoundModel(FPU_ROUND RoundMethod)
|
||||||
m_Assembler.fpuStoreControl(&m_fpuControl, "m_fpuControl");
|
m_Assembler.fpuStoreControl(&m_fpuControl, "m_fpuControl");
|
||||||
asmjit::x86::Gp reg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
asmjit::x86::Gp reg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
m_Assembler.MoveVariableToX86reg(reg, &m_fpuControl, "m_fpuControl");
|
m_Assembler.MoveVariableToX86reg(reg, &m_fpuControl, "m_fpuControl");
|
||||||
m_Assembler.and_(reg, 0xF3FF);
|
m_Assembler.and_(reg, 0xF0FF);
|
||||||
|
uint16_t Precision = 0x200;
|
||||||
|
|
||||||
if (RoundMethod == RoundDefault)
|
if (RoundMethod == RoundDefault)
|
||||||
{
|
{
|
||||||
asmjit::x86::Gp RoundReg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
asmjit::x86::Gp RoundReg = Map_TempReg(x86Reg_Unknown, -1, false, false);
|
||||||
m_Assembler.OrVariableToX86Reg(reg, &CX86RecompilerOps::m_RoundingModeValue, "m_RoundingModeValue");
|
m_Assembler.OrVariableToX86Reg(reg, &CX86RecompilerOps::m_RoundingModeValue, "m_RoundingModeValue");
|
||||||
|
m_Assembler.or_(reg, Precision);
|
||||||
SetX86Protected(GetIndexFromX86Reg(RoundReg), false);
|
SetX86Protected(GetIndexFromX86Reg(RoundReg), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (RoundMethod)
|
switch (RoundMethod)
|
||||||
{
|
{
|
||||||
case RoundTruncate: m_Assembler.or_(reg, 0x0C00); break;
|
case RoundTruncate: m_Assembler.or_(reg, 0x0C00 | Precision); break;
|
||||||
case RoundNearest: m_Assembler.or_(reg, 0x0000); break;
|
case RoundNearest: m_Assembler.or_(reg, 0x0000 | Precision); break;
|
||||||
case RoundDown: m_Assembler.or_(reg, 0x0400); break;
|
case RoundDown: m_Assembler.or_(reg, 0x0400 | Precision); break;
|
||||||
case RoundUp: m_Assembler.or_(reg, 0x0800); break;
|
case RoundUp: m_Assembler.or_(reg, 0x0800 | Precision); break;
|
||||||
default:
|
default:
|
||||||
g_Notify->DisplayError("Unknown rounding model");
|
g_Notify->DisplayError("Unknown rounding model");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue