SHA256
1
0
forked from pool/xen
xen/16995-x86_emulate-mul-fix.patch

36 lines
1.3 KiB
Diff

# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1202407244 0
# Node ID 445edf4089a3ccaca977665423e903b5300832cb
# Parent e6cf98edf0c573d86c59863c6b861f9a4d6350c3
x86_emulate: Fix MUL emulation.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
===================================================================
--- xen-3.2-testing.orig/xen/arch/x86/x86_emulate.c
+++ xen-3.2-testing/xen/arch/x86/x86_emulate.c
@@ -1547,11 +1547,14 @@ x86_emulate(
switch ( src.bytes )
{
case 1:
+ dst.val = (uint8_t)dst.val;
dst.val *= src.val;
if ( (uint8_t)dst.val != (uint16_t)dst.val )
_regs.eflags |= EFLG_OF|EFLG_CF;
+ dst.bytes = 2;
break;
case 2:
+ dst.val = (uint16_t)dst.val;
dst.val *= src.val;
if ( (uint16_t)dst.val != (uint32_t)dst.val )
_regs.eflags |= EFLG_OF|EFLG_CF;
@@ -1559,6 +1562,7 @@ x86_emulate(
break;
#ifdef __x86_64__
case 4:
+ dst.val = (uint32_t)dst.val;
dst.val *= src.val;
if ( (uint32_t)dst.val != dst.val )
_regs.eflags |= EFLG_OF|EFLG_CF;