about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-01-30 14:05:54 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-01-30 14:05:54 +0100
commit63428d0b2eac750a361cc2bb7f39ec1be4b0046c (patch)
tree679d65e74cbec8778572221df704be09167d30d9
parent22afd245a83cb01580fb07c43b04cc2832a3b884 (diff)
downloadbox64-63428d0b2eac750a361cc2bb7f39ec1be4b0046c.tar.gz
box64-63428d0b2eac750a361cc2bb7f39ec1be4b0046c.zip
[ARM64_DYNAREC] Small changes on 32BITS E9 opcode to ensure 32bits jump destination
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index a34fe7ec..78ed6bd3 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -2898,11 +2898,16 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 INST_NAME("JMP Ib");
                 i32 = F8S;
             }
-            JUMP((uintptr_t)getAlternate((void*)(addr+i32)), 0);
+            if(rex.is32bits)
+                j64 = (uint32_t)(addr+i32);
+            else
+                j64 = addr+i32;
+
+            JUMP((uintptr_t)getAlternate((void*)j64), 0);
             if(dyn->insts[ninst].x64.jmp_insts==-1) {
                 // out of the block
                 fpu_purgecache(dyn, ninst, 1, x1, x2, x3);
-                jump_to_next(dyn, (uintptr_t)getAlternate((void*)(addr+i32)), 0, ninst);
+                jump_to_next(dyn, (uintptr_t)getAlternate((void*)j64), 0, ninst);
             } else {
                 // inside the block
                 CacheTransform(dyn, ninst, CHECK_CACHE(), x1, x2, x3);