about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-04-27 15:24:36 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-04-27 15:24:36 +0200
commiteb28edbe58fc9ea323ca5f36c3351ac458de454c (patch)
tree5adaaf779217708f2cf01e548b821d6e29450bca
parent8d683fc19cbc048baabb26478a5f9e5cf217a689 (diff)
downloadbox64-eb28edbe58fc9ea323ca5f36c3351ac458de454c.tar.gz
box64-eb28edbe58fc9ea323ca5f36c3351ac458de454c.zip
[DYNAREC] Fix some flag propagation with partial SF_SET/SF_SET_DF
-rw-r--r--src/dynarec/dynarec_native.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 2482aa08..794ac426 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -350,14 +350,10 @@ static int updateNeed(dynarec_native_t* dyn, int ninst, uint8_t need) {
     while (ninst>=0) {
         // need pending but instruction is only a subset: remove pend and use an X_ALL instead
         need |= dyn->insts[ninst].x64.need_after;
-        if((need&X_PEND) && (dyn->insts[ninst].x64.state_flags==SF_SUBSET)) {
+        if((need&X_PEND) && (dyn->insts[ninst].x64.state_flags==SF_SUBSET || dyn->insts[ninst].x64.state_flags==SF_SET || dyn->insts[ninst].x64.state_flags==SF_SET_NODF)) {
             need &=~X_PEND;
             need |= X_ALL;
         }
-        if((need&X_PEND) && (dyn->insts[ninst].x64.state_flags==SF_SET || dyn->insts[ninst].x64.state_flags==SF_SET_NODF)) {
-            need &=~X_PEND;
-            need |= dyn->insts[ninst].x64.set_flags;    // SF_SET will compute all flags, it's not SUBSET!
-        }
         if((need&X_PEND) && dyn->insts[ninst].x64.state_flags==SF_SUBSET_PENDING) {
             need |= X_ALL&~(dyn->insts[ninst].x64.set_flags);
         }