Jit64: implement frsp

This commit is contained in:
Tillmann Karras 2014-07-17 23:22:41 +02:00
parent 063f530d4c
commit 771a30da36
3 changed files with 17 additions and 1 deletions

View File

@ -191,6 +191,7 @@ public:
void fmaddXX(UGeckoInstruction inst);
void fsign(UGeckoInstruction inst);
void frsp(UGeckoInstruction inst);
void stX(UGeckoInstruction inst); //stw sth stb
void rlwinmx(UGeckoInstruction inst);
void rlwimix(UGeckoInstruction inst);

View File

@ -342,7 +342,7 @@ static GekkoOPTemplate table63[] =
{72, &Jit64::fmrx}, //"fmrx", OPTYPE_FPU, FL_RC_BIT_F}},
{136, &Jit64::fsign}, //"fnabsx", OPTYPE_FPU, FL_RC_BIT_F}},
{40, &Jit64::fsign}, //"fnegx", OPTYPE_FPU, FL_RC_BIT_F}},
{12, &Jit64::FallBackToInterpreter}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}},
{12, &Jit64::frsp}, //"frspx", OPTYPE_FPU, FL_RC_BIT_F}},
{64, &Jit64::FallBackToInterpreter}, //"mcrfs", OPTYPE_SYSTEMFP, 0}},
{583, &Jit64::FallBackToInterpreter}, //"mffsx", OPTYPE_SYSTEMFP, 0}},

View File

@ -175,6 +175,21 @@ void Jit64::fsign(UGeckoInstruction inst)
fpr.UnlockAll();
}
void Jit64::frsp(UGeckoInstruction inst)
{
INSTRUCTION_START
JITDISABLE(bJITFloatingPointOff);
FALLBACK_IF(inst.Rc);
int d = inst.FD, b = inst.FB;
fpr.Lock(d, b);
fpr.BindToRegister(d, d == b);
CVTSD2SS(fpr.RX(d), fpr.R(b));
CVTSS2SD(fpr.RX(d), fpr.R(d));
UNPCKLPD(fpr.RX(d), fpr.R(d));
fpr.UnlockAll();
}
void Jit64::fmrx(UGeckoInstruction inst)
{
INSTRUCTION_START