about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-21 08:58:08 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-21 08:58:08 +0200
commitd0da57547e711b8051ef27bca0e85fcd367d6010 (patch)
treee54158d21c3bfecfd24fbf4e3666938fc45bb7fb /src
parente60fd72672c55b260b5551443f2f62bb3622e254 (diff)
downloadbox64-d0da57547e711b8051ef27bca0e85fcd367d6010.tar.gz
box64-d0da57547e711b8051ef27bca0e85fcd367d6010.zip
[ARM64_DYNAREC] Fixed some potential issues with BOX64_DYNAREC_DOUBLE=2
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_d8.c2
-rw-r--r--src/dynarec/arm64/dynarec_arm64_dc.c2
-rw-r--r--src/dynarec/arm64/dynarec_arm64_helper.c1
3 files changed, 1 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_d8.c b/src/dynarec/arm64/dynarec_arm64_d8.c
index 1fb1e614..76f2b4f3 100644
--- a/src/dynarec/arm64/dynarec_arm64_d8.c
+++ b/src/dynarec/arm64/dynarec_arm64_d8.c
@@ -260,7 +260,6 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 } else {
                     FCVT_D_S(s0, s0);
                     FCMPD(v1, s0);
-                    X87_CHECK_PRECISION(v1);
                 }
                 FCOM(x1, x2, x3);
                 break;
@@ -275,7 +274,6 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 } else {
                     FCVT_D_S(s0, s0);
                     FCMPD(v1, s0);
-                    X87_CHECK_PRECISION(v1);
                 }
                 FCOM(x1, x2, x3);
                 X87_POP_OR_FAIL(dyn, ninst, x3);
diff --git a/src/dynarec/arm64/dynarec_arm64_dc.c b/src/dynarec/arm64/dynarec_arm64_dc.c
index 3ffb8dbb..b4d1a48d 100644
--- a/src/dynarec/arm64/dynarec_arm64_dc.c
+++ b/src/dynarec/arm64/dynarec_arm64_dc.c
@@ -96,7 +96,6 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 FCMPS(v1, v2);
             } else {
                 FCMPD(v1, v2);
-                X87_CHECK_PRECISION(v1);
             }
             FCOM(x1, x2, x3);
             break;
@@ -115,7 +114,6 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 FCMPS(v1, v2);
             } else {
                 FCMPD(v1, v2);
-                X87_CHECK_PRECISION(v1);
             }
             FCOM(x1, x2, x3);
             X87_POP_OR_FAIL(dyn, ninst, x3);
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index 69855502..8c11f8ee 100644
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -892,6 +892,7 @@ void call_n(dynarec_arm_t* dyn, int ninst, void* fnc, int w)
 
     fpu_popcache(dyn, ninst, x3, 1);
     LDRx_U12(xFlags, xEmu, offsetof(x64emu_t, eflags));
+    ARM64_CHECK_PRECISION();    // restore x87pc if needed
     //SET_NODF();
 }