diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-11-07 15:06:55 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-11-07 15:06:55 +0100 |
| commit | f5c9439f9110fcb4fde3c7db9f68be7c107b17f6 (patch) | |
| tree | f0094dbbd242c7bc4526d61c2a1d48717f00324e /src/emu | |
| parent | f73e4193f032713529e26c4537e5fac44147c040 (diff) | |
| download | box64-f5c9439f9110fcb4fde3c7db9f68be7c107b17f6.tar.gz box64-f5c9439f9110fcb4fde3c7db9f68be7c107b17f6.zip | |
Improved CMPSS/CMPSD opcodes, improved test17 ([DYNAREC] too, and improved MINSS/MAXSS/MINSD/MAXSD too)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64runf20f.c | 6 | ||||
| -rw-r--r-- | src/emu/x64runf30f.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c index 7bf3c99e..eff4ca5f 100644 --- a/src/emu/x64runf20f.c +++ b/src/emu/x64runf20f.c @@ -218,10 +218,10 @@ int RunF20F(x64emu_t *emu, rex_t rex) tmp8s = 0; switch(tmp8u&7) { case 0: tmp8s=(GX->d[0] == EX->d[0]); break; - case 1: tmp8s=isless(GX->d[0], EX->d[0]); break; - case 2: tmp8s=islessequal(GX->d[0], EX->d[0]); break; + case 1: tmp8s=isless(GX->d[0], EX->d[0]) && !(isnan(GX->d[0]) || isnan(EX->d[0])); break; + case 2: tmp8s=islessequal(GX->d[0], EX->d[0]) && !(isnan(GX->d[0]) || isnan(EX->d[0])); break; case 3: tmp8s=isnan(GX->d[0]) || isnan(EX->d[0]); break; - case 4: tmp8s=(GX->d[0] != EX->d[0]); break; + case 4: tmp8s=isnan(GX->d[0]) || isnan(EX->d[0]) || (GX->d[0] != EX->d[0]); break; case 5: tmp8s=isnan(GX->d[0]) || isnan(EX->d[0]) || isgreaterequal(GX->d[0], EX->d[0]); break; case 6: tmp8s=isnan(GX->d[0]) || isnan(EX->d[0]) || isgreater(GX->d[0], EX->d[0]); break; case 7: tmp8s=!isnan(GX->d[0]) && !isnan(EX->d[0]); break; diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 1960238e..7cc7add5 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -318,10 +318,10 @@ int RunF30F(x64emu_t *emu, rex_t rex) tmp8s = 0; switch(tmp8u&7) { case 0: tmp8s=(GX->f[0] == EX->f[0]); break; - case 1: tmp8s=isless(GX->f[0], EX->f[0]); break; - case 2: tmp8s=islessequal(GX->f[0], EX->f[0]); break; + case 1: tmp8s=isless(GX->f[0], EX->f[0]) && !(isnan(GX->f[0]) || isnan(EX->f[0])); break; + case 2: tmp8s=islessequal(GX->f[0], EX->f[0]) && !(isnan(GX->f[0]) || isnan(EX->f[0])); break; case 3: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]); break; - case 4: tmp8s=(GX->f[0] != EX->f[0]); break; + case 4: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]) || (GX->f[0] != EX->f[0]); break; case 5: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]) || isgreaterequal(GX->f[0], EX->f[0]); break; case 6: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]) || isgreater(GX->f[0], EX->f[0]); break; case 7: tmp8s=!isnan(GX->f[0]) && !isnan(EX->f[0]); break; |