mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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:
1 parent
7bb084c23b
commit
f5b9217531
1 file changed
+2
-4
@@ -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:
|
||||
|
||||