about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-09 21:25:52 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-09 21:25:52 +0100
commit8a0af31a49936a4737078799a7383a6ef1376fca (patch)
tree7d0d2ebc093eaea83cdd517e858e748716b06113 /src
parent044b88dbce9fd4bb1d02c997d10d273e28a9c3ef (diff)
downloadbox64-8a0af31a49936a4737078799a7383a6ef1376fca.tar.gz
box64-8a0af31a49936a4737078799a7383a6ef1376fca.zip
Added 66 39/3B/3D CMP opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64emu.c4
-rw-r--r--src/emu/x64run66.c25
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);