about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-27 13:07:01 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-27 13:07:01 +0200
commitda1cb42f2ac441da03b74dc37897838852d0ceee (patch)
treeef066d002c5b7b71df75a8fbc61cdb7d769b629d
parent2c366ef4bdc0c50bab053c4679dadce5ffe90005 (diff)
downloadbox64-da1cb42f2ac441da03b74dc37897838852d0ceee.tar.gz
box64-da1cb42f2ac441da03b74dc37897838852d0ceee.zip
[ARM64_DYNAREC] Fixed some pcmp[ei]stri flags
-rw-r--r--src/dynarec/arm64/dynarec_arm64_660f.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index ade88377..5348ed4d 100644
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -1369,28 +1369,29 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                                 BFIw(xFlags, x4, F_CF, 1);

                             }

                             IFX(X_ZF|X_SF) {

-                                MOV32w(x4, 8);

+                                MOV32w(x4, (u8&1)?8:16);

                                 IFX(X_ZF) {

                                     CMPSw_REG(x3, x4);

-                                    CSETw(x4, cLT);

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

+                                    CSETw(x5, cLT);

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

                                 }

                                 IFX(F_SF) {

                                     CMPSw_REG(x2, x4);

-                                    CSETw(x4, cLT);

-                                    BFIw(xFlags, x4, F_SF, 1);

+                                    CSETw(x5, cLT);

+                                    BFIw(xFlags, x5, F_SF, 1);

                                 }

                             }

                             IFX(X_OF) {

                                 BFIw(xFlags, x1, F_OF, 1);

                             }

                             IFX(X_AF) {

-                                CMPSw_U12(x1, 0);

+                                BFCw(wFlags, F_AF, 1);

+                                /*CMPSw_U12(x1, 0);

                                 CSETw(x4, cEQ);

                                 CMPSw_U12(x3, (u8&1)?8:16);

                                 CSETw(x5, cEQ);

                                 ANDw_REG(x4, x4, x5);

-                                BFIw(xFlags, x4, F_AF, 1);

+                                BFIw(xFlags, x4, F_AF, 1);*/

                             }

                             IFX(X_PF) {

                                 BFCw(xFlags, F_PF, 1);