diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-03 11:34:05 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-03 11:34:05 +0200 |
| commit | e274abf13d898db1b0516089a54ee5dff0997658 (patch) | |
| tree | 02e8c2f5494a2f32ece7912966ef1aa41e925d5f /src | |
| parent | e327799e622e96b17a6ff2958771e9584831c0bb (diff) | |
| download | box64-e274abf13d898db1b0516089a54ee5dff0997658.tar.gz box64-e274abf13d898db1b0516089a54ee5dff0997658.zip | |
[INTERP] Small change in Alternate handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run.c | 17 |
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); |