about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2024-05-21 00:12:38 +0800
committerGitHub <noreply@github.com>2024-05-20 18:12:38 +0200
commit3fce669f6ef2d40a11127a7c5efb003d4a522aeb (patch)
treea1317712fcbafa7d47a389ee1c41490f1b2bd56d
parent8a701755d8679f2625a1f2c7ab153cab126b188e (diff)
downloadbox64-3fce669f6ef2d40a11127a7c5efb003d4a522aeb.tar.gz
box64-3fce669f6ef2d40a11127a7c5efb003d4a522aeb.zip
[LA64_DYNAREC] Fixed 66 0F 67 PACKUSWB opcode (#1508)
-rw-r--r--src/dynarec/la64/dynarec_la64_660f.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c
index c9a55984..b25936bf 100644
--- a/src/dynarec/la64/dynarec_la64_660f.c
+++ b/src/dynarec/la64/dynarec_la64_660f.c
@@ -341,13 +341,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
             nextop = F8;
             GETGX(v0, 1);
             GETEX(v1, 0, 0);
+            q0 = fpu_get_scratch(dyn);
+            VLDI(q0, 0b0010011111111); // broadcast 0xff as 16-bit elements to all lanes
             if (v0 == v1) {
                 VMAXI_H(v0, v0, 0);
+                VMIN_H(v0, v0, q0);
                 VPICKEV_B(v0, v0, v0);
             } else {
                 q1 = fpu_get_scratch(dyn);
                 VMAXI_H(v0, v0, 0);
                 VMAXI_H(q1, v1, 0);
+                VMIN_H(v0, v0, q0);
+                VMIN_H(q1, q1, q0);
                 VPICKEV_B(v0, q1, v0);
             }
             break;