mirror of
https://github.com/libretro/ppsspp.git
synced 2024-12-02 22:26:25 +00:00
x86jit: Just do the ES/NS compare once.
This commit is contained in:
parent
2758e8fa3c
commit
0e1aa35e84
@ -981,19 +981,13 @@ void Jit::Comp_Vcmp(MIPSOpcode op) {
|
|||||||
|
|
||||||
switch (cond) {
|
switch (cond) {
|
||||||
case VC_ES:
|
case VC_ES:
|
||||||
comparison = -1; // We will do the compare up here. XMM1 will have the bits.
|
comparison = -1; // We will do the compare at the end. XMM1 will have the bits.
|
||||||
MOVSS(XMM0, fpr.V(sregs[i]));
|
MOVSS(XMM1, fpr.V(sregs[i]));
|
||||||
ANDPS(XMM0, M(&fourinfnan));
|
|
||||||
PCMPEQD(XMM0, M(&fourinfnan)); // Integer comparison
|
|
||||||
MOVSS(XMM1, R(XMM0));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_NS:
|
case VC_NS:
|
||||||
comparison = -1; // We will do the compare up here. XMM1 will have the bits.
|
comparison = -1; // We will do the compare at the end. XMM1 will have the bits.
|
||||||
MOVSS(XMM0, fpr.V(sregs[i]));
|
MOVSS(XMM1, fpr.V(sregs[i]));
|
||||||
ANDPS(XMM0, M(&fourinfnan));
|
|
||||||
PCMPEQD(XMM0, M(&fourinfnan)); // Integer comparison
|
|
||||||
MOVSS(XMM1, R(XMM0));
|
|
||||||
// Note that we do this all at once at the end.
|
// Note that we do this all at once at the end.
|
||||||
inverse = true;
|
inverse = true;
|
||||||
break;
|
break;
|
||||||
@ -1073,6 +1067,13 @@ void Jit::Comp_Vcmp(MIPSOpcode op) {
|
|||||||
affected_bits |= 1 << i;
|
affected_bits |= 1 << i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Finalize the comparison for ES/NS.
|
||||||
|
if (cond == VC_ES || cond == VC_NS) {
|
||||||
|
ANDPS(XMM1, M(&fourinfnan));
|
||||||
|
PCMPEQD(XMM1, M(&fourinfnan)); // Integer comparison
|
||||||
|
// It's inversed below for NS.
|
||||||
|
}
|
||||||
|
|
||||||
if (n > 1) {
|
if (n > 1) {
|
||||||
XOR(32, R(ECX), R(ECX));
|
XOR(32, R(ECX), R(ECX));
|
||||||
if (inverse) {
|
if (inverse) {
|
||||||
|
Loading…
Reference in New Issue
Block a user