This adds emulation support for the following instruction:
   * Set Boolean (setb)

Signed-off-by: Sathvika Vasireddy <sathv...@linux.vnet.ibm.com>
---
 arch/powerpc/lib/sstep.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

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

Reply via email to