about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-02-24 12:08:16 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-02-24 12:08:16 +0100
commit2eb92951afa3566b149ebd8cc3d6185b63e78f6c (patch)
treec12a8738da129c7c53b08c0924c2c8203cac58bd /src
parentf8202096f1c4d8608809bc42f15fbd765e8c148b (diff)
downloadbox64-2eb92951afa3566b149ebd8cc3d6185b63e78f6c.tar.gz
box64-2eb92951afa3566b149ebd8cc3d6185b63e78f6c.zip
[32BITS] Added 0E opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c11
-rw-r--r--src/emu/x64run.c7
2 files changed, 17 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 706d78ae..a93dc3cb 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -170,7 +170,16 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             i64 = F32S;
             emit_or32c(dyn, ninst, rex, xRAX, i64, x3, x4);
             break;
-
+        case 0x0E:
+            if(rex.is32bits) {
+                INST_NAME("PUSH CS");
+                LDRH_U12(x1, xEmu, offsetof(x64emu_t, segs[_CS]));
+                PUSH1_32(x1);
+                SMWRITE();
+            } else {
+                DEFAULT;
+            }
+            break;
         case 0x0F:
             switch(rep) {
             case 1:
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 068dc007..db7aabc3 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -166,6 +166,13 @@ x64emurun:
             emu->segs_serial[_ES] = 0;
             break;
         GO(0x08, or)                    /*  OR 0x08 -> 0x0D */
+        case 0x0E:                      /* PUSH CS */
+            if(!rex.is32bits) {
+                unimp = 1;
+                goto fini;
+            }
+            Push32(emu, emu->segs[_CS]);  // even if a segment is a 16bits, a 32bits push/pop is done
+            break;
         case 0x0F:                      /* More instructions */
             switch(rep) {
                 case 1: