Fix that weird unordered compare mode, hopefully

This commit is contained in:
Henrik Rydgård committed 2018-01-04 20:06:26 +01:00
1 parent 18be23eccc
commit 331a8f91e8
3 files changed
+8 -4

No files matched your search

+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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)
+6 -2
View File
@@ -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];