diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-18 14:19:16 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-18 14:19:16 +0200 |
| commit | 17364dc4459a33b66c0eb3777c50dea641c4254d (patch) | |
| tree | 15539ff03420bbd3be1dc771fe2109284292b513 /src/emu | |
| parent | 59dd97cb72b1a4142ddd61eea36170de4ffff926 (diff) | |
| download | box64-17364dc4459a33b66c0eb3777c50dea641c4254d.tar.gz box64-17364dc4459a33b66c0eb3777c50dea641c4254d.zip | |
[32BITS] Fixed an issue with 66 A1/A3 opcodes
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run66.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 3698911f..508ca243 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -315,17 +315,25 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) break; case 0xA1: /* MOV EAX,Od */ - if(rex.w) - R_RAX = *(uint64_t*)F64; - else - R_AX = *(uint16_t*)F64; + if(rex.is32bits) { + R_EAX = *(uint32_t*)(uintptr_t)F32; + } else { + if(rex.w) + R_RAX = *(uint64_t*)F64; + else + R_AX = *(uint16_t*)F64; + } break; case 0xA3: /* MOV Od,EAX */ - if(rex.w) - *(uint64_t*)F64 = R_RAX; - else - *(uint16_t*)F64 = R_AX; + if(rex.is32bits) { + *(uint32_t*)(uintptr_t)F32 = R_EAX; + } else { + if(rex.w) + *(uint64_t*)F64 = R_RAX; + else + *(uint16_t*)F64 = R_AX; + } break; case 0xA5: /* (REP) MOVSW */ |