From 5fad3d94a0930c3db2137c68fdd712a756036362 Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 11 Feb 2016 17:17:19 +0100 Subject: [PATCH] JitArm64: Track singles in fcmpX. --- .../Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp index 40212a35bc..e6b512cf2b 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_FloatingPoint.cpp @@ -196,8 +196,12 @@ void JitArm64::fcmpX(UGeckoInstruction inst) u32 a = inst.FA, b = inst.FB; int crf = inst.CRFD; - ARM64Reg VA = fpr.R(a, REG_IS_LOADED); - ARM64Reg VB = fpr.R(b, REG_IS_LOADED); + bool singles = fpr.IsSingle(a) && fpr.IsSingle(b); + RegType type = singles ? REG_IS_LOADED_SINGLE : REG_IS_LOADED; + ARM64Reg (*reg_encoder)(ARM64Reg) = singles ? EncodeRegToSingle : EncodeRegToDouble; + + ARM64Reg VA = reg_encoder(fpr.R(a, type)); + ARM64Reg VB = reg_encoder(fpr.R(b, type)); ARM64Reg WA = gpr.GetReg(); ARM64Reg XA = EncodeRegTo64(WA); @@ -206,7 +210,7 @@ void JitArm64::fcmpX(UGeckoInstruction inst) FixupBranch continue1, continue2, continue3; ORR(XA, ZR, 32, 0, true); - m_float_emit.FCMP(EncodeRegToDouble(VA), EncodeRegToDouble(VB)); + m_float_emit.FCMP(VA, VB); if (a != b) {