about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-02 16:16:31 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-02 16:16:31 +0200
commit931a8063b450c4bac3be3b2eed0fb5c93f56edc6 (patch)
tree1ad1b8f1f171ee6b4567c06b8bbec98e13038833 /src
parentc74406c89e81be0f331c0568c716fb98185afa07 (diff)
downloadbox64-931a8063b450c4bac3be3b2eed0fb5c93f56edc6.tar.gz
box64-931a8063b450c4bac3be3b2eed0fb5c93f56edc6.zip
[DYNAREC] Added 0F E8/E9 opcodes and fixed 0F E7 opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index 7cc8d402..e446b734 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -1372,6 +1372,16 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             URHADD_8(v0, v0, v1);

             break;

 

+        case 0xE5:

+            INST_NAME("PMULHW Gm,Em");

+            nextop = F8;

+            GETGM(v0);

+            GETEM(v1, 0);

+            q0 = fpu_get_scratch(dyn);

+            VSMULL_16(q0, v0, v1);

+            SQSHRN_16(v0, q0, 16);

+            break;

+

         case 0xE7:

             INST_NAME("MOVNTQ Em, Gm"); // Non Temporal par not handled for now

             nextop = F8;

@@ -1381,18 +1391,22 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             } else {

                 v0 = mmx_get_reg(dyn, ninst, x1, gd);

                 addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<3, 7, rex, 0, 0);

-                VST1_64(v0, ed, fixedaddress);

+                VSTR64_U12(v0, ed, fixedaddress);

             }

             break;

-

-        case 0xE5:

-            INST_NAME("PMULHW Gm,Em");

+        case 0xE8:

+            INST_NAME("PSUBSB Gm,Em");

             nextop = F8;

             GETGM(v0);

-            GETEM(v1, 0);

-            q0 = fpu_get_scratch(dyn);

-            VSMULL_16(q0, v0, v1);

-            SQSHRN_16(v0, q0, 16);

+            GETEM(q0, 0);

+            SQSUB_8(v0, v0, q0);

+            break;

+        case 0xE9:

+            INST_NAME("PSUBSW Gm,Em");

+            nextop = F8;

+            GETGM(v0);

+            GETEM(q0, 0);

+            SQSUB_16(v0, v0, q0);

             break;

 

         case 0xEB: