[PATCH v2 1/3] powerpc: sstep: Fix load and update emulation
Michael Ellerman
mpe at ellerman.id.au
Thu Feb 4 11:53:12 AEDT 2021
Sandipan Das <sandipan at 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
More information about the Linuxppc-dev
mailing list