about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-02-17 15:13:49 +0800
committerGitHub <noreply@github.com>2025-02-17 08:13:49 +0100
commit71845a11bba58f353d5de837e0d7ef55d1c87052 (patch)
treecb733539edfa4bb40f5208ebf0e7f07c97ddb890 /src
parente3adda8ff9c50243464375e3a6c0f0e3461b5677 (diff)
downloadbox64-71845a11bba58f353d5de837e0d7ef55d1c87052.tar.gz
box64-71845a11bba58f353d5de837e0d7ef55d1c87052.zip
[LA64_DYNAREC] Added more SSE4 opcodes (#2370)
Co-authored-by: phorcys <phorcys@126.com>
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_660f.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c
index d6e6daa3..86c37c06 100644
--- a/src/dynarec/la64/dynarec_la64_660f.c
+++ b/src/dynarec/la64/dynarec_la64_660f.c
@@ -463,6 +463,28 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     GETGX_empty(q0);
                     VSLLWIL_W_H(q0, q1, 0);
                     break;
+                case 0x24:
+                    INST_NAME("PMOVSXWQ Gx, Ex");
+                    nextop = F8;
+                    GETEXSS(q1, 0, 0);
+                    GETGX_empty(q0);
+                    VSLLWIL_W_H(q0, q1, 0);     // 16bits->32bits
+                    VSLLWIL_D_W(q0, q0, 0);     // 32bits->64bits
+                    break;
+                case 0x25:
+                    INST_NAME("PMOVSXDQ Gx, Ex");
+                    nextop = F8;
+                    GETEX64(q1, 0, 0);
+                    GETGX_empty(q0);
+                    VSLLWIL_D_W(q0, q1, 0);     // 32bits->64bits
+                    break;                    
+                case 0x29:
+                    INST_NAME("PCMPEQQ Gx, Ex");  // SSE4 opcode!
+                    nextop = F8;
+                    GETEX(q1, 0, 0);
+                    GETGX_empty(q0);
+                    VSEQ_D(q0, q0, q1);
+                    break;                
                 case 0x2B:
                     INST_NAME("PACKUSDW Gx, Ex"); // SSE4 opcode!
                     nextop = F8;
@@ -503,6 +525,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     GETGX(q0, 1);
                     VMAX_W(q0, q0, q1);
                     break;
+                case 0x3E:
+                    INST_NAME("PMAXUW Gx, Ex");  // SSE4 opcode!
+                    nextop = F8;
+                    GETEX(q1, 0, 0);
+                    GETGX(q0, 1);
+                    VMAX_HU(q0, q0, q1);
+                    break;
                 case 0x40:
                     INST_NAME("PMULLD Gx, Ex");  // SSE4 opcode!
                     nextop = F8;