diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-01-25 03:17:46 -0600 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-01-25 03:17:46 -0600 |
| commit | e4e08b059605f1fa5f92cc2eb8b73c29c10fa093 (patch) | |
| tree | 8add511e767f0e942334dc8ebd1e6318278929a3 /Source/Core | |
| parent | 2483f7b35901f772ecd8da8301ecc18ce3aec9b4 (diff) | |
[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.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp | 17 |
1 files changed, 1 insertions, 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); |
