about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-29 15:19:11 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-10-29 15:19:11 +0100
commitfdfc5c4a419712953c1084fcdaf42af8895cd95b (patch)
treeee227d2b45bbb7ef779a5f6124c0ecab99ff9c42 /src
parent6699c0ee7fc5f49109a4e896db217b0c67f983ad (diff)
downloadbox64-fdfc5c4a419712953c1084fcdaf42af8895cd95b.tar.gz
box64-fdfc5c4a419712953c1084fcdaf42af8895cd95b.zip
[ARM64_DYNAREC] Fixed a potential issue with native flags used while some intermediary opcode doesn't support it
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index e2456ee6..84e959ce 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -877,6 +877,11 @@ static uint8_t getNativeFlagsUsed(dynarec_arm_t* dyn, int start, uint8_t 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))