about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-10-10 16:22:41 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-10-10 16:22:41 +0200
commit275c25a048bc233a476c494bfc43e8289953ad65 (patch)
treed942af470c99de6e1ddc507dc84e83766b6521af
parent0a0228eae23a68cb046779e5e1d927a53a95ebf7 (diff)
downloadbox64-275c25a048bc233a476c494bfc43e8289953ad65.tar.gz
box64-275c25a048bc233a476c494bfc43e8289953ad65.zip
[INTERP] Fixed 66 E8/E9/EA opcodes in 32bits mode
-rw-r--r--src/emu/x64run.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 58003b80..d1a37337 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -1941,7 +1941,7 @@ x64emurun:
             #endif
             break;
         case 0xE8:                      /* CALL Id */
-            tmp32s = F32S; // call is relative
+            tmp32s = (rex.is32bits && rex.is66)?(F16S):(F32S); // call is relative
             if(rex.is32bits)
                 Push32(emu, addr);
             else
@@ -1954,7 +1954,7 @@ x64emurun:
             STEP2
             break;
         case 0xE9:                      /* JMP Id */
-            tmp32s = F32S; // jmp is relative
+            tmp32s = (rex.is32bits && rex.is66)?(F16S):(F32S); // jmp is relative
             if(rex.is32bits)
                 addr = (uint32_t)(addr+tmp32s);
             else
@@ -1965,7 +1965,7 @@ x64emurun:
         case 0xEA:                      /* JMP FAR seg:off*/
             if(is32bits) {
                 uint16_t new_cs = F16;
-                uint32_t new_addr = F32;
+                uint32_t new_addr = (rex.is32bits && rex.is66)?(F16):(F32);
                 #ifndef TEST_INTERPRETER
                 if((new_cs&3)!=3) {
                     // R_RIP doesn't advance