diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-28 13:34:45 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-28 13:34:56 +0200 |
| commit | d73ff21b27b7f2fdca3f817fb37faefe388439d8 (patch) | |
| tree | cfe79810c265024864f845bee0d286df03ab7ae0 /src/emu/x64run.c | |
| parent | 4a90199f63ea2e8ee16d11a20c5b9cc9abd11498 (diff) | |
| download | box64-d73ff21b27b7f2fdca3f817fb37faefe388439d8.tar.gz box64-d73ff21b27b7f2fdca3f817fb37faefe388439d8.zip | |
[DYNAREC] Improved TEST_INTERPRETER with inter-block testing
Diffstat (limited to 'src/emu/x64run.c')
| -rwxr-xr-x | src/emu/x64run.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 0f982a77..f064dfd1 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -1581,9 +1581,9 @@ x64emurun: break; case 0xFF: /* GRP 5 Ed */ nextop = F8; - GETED(0); switch((nextop>>3)&7) { case 0: /* INC Ed */ + GETED(0); if(rex.w) ED->q[0] = inc64(emu, ED->q[0]); else { @@ -1594,6 +1594,7 @@ x64emurun: } break; case 1: /* DEC Ed */ + GETED(0); if(rex.w) ED->q[0] = dec64(emu, ED->q[0]); else { @@ -1604,12 +1605,14 @@ x64emurun: } break; case 2: /* CALL NEAR Ed */ + GETE8(0); tmp64u = (uintptr_t)getAlternate((void*)ED->q[0]); Push(emu, addr); addr = tmp64u; STEP2 break; case 3: /* CALL FAR Ed */ + GETET(0); if(MODREG) { printf_log(LOG_NONE, "Illegal Opcode %p: %02X %02X %02X %02X\n", (void*)R_RIP, opcode, nextop, PK(2), PK(3)); emu->quit=1; @@ -1624,10 +1627,12 @@ x64emurun: } break; case 4: /* JMP NEAR Ed */ + GETE8(0); addr = (uintptr_t)getAlternate((void*)ED->q[0]); STEP2 break; case 5: /* JMP FAR Ed */ + GETET(0); if(MODREG) { printf_log(LOG_NONE, "Illegal Opcode %p: 0x%02X 0x%02X %02X %02X\n", (void*)R_RIP, opcode, nextop, PK(2), PK(3)); emu->quit=1; @@ -1640,6 +1645,7 @@ x64emurun: } break; case 6: /* Push Ed */ + GETE8(0); tmp64u = ED->q[0]; // rex.w ignored #ifdef TEST_INTERPRETER R_RSP -=8; |