about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-02-01 18:58:01 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-02-01 18:58:01 +0100
commitacc2f2e3d542ec67c0c23b973a24370c40a7787a (patch)
tree38f7d2199c0571d3bbce3c67545c2c0091bd3bfb /src
parenta2be60cce825bf83b4754a6fbcbf384273542115 (diff)
downloadbox64-acc2f2e3d542ec67c0c23b973a24370c40a7787a.tar.gz
box64-acc2f2e3d542ec67c0c23b973a24370c40a7787a.zip
[32BITS] Added 67 64 89 opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_6764_32.c13
-rw-r--r--src/emu/x64run6764_32.c7
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_6764_32.c b/src/dynarec/arm64/dynarec_arm64_6764_32.c
index c62b239a..27691e74 100644
--- a/src/dynarec/arm64/dynarec_arm64_6764_32.c
+++ b/src/dynarec/arm64/dynarec_arm64_6764_32.c
@@ -61,6 +61,19 @@ uintptr_t dynarec64_6764_32(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, in
 
     switch(opcode) {
 
+        case 0x89:
+            INST_NAME("MOV Seg:Ed, Gd");
+            nextop=F8;
+            GETGD;
+            if(MODREG) {   // reg <= reg
+                MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd);
+            } else {                    // mem <= reg
+                grab_segdata(dyn, addr, ninst, x4, seg);
+                addr = geted16(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, 0);
+                STRw_REG(gd, ed, x4);
+            }
+            break;
+
         case 0xA1:
             INST_NAME("MOV EAX, Seg:[Od]");
             i32 = F16;
diff --git a/src/emu/x64run6764_32.c b/src/emu/x64run6764_32.c
index 5ac96a47..832a970f 100644
--- a/src/emu/x64run6764_32.c
+++ b/src/emu/x64run6764_32.c
@@ -54,6 +54,13 @@ uintptr_t Run6764_32(x64emu_t *emu, rex_t rex, int rep, int seg, uintptr_t addr)
 
     switch(opcode) {
 
+        case 0x89:                      /* MOV FS:Ew, Gw */
+            nextop = F8;
+            GETEW_OFFS_16(tlsdata);
+            GETGW;
+            EW->word[0] = GW->word[0];
+            break;
+
         case 0x8B:                      /* MOV Gw, FS:Ew */
             nextop = F8;
             GETEW_OFFS_16(tlsdata);