From 2ef2d4778d438534926e58cb1f9489f85f128195 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 16 Apr 2022 13:22:36 +0200 Subject: [PATCH] JitArm64: Always lock Q0 in psq_stXX Q0 is used as a scratch register by EmitBackpatchRoutine. Fixes a vertex explosion in Spider-Man 2 that was uncovered by 20b2300. --- .../Core/Core/PowerPC/JitArm64/JitArm64_LoadStorePaired.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStorePaired.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStorePaired.cpp index 13197303bd..4fa015dcd4 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStorePaired.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStorePaired.cpp @@ -151,8 +151,9 @@ void JitArm64::psq_stXX(UGeckoInstruction inst) const int i = indexed ? inst.Ix : inst.I; const int w = indexed ? inst.Wx : inst.W; + fpr.Lock(ARM64Reg::Q0); if (!js.assumeNoPairedQuantize) - fpr.Lock(ARM64Reg::Q0, ARM64Reg::Q1); + fpr.Lock(ARM64Reg::Q1); const bool have_single = fpr.IsSingle(inst.RS); @@ -259,9 +260,10 @@ void JitArm64::psq_stXX(UGeckoInstruction inst) fpr.Unlock(VS); gpr.Unlock(ARM64Reg::W0, ARM64Reg::W1, ARM64Reg::W30); + fpr.Unlock(ARM64Reg::Q0); if (!js.assumeNoPairedQuantize) { gpr.Unlock(ARM64Reg::W2); - fpr.Unlock(ARM64Reg::Q0, ARM64Reg::Q1); + fpr.Unlock(ARM64Reg::Q1); } }