about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-10-24 16:59:40 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-10-24 16:59:40 +0200
commit12c40a5b804143cee0d538c4de4b526522bcfcd2 (patch)
treec3a976d0f65df337ac04f16710d92f02a39cefaa /src/emu
parente9a2f9ff6281eac45b1e10457f3c79f780451c02 (diff)
downloadbox64-12c40a5b804143cee0d538c4de4b526522bcfcd2.tar.gz
box64-12c40a5b804143cee0d538c4de4b526522bcfcd2.zip
[32BITS] Added 66 06/07 and 66 1E/1F opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64run66.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c
index 938fde48..49a5ba3c 100644
--- a/src/emu/x64run66.c
+++ b/src/emu/x64run66.c
@@ -112,6 +112,20 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
     GO(0x28, sub)                   /* SUB 0x29 ~> 0x2D */

     GO(0x30, xor)                   /* XOR 0x31 ~> 0x35 */

 

+    case 0x06:                      /* PUSH ES */

+        if(!rex.is32bits) {

+            return 0;

+        }

+        Push32(emu, emu->segs[_ES]);  // even if a segment is a 16bits, a 32bits push/pop is done

+        break;

+    case 0x07:                      /* POP ES */

+        if(!rex.is32bits) {

+            return 0;

+        }

+        emu->segs[_ES] = Pop32(emu);    // no check, no use....

+        emu->segs_serial[_ES] = 0;

+        break;

+

     case 0x0F:                              /* more opcdes */

         #ifdef TEST_INTERPRETER

         return Test660F(test, rex, addr);

@@ -119,6 +133,20 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
         return Run660F(emu, rex, addr);

         #endif

 

+        case 0x1E:                      /* PUSH DS */

+            if(!rex.is32bits) {

+                return 0;

+            }

+            Push32(emu, emu->segs[_DS]);  // even if a segment is a 16bits, a 32bits push/pop is done

+            break;

+        case 0x1F:                      /* POP DS */

+            if(!rex.is32bits) {

+                return 0;

+            }

+            emu->segs[_DS] = Pop32(emu);    // no check, no use....

+            emu->segs_serial[_DS] = 0;

+            break;

+

     case 0x39:

         nextop = F8;

         GETEW(0);