diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-02-07 18:00:44 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-02-07 18:00:44 +0000 |
commit | 785137cb6b2ebfa54bfb6af5d985ac10fa8a4560 (patch) | |
tree | 35f060daebb98e1ab886044a2d73b17cab87c046 /xen/arch/x86/x86_emulate.c | |
parent | 46bb4b6f02515c2ded81040c2eeb53d80047749e (diff) | |
download | xen-785137cb6b2ebfa54bfb6af5d985ac10fa8a4560.tar.gz xen-785137cb6b2ebfa54bfb6af5d985ac10fa8a4560.tar.bz2 xen-785137cb6b2ebfa54bfb6af5d985ac10fa8a4560.zip |
x86_emulate: Fix MUL emulation.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/x86_emulate.c')
-rw-r--r-- | xen/arch/x86/x86_emulate.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/xen/arch/x86/x86_emulate.c b/xen/arch/x86/x86_emulate.c index ee0118a7b3..c111f1ca36 100644 --- a/xen/arch/x86/x86_emulate.c +++ b/xen/arch/x86/x86_emulate.c @@ -1710,11 +1710,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; @@ -1722,6 +1725,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; |