diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 8e14ebb35b..a588435b5e 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -527,8 +527,8 @@ static inline void put_loop_count( if ( !amd_like(ctxt) && mode_64bit() && ad_bytes == 4 ) \ { \ _regs.r(cx) = 0; \ - if ( extend_si ) _regs.r(si) = _regs.esi; \ - if ( extend_di ) _regs.r(di) = _regs.edi; \ + if ( extend_si ) _regs.r(si) = (uint32_t)_regs.r(si); \ + if ( extend_di ) _regs.r(di) = (uint32_t)_regs.r(di); \ } \ goto complete_insn; \ } \ @@ -2029,7 +2029,7 @@ x86_emulate( switch ( op_bytes ) { case 2: _regs.ax = (int8_t)_regs.ax; break; /* cbw */ - case 4: _regs.r(ax) = (uint32_t)(int16_t)_regs.ax; break; /* cwde */ + case 4: _regs.r(ax) = (uint32_t)(int16_t)_regs.r(ax); break; /* cwde */ case 8: _regs.r(ax) = (int32_t)_regs.r(ax); break; /* cdqe */ } break;