KVM: x86 emulator: Use a register for ____emulate_2op() destination
authorAvi Kivity <avi@redhat.com>
Mon, 16 Aug 2010 14:50:56 +0000 (17:50 +0300)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:51:11 +0000 (10:51 +0200)
Most x86 two operand instructions allow the destination to be a memory operand,
but IMUL (for example) requires that the destination be a register.  Change
____emulate_2op() to take a register for both source and destination so we
can invoke IMUL.

Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/emulate.c

index 7818c91deb6351eb192fb34a647213d607b85be0..81b0f884896047bc435cd74fa665987660942bc9 100644 (file)
@@ -200,7 +200,7 @@ struct group_dual {
                        _PRE_EFLAGS("0", "4", "2")                      \
                        _op _suffix " %"_x"3,%1; "                      \
                        _POST_EFLAGS("0", "4", "2")                     \
-                       : "=m" (_eflags), "=m" (*(_dsttype*)&(_dst).val),\
+                       : "=m" (_eflags), "+q" (*(_dsttype*)&(_dst).val),\
                          "=&r" (_tmp)                                  \
                        : _y ((_src).val), "i" (EFLAGS_MASK));          \
        } while (0)