Subject: Re: [PATCH v2 1/2] powerpc/sstep: Add emulation support for‘setb’ instruction

From: "Naveen N. Rao" <[email-masked]>
Date: Mon, 17 May 2021 19:04:02 +0530

Sathvika Vasireddy wrote:
> This adds emulation support for the following instruction:
>    * Set Boolean (setb)
> 
> Signed-off-by: Sathvika Vasireddy <[email-masked]>
> ---
>  arch/powerpc/lib/sstep.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)

Tested-by: Naveen N. Rao <[email-masked]>

> 
> diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
> index 45bda2520755..aee42bcc775b 100644
> --- a/arch/powerpc/lib/sstep.c
> +++ b/arch/powerpc/lib/sstep.c
> @@ -1700,6 +1700,28 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
>  			op->val = regs->ccr & imm;
>  			goto compute_done;
>  
> +		case 128:	/* setb */
> +			if (!cpu_has_feature(CPU_FTR_ARCH_300))
> +				goto unknown_opcode;
> +			/*
> +			 * 'ra' encodes the CR field number (bfa) in the top 3 bits.
> +			 * Since each CR field is 4 bits,
> +			 * we can simply mask off the bottom two bits (bfa * 4)
> +			 * to yield the first bit in the CR field.
> +			 */
> +			ra = ra & ~0x3;
> +			/* 'val' stores bits of the CR field (bfa) */
> +			val = regs->ccr >> (CR0_SHIFT - ra);
> +			/* checks if the LT bit of CR field (bfa) is set */
> +			if (val & 8)
> +				op->val = -1;
> +			/* checks if the GT bit of CR field (bfa) is set */
> +			else if (val & 4)
> +				op->val = 1;
> +			else
> +				op->val = 0;
> +			goto compute_done;
> +
>  		case 144:	/* mtcrf */
>  			op->type = COMPUTE + SETCC;
>  			imm = 0xf0000000UL;
> -- 
> 2.16.4
> 
>