about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-11-13 11:18:21 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-11-13 11:18:21 +0100
commitb15a902f6d3b4efb71fed8f9c000fdb6af0a2b32 (patch)
tree5eceab47e6de8dcecc4b6624ace68495cec4c6ba /src
parent4468d63145aa9057301d8fa813a32c31ab3db934 (diff)
downloadbox64-b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32.tar.gz
box64-b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32.zip
[DYNAREC] Don't consume X_PEND if opcode MAY emit flags
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynarec_native.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 2aade27f..98486d55 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -356,11 +356,11 @@ static int updateNeed(dynarec_native_t* dyn, int ninst, uint8_t need) {
             dyn->insts[ninst].x64.gen_flags |= X_PEND;
         dyn->insts[ninst].x64.need_after = need;
         need = dyn->insts[ninst].x64.need_after&~dyn->insts[ninst].x64.gen_flags;
+
         if(dyn->insts[ninst].x64.may_set)
             need |= dyn->insts[ninst].x64.gen_flags;    // forward the flags
-        // Consume X_PEND if relevant
-        if((need&X_PEND) && (dyn->insts[ninst].x64.set_flags&SF_PENDING))
-            need &=~X_PEND;
+        else if((need&X_PEND) && (dyn->insts[ninst].x64.set_flags&SF_PENDING))
+            need &=~X_PEND;         // Consume X_PEND if relevant
         need |= dyn->insts[ninst].x64.use_flags;
         if(dyn->insts[ninst].x64.need_before == need)
             return ninst - 1;