diff options
| author | Tillmann Karras <tilkax@gmail.com> | 2013-11-07 03:38:04 +0100 |
|---|---|---|
| committer | Tillmann Karras <tilkax@gmail.com> | 2013-11-13 04:45:43 +0100 |
| commit | 2fecb033be90217f47f5c4d19b44c2cf0595779b (patch) | |
| tree | a82ec92631d02d0f53c5fa4c77aa05be29acb969 /Source | |
| parent | 6f5650f82e81f9e9d1fea307cdff0d2f324bf79a (diff) | |
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
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp | 12 |
1 files 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(); } |
