diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run66.c | 24 | ||||
| -rw-r--r-- | src/tools/my_cpuid.c | 6 |
2 files changed, 20 insertions, 10 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 */ diff --git a/src/tools/my_cpuid.c b/src/tools/my_cpuid.c index 5454e5c4..c80a5312 100644 --- a/src/tools/my_cpuid.c +++ b/src/tools/my_cpuid.c @@ -146,8 +146,10 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u) R_EDX = 0; break; case 0x7: // extended bits... - if(R_ECX==1) R_EAX = 0; // Bit 5 is avx512_bf16 - else R_EAX = R_ECX = R_EBX = R_EDX = 0; // TODO + if(R_ECX==1) { + R_EAX = 0; // Bit 5 is avx512_bf16 + } else + R_EAX = R_ECX = R_EBX = R_EDX = 0; // TODO break; case 0xB: // Extended Topology Enumeration Leaf //TODO! |