From 0b29b5cb83f23dc40db6aa787165c68fc840fa0b Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 15 Oct 2018 21:01:50 +0100 Subject: [PATCH] Jit_LoadStorePaired: psq_stXX --- .../PowerPC/Jit64/Jit_LoadStorePaired.cpp | 24 ++++++++----------- 1 file 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)