On Wed, 7 Sept 2022 at 00:14, Sean Christopherson <seanjc@xxxxxxxxxx> wrote: > > "KVM: x86:" for the shortlog. > > On Tue, Sep 06, 2022, Liam Ni wrote: > > From: Liam Ni <zhiguangni01@xxxxxxxxx> > > > > If the condition is met, > > Please describe this specific code change, "If the condition is met" is extremely > generic and doesn't help the reader understand what change is being made. > > > reduce the execution of one instruction. > > This is highly speculative, e.g. clang will generate identical output since it's > trivial for the compiler to observe that ctxt->modrm_reg doesn't need to be read. > > And similar to the above "If the condition is met", the shortlog is too generic > even if it were 100% accurate. > > I do think this change is a net positive, but it's beneficial only in making the > code easier to read. Shaving a single cheap instruction in a relatively slow path > isn't sufficient justification even if the compiler isn't clever enough to optimize > away the load in the first place. > > E.g. something like: > > KVM: x86: Clean up ModR/M "reg" initialization in reg op decoding > > 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@xxxxxxxxx> > > --- > > arch/x86/kvm/emulate.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > > index f8382abe22ff..ebb95f3f9862 100644 > > --- a/arch/x86/kvm/emulate.c > > +++ b/arch/x86/kvm/emulate.c > > @@ -1139,10 +1139,12 @@ 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)) > > reg = (ctxt->b & 7) | ((ctxt->rex_prefix & 1) << 3); > > + else > > + reg = ctxt->modrm_reg; > > I'd prefer to write this as: > > unsigned int reg; > > if (ctxt->d & ModRM) > reg = ctxt->modrm_reg; > else > reg = (ctxt->b & 7) | ((ctxt->rex_prefix & 1) << 3); > > so that "is ModRM" check is immediately followed by "get ModRM". > > > > > if (ctxt->d & Sse) { > > op->type = OP_XMM; > > -- > > 2.25.1 > > > Thanks for the suggestion, I will submit a new patch V2.