about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-08-02 01:44:02 +0800
committerGitHub <noreply@github.com>2025-08-01 19:44:02 +0200
commitf7302ecb1b08831037cb067bd62863b90768604a (patch)
tree98056b17d8a081d11aff400f2fbef91f35300d74
parent4c30838448b74ea34e51dd684c5753fb388f212f (diff)
downloadbox64-f7302ecb1b08831037cb067bd62863b90768604a.tar.gz
box64-f7302ecb1b08831037cb067bd62863b90768604a.zip
[ARM64_DYNAREC] Fixed PCMPESTRI fastpath SF flag computation (#2876)
-rw-r--r--src/dynarec/arm64/dynarec_arm64_660f.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index 0c3a02cb..5200e5b7 100644
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -1388,10 +1388,10 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                         CMPSw_REG(x3, x4);

                         CSELw(x3, x3, x4, cLT); // x3 is lmem

                         CMPSw_REG(x2, x4);

-                        CSELw(x2, x2, x4, cLT); // x2 is lreg

-                        CMPSw_REG(x2, x3);

-                        CSELw(x5, x3, x2, cLT); // x5 is max(lmem, lreg)

-                        CSELw(x2, x2, x3, cLT); // x2 is min(lmem, lreg)

+                        CSELw(x6, x2, x4, cLT); // x6 is lreg

+                        CMPSw_REG(x6, x3);

+                        CSELw(x5, x3, x6, cLT); // x5 is max(lmem, lreg)

+                        CSELw(x2, x6, x3, cLT); // x2 is min(lmem, lreg)

                         // x2 is min length 0-n_packed

                         MVNw_REG(x4, xZR);

                         LSLw_REG(x87pc, x4, x2);

@@ -1427,7 +1427,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                                     BFIw(xFlags, x5, F_ZF, 1);

                                 }

                                 IFX(X_SF) {

-                                    CMPSw_REG(x2, x4);

+                                    CMPSw_REG(x6, x4);

                                     CSETw(x5, cLT);

                                     BFIw(xFlags, x5, F_SF, 1);

                                 }