about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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");