OSDN Git Service

KVM:x86: Clean up ModR/M "reg" initialization in reg op decoding
authorLiam Ni <zhiguangni01@gmail.com>
Thu, 8 Sep 2022 14:12:10 +0000 (22:12 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 26 Sep 2022 16:02:34 +0000 (12:02 -0400)
Refactor decode_register_operand() to get the ModR/M register if and
only if the instruction uses a ModR/M encoding to make it more obvious
how the register operand is retrieved.

Signed-off-by: Liam Ni <zhiguangni01@gmail.com>
Link: https://lore.kernel.org/r/20220908141210.1375828-1-zhiguangni01@zhaoxin.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/emulate.c

index 08dbcff..9367aaa 100644 (file)
@@ -1137,9 +1137,11 @@ static int em_fnstsw(struct x86_emulate_ctxt *ctxt)
 static void decode_register_operand(struct x86_emulate_ctxt *ctxt,
                                    struct operand *op)
 {
-       unsigned reg = ctxt->modrm_reg;
+       unsigned int reg;
 
-       if (!(ctxt->d & ModRM))
+       if (ctxt->d & ModRM)
+               reg = ctxt->modrm_reg;
+       else
                reg = (ctxt->b & 7) | ((ctxt->rex_prefix & 1) << 3);
 
        if (ctxt->d & Sse) {