Jit_FloatingPoint: fmrx
This commit is contained in:
parent
fecbf091e5
commit
55c21a15a2
|
@ -463,26 +463,25 @@ void Jit64::fmrx(UGeckoInstruction inst)
|
||||||
if (d == b)
|
if (d == b)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fpr.Lock(b, d);
|
RCOpArg Rd = fpr.Use(d, RCMode::Write);
|
||||||
|
RegCache::Realize(Rd);
|
||||||
if (fpr.R(d).IsSimpleReg())
|
if (Rd.IsSimpleReg())
|
||||||
{
|
{
|
||||||
// We don't need to load d, but if it is loaded, we need to mark it as dirty.
|
RCOpArg Rb = fpr.Use(b, RCMode::Read);
|
||||||
fpr.BindToRegister(d);
|
RegCache::Realize(Rb);
|
||||||
// We have to use MOVLPD if b isn't loaded because "MOVSD reg, mem" sets the upper bits (64+)
|
// We have to use MOVLPD if b isn't loaded because "MOVSD reg, mem" sets the upper bits (64+)
|
||||||
// to zero and we don't want that.
|
// to zero and we don't want that.
|
||||||
if (!fpr.R(b).IsSimpleReg())
|
if (!Rb.IsSimpleReg())
|
||||||
MOVLPD(fpr.RX(d), fpr.R(b));
|
MOVLPD(Rd.GetSimpleReg(), Rb);
|
||||||
else
|
else
|
||||||
MOVSD(fpr.R(d), fpr.RX(b));
|
MOVSD(Rd, Rb.GetSimpleReg());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fpr.BindToRegister(b, true, false);
|
RCOpArg Rb = fpr.Bind(b, RCMode::Read);
|
||||||
MOVSD(fpr.R(d), fpr.RX(b));
|
RegCache::Realize(Rb);
|
||||||
|
MOVSD(Rd, Rb.GetSimpleReg());
|
||||||
}
|
}
|
||||||
|
|
||||||
fpr.UnlockAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit64::FloatCompare(UGeckoInstruction inst, bool upper)
|
void Jit64::FloatCompare(UGeckoInstruction inst, bool upper)
|
||||||
|
|
Loading…
Reference in New Issue