about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-08-09 23:04:14 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-08-09 23:04:14 +0200
commitdc5c049ed94f3c3854c475b73e2c6b8df4a0c7a2 (patch)
tree59138d43b285786c5baa2067a2b9ba7b4fba9355 /src
parent642260bdb63eb48667f35d21b376b04f0d5e1976 (diff)
downloadbox64-dc5c049ed94f3c3854c475b73e2c6b8df4a0c7a2.tar.gz
box64-dc5c049ed94f3c3854c475b73e2c6b8df4a0c7a2.zip
Added D9 D8..DF opcodes ([DYNAREC] too) (for #361)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_d9.c24
-rw-r--r--src/emu/x64rund9.c19
2 files changed, 27 insertions, 16 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_d9.c b/src/dynarec/arm64/dynarec_arm64_d9.c
index 71517ecc..46ebf60c 100644
--- a/src/dynarec/arm64/dynarec_arm64_d9.c
+++ b/src/dynarec/arm64/dynarec_arm64_d9.c
@@ -79,6 +79,22 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             INST_NAME("FNOP");
             break;
 
+        case 0xD8:
+            INST_NAME("FSTPNCE ST0, ST0");
+            x87_do_pop(dyn, ninst, x3);
+            break;
+        case 0xD9:
+        case 0xDA:
+        case 0xDB:
+        case 0xDC:
+        case 0xDD:
+        case 0xDE:
+        case 0xDF:
+            INST_NAME("FSTPNCE ST0, STx");
+            // copy the cache value for st0 to stx
+            x87_swapreg(dyn, ninst, x1, x2, 0, nextop&7);
+            x87_do_pop(dyn, ninst, x3);
+            break;
         case 0xE0:
             INST_NAME("FCHS");
             v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_ST0);
@@ -294,14 +310,6 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
         case 0xD5:
         case 0xD6:
         case 0xD7:
-        case 0xD8:
-        case 0xD9:
-        case 0xDA:
-        case 0xDB:
-        case 0xDC:
-        case 0xDD:
-        case 0xDE:
-        case 0xDF:
         case 0xE2:
         case 0xE3:
         case 0xE6:
diff --git a/src/emu/x64rund9.c b/src/emu/x64rund9.c
index bb341f62..34e29879 100644
--- a/src/emu/x64rund9.c
+++ b/src/emu/x64rund9.c
@@ -60,6 +60,17 @@ uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr)
         case 0xD0:  /* FNOP */

             break;

 

+        case 0xD8:  /* FSTPNCE ST0, STx */

+        case 0xD9:

+        case 0xDA:

+        case 0xDB:

+        case 0xDC:

+        case 0xDD:

+        case 0xDE:

+        case 0xDF:

+            ST(nextop&7).q = ST0.q;

+            fpu_do_pop(emu);

+            break;

         case 0xE0:  /* FCHS */

             ST0.d = -ST0.d;

             break;

@@ -210,14 +221,6 @@ uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr)
         case 0xD5:

         case 0xD6:

         case 0xD7:

-        case 0xD8:

-        case 0xD9:

-        case 0xDA:

-        case 0xDB:

-        case 0xDC:

-        case 0xDD:

-        case 0xDE:

-        case 0xDF:

         case 0xE2:

         case 0xE3:

         case 0xE6: