about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-31 21:00:15 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-03-31 21:00:15 +0200
commitb24f2f14f0ce716d1341b521978737cf8a327179 (patch)
tree90ed59608a78fc11571bbaed4cccd5dcc613563a /src/dynarec
parent40a1fab5e06011f3299676a1d61e7fb98819a6a0 (diff)
downloadbox64-b24f2f14f0ce716d1341b521978737cf8a327179.tar.gz
box64-b24f2f14f0ce716d1341b521978737cf8a327179.zip
[DYNAREC] More improvement to TEST_DYNAREC
Diffstat (limited to 'src/dynarec')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_helper.c6
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_helper.h14
-rwxr-xr-xsrc/dynarec/dynarec_native_pass.c3
-rw-r--r--src/dynarec/rv64/dynarec_rv64_helper.h14
4 files changed, 23 insertions, 14 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index cbbf0c38..7aaf098e 100755
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -418,6 +418,7 @@ void jump_to_epilog(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst)
     } else {
         GETIP_(ip);
     }
+    NOTEST(x2);
     TABLE64(x2, (uintptr_t)arm64_epilog);
     SMEND();
     BR(x2);
@@ -432,6 +433,7 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst)
         if(reg!=xRIP) {
             MOVx_REG(xRIP, reg);
         }
+        NOTEST(x2);
         uintptr_t tbl = getJumpTable64();
         MAYUSE(tbl);
         TABLE64(x3, tbl);
@@ -444,6 +446,7 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst)
         UBFXx(x2, xRIP, JMPTABL_START0, JMPTABL_SHIFT0);
         LDRx_REG_LSL3(x2, x3, x2);
     } else {
+        NOTEST(x2);
         uintptr_t p = getJumpTableAddress64(ip);
         MAYUSE(p);
         TABLE64(x3, p);
@@ -479,6 +482,7 @@ void ret_to_epilog(dynarec_arm_t* dyn, int ninst)
         // not the correct return address, regular jump
     }
     uintptr_t tbl = getJumpTable64();
+    NOTEST(x2);
     MOV64x(x2, tbl);
     UBFXx(x3, xRIP, JMPTABL_START3, JMPTABL_SHIFT3);
     LDRx_REG_LSL3(x2, x2, x3);
@@ -516,6 +520,7 @@ void retn_to_epilog(dynarec_arm_t* dyn, int ninst, int n)
         // not the correct return address, regular jump
     }
     uintptr_t tbl = getJumpTable64();
+    NOTEST(x2);
     MOV64x(x2, tbl);
     UBFXx(x3, xRIP, JMPTABL_START3, JMPTABL_SHIFT3);
     LDRx_REG_LSL3(x2, x2, x3);
@@ -535,6 +540,7 @@ void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits)
     MAYUSE(ninst);
     MESSAGE(LOG_DUMP, "IRet to epilog\n");
     // POP IP
+    NOTEST(x2);
     POP1(xRIP);
     // POP CS
     POP1(x2);
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h
index 5c908685..10d948b2 100755
--- a/src/dynarec/arm64/dynarec_arm64_helper.h
+++ b/src/dynarec/arm64/dynarec_arm64_helper.h
@@ -1305,13 +1305,13 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
 
 #define NOTEST(s1)                                          \
     if(box64_dynarec_test) {                                \
-        if(offsetof(x64emu_t, test.test)<(1<<12)) {         \
-            STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test));\
-        } else {                                            \
-            MOV32w(s1, offsetof(x64emu_t, test.test));      \
-            ADDx_REG(s1, xEmu, s1);                         \
-            STRw_U12(xZR, s1, 0);                           \
-        }                                                   \
+        STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test)); \
+        STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean));\
+    }
+#define GOTEST(s1, s2)                                      \
+    if(box64_dynarec_test) {                                \
+        MOV32w(s2, 1);                                      \
+        STRw_U12(s2, xEmu, offsetof(x64emu_t, test.test));  \
     }
 
 #endif //__DYNAREC_ARM64_HELPER_H__
diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c
index 0c9ddfbc..1e8ba3aa 100755
--- a/src/dynarec/dynarec_native_pass.c
+++ b/src/dynarec/dynarec_native_pass.c
@@ -78,6 +78,9 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr)
             dyn->last_ip = 0;   // reset IP if some jump are comming here
         fpu_propagate_stack(dyn, ninst);
         NEW_INST;
+        if(!ninst) {
+            GOTEST(x1, x2);
+        }
         if(dyn->insts[ninst].pred_sz>1) {SMSTART();}
         fpu_reset_scratch(dyn);
         if((dyn->insts[ninst].x64.need_before&~X_PEND) && !dyn->insts[ninst].pred_sz) {
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h
index f7fb7a35..b0f71315 100644
--- a/src/dynarec/rv64/dynarec_rv64_helper.h
+++ b/src/dynarec/rv64/dynarec_rv64_helper.h
@@ -1144,13 +1144,13 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int
 
 #define NOTEST(s1)                                          \
     if(box64_dynarec_test) {                                \
-        if(offsetof(x64emu_t, test.test)<2048) {            \
-            SW(xZR, xEmu, offsetof(x64emu_t, test.test));   \
-        } else {                                            \
-            MOV32w(s1, offsetof(x64emu_t, test.test));      \
-            ADD(s1, xEmu, s1);                              \
-            SW(xZR, s1, 0);                                 \
-        }                                                   \
+        SW(xZR, xEmu, offsetof(x64emu_t, test.test));       \
+        SW(xZR, xEmu, offsetof(x64emu_t, test.clean));      \
+    }
+#define GOTEST(s1, s2)                                      \
+    if(box64_dynarec_test) {                                \
+        MOV32w(s2, 1);                                      \
+        SW(s2, xEmu, offsetof(x64emu_t, test.test));        \
     }
 
 #endif //__DYNAREC_RV64_HELPER_H__