From 37a1261693f89f8b27475707935c7b0d4c0cbc5f Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 16 Sep 2024 16:18:19 +0200 Subject: [DYNAREC] Forgot some files in previous commit --- src/dynarec/la64/dynarec_la64_helper.c | 3 +++ src/dynarec/rv64/dynarec_rv64_0f.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index b9c7d4b1..1d23f10a 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -530,6 +530,9 @@ void jump_to_next(dynarec_la64_t* dyn, uintptr_t ip, int reg, int ninst, int is3 MAYUSE(ninst); MESSAGE(LOG_DUMP, "Jump to next\n"); + if(is32bits) + ip &= 0xffffffffLL; + if (reg) { if (reg != xRIP) { MV(xRIP, reg); diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index a4b02d48..0db18f45 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -1655,8 +1655,12 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni #define GO(GETFLAGS, NO, YES, F) \ READFLAGS(F); \ i32_ = F32S; \ + if(rex.is32bits) \ + j64 = (uint32_t)(addr+i32_); \ + else \ + j64 = addr+i32_; \ BARRIER(BARRIER_MAYBE); \ - JUMP(addr + i32_, 1); \ + JUMP(j64, 1); \ GETFLAGS; \ if (dyn->insts[ninst].x64.jmp_insts == -1 || CHECK_CACHE()) { \ /* out of the block */ \ @@ -1665,7 +1669,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (dyn->insts[ninst].x64.jmp_insts == -1) { \ if (!(dyn->insts[ninst].x64.barrier & BARRIER_FLOAT)) \ fpu_purgecache(dyn, ninst, 1, x1, x2, x3); \ - jump_to_next(dyn, addr + i32_, 0, ninst, rex.is32bits); \ + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); \ } else { \ CacheTransform(dyn, ninst, cacheupd, x1, x2, x3); \ i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ -- cgit 1.4.1