about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-11 17:55:13 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-11 17:55:13 +0100
commited2134299523036989ecd140c2cd3dbff9378e14 (patch)
treedfb99a22e297f4a492dbc1d89b654834eb919979
parent4c238f0e1777f197f6550a7f99e1cf1d7894c2e7 (diff)
downloadbox64-ed2134299523036989ecd140c2cd3dbff9378e14.tar.gz
box64-ed2134299523036989ecd140c2cd3dbff9378e14.zip
[DYNAREC] Small improvments on flags when end of block if trigger early
-rw-r--r--src/dynarec/dynarec_native.c2
-rw-r--r--src/dynarec/dynarec_native_pass.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 4f37d9b3..ece7baa0 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -671,7 +671,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit
 
     PREUPDATE_SPECIFICS(&helper);
 
-    int pos = helper.size;
+    int pos = helper.size-1;
     while (pos>=0)
         pos = updateNeed(&helper, pos, 0);
     // remove fpu stuff on non-executed code
diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c
index 0186a24c..d6a7f606 100644
--- a/src/dynarec/dynarec_native_pass.c
+++ b/src/dynarec/dynarec_native_pass.c
@@ -231,10 +231,11 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int
         }
         #else
         // check if block need to be stopped, because it's a 00 00 opcode (unreadeable is already checked earlier)
-        if((ok>0) && !dyn->forward && !(*(uint8_t*)addr) && !(*(uint8_t*)(addr+1))) {
-            if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Stopping block at %p reason: %s\n", (void*)addr, "Next opcode is 00 00");
+        if((ok>0) && !dyn->forward && !(*(uint32_t*)addr)) {
+            if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Stopping block at %p reason: %s\n", (void*)addr, "Next opcode is 00 00 00 00");
             ok = 0;
             need_epilog = 1;
+            dyn->insts[ninst].x64.need_after |= X_PEND;
         }
         if(dyn->forward) {
             if(dyn->forward_to == addr && !need_epilog && ok>=0) {
@@ -344,8 +345,6 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int
                 dyn->forward_ninst = 0;
             }
             #endif
-            int j32;
-            MAYUSE(j32);
             MESSAGE(LOG_DEBUG, "Stopping block %p (%d / %d)\n",(void*)init_addr, ninst, dyn->size);
             if(!box64_dynarec_dump && addr>=box64_nodynarec_start && addr<box64_nodynarec_end)
                 dynarec_log(LOG_INFO, "Stopping block in no-dynarec zone\n");