diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-05-21 17:06:42 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-05-21 17:06:42 +0200 |
| commit | 77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8 (patch) | |
| tree | 2b9c403195f9110da0662a6e8eb3bf46614514d6 | |
| parent | 1c7a7c98954bfd88c250a879bc8230333a0f4f8f (diff) | |
| download | box64-77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8.tar.gz box64-77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8.zip | |
[INTERP] Added unaligned path for F0 FF /1 32bits opcode
| -rw-r--r-- | src/emu/x64runf0.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/emu/x64runf0.c b/src/emu/x64runf0.c index 26221789..d86dfce3 100644 --- a/src/emu/x64runf0.c +++ b/src/emu/x64runf0.c @@ -1311,9 +1311,20 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) tmp64u = native_lock_read_dd(ED); } while(native_lock_write_dd(ED, dec64(emu, tmp64u))); else { - do { - tmp32u = native_lock_read_d(ED); - } while(native_lock_write_d(ED, dec32(emu, tmp32u))); + if((uintptr_t)ED&3) { + //meh. + do { + tmp32u = ED->dword[0]; + tmp32u &=~0xff; + tmp32u |= native_lock_read_b(ED); + tmp32u = dec32(emu, tmp32u); + } while(native_lock_write_b(ED, tmp32u&0xff)); + ED->dword[0] = tmp32u; + } else { + do { + tmp32u = native_lock_read_d(ED); + } while(native_lock_write_d(ED, dec32(emu, tmp32u))); + } if(MODREG) ED->dword[1] = 0; } #else |