about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-28 12:10:13 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-28 12:10:13 +0100
commit4aaa0b5d24fc3aad2032615ecf661cc0710b11bc (patch)
tree4e887be61d15e44f971996ebe2acccd9aedbcfa5 /src
parentc0829b807cc0c2b4aa96d1f6261f7b1add48670e (diff)
downloadbox64-4aaa0b5d24fc3aad2032615ecf661cc0710b11bc.tar.gz
box64-4aaa0b5d24fc3aad2032615ecf661cc0710b11bc.zip
[ARM64_DYNAREC] Fixed and improved flags for F3 0F B8 opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_f30f.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_f30f.c b/src/dynarec/arm64/dynarec_arm64_f30f.c
index e223f321..c13079f0 100644
--- a/src/dynarec/arm64/dynarec_arm64_f30f.c
+++ b/src/dynarec/arm64/dynarec_arm64_f30f.c
@@ -480,10 +480,18 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             UADDLV_8(v1, v1);

             VMOVQDto(gd, v1, 0);

             IFX(X_ALL) {

-                MOV32w(x1, (1<<F_OF) | (1<<F_SF) | (1<<F_ZF) | (1<<F_AF) | (1<<F_CF) | (1<<F_PF));

-                BICw(xFlags, xFlags, x1);

-                CBNZx(gd, 4+4);

-                BFIw(xFlags, xFlags, F_ZF, 1);

+                IFX(X_AF|X_PF|X_SF|X_OF|X_CF) {

+                    MOV32w(x1, (1<<F_OF) | (1<<F_SF) | (1<<F_ZF) | (1<<F_AF) | (1<<F_CF) | (1<<F_PF));

+                    BICw(xFlags, xFlags, x1);

+                }

+                IFX(X_ZF) {

+                    CMPSw_U12(gd, 0);

+                    IFNATIVE(NF_EQ) {}

+                    else {

+                        CSETw(x1, cEQ);

+                        BFIw(xFlags, x1, F_ZF, 1);

+                    }                    

+                }

             }

             break;