about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-07-03 11:34:05 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-07-03 11:34:05 +0200
commite274abf13d898db1b0516089a54ee5dff0997658 (patch)
tree02e8c2f5494a2f32ece7912966ef1aa41e925d5f /src
parente327799e622e96b17a6ff2958771e9584831c0bb (diff)
downloadbox64-e274abf13d898db1b0516089a54ee5dff0997658.tar.gz
box64-e274abf13d898db1b0516089a54ee5dff0997658.zip
[INTERP] Small change in Alternate handling
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 8b21ca83..af2bc58f 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -2153,9 +2153,11 @@ x64emurun:
                     GETE8(0);
                     if(rex.is32bits) {
                         tmp64u = (uintptr_t)ED->dword[0];
+                        tmp64u = (uintptr_t)getAlternate((void*)tmp64u);
                         Push32(emu, addr);
                     } else {
-                        tmp64u = (uintptr_t)getAlternate((void*)ED->q[0]);
+                        tmp64u = ED->q[0];
+                        tmp64u = (uintptr_t)getAlternate((void*)tmp64u);
                         Push64(emu, addr);
                     }
                     addr = tmp64u;
@@ -2171,14 +2173,15 @@ x64emurun:
                         if(rex.is32bits || !rex.w) {
                             Push32(emu, R_CS);
                             Push32(emu, addr);
-                            addr = (uintptr_t)getAlternate((void*)(uintptr_t)ED->dword[0]);
+                            addr = (uintptr_t)ED->dword[0];
                             R_CS = ED->word[2];
                         } else {
                             Push64(emu, R_CS);
                             Push64(emu, addr);
-                            addr = (uintptr_t)getAlternate((void*)ED->q[0]);
+                            addr = ED->q[0];
                             R_CS = (ED+1)->word[0];
                         }
+                        addr = (uintptr_t)getAlternate((void*)addr);
                         STEP2;
                         if(is32bits!=(emu->segs[_CS]==0x23)) {
                             is32bits = (emu->segs[_CS]==0x23);
@@ -2205,7 +2208,8 @@ x64emurun:
                     if(rex.is32bits)
                         addr = (uintptr_t)ED->dword[0];
                     else
-                        addr = (uintptr_t)getAlternate((void*)ED->q[0]);
+                        addr = (uintptr_t)ED->q[0];
+                    addr = (uintptr_t)getAlternate((void*)addr);
                     STEP2
                     break;
                 case 5:                 /* JMP FAR Ed */
@@ -2216,12 +2220,13 @@ x64emurun:
                         goto fini;
                     } else {
                         if(rex.is32bits || !rex.w) {
-                            addr = (uintptr_t)getAlternate((void*)(uintptr_t)ED->dword[0]);
+                            addr = (uintptr_t)ED->dword[0];
                             R_CS = ED->word[2];
                         } else {
-                            addr = (uintptr_t)getAlternate((void*)ED->q[0]);
+                            addr = ED->q[0];
                             R_CS = (ED+1)->word[0];
                         }
+                        addr = (uintptr_t)getAlternate((void*)addr);
                         STEP2;
                         if(is32bits!=(emu->segs[_CS]==0x23)) {
                             is32bits = (emu->segs[_CS]==0x23);