about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-16 16:18:19 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-16 16:18:19 +0200
commit37a1261693f89f8b27475707935c7b0d4c0cbc5f (patch)
treed94b32cdcb350e095cb4df70815b239408b80155 /src
parent446d57122c78a4f475380686f21e7dc6cb298396 (diff)
downloadbox64-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.c3
-rw-r--r--src/dynarec/rv64/dynarec_rv64_0f.c8
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); \