From 8882d27689b65c62e6edf7c63177db136d83fb79 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 12 Sep 2013 10:17:27 +0000 Subject: [PATCH] [ARM] Fixes the ps_merge00 and ps_merge10 implementations. They both had the potential to overwrite the source registers in the moves. --- .../Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp index 8a0f09f463..b0f282ec40 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp @@ -234,8 +234,9 @@ void JitArm::ps_merge00(UGeckoInstruction inst) ARMReg vB0 = fpr.R0(b); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - VMOV(vD0, vA0); + VMOV(vD1, vB0); + VMOV(vD0, vA0); } void JitArm::ps_merge01(UGeckoInstruction inst) @@ -268,8 +269,13 @@ void JitArm::ps_merge10(UGeckoInstruction inst) ARMReg vB0 = fpr.R0(b); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); + ARMReg V0 = fpr.GetReg(); + + VMOV(V0, vB0); VMOV(vD0, vA1); - VMOV(vD1, vB0); + VMOV(vD1, V0); + + fpr.Unlock(V0); } void JitArm::ps_merge11(UGeckoInstruction inst)