about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-25 11:46:31 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-25 11:46:31 +0200
commit1b3350437c0292ce0bd2d1947c2da201f7772ad8 (patch)
tree9918909ff2aac50044f70ae1742e81a330697541 /src
parent03749788e8d51a2d2788f71ac3deb389d4dc0133 (diff)
downloadbox64-1b3350437c0292ce0bd2d1947c2da201f7772ad8.tar.gz
box64-1b3350437c0292ce0bd2d1947c2da201f7772ad8.zip
Added 67 66 0F D6 ([ARM64_dynarec] too)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c23
-rw-r--r--src/emu/x64run67660f.c9
2 files changed, 32 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 5ab9a10e..b7392210 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -656,6 +656,29 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             GETREX();

             switch(opcode) {

 

+                case 0x0F:

+                    nextop = F8;

+                    switch(nextop) {

+                        case 0xD6:

+                            INST_NAME("MOVQ Ex, Gx");

+                            nextop = F8;

+                            GETGX(v0, 0);

+                            if(MODREG) {

+                                v1 = sse_get_reg_empty(dyn, ninst, x1, (nextop&7) + (rex.b<<3));

+                                FMOVD(v1, v0);

+                            } else {

+                                WILLWRITE2();

+                                addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0);

+                                VST64(v0, ed, fixedaddress);

+                                SMWRITE2();

+                            }

+                            break;

+

+                            default:

+                                DEFAULT;

+                    }

+                    break;

+

                 case 0x89:

                     INST_NAME("MOV Ew, Gw");

                     nextop = F8;

diff --git a/src/emu/x64run67660f.c b/src/emu/x64run67660f.c
index ba031c8a..c74e2644 100644
--- a/src/emu/x64run67660f.c
+++ b/src/emu/x64run67660f.c
@@ -63,6 +63,15 @@ uintptr_t Run67660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
             GX->ud[i] = (GX->ud[i]==EX->ud[i])?0xffffffff:0;
         break;
 
+    case 0xD6:                      /* MOVQ Ex,Gx */
+        nextop = F8;
+        GETEX32(0);
+        GETGX;
+        EX->q[0] = GX->q[0];
+        if(MODREG)
+            EX->q[1] = 0;
+        break;
+
     default:
         return 0;
     }