about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-11 17:05:15 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-11 17:05:15 +0200
commit76115b30b82d53700b8dcc8645a509b4a11c0539 (patch)
tree42db397313324c1e0bf3bae2b00135d198510cb5 /src
parent7401d46bcdee5236dd4c1f1ef551eb51ebeb3806 (diff)
downloadbox64-76115b30b82d53700b8dcc8645a509b4a11c0539.tar.gz
box64-76115b30b82d53700b8dcc8645a509b4a11c0539.zip
[DYNAREC] Added 66 0F E1/F2 opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index 2419fe47..d2e89f00 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -1140,6 +1140,21 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             URHADDQ_8(v0, v0, v1);

             break;

 

+        case 0xE1:

+            INST_NAME("PSRAW Gx,Ex");

+            nextop = F8;

+            GETGX(q0);

+            GETEX(q1, 0);

+            v0 = fpu_get_scratch(dyn);

+            VMOVeD(v0, 0, q1, 0);

+            VMOVeD(v0, 1, q1, 0);

+            SQXTN_32(v0, v0);   // 2*q1 in 32bits now

+            NEG_32(v0, v0);   // because we want SHR and not SHL

+            VMOVeD(v0, 1, v0, 0);

+            SQXTN_16(v0, v0);   // 4*q1 in 32bits now

+            VMOVeD(v0, 1, v0, 0);

+            SSHLQ_16(q0, q0, v0);

+            break;

         case 0xE2:

             INST_NAME("PSRAD Gx,Ex");

             nextop = F8;

@@ -1262,6 +1277,19 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             }

             break;

 

+        case 0xF2:

+            INST_NAME("PSLLD Gx,Ex");

+            nextop = F8;

+            GETGX(q0);

+            GETEX(q1, 0);

+            v0 = fpu_get_scratch(dyn);

+            VMOVeD(v0, 0, q1, 0);

+            VMOVeD(v0, 1, q1, 0);

+            SQXTN_32(v0, v0); // 2*q1 in 32bits now

+            VMOVeD(v0, 1, v0, 0);

+            SSHLQ_32(q0, q0, v0);

+            break;

+

         case 0xF4:

             INST_NAME("PMULUDQ Gx,Ex");

             nextop = F8;