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_0f.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
index d3cf8eb9..e98210e2 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
@@ -119,6 +119,34 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             } else YMM0(gd);
             break;
 
+        case 0x6B:
+            INST_NAME("PACKSSDW Gx,Ex");
+            nextop = F8;
+            GETGX_empty_VXEX(v0, v2, v1, 0);
+            if(v0==v1) {
+                q0 = fpu_get_scratch(dyn, ninst);
+                VMOVQ(q0, v0);
+            }
+            SQXTN_16(v0, v2);
+            if(v2==v1) {
+                VMOVeD(v0, 1, v0, 0);
+            } else {
+                SQXTN2_16(v0, (v0==v1)?q0:v1);
+            }
+            if(vex.l) {
+                GETGY_empty_VYEY(v0, v2, v1);
+                if(v0==v1) {
+                    VMOVQ(q0, v0);
+                }
+                SQXTN_16(v0, v2);
+                if(v2==v1) {
+                    VMOVeD(v0, 1, v0, 0);
+                } else {
+                    SQXTN2_16(v0, (v0==v1)?q0:v1);
+                }
+            } else YMM0(gd);
+            break;
+
         case 0x6F:
             INST_NAME("MOVDQA Gx,Ex");
             nextop = F8;