Jit_LoadStorePaired: psq_stXX
This commit is contained in:
parent
459f977483
commit
0b29b5cb83
|
@ -40,21 +40,22 @@ void Jit64::psq_stXX(UGeckoInstruction inst)
|
||||||
bool gqrIsConstant = it != js.constantGqr.end();
|
bool gqrIsConstant = it != js.constantGqr.end();
|
||||||
u32 gqrValue = gqrIsConstant ? it->second & 0xffff : 0;
|
u32 gqrValue = gqrIsConstant ? it->second & 0xffff : 0;
|
||||||
|
|
||||||
gpr.Lock(a, b);
|
RCX64Reg scratch_guard = gpr.Scratch(RSCRATCH_EXTRA);
|
||||||
gpr.FlushLockX(RSCRATCH_EXTRA);
|
RCOpArg Ra = update ? gpr.Bind(a, RCMode::ReadWrite) : gpr.Use(a, RCMode::Read);
|
||||||
if (update)
|
RCOpArg Rb = indexed ? gpr.Use(b, RCMode::Read) : RCOpArg::Imm32((u32)offset);
|
||||||
gpr.BindToRegister(a, true, true);
|
RCOpArg Rs = fpr.Use(s, RCMode::Read);
|
||||||
|
RegCache::Realize(scratch_guard, Ra, Rb, Rs);
|
||||||
|
|
||||||
MOV_sum(32, RSCRATCH_EXTRA, gpr.R(a), indexed ? gpr.R(b) : Imm32((u32)offset));
|
MOV_sum(32, RSCRATCH_EXTRA, Ra, Rb);
|
||||||
|
|
||||||
// In memcheck mode, don't update the address until the exception check
|
// In memcheck mode, don't update the address until the exception check
|
||||||
if (update && !jo.memcheck)
|
if (update && !jo.memcheck)
|
||||||
MOV(32, gpr.R(a), R(RSCRATCH_EXTRA));
|
MOV(32, Ra, R(RSCRATCH_EXTRA));
|
||||||
|
|
||||||
if (w)
|
if (w)
|
||||||
CVTSD2SS(XMM0, fpr.R(s)); // one
|
CVTSD2SS(XMM0, Rs); // one
|
||||||
else
|
else
|
||||||
CVTPD2PS(XMM0, fpr.R(s)); // pair
|
CVTPD2PS(XMM0, Rs); // pair
|
||||||
|
|
||||||
if (gqrIsConstant)
|
if (gqrIsConstant)
|
||||||
{
|
{
|
||||||
|
@ -104,13 +105,8 @@ void Jit64::psq_stXX(UGeckoInstruction inst)
|
||||||
|
|
||||||
if (update && jo.memcheck)
|
if (update && jo.memcheck)
|
||||||
{
|
{
|
||||||
if (indexed)
|
ADD(32, Ra, Rb);
|
||||||
ADD(32, gpr.R(a), gpr.R(b));
|
|
||||||
else
|
|
||||||
ADD(32, gpr.R(a), Imm32((u32)offset));
|
|
||||||
}
|
}
|
||||||
gpr.UnlockAll();
|
|
||||||
gpr.UnlockAllX();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit64::psq_lXX(UGeckoInstruction inst)
|
void Jit64::psq_lXX(UGeckoInstruction inst)
|
||||||
|
|
Loading…
Reference in New Issue