diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-01-30 14:05:54 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-01-30 14:05:54 +0100 |
| commit | 63428d0b2eac750a361cc2bb7f39ec1be4b0046c (patch) | |
| tree | 679d65e74cbec8778572221df704be09167d30d9 /src | |
| parent | 22afd245a83cb01580fb07c43b04cc2832a3b884 (diff) | |
| download | box64-63428d0b2eac750a361cc2bb7f39ec1be4b0046c.tar.gz box64-63428d0b2eac750a361cc2bb7f39ec1be4b0046c.zip | |
[ARM64_DYNAREC] Small changes on 32BITS E9 opcode to ensure 32bits jump destination
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 9 |
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); |