diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-03 13:54:07 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-03 13:54:07 +0200 |
| commit | cd3163a78585c35d41a18f248cb9575c46ffab38 (patch) | |
| tree | f783852464152315088550f795640f4381b8f4df /src/emu/modrm.h | |
| parent | b472459a22169c1bf1932f5e69577ac149c1b2d7 (diff) | |
| download | box64-cd3163a78585c35d41a18f248cb9575c46ffab38.tar.gz box64-cd3163a78585c35d41a18f248cb9575c46ffab38.zip | |
[INTERP] Better handling of default NAN for a few opcodes, more to come
Diffstat (limited to 'src/emu/modrm.h')
| -rw-r--r-- | src/emu/modrm.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/emu/modrm.h b/src/emu/modrm.h index edb391d5..4a1abd3e 100644 --- a/src/emu/modrm.h +++ b/src/emu/modrm.h @@ -131,6 +131,18 @@ #define NAN_PROPAGATION(dest, src, break_or_continue) #endif +#define MARK_NAN_VF_2(A, B) for(int idx=0; idx<4; ++idx) mask_nan[idx] = isnanf(A->f[idx]) || isnanf(B->f[idx]) +#define CHECK_NAN_VF(A) for(int idx=0; idx<4; ++idx) if(!mask_nan[idx] && isnanf(A->f[idx])) A->f[idx] = -NAN + +#define MARK_NAN_VD_2(A, B) for(int idx=0; idx<2; ++idx) mask_nan[idx] = isnan(A->d[idx]) || isnan(B->d[idx]) +#define CHECK_NAN_VD(A) for(int idx=0; idx<2; ++idx) if(!mask_nan[idx] && isnan(A->d[idx])) A->d[idx] = -NAN + +#define MARK_NAN_F_2(A, B) is_nan = isnanf(A->f[0]) || isnanf(B->f[0]) +#define CHECK_NAN_F(A) if(!is_nan && isnanf(A->f[0])) A->f[0] = -NAN + +#define MARK_NAN_D_2(A, B) is_nan = isnan(A->d[0]) || isnan(B->d[0]) +#define CHECK_NAN_D(A) if(!is_nan && isnan(A->d[0])) A->d[0] = -NAN + #define GOCOND(BASE, PREFIX, COND, NOTCOND, POST)\ case BASE+0x0: \ PREFIX \ |