diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-21 11:27:01 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-21 11:27:01 +0200 |
| commit | 965105c08afaf75166a167c4882c807c4a74efc8 (patch) | |
| tree | 78653072d28ea4008f8bf4358cd2a0b17c2d3004 /src | |
| parent | 3fef880a7deb2d2d1e04b3254b356c9485745404 (diff) | |
| download | box64-965105c08afaf75166a167c4882c807c4a74efc8.tar.gz box64-965105c08afaf75166a167c4882c807c4a74efc8.zip | |
[INTERP] Better NAN handling for (V)DIV[P/S][S/D] opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64runavxf30f.c | 2 | ||||
| -rw-r--r-- | src/emu/x64runf20f.c | 1 | ||||
| -rw-r--r-- | src/emu/x64runf30f.c | 2 |
3 files changed, 5 insertions, 0 deletions
diff --git a/src/emu/x64runavxf30f.c b/src/emu/x64runavxf30f.c index 6b630544..5e3878fe 100644 --- a/src/emu/x64runavxf30f.c +++ b/src/emu/x64runavxf30f.c @@ -349,11 +349,13 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETGX; GETVX; GETGY; + MARK_NAN_F_2(VX, EX); GX->f[0] = VX->f[0] / EX->f[0]; if(GX!=VX) { GX->ud[1] = VX->ud[1]; GX->q[1] = VX->q[1]; } + CHECK_NAN_F(GX); GY->u128 = 0; break; case 0x5F: /* VMAXSS Gx, Vx, Ex */ diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c index 65adeb0d..94a8cb46 100644 --- a/src/emu/x64runf20f.c +++ b/src/emu/x64runf20f.c @@ -266,6 +266,7 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) _GETEX(0); GETGX; MARK_NAN_D_2(GX, EX); + NAN_PROPAGATION(GX->d[0], EX->d[0], break); GX->d[0] /= EX->d[0]; CHECK_NAN_D(GX); break; diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 4eb5a539..08b005c6 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -288,8 +288,10 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr) nextop = F8; GETEX(0); GETGX; + MARK_NAN_F_2(GX, EX); NAN_PROPAGATION(GX->f[0], EX->f[0], break); GX->f[0] /= EX->f[0]; + CHECK_NAN_F(GX); break; case 0x5F: /* MAXSS Gx, Ex */ nextop = F8; |