about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-06 16:37:02 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-06 16:37:02 +0200
commitd07036b8ec693bb85bd74bd81703931a85b13a50 (patch)
tree9a9fa9f5a604fe5924b847a81cc06c231b90a93b /src/dynarec
parentcb73eaf7768cd765cb242bb4526c9ce998e4d82d (diff)
downloadbox64-d07036b8ec693bb85bd74bd81703931a85b13a50.tar.gz
box64-d07036b8ec693bb85bd74bd81703931a85b13a50.zip
Added 0F D7 opcode ([DYNAREC] too) (for #32)
Diffstat (limited to 'src/dynarec')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index 3d77c257..2ea941ff 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -88,7 +88,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
     MAYUSE(d1);

     MAYUSE(s0);

     MAYUSE(j64);

-    #if 0//STEP == 3

+    #if STEP > 1

     static const int8_t mask_shift8[] = { -7, -6, -5, -4, -3, -2, -1, 0 };

     #endif

 

@@ -1622,6 +1622,22 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             VMUL_16(q0, q0, q1);

             break;

 

+        case 0xD7:

+            nextop = F8;

+            INST_NAME("PMOVMSKB Gd, Em");

+            v0 = fpu_get_scratch(dyn);

+            v1 = fpu_get_scratch(dyn);

+            q1 = fpu_get_scratch(dyn);

+            GETEM(q0, 0);

+            GETGD;

+            TABLE64(x1, (uintptr_t)&mask_shift8);

+            VLDR64_U12(v0, x1, 0);     // load shift

+            MOVI_8(v1, 0x80);   // load mask

+            VAND(q1, v1, q0);

+            USHL_8(q1, q1, v0); // shift

+            UADDLV_8(q1, q1);   // accumalte

+            VMOVBto(gd, q1, 0);

+            break;        

         case 0xD8:

             INST_NAME("PSUBUSB Gm, Em");

             nextop = F8;