summaryrefslogtreecommitdiffstats
path: root/sys/contrib/x86emu
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2014-06-11 20:31:41 +0000
committerdelphij <delphij@FreeBSD.org>2014-06-11 20:31:41 +0000
commitf0333bcbd4fd2e265bd780911c13c17acf253c53 (patch)
treeb2568e602b183a6f99102aaa9bb7ffaec07a5f35 /sys/contrib/x86emu
parentc131765bd2162e292b910ab27b6564913e045ab1 (diff)
downloadFreeBSD-src-f0333bcbd4fd2e265bd780911c13c17acf253c53.zip
FreeBSD-src-f0333bcbd4fd2e265bd780911c13c17acf253c53.tar.gz
Fix decoding of LEA when address-size prefix (67h) is present.
This is loosly based on Xorg changeset f57bc0e by Christian Zander. Submitted by: Wolf Ramovsky <wolf.ramovsky gmail.com> via core (peter) MFC after: 2 weeks
Diffstat (limited to 'sys/contrib/x86emu')
-rw-r--r--sys/contrib/x86emu/x86emu.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/contrib/x86emu/x86emu.c b/sys/contrib/x86emu/x86emu.c
index 45c6373..60c5412 100644
--- a/sys/contrib/x86emu/x86emu.c
+++ b/sys/contrib/x86emu/x86emu.c
@@ -2151,21 +2151,24 @@ x86emuOp_mov_word_RM_SR(struct x86emu *emu)
static void
x86emuOp_lea_word_R_M(struct x86emu *emu)
{
- uint16_t *srcreg;
uint32_t destoffset;
-/*
- * TODO: Need to handle address size prefix!
- *
- * lea eax,[eax+ebx*2] ??
- */
fetch_decode_modrm(emu);
if (emu->cur_mod == 3)
x86emu_halt_sys(emu);
- srcreg = decode_rh_word_register(emu);
destoffset = decode_rl_address(emu);
- *srcreg = (uint16_t) destoffset;
+ if (emu->x86.mode & SYSMODE_PREFIX_ADDR) {
+ uint32_t *srcreg;
+
+ srcreg = decode_rh_long_register(emu);
+ *srcreg = (uint32_t) destoffset;
+ } else {
+ uint16_t *srcreg;
+
+ srcreg = decode_rh_word_register(emu);
+ *srcreg = (uint16_t) destoffset;
+ }
}
/*
OpenPOWER on IntegriCloud