Sandipan Das <sandi...@linux.ibm.com> writes: > On 03/02/21 3:19 pm, Naveen N. Rao wrote: >> [...] >> >> Wouldn't it be easier to just do the below at the end? Or, am I missing >> something? >> >> diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c >> index ede093e9623472..a2d726d2a5e9d1 100644 >> --- a/arch/powerpc/lib/sstep.c >> +++ b/arch/powerpc/lib/sstep.c >> @@ -2980,6 +2980,10 @@ int analyse_instr(struct instruction_op *op, const >> struct pt_regs *regs, >> } >> #endif /* CONFIG_VSX */ >> >> + if (GETTYPE(op->type) == LOAD && (op->type & UPDATE) && >> + (ra == 0 || ra == rd)) >> + goto unknown_opcode; >> + >> return 0; >> >> logical_done: >> > > This looks good? > > diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c > index e96cff845ef7..a9c149bfd2f5 100644 > --- a/arch/powerpc/lib/sstep.c > +++ b/arch/powerpc/lib/sstep.c > @@ -3017,6 +3017,21 @@ int analyse_instr(struct instruction_op *op, const > struct pt_regs *regs, > > } > > + if (op->type & UPDATE) { > + if (ra == rd && GETTYPE(op->type) == LOAD) > + goto unknown_opcode; > + else if (ra == 0) > + switch(GETTYPE(op->type)) { > + case LOAD: > + case STORE: > +#ifdef CONFIG_PPC_FPU > + case LOAD_FP: > + case STORE_FP: > +#endif
Why make it conditional? cheers