Jit64: extract frsqrtex as method
This commit is contained in:
parent
897bec1add
commit
c29fb22cd4
|
@ -360,7 +360,7 @@ static GekkoOPTemplate table63_2[] =
|
||||||
{22, &Jit64::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{22, &Jit64::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{23, &Jit64::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{23, &Jit64::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{25, &Jit64::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{25, &Jit64::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{26, &Jit64::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}},
|
{26, &Jit64::frsqrtex}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{28, &Jit64::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{28, &Jit64::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{29, &Jit64::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{29, &Jit64::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
{30, &Jit64::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}},
|
{30, &Jit64::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}},
|
||||||
|
|
|
@ -70,20 +70,6 @@ void Jit64::fp_arith_s(UGeckoInstruction inst)
|
||||||
Default(inst); return;
|
Default(inst); return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inst.SUBOP5 == 26) {
|
|
||||||
// frsqrtex
|
|
||||||
int d = inst.FD;
|
|
||||||
int b = inst.FB;
|
|
||||||
fpr.Lock(b, d);
|
|
||||||
fpr.BindToRegister(d, true, true);
|
|
||||||
MOVSD(XMM0, M((void *)&one_const));
|
|
||||||
SQRTSD(XMM1, fpr.R(b));
|
|
||||||
DIVSD(XMM0, R(XMM1));
|
|
||||||
MOVSD(fpr.R(d), XMM0);
|
|
||||||
fpr.UnlockAll();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inst.SUBOP5 != 18 && inst.SUBOP5 != 20 && inst.SUBOP5 != 21 &&
|
if (inst.SUBOP5 != 18 && inst.SUBOP5 != 20 && inst.SUBOP5 != 21 &&
|
||||||
inst.SUBOP5 != 25) {
|
inst.SUBOP5 != 25) {
|
||||||
Default(inst); return;
|
Default(inst); return;
|
||||||
|
@ -106,6 +92,21 @@ void Jit64::fp_arith_s(UGeckoInstruction inst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Jit64::frsqrtex(UGeckoInstruction inst)
|
||||||
|
{
|
||||||
|
INSTRUCTION_START
|
||||||
|
JITDISABLE(bJITFloatingPointOff)
|
||||||
|
int d = inst.FD;
|
||||||
|
int b = inst.FB;
|
||||||
|
fpr.Lock(b, d);
|
||||||
|
fpr.BindToRegister(d, true, true);
|
||||||
|
MOVSD(XMM0, M((void *)&one_const));
|
||||||
|
SQRTSD(XMM1, fpr.R(b));
|
||||||
|
DIVSD(XMM0, R(XMM1));
|
||||||
|
MOVSD(fpr.R(d), XMM0);
|
||||||
|
fpr.UnlockAll();
|
||||||
|
}
|
||||||
|
|
||||||
void Jit64::fmaddXX(UGeckoInstruction inst)
|
void Jit64::fmaddXX(UGeckoInstruction inst)
|
||||||
{
|
{
|
||||||
INSTRUCTION_START
|
INSTRUCTION_START
|
||||||
|
|
Loading…
Reference in New Issue