about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-03 17:13:12 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-03 17:13:12 +0100
commitba5aa0c83b60ea14d5923da397b7ec192dd1be68 (patch)
tree500d1b706b6c84b19e42e6eb5d57cbbc66368e02 /src/dynarec
parent939486fa05aabd43e78e8228412ba69ed5f5ed05 (diff)
downloadbox64-ba5aa0c83b60ea14d5923da397b7ec192dd1be68.tar.gz
box64-ba5aa0c83b60ea14d5923da397b7ec192dd1be68.zip
[ARM64_DYNAREC] Fixed an issue with native flags and opcode using C Helper that use flags, like rcr and rcl
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index 84e959ce..1400f977 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -871,17 +871,17 @@ static uint8_t getNativeFlagsUsed(dynarec_arm_t* dyn, int start, uint8_t flags)
         // check if there is a callret barrier
         if(dyn->insts[ninst].x64.has_callret)
             return 0;
+        // check if flags are used, but not the natives ones
+        if(ninst!=start && dyn->insts[ninst].x64.use_flags) {
+            if((flag2native(dyn->insts[ninst].x64.use_flags)&~(dyn->insts[ninst].use_nat_flags))&used_flags)
+                return 0;
+        }
         // check if flags are still needed
         if(!(flag2native(dyn->insts[ninst].x64.need_after)&flags))
             return used_flags;
         // check if flags are destroyed, cancel the use then
         if(dyn->insts[ninst].nat_flags_op && (start!=ninst))
             return 0;
-        // check if flags are used, but not the natives ones
-        if(dyn->insts[ninst].x64.use_flags) {
-            if(flag2native(dyn->insts[ninst].x64.use_flags)&used_flags)
-                return 0;
-        }
         // check if flags are generated without native option
         if((start!=ninst) && dyn->insts[ninst].x64.gen_flags && (flag2native(dyn->insts[ninst].x64.gen_flags&dyn->insts[ninst].x64.need_after)&used_flags)) {
             if(used_flags&~flag2native(dyn->insts[ninst].x64.gen_flags&dyn->insts[ninst].x64.need_after))