From: Keir Fraser Date: Mon, 18 Feb 2008 14:21:11 +0000 (+0000) Subject: x86_emulate: Fix MUL emulation. X-Git-Tag: 3.1.4-rc1~43 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c1f912a8097e0436a694d756e48cf68c61e0ca1e;p=people%2Fvhanquez%2Fxen.git x86_emulate: Fix MUL emulation. Signed-off-by: Keir Fraser xen-unstable changeset: 16995:445edf4089a3ccaca977665423e903b5300832cb xen-unstable date: Thu Feb 07 18:00:44 2008 +0000 --- diff --git a/xen/arch/x86/x86_emulate.c b/xen/arch/x86/x86_emulate.c index 84480e01c..3ec3e2e84 100644 --- a/xen/arch/x86/x86_emulate.c +++ b/xen/arch/x86/x86_emulate.c @@ -1383,11 +1383,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; @@ -1395,6 +1398,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;