diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-10-10 16:22:41 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-10-10 16:22:41 +0200 |
| commit | 275c25a048bc233a476c494bfc43e8289953ad65 (patch) | |
| tree | d942af470c99de6e1ddc507dc84e83766b6521af | |
| parent | 0a0228eae23a68cb046779e5e1d927a53a95ebf7 (diff) | |
| download | box64-275c25a048bc233a476c494bfc43e8289953ad65.tar.gz box64-275c25a048bc233a476c494bfc43e8289953ad65.zip | |
[INTERP] Fixed 66 E8/E9/EA opcodes in 32bits mode
| -rw-r--r-- | src/emu/x64run.c | 6 |
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 |