about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-02-07 19:32:05 +0800
committerGitHub <noreply@github.com>2025-02-07 12:32:05 +0100
commit2bf78ea18cf9985eecaebf9ddf5ac4aa4b53a015 (patch)
tree9e358cf85339b03b9cd2ccd8b4101ece62953916 /src
parentfc6efb220b3de189e64c1d6e9f7e756d7783048e (diff)
downloadbox64-2bf78ea18cf9985eecaebf9ddf5ac4aa4b53a015.tar.gz
box64-2bf78ea18cf9985eecaebf9ddf5ac4aa4b53a015.zip
[LA64_DYNAREC] Added more 66 0F 38 opcodes (#2322)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_660f.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c
index 5b6055cc..ccb36ad6 100644
--- a/src/dynarec/la64/dynarec_la64_660f.c
+++ b/src/dynarec/la64/dynarec_la64_660f.c
@@ -381,6 +381,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     XVSRLNI_H_W(v0, v0, 1);
                     XVPERMI_D(q0, v0, 0b1000);
                     break;
+                case 0x14:
+                    INST_NAME("BLENDVPS Gx,Ex");
+                    nextop = F8;
+                    GETGX(q0, 1);
+                    GETEX(q1, 0, 0);
+                    v0 = sse_get_reg(dyn, ninst, x1, 0, 0); // XMM0
+                    v1 = fpu_get_scratch(dyn);
+                    if (q0 != q1) {
+                        VSRA_W(v1, v0, 31);
+                        VBITSEL_V(q0, q0, q1, v1);
+                    }
+                    break;
                 case 0x17:
                     INST_NAME("PTEST Gx, Ex");
                     nextop = F8;
@@ -437,6 +449,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     VXOR_V(v0, v0, v0);
                     VABSD_H(q0, q1, v0);
                     break;
+                case 0x1E:
+                    INST_NAME("PABSD Gx,Ex");
+                    nextop = F8;
+                    GETEX(q1, 0, 0);
+                    GETGX_empty(q0);
+                    VSIGNCOV_W(q0, q1, q1);
+                    break;
                 case 0x2B:
                     INST_NAME("PACKUSDW Gx, Ex"); // SSE4 opcode!
                     nextop = F8;