about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-26 15:42:54 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-26 15:42:54 +0100
commit3e811f869e843443a85d693d7b5a2831aa13ca6b (patch)
treebc7e351e6c20b00901c1b8b595c66f50750e0e29 /src
parent1f17a575284a43f37c880900e8ff7347f97ad82d (diff)
downloadbox64-3e811f869e843443a85d693d7b5a2831aa13ca6b.tar.gz
box64-3e811f869e843443a85d693d7b5a2831aa13ca6b.zip
Added 66 0F 16/17 ocpode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c24
-rw-r--r--src/emu/x64run660f.c12
2 files changed, 36 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index 9d575f94..c35f0224 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -119,6 +119,30 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                 VLD1_64(v0, 1, ed);

             }

             break;

+        case 0x16:

+            INST_NAME("MOVHPD Gx, Eq");

+            nextop = F8;

+            GETGX(v0);

+            if(MODREG) {

+                // access register instead of memory is bad opcode!

+                DEFAULT;

+                return addr;

+            }

+            addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0);

+            VLD1_64(v0, 1, ed);

+            break;

+        case 0x17:

+            INST_NAME("MOVHPD Eq, Gx");

+            nextop = F8;

+            GETGX(v0);

+            if(MODREG) {

+                // access register instead of memory is bad opcode!

+                DEFAULT;

+                return addr;

+            }

+            addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0);

+            VST1_64(v0, 1, ed);

+            break;

 

         case 0x1F:

             INST_NAME("NOP (multibyte)");

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index abcf0253..0f7c0f80 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -78,6 +78,18 @@ int Run660F(x64emu_t *emu, rex_t rex)
         GX->q[0] = GX->q[1];

         GX->q[1] = EX->q[1];

         break;

+    case 0x16:                      /* MOVHPD Gx, Ed */

+        nextop = F8;

+        GETED(0);

+        GETGX;

+        GX->q[1] = ED->q[0];

+        break;

+    case 0x17:                      /* MOVHPD Ed, Gx */

+        nextop = F8;

+        GETED(0);

+        GETGX;

+        ED->q[0] = GX->q[1];

+        break;

 

     case 0x1F:                      /* NOP (multi-byte) */

         nextop = F8;