JitArm64: Track singles in frspx.
This commit is contained in:
parent
0efdd5cacd
commit
5506295123
|
@ -169,11 +169,22 @@ void JitArm64::frspx(UGeckoInstruction inst)
|
||||||
|
|
||||||
u32 b = inst.FB, d = inst.FD;
|
u32 b = inst.FB, d = inst.FD;
|
||||||
|
|
||||||
|
if (fpr.IsSingle(b))
|
||||||
|
{
|
||||||
|
// Source is already in single precision, so no need to do anything but to copy to PSR1.
|
||||||
|
ARM64Reg VB = fpr.R(b, REG_IS_LOADED_SINGLE);
|
||||||
|
ARM64Reg VD = fpr.RW(d, REG_DUP_SINGLE);
|
||||||
|
|
||||||
|
if (b != d)
|
||||||
|
m_float_emit.FMOV(EncodeRegToSingle(VD), EncodeRegToSingle(VB));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ARM64Reg VB = fpr.R(b, REG_IS_LOADED);
|
ARM64Reg VB = fpr.R(b, REG_IS_LOADED);
|
||||||
ARM64Reg VD = fpr.RW(d, REG_DUP);
|
ARM64Reg VD = fpr.RW(d, REG_DUP_SINGLE);
|
||||||
|
|
||||||
m_float_emit.FCVT(32, 64, EncodeRegToDouble(VD), EncodeRegToDouble(VB));
|
m_float_emit.FCVT(32, 64, EncodeRegToDouble(VD), EncodeRegToDouble(VB));
|
||||||
m_float_emit.FCVT(64, 32, EncodeRegToDouble(VD), EncodeRegToDouble(VD));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JitArm64::fcmpX(UGeckoInstruction inst)
|
void JitArm64::fcmpX(UGeckoInstruction inst)
|
||||||
|
|
Loading…
Reference in New Issue