about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index ae36cd9b..6861eb11 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -832,6 +832,12 @@ uint8_t flag2native(uint8_t flags)
     return ret;
 }
 
+int flagIsNative(uint8_t flags)
+{
+    if(flags&(X_AF|X_PF|X_CF)) return 0;
+    return 1;
+}
+
 static int markNativeFlags(dynarec_native_t* dyn, int ninst, uint8_t flags, int start)
 {
     while(ninst>=0) {
@@ -844,6 +850,7 @@ static int markNativeFlags(dynarec_native_t* dyn, int ninst, uint8_t flags, int
         // flags destroyed, cancel native flags
         if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_UNUSABLE) return 0;
         if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_CANCELED) return 0;
+        if(!flagIsNative(dyn->insts[ninst].x64.use_flags))  return 0;
         if(start) {
             start = 0;
             flags |= flag2native(dyn->insts[ninst].x64.need_before);