From 2fecb033be90217f47f5c4d19b44c2cf0595779b Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Thu, 7 Nov 2013 03:38:04 +0100 Subject: [PATCH] Jit64: micro-optimize ps_sel Adapted from a patch by konpie: https://forums.dolphin-emu.org/Thread-code-bug-report-based-on-3-0-735 --- Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 96a3335249..781b75a538 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -14,10 +14,9 @@ // cmppd, andpd, andnpd, or // lfsx, ps_merge01 etc -const u64 GC_ALIGNED16(psSignBits[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; -const u64 GC_ALIGNED16(psAbsMask[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; -const double GC_ALIGNED16(psOneOne[2]) = {1.0, 1.0}; -const double GC_ALIGNED16(psZeroZero[2]) = {0.0, 0.0}; +static const u64 GC_ALIGNED16(psSignBits[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; +static const u64 GC_ALIGNED16(psAbsMask[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; +static const double GC_ALIGNED16(psOneOne[2]) = {1.0, 1.0}; void Jit64::ps_mr(UGeckoInstruction inst) { @@ -52,14 +51,15 @@ void Jit64::ps_sel(UGeckoInstruction inst) fpr.Lock(a, b, c, d); MOVAPD(XMM0, fpr.R(a)); + XORPD(XMM1, R(XMM1)); // XMM0 = XMM0 < 0 ? all 1s : all 0s - CMPPD(XMM0, M((void*)psZeroZero), LT); + CMPPD(XMM0, R(XMM1), LT); MOVAPD(XMM1, R(XMM0)); ANDPD(XMM0, fpr.R(b)); ANDNPD(XMM1, fpr.R(c)); + ORPD(XMM0, R(XMM1)); fpr.BindToRegister(d, false); MOVAPD(fpr.RX(d), R(XMM0)); - ORPD(fpr.RX(d), R(XMM1)); fpr.UnlockAll(); }