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/arm64/dynarec_arm64_avx_66_0f38.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
index 91eefba3..05732a8b 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
@@ -1224,48 +1224,38 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             break;
 
         case 0x78:
-            INST_NAME("VBROADCASTB Gx, Ex");
+            INST_NAME("VPBROADCASTB Gx, Ex");
             nextop = F8;
             if(MODREG) {
                 v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0);
                 GETGX_empty(v0);
                 VDUPQ_8(v0, v1, 0);
-                if(vex.l) {
-                    GETGY_empty(v0, -1, -1, -1);
-                    VDUPQ_8(v0, v1, 0);
-                }
             } else {
                 GETGX_empty(v0);
                 addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
                 VLDQ1R_8(v0, ed);
-                if(vex.l) {
-                    GETGY_empty(v0, -1, -1, -1);
-                    VLDQ1R_8(v0, ed);
-                }
             }
-            if(!vex.l) YMM0(gd);
+            if(vex.l) {
+                GETGY_empty(v1, -1, -1, -1);
+                VMOVQ(v0, v1);
+            } else YMM0(gd);
             break;
         case 0x79:
-            INST_NAME("VBROADCASTW Gx, Ex");
+            INST_NAME("VPBROADCASTW Gx, Ex");
             nextop = F8;
             if(MODREG) {
                 v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0);
                 GETGX_empty(v0);
                 VDUPQ_16(v0, v1, 0);
-                if(vex.l) {
-                    GETGY_empty(v0, -1, -1, -1);
-                    VDUPQ_16(v0, v1, 0);
-                }
             } else {
                 GETGX_empty(v0);
                 addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
                 VLDQ1R_16(v0, ed);
-                if(vex.l) {
-                    GETGY_empty(v0, -1, -1, -1);
-                    VLDQ1R_16(v0, ed);
-                }
             }
-            if(!vex.l) YMM0(gd);
+            if(vex.l) {
+                GETGY_empty(v1, -1, -1, -1);
+                VMOVQ(v0, v1);
+            } else  YMM0(gd);
             break;
 
         case 0x8C: