diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-24 18:25:18 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-24 18:25:18 +0200 |
| commit | 9195bc2d4a02770fe13d421c4c9c4eb438dec6e3 (patch) | |
| tree | 56ad007ad2ecb51675eeaf449459ae4d6cf19e60 /src | |
| parent | 5e9972f2d383f77e04b55cad9ff2a9d2622512bb (diff) | |
| download | box64-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.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 1 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_67.c | 1 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.c | 1 | ||||
| -rw-r--r-- | src/tools/env.c | 2 |
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) |