diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-16 16:18:19 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-16 16:18:19 +0200 |
| commit | 37a1261693f89f8b27475707935c7b0d4c0cbc5f (patch) | |
| tree | d94b32cdcb350e095cb4df70815b239408b80155 /src | |
| parent | 446d57122c78a4f475380686f21e7dc6cb298396 (diff) | |
| download | box64-37a1261693f89f8b27475707935c7b0d4c0cbc5f.tar.gz box64-37a1261693f89f8b27475707935c7b0d4c0cbc5f.zip | |
[DYNAREC] Forgot some files in previous commit
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_helper.c | 3 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f.c | 8 |
2 files changed, 9 insertions, 2 deletions
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); \ |