diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 20:35:56 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 20:35:56 +0100 |
| commit | 4b86945fff971768ad4d4542e0eef45ce7c4161b (patch) | |
| tree | a808ed2da38b1420625991e01a7c49045d80d3a7 | |
| parent | 3f025f1310eaea11670f8907455c8d5ece2136d3 (diff) | |
| download | box64-4b86945fff971768ad4d4542e0eef45ce7c4161b.tar.gz box64-4b86945fff971768ad4d4542e0eef45ce7c4161b.zip | |
Added REX C7 MOV opcode
| -rwxr-xr-x | src/emu/x64run.c | 14 |
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; |