diff options
| author | MerryMage <MerryMage@users.noreply.github.com> | 2018-10-15 21:01:50 +0100 |
|---|---|---|
| committer | MerryMage <MerryMage@users.noreply.github.com> | 2018-10-28 17:57:45 +0000 |
| commit | 0b29b5cb83f23dc40db6aa787165c68fc840fa0b (patch) | |
| tree | 875a210b3c8d2cefb47b8aa59671fc3170c353ac /Source/Core | |
| parent | 459f9774832c63245432bcdad2d9a1df874346d2 (diff) | |
Jit_LoadStorePaired: psq_stXX
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/PowerPC/Jit64/Jit_LoadStorePaired.cpp | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStorePaired.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStorePaired.cpp index c16c2bb3b3..5e30f701f7 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStorePaired.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStorePaired.cpp @@ -40,21 +40,22 @@ void Jit64::psq_stXX(UGeckoInstruction inst) bool gqrIsConstant = it != js.constantGqr.end(); u32 gqrValue = gqrIsConstant ? it->second & 0xffff : 0; - gpr.Lock(a, b); - gpr.FlushLockX(RSCRATCH_EXTRA); - if (update) - gpr.BindToRegister(a, true, true); + RCX64Reg scratch_guard = gpr.Scratch(RSCRATCH_EXTRA); + RCOpArg Ra = update ? gpr.Bind(a, RCMode::ReadWrite) : gpr.Use(a, RCMode::Read); + RCOpArg Rb = indexed ? gpr.Use(b, RCMode::Read) : RCOpArg::Imm32((u32)offset); + 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 if (update && !jo.memcheck) - MOV(32, gpr.R(a), R(RSCRATCH_EXTRA)); + MOV(32, Ra, R(RSCRATCH_EXTRA)); if (w) - CVTSD2SS(XMM0, fpr.R(s)); // one + CVTSD2SS(XMM0, Rs); // one else - CVTPD2PS(XMM0, fpr.R(s)); // pair + CVTPD2PS(XMM0, Rs); // pair if (gqrIsConstant) { @@ -104,13 +105,8 @@ void Jit64::psq_stXX(UGeckoInstruction inst) if (update && jo.memcheck) { - if (indexed) - ADD(32, gpr.R(a), gpr.R(b)); - else - ADD(32, gpr.R(a), Imm32((u32)offset)); + ADD(32, Ra, Rb); } - gpr.UnlockAll(); - gpr.UnlockAllX(); } void Jit64::psq_lXX(UGeckoInstruction inst) |
