diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64emu.c | 4 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c index 7ebc6b26..1cf93f8f 100755 --- a/src/emu/x64emu.c +++ b/src/emu/x64emu.c @@ -398,12 +398,12 @@ void UnimpOpcode(x64emu_t* emu) R_RIP = emu->old_ip; int tid = syscall(SYS_gettid); - printf_log(LOG_NONE, "%04d|%p: Unimplemented Opcode (%02X) %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", + printf_log(LOG_NONE, "%04d|%p: Unimplemented Opcode (%02X) %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", tid, (void*)emu->old_ip, Peek(emu, -1), Peek(emu, 0), Peek(emu, 1), Peek(emu, 2), Peek(emu, 3), Peek(emu, 4), Peek(emu, 5), Peek(emu, 6), Peek(emu, 7), Peek(emu, 8), Peek(emu, 9), Peek(emu,10), Peek(emu,11), - Peek(emu,12), Peek(emu,13), Peek(emu,14), Peek(emu,15)); + Peek(emu,12), Peek(emu,13), Peek(emu,14)); emu->quit=1; emu->error |= ERR_UNIMPL; } diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index ab3d9a2a..28cd2649 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -100,6 +100,31 @@ int Run66(x64emu_t *emu, rex_t rex) case 0x0F: /* more opcdes */ return Run660F(emu, rex); + case 0x39: + nextop = F8; + GETEW(0); + GETGW; + if(rex.w) + cmp64(emu, EW->q[0], GW->q[0]); + else + cmp16(emu, EW->word[0], GW->word[0]); + break; + case 0x3B: + nextop = F8; + GETEW(0); + GETGW; + if(rex.w) + cmp64(emu, GW->q[0], EW->dword[0]); + else + cmp16(emu, GW->word[0], EW->word[0]); + break; + case 0x3D: + if(rex.w) + cmp64(emu, R_RAX, F32S64); + else + cmp16(emu, R_AX, F16); + break; + case 0x64: /* FS: */ return Run6664(emu, rex); |