about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-05 16:17:17 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-05 16:17:17 +0200
commit28a2dba9f7abb2960497999e5a63e6f06c5786ab (patch)
tree3cb7c0ab5a60f5fe092a2195ab03189634b52c32 /src
parent4e7f86979da71ce851e3f2ad97e8052ede5270b1 (diff)
downloadbox64-28a2dba9f7abb2960497999e5a63e6f06c5786ab.tar.gz
box64-28a2dba9f7abb2960497999e5a63e6f06c5786ab.zip
Added F2 0F D0 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_f20f.c13
-rw-r--r--src/emu/x64runf20f.c10
2 files changed, 23 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_f20f.c b/src/dynarec/dynarec_arm64_f20f.c
index e2b01575..ef709d02 100755
--- a/src/dynarec/dynarec_arm64_f20f.c
+++ b/src/dynarec/dynarec_arm64_f20f.c
@@ -301,6 +301,19 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             VMOVQDfrom(v0, 0, x2);

             break;

 

+        case 0xD0:

+            INST_NAME("ADDSUBPS Gx, Ex");

+            nextop = F8;

+            GETGX(v0);

+            GETEX(v1, 0);

+            q0 = fpu_get_scratch(dyn);

+            static float addsubps[4] = {-1.f, 1.f, -1.f, 1.f};

+            MAYUSE(addsubps);

+            TABLE64(x2, (uintptr_t)&addsubps);

+            VLDR128_U12(q0, x2, 0);

+            VFMLAQS(v0, v1, q0);

+            break;

+

         case 0xF0:

             INST_NAME("LDDQU Gx,Ex");

             nextop = F8;

diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c
index fafcce2c..766a69f8 100644
--- a/src/emu/x64runf20f.c
+++ b/src/emu/x64runf20f.c
@@ -229,6 +229,16 @@ int RunF20F(x64emu_t *emu, rex_t rex)
         GX->q[0]=(tmp8s)?0xffffffffffffffffLL:0LL;

         break;

 

+    case 0xD0:  /* ADDSUBPS Gx, Ex */

+        nextop = F8;

+        GETEX(0);

+        GETGX;

+        GX->f[0] -= EX->f[0];

+        GX->f[1] += EX->f[1];

+        GX->f[2] -= EX->f[2];

+        GX->f[3] += EX->f[3];

+        break;

+

     case 0xD6:  /* MOVDQ2Q Gm, Ex */

         nextop = F8;

         GETEX(0);