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
This commit is contained in:
Xin LI 2014-06-11 20:31:41 +00:00
parent 5097605520
commit 79d183e85f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=267373

View File

@ -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;
}
}
/*