about summary refs log tree commit diff stats
path: root/src/emu/modrm.h
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-03 13:54:07 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-03 13:54:07 +0200
commitcd3163a78585c35d41a18f248cb9575c46ffab38 (patch)
treef783852464152315088550f795640f4381b8f4df /src/emu/modrm.h
parentb472459a22169c1bf1932f5e69577ac149c1b2d7 (diff)
downloadbox64-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.h12
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                                  \