about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-04 20:35:56 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-04 20:35:56 +0100
commit4b86945fff971768ad4d4542e0eef45ce7c4161b (patch)
treea808ed2da38b1420625991e01a7c49045d80d3a7
parent3f025f1310eaea11670f8907455c8d5ece2136d3 (diff)
downloadbox64-4b86945fff971768ad4d4542e0eef45ce7c4161b.tar.gz
box64-4b86945fff971768ad4d4542e0eef45ce7c4161b.zip
Added REX C7 MOV opcode
-rwxr-xr-xsrc/emu/x64run.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 5c7045e6..f2d4e452 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -55,6 +55,7 @@ int Run(x64emu_t *emu, int step)
 #define F16     *(uint16_t*)(R_RIP+=2, R_RIP-2)
 #define F32     *(uint32_t*)(R_RIP+=4, R_RIP-4)
 #define F32S    *(int32_t*)(R_RIP+=4, R_RIP-4)
+#define F32S64  (uint64_t)(int64_t)F32S
 #define F64     *(uint64_t*)(R_RIP+=8, R_RIP-8)
 #define F64S    *(int64_t*)(R_RIP+=8, R_RIP-8)
 #define PK(a)   *(uint8_t*)(R_RIP+a)
@@ -132,7 +133,7 @@ x64emurun:
             break;                                          \
         case B+5:                                           \
             if(rex.w)                                       \
-                R_RAX = OP##64(emu, R_RAX, (uint64_t)(int64_t)F32S);    \
+                R_RAX = OP##64(emu, R_RAX, F32S64);         \
             else                                            \
                 R_EAX = OP##32(emu, R_EAX, F32);            \
             break;
@@ -189,7 +190,7 @@ x64emurun:
             break;
         case 0x3D:
             if(rex.w)
-                cmp64(emu, R_RAX, (uint64_t)(int64_t)F32S);
+                cmp64(emu, R_RAX, F32S64);
             else
                 cmp32(emu, R_EAX, F32);
             break;
@@ -453,6 +454,15 @@ x64emurun:
             STEP
             break;
 
+        case 0xC7:                      /* MOV Ed,Id */
+            nextop = F8;
+            GETED;
+            if(rex.w)
+                ED->q[0] = F32S64;
+            else
+                ED->dword[0] = F32;
+            break;
+
         case 0xCC:                      /* INT 3 */
             x64Int3(emu);
             if(emu->quit) goto fini;