From: Sandipan Das Date: Fri, 22 Feb 2019 06:53:28 +0000 (+0530) Subject: powerpc: sstep: Add support for darn instruction X-Git-Tag: v5.1-rc1~11^2~30 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=a23987ef267a;p=linux-2.6-block.git powerpc: sstep: Add support for darn instruction This adds emulation support for the following integer instructions: * Deliver A Random Number (darn) As suggested by Michael, this uses a raw .long for specifying the instruction word when using inline assembly to retain compatibility with older binutils. Signed-off-by: Sandipan Das Signed-off-by: Michael Ellerman --- diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index 67e69ebd6c00..ab575e02f9b8 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c @@ -1728,6 +1728,28 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, (int) regs->gpr[rb]; goto arith_done; + case 755: /* darn */ + if (!cpu_has_feature(CPU_FTR_ARCH_300)) + return -1; + switch (ra & 0x3) { + case 0: + /* 32-bit conditioned */ + asm volatile(PPC_DARN(%0, 0) : "=r" (op->val)); + goto compute_done; + + case 1: + /* 64-bit conditioned */ + asm volatile(PPC_DARN(%0, 1) : "=r" (op->val)); + goto compute_done; + + case 2: + /* 64-bit raw */ + asm volatile(PPC_DARN(%0, 2) : "=r" (op->val)); + goto compute_done; + } + + return -1; + /* * Logical instructions