mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-03 23:46:08 +00:00
We can't use S2 or D1. Use alternative means.
This commit is contained in:
parent
7b8331f50d
commit
2450c0d28d
@ -586,16 +586,6 @@ namespace MIPSComp
|
||||
SUB(gpr.R(MIPSREG_HI), gpr.R(rs), Operand2(R0));
|
||||
} else {
|
||||
DISABLE;
|
||||
gpr.MapDirtyDirtyInIn(MIPSREG_LO, MIPSREG_HI, rs, rt);
|
||||
VMOV(S0, gpr.R(rs));
|
||||
VMOV(S1, gpr.R(rt));
|
||||
VCVT(D0, S0, TO_FLOAT | IS_SIGNED);
|
||||
VCVT(D1, S1, TO_FLOAT | IS_SIGNED);
|
||||
VDIV(D0, D0, D1);
|
||||
VCVT(S0, D0, TO_INT);
|
||||
VMOV(gpr.R(MIPSREG_LO), S0);
|
||||
MUL(R0, gpr.R(rt), gpr.R(MIPSREG_LO));
|
||||
SUB(gpr.R(MIPSREG_HI), gpr.R(rs), Operand2(R0));
|
||||
}
|
||||
break;
|
||||
|
||||
@ -608,16 +598,6 @@ namespace MIPSComp
|
||||
SUB(gpr.R(MIPSREG_HI), gpr.R(rs), Operand2(R0));
|
||||
} else {
|
||||
DISABLE;
|
||||
gpr.MapDirtyDirtyInIn(MIPSREG_LO, MIPSREG_HI, rs, rt);
|
||||
VMOV(S0, gpr.R(rs));
|
||||
VMOV(S1, gpr.R(rt));
|
||||
VCVT(D0, S0, TO_FLOAT);
|
||||
VCVT(D1, S1, TO_FLOAT);
|
||||
VDIV(D0, D0, D1);
|
||||
VCVT(S0, D0, TO_INT);
|
||||
VMOV(gpr.R(MIPSREG_LO), S0);
|
||||
MUL(R0, gpr.R(rt), gpr.R(MIPSREG_LO));
|
||||
SUB(gpr.R(MIPSREG_HI), gpr.R(rs), Operand2(R0));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -171,19 +171,19 @@ namespace MIPSComp
|
||||
// clamped = fabs(x) - fabs(x-0.5f) + 0.5f; // [ 0, 1]
|
||||
fpr.MapRegV(vregs[i], MAP_DIRTY);
|
||||
MOVI2F(S0, 0.5f, R0);
|
||||
VABS(S1, fpr.V(vregs[i])); // S1 = fabs(x)
|
||||
VSUB(S2, fpr.V(vregs[i]), S0); // S2 = fabs(x-0.5f) {VABD}
|
||||
VABS(S2, S2);
|
||||
VSUB(fpr.V(vregs[i]), S1, S2); // v[i] = S1 - S2 + 0.5f
|
||||
VABS(S1, fpr.V(vregs[i])); // S1 = fabs(x)
|
||||
VSUB(fpr.V(vregs[i]), fpr.V(vregs[i]), S0); // S2 = fabs(x-0.5f) {VABD}
|
||||
VABS(fpr.V(vregs[i]), fpr.V(vregs[i]));
|
||||
VSUB(fpr.V(vregs[i]), S1, fpr.V(vregs[i])); // v[i] = S1 - S2 + 0.5f
|
||||
VADD(fpr.V(vregs[i]), fpr.V(vregs[i]), S0);
|
||||
} else if (sat == 3) {
|
||||
// clamped = fabs(x) - fabs(x-1.0f); // [-1, 1]
|
||||
fpr.MapRegV(vregs[i], MAP_DIRTY);
|
||||
MOVI2F(S0, 1.0f, R0);
|
||||
VABS(S1, fpr.V(vregs[i])); // S1 = fabs(x)
|
||||
VSUB(S2, fpr.V(vregs[i]), S0); // S2 = fabs(x-1.0f) {VABD}
|
||||
VABS(S2, S2);
|
||||
VSUB(fpr.V(vregs[i]), S1, S2); // v[i] = S1 - S2
|
||||
VABS(S1, fpr.V(vregs[i])); // S1 = fabs(x)
|
||||
VSUB(fpr.V(vregs[i]), fpr.V(vregs[i]), S0); // S2 = fabs(x-1.0f) {VABD}
|
||||
VABS(fpr.V(vregs[i]), fpr.V(vregs[i]));
|
||||
VSUB(fpr.V(vregs[i]), S1, fpr.V(vregs[i])); // v[i] = S1 - S2
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -560,18 +560,18 @@ namespace MIPSComp
|
||||
break;
|
||||
case 4: // if (s[i] < 0) d[i] = 0; else {if(s[i] > 1.0f) d[i] = 1.0f; else d[i] = s[i];} break; // vsat0
|
||||
MOVI2F(S0, 0.5f, R0);
|
||||
VABS(S1, fpr.V(sregs[i])); // S1 = fabs(x)
|
||||
VSUB(S2, fpr.V(sregs[i]), S0); // S2 = fabs(x-0.5f) {VABD}
|
||||
VABS(S2, S2);
|
||||
VSUB(fpr.V(tempxregs[i]), S1, S2); // v[i] = S1 - S2 + 0.5f
|
||||
VABS(S1, fpr.V(sregs[i])); // S1 = fabs(x)
|
||||
VSUB(fpr.V(tempxregs[i]), fpr.V(sregs[i]), S0); // S2 = fabs(x-0.5f) {VABD}
|
||||
VABS(fpr.V(tempxregs[i]), fpr.V(tempxregs[i]));
|
||||
VSUB(fpr.V(tempxregs[i]), S1, fpr.V(tempxregs[i])); // v[i] = S1 - S2 + 0.5f
|
||||
VADD(fpr.V(tempxregs[i]), fpr.V(tempxregs[i]), S0);
|
||||
break;
|
||||
case 5: // if (s[i] < -1.0f) d[i] = -1.0f; else {if(s[i] > 1.0f) d[i] = 1.0f; else d[i] = s[i];} break; // vsat1
|
||||
MOVI2F(S0, 1.0f, R0);
|
||||
VABS(S1, fpr.V(sregs[i])); // S1 = fabs(x)
|
||||
VSUB(S2, fpr.V(sregs[i]), S0); // S2 = fabs(x-1.0f) {VABD}
|
||||
VABS(S2, S2);
|
||||
VSUB(fpr.V(tempxregs[i]), S1, S2); // v[i] = S1 - S2
|
||||
VABS(S1, fpr.V(sregs[i])); // S1 = fabs(x)
|
||||
VSUB(fpr.V(tempxregs[i]), fpr.V(sregs[i]), S0); // S2 = fabs(x-1.0f) {VABD}
|
||||
VABS(fpr.V(tempxregs[i]), fpr.V(tempxregs[i]));
|
||||
VSUB(fpr.V(tempxregs[i]), S1, fpr.V(tempxregs[i])); // v[i] = S1 - S2
|
||||
break;
|
||||
case 16: // d[i] = 1.0f / s[i]; break; //vrcp
|
||||
MOVI2F(S0, 1.0f, R0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user