x86emul: simplify {,i}{mul,div} fix

Commit 75066cd4ea ("x86emul: fix {,i}mul and {,i}div") can be had with
less code: Simply do the destination register override depending on
DstEax being in effect (the four other ModRM.reg encoded operations of
these two opcodes all use DstMem).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2016-12-08 12:22:33 +01:00
1 parent 7bb084c23b
commit f5b9217531
1 file changed
+2 -4
+2 -4
View File
@@ -4104,6 +4104,8 @@ x86_emulate(
break;
case 0xf6 ... 0xf7: /* Grp3 */
if ( (d & DstMask) == DstEax )
dst.reg = (unsigned long *)&_regs.eax;
switch ( modrm_reg & 7 )
{
unsigned long u[2], v;
@@ -4118,7 +4120,6 @@ x86_emulate(
emulate_1op("neg", dst, _regs.eflags);
break;
case 4: /* mul */
dst.reg = (unsigned long *)&_regs.eax;
_regs.eflags &= ~(EFLG_OF|EFLG_CF);
switch ( dst.bytes )
{
@@ -4156,7 +4157,6 @@ x86_emulate(
}
break;
case 5: /* imul */
dst.reg = (unsigned long *)&_regs.eax;
imul:
_regs.eflags &= ~(EFLG_OF|EFLG_CF);
switch ( dst.bytes )
@@ -4198,7 +4198,6 @@ x86_emulate(
}
break;
case 6: /* div */
dst.reg = (unsigned long *)&_regs.eax;
switch ( src.bytes )
{
case 1:
@@ -4244,7 +4243,6 @@ x86_emulate(
}
break;
case 7: /* idiv */
dst.reg = (unsigned long *)&_regs.eax;
switch ( src.bytes )
{
case 1:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.