From e4e08b059605f1fa5f92cc2eb8b73c29c10fa093 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 25 Jan 2015 03:17:46 -0600 Subject: [PATCH] [AArch64] Make sure to load the full destination register on float instructions. With the float instructions that only affect the lower 64bits of the destination register, we need to make sure to load the full 128bit register. This ensures that we aren't saving garbage in to the top 64bits. --- .../PowerPC/JitArm64/JitArm64_FloatingPoint.cpp | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp index 305f30d217..ef2637503f 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp @@ -22,7 +22,6 @@ void JitArm64::fabsx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FB); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD); ARM64Reg V0 = fpr.GetReg(); @@ -54,7 +53,6 @@ void JitArm64::faddx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FB); ARM64Reg VA = fpr.R(inst.FA); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD); @@ -94,7 +92,6 @@ void JitArm64::fmaddx(UGeckoInstruction inst) FALLBACK_IF(inst.Rc); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; - fpr.BindToRegister(d, d == a || d == b || d == c); ARM64Reg VA = fpr.R(a); ARM64Reg VB = fpr.R(b); @@ -114,7 +111,6 @@ void JitArm64::fmrx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FB); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD); @@ -149,7 +145,6 @@ void JitArm64::fmsubx(UGeckoInstruction inst) FALLBACK_IF(inst.Rc); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; - fpr.BindToRegister(d, d == a || d == b || d == c); ARM64Reg VA = fpr.R(a); ARM64Reg VB = fpr.R(b); @@ -184,7 +179,6 @@ void JitArm64::fmulx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FC); ARM64Reg VA = fpr.R(inst.FA); ARM64Reg VC = fpr.R(inst.FC); ARM64Reg VD = fpr.R(inst.FD); @@ -202,7 +196,6 @@ void JitArm64::fnabsx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FB); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD); ARM64Reg V0 = fpr.GetReg(); @@ -220,7 +213,6 @@ void JitArm64::fnegx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FB); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD); ARM64Reg V0 = fpr.GetReg(); @@ -260,7 +252,6 @@ void JitArm64::fnmaddx(UGeckoInstruction inst) FALLBACK_IF(inst.Rc); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; - fpr.BindToRegister(d, d == a || d == b || d == c); ARM64Reg VA = fpr.R(a); ARM64Reg VB = fpr.R(b); @@ -304,7 +295,6 @@ void JitArm64::fnmsubx(UGeckoInstruction inst) FALLBACK_IF(inst.Rc); u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; - fpr.BindToRegister(d, d == a || d == b || d == c); ARM64Reg VA = fpr.R(a); ARM64Reg VB = fpr.R(b); @@ -324,16 +314,12 @@ void JitArm64::fselx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, - inst.FD == inst.FA || - inst.FD == inst.FB || - inst.FD == inst.FC); ARM64Reg V0 = fpr.GetReg(); ARM64Reg VD = fpr.R(inst.FD); ARM64Reg VA = fpr.R(inst.FA); ARM64Reg VB = fpr.R(inst.FB); - ARM64Reg VC = gpr.R(inst.FC); + ARM64Reg VC = fpr.R(inst.FC); m_float_emit.FCMPE(VA); m_float_emit.FCSEL(V0, VC, VB, CC_GE); @@ -363,7 +349,6 @@ void JitArm64::fsubx(UGeckoInstruction inst) JITDISABLE(bJITFloatingPointOff); FALLBACK_IF(inst.Rc); - fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FB); ARM64Reg VA = fpr.R(inst.FA); ARM64Reg VB = fpr.R(inst.FB); ARM64Reg VD = fpr.R(inst.FD);