about summary refs log tree commit diff stats
path: root/src/dynarec/dynarec_native_pass.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-13 10:54:27 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-03-13 10:54:37 +0000
commit327b2355c178b88f908d42d71e709c88d60bb9f1 (patch)
tree14948c1a7fd6f57a32e6361bd67344322a41d3cf /src/dynarec/dynarec_native_pass.c
parent20308faef1e64056f6d8104ad1f649d0f0651b12 (diff)
downloadbox64-327b2355c178b88f908d42d71e709c88d60bb9f1.tar.gz
box64-327b2355c178b88f908d42d71e709c88d60bb9f1.zip
[DYNAREC] Fixed missing X_PEND need at end of block for unimplemented opcode
Diffstat (limited to 'src/dynarec/dynarec_native_pass.c')
-rwxr-xr-xsrc/dynarec/dynarec_native_pass.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c
index 14f85b40..c07b6102 100755
--- a/src/dynarec/dynarec_native_pass.c
+++ b/src/dynarec/dynarec_native_pass.c
@@ -199,7 +199,19 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr)
                 }
             }
         #endif
-        if(ok<0)  {ok = 0; need_epilog=1;}
+        if(ok<0)  {
+            ok = 0; need_epilog=1; 
+            #if STEP == 0
+            if(ninst) {
+                --ninst;
+                if(!dyn->insts[ninst].x64.barrier) {
+                    BARRIER(BARRIER_FLOAT);
+                }
+                dyn->insts[ninst].x64.need_after |= X_PEND;
+                ++ninst;
+            }
+            #endif
+        }
         ++ninst;
         #if STEP == 0
         if(ok && (((box64_dynarec_bigblock<stopblock) && !isJumpTableDefault64((void*)addr))