diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 21:25:52 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 21:25:52 +0100 |
| commit | 8a0af31a49936a4737078799a7383a6ef1376fca (patch) | |
| tree | 7d0d2ebc093eaea83cdd517e858e748716b06113 /src | |
| parent | 044b88dbce9fd4bb1d02c997d10d273e28a9c3ef (diff) | |
| download | box64-8a0af31a49936a4737078799a7383a6ef1376fca.tar.gz box64-8a0af31a49936a4737078799a7383a6ef1376fca.zip | |
Added 66 39/3B/3D CMP opcodes
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); |