about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-06-24 18:25:18 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-06-24 18:25:18 +0200
commit9195bc2d4a02770fe13d421c4c9c4eb438dec6e3 (patch)
tree56ad007ad2ecb51675eeaf449459ae4d6cf19e60 /src
parent5e9972f2d383f77e04b55cad9ff2a9d2622512bb (diff)
downloadbox64-9195bc2d4a02770fe13d421c4c9c4eb438dec6e3.tar.gz
box64-9195bc2d4a02770fe13d421c4c9c4eb438dec6e3.zip
[ARM64_DYNAREC] Improved handling of last_ip
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c2
-rw-r--r--src/dynarec/arm64/dynarec_arm64_64.c1
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c1
-rw-r--r--src/dynarec/arm64/dynarec_arm64_helper.c1
-rw-r--r--src/tools/env.c2
5 files changed, 5 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index abeccb89..eac955a7 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -3494,6 +3494,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         LDRx_U12(x4, x4, 0);
                         BR(x4);
                     }
+                    CLEARIP();
                     break;
             }
             break;
@@ -4153,6 +4154,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         LDRx_U12(x4, x4, 0);
                         BR(x4);
                     }
+                    CLEARIP();
                     break;
                 case 3: // CALL FAR Ed
                     if(MODREG) {
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c
index 63f0b6af..c6587d13 100644
--- a/src/dynarec/arm64/dynarec_arm64_64.c
+++ b/src/dynarec/arm64/dynarec_arm64_64.c
@@ -1652,6 +1652,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         LDRx_U12(x4, x4, 0);
                         BR(x4);
                     }
+                    CLEARIP();
                     break;
                 case 4: // JMP Ed
                     INST_NAME("JMP Ed");
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 0e64eaf1..775ee2d8 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -1752,6 +1752,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         LDRx_U12(x4, x4, 0);

                         BR(x4);

                     }

+                    CLEARIP();

                     break;

                 default:

                     DEFAULT;

diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index 643c2a97..6c8ac9b1 100644
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -635,7 +635,6 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst, int is32
     if(reg!=x1) {
         MOVx_REG(x1, xRIP);
     }
-    CLEARIP();
     #ifdef HAVE_TRACE
     //MOVx(x3, 15);    no access to PC reg
     BLR(dest); // save LR...
diff --git a/src/tools/env.c b/src/tools/env.c
index 9c9ad41b..3d3ad25b 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -807,7 +807,7 @@ done:
 #define HEADER_SIGN "DynaCache"
 #define SET_VERSION(MAJ, MIN, REV) (((MAJ)<<24)|((MIN)<<16)|(REV))
 #ifdef ARM64
-#define ARCH_VERSION SET_VERSION(0, 0, 2)
+#define ARCH_VERSION SET_VERSION(0, 0, 3)
 #elif defined(RV64)
 #define ARCH_VERSION SET_VERSION(0, 0, 1)
 #elif defined(LA64)