mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-15 23:40:29 +02:00
Fix that weird unordered compare mode, hopefully
This commit is contained in:
1 parent
18be23eccc
commit
331a8f91e8
3 files changed
+8
-4
No files matched your search
@@ -111,7 +111,7 @@ void IRFrontend::Comp_FPUComp(MIPSOpcode op) {
|
||||
IRFpCompareMode mode;
|
||||
switch (opc) {
|
||||
case 1: // un, ngle (unordered)
|
||||
mode = IRFpCompareMode::NotEqualUnordered;
|
||||
mode = IRFpCompareMode::EitherUnordered;
|
||||
break;
|
||||
case 2: // eq, seq (equal, ordered)
|
||||
mode = IRFpCompareMode::EqualOrdered;
|
||||
|
||||
@@ -263,7 +263,7 @@ inline IROp ComparisonToExit(IRComparison comp) {
|
||||
|
||||
enum IRFpCompareMode {
|
||||
False = 0,
|
||||
NotEqualUnordered,
|
||||
EitherUnordered,
|
||||
EqualOrdered, // eq, seq (equal, ordered)
|
||||
EqualUnordered, // ueq, ngl (equal, unordered)
|
||||
LessOrdered, // olt, lt (less than, ordered)
|
||||
|
||||
@@ -782,9 +782,13 @@ u32 IRInterpret(MIPSState *mips, const IRInst *inst, int count) {
|
||||
case IRFpCompareMode::False:
|
||||
mips->fpcond = 0;
|
||||
break;
|
||||
case IRFpCompareMode::NotEqualUnordered:
|
||||
mips->fpcond = mips->f[inst->src1] != mips->f[inst->src2];
|
||||
case IRFpCompareMode::EitherUnordered:
|
||||
{
|
||||
float a = mips->f[inst->src1];
|
||||
float b = mips->f[inst->src2];
|
||||
mips->fpcond = !(a > b || a < b || a == b);
|
||||
break;
|
||||
}
|
||||
case IRFpCompareMode::EqualOrdered:
|
||||
case IRFpCompareMode::EqualUnordered:
|
||||
mips->fpcond = mips->f[inst->src1] == mips->f[inst->src2];
|
||||
|
||||
Reference in new issue
Block a user