about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-30 18:21:16 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-30 18:21:16 +0200
commit4fd23c752c18224ea42384c7e7865c4c2bf2493f (patch)
tree4e3758c0efd4b6d525c48280016abf34b43f5a6b /src
parent60b625bc0fe12933c34f889d75eb9b48d5c4f76e (diff)
downloadbox64-4fd23c752c18224ea42384c7e7865c4c2bf2493f.tar.gz
box64-4fd23c752c18224ea42384c7e7865c4c2bf2493f.zip
[ARM64_DYNAREC] Added AVX.66.0F 6B opcode
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;