about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_0f.c31
-rw-r--r--src/dynarec/la64/dynarec_la64_660f.c12
2 files changed, 18 insertions, 25 deletions
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c
index 2d009170..bbe42e3c 100644
--- a/src/dynarec/la64/dynarec_la64_0f.c
+++ b/src/dynarec/la64/dynarec_la64_0f.c
@@ -485,21 +485,18 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VSHUF4I_W(q0, q0, 0b11011000);
                     break;
                 case 0x04:
-                    INST_NAME("PMADDUBSW Gm,Em");
+                    INST_NAME("PMADDUBSW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
                     v0 = fpu_get_scratch(dyn);
                     v1 = fpu_get_scratch(dyn);
-                    VEXT2XV_HU_BU(v0, q0);
-                    VEXT2XV_H_B(v1, q1);
-                    XVMUL_H(v0, v0, v1);
-                    VPICKEV_H(q0, v1, v0);
-                    VPICKOD_H(v0, v1, v0);
-                    VSADD_H(q0, v0, q0);
+                    VMULWEV_H_BU_B(v0, q0, q1);
+                    VMULWOD_H_BU_B(v1, q0, q1);
+                    VSADD_H(q0, v0, v1);
                     break;
                 case 0x05:
-                    INST_NAME("PHSUBW Gm,Em");
+                    INST_NAME("PHSUBW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -511,7 +508,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VSHUF4I_W(q0, q0, 0b11011000);
                     break;
                 case 0x06:
-                    INST_NAME("PHSUBD Gm,Em");
+                    INST_NAME("PHSUBD Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -523,7 +520,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VSHUF4I_W(q0, q0, 0b11011000);
                     break;
                 case 0x07:
-                    INST_NAME("PHSUBSW Gm,Em");
+                    INST_NAME("PHSUBSW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -535,28 +532,28 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VSHUF4I_W(q0, q0, 0b11011000);
                     break;
                 case 0x08:
-                    INST_NAME("PSIGNB Gm,Em");
+                    INST_NAME("PSIGNB Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
                     VSIGNCOV_B(q0, q1, q0);
                     break;
                 case 0x09:
-                    INST_NAME("PSIGNW Gm,Em");
+                    INST_NAME("PSIGNW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
                     VSIGNCOV_H(q0, q1, q0);
                     break;
                 case 0x0A:
-                    INST_NAME("PSIGND Gm,Em");
+                    INST_NAME("PSIGND Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
                     VSIGNCOV_W(q0, q1, q0);
                     break;
                 case 0x0B:
-                    INST_NAME("PMULHRSW Gm,Em");
+                    INST_NAME("PMULHRSW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -570,7 +567,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VSRLNI_H_W(q0, v0, 1);
                     break;
                 case 0x1C:
-                    INST_NAME("PABSB Gm,Em");
+                    INST_NAME("PABSB Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -579,7 +576,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VABSD_B(q0, q1, v0);
                     break;
                 case 0x1D:
-                    INST_NAME("PABSW Gm,Em");
+                    INST_NAME("PABSW Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
@@ -588,7 +585,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     VABSD_H(q0, q1, v0);
                     break;
                 case 0x1E:
-                    INST_NAME("PABSD Gm,Em");
+                    INST_NAME("PABSD Gm, Em");
                     nextop = F8;
                     GETGM(q0);
                     GETEM(q1, 0);
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c
index e4fca3c4..741fde0d 100644
--- a/src/dynarec/la64/dynarec_la64_660f.c
+++ b/src/dynarec/la64/dynarec_la64_660f.c
@@ -400,19 +400,15 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     VSADD_H(q0, v0, v1);
                     break;
                 case 0x04:
-                    INST_NAME("PMADDUBSW Gx,Ex");
+                    INST_NAME("PMADDUBSW Gx, Ex");
                     nextop = F8;
                     GETGX(q0, 1);
                     GETEX(q1, 0, 0);
                     v0 = fpu_get_scratch(dyn);
                     v1 = fpu_get_scratch(dyn);
-                    VEXT2XV_HU_BU(v0, q0);
-                    VEXT2XV_H_B(v1, q1);
-                    XVMUL_H(v0, v0, v1);
-                    XVPERMI_Q(v1, v0, 1); // v1[127:0] = v0[255:128];
-                    VPICKEV_H(q0, v1, v0);
-                    VPICKOD_H(v0, v1, v0);
-                    VSADD_H(q0, v0, q0);
+                    VMULWEV_H_BU_B(v0, q0, q1);
+                    VMULWOD_H_BU_B(v1, q0, q1);
+                    VSADD_H(q0, v0, v1);
                     break;
                 case 0x05:
                     INST_NAME("PHSUBW Gx, Ex");