[AArch64] Implement frspx
Improves performance in povray bench by 2%
This commit is contained in:
parent
c325c310d6
commit
ce32b76be3
|
@ -145,6 +145,7 @@ public:
|
|||
void fsubsx(UGeckoInstruction inst);
|
||||
void fsubx(UGeckoInstruction inst);
|
||||
void fcmpx(UGeckoInstruction inst);
|
||||
void frspx(UGeckoInstruction inst);
|
||||
|
||||
// Paired
|
||||
void ps_abs(UGeckoInstruction inst);
|
||||
|
|
|
@ -458,6 +458,22 @@ void JitArm64::fsubx(UGeckoInstruction inst)
|
|||
}
|
||||
}
|
||||
|
||||
void JitArm64::frspx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
JITDISABLE(bJITFloatingPointOff);
|
||||
|
||||
u32 b = inst.FB, d = inst.FD;
|
||||
fpr.BindToRegister(d, d == b, false);
|
||||
|
||||
ARM64Reg VB = fpr.R(b);
|
||||
ARM64Reg VD = fpr.R(d, false);
|
||||
|
||||
m_float_emit.FCVTN(32, EncodeRegToDouble(VD), EncodeRegToDouble(VB));
|
||||
m_float_emit.FCVTL(64, EncodeRegToDouble(VD), EncodeRegToDouble(VD));
|
||||
m_float_emit.INS(64, VD, 1, VD, 0);
|
||||
}
|
||||
|
||||
void JitArm64::fcmpx(UGeckoInstruction inst)
|
||||
{
|
||||
INSTRUCTION_START
|
||||
|
|
|
@ -334,7 +334,7 @@ static GekkoOPTemplate table63[] =
|
|||
{72, &JitArm64::fmrx}, // fmrx
|
||||
{136, &JitArm64::fnabsx}, // fnabsx
|
||||
{40, &JitArm64::fnegx}, // fnegx
|
||||
{12, &JitArm64::FallBackToInterpreter}, // frspx
|
||||
{12, &JitArm64::frspx}, // frspx
|
||||
|
||||
{64, &JitArm64::FallBackToInterpreter}, // mcrfs
|
||||
{583, &JitArm64::FallBackToInterpreter}, // mffsx
|
||||
|
|
Loading…
Reference in New Issue