This add emulation for the isel instruction.

Signed-off-by: Matt Brown <matthew.brown....@gmail.com>
---
 arch/powerpc/lib/sstep.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index 3228783..bb0e301 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -1297,6 +1297,16 @@ int analyse_instr(struct instruction_op *op, struct 
pt_regs *regs,
                        regs->gpr[ra] = ~(regs->gpr[rd] & regs->gpr[rb]);
                        goto logical_done;
 
+               case 585:       /* isel */
+                       mb = (instr >> 6) & 0x1f; /* bc */
+                       val = (regs->ccr >> (mb + 32)) & 1;
+
+                       if (val)
+                               regs->gpr[rd] = regs->gpr[ra];
+                       else
+                               regs->gpr[rd] = regs->gpr[rb];
+                       goto logical_done;
+
                case 922:       /* extsh */
                        regs->gpr[ra] = (signed short) regs->gpr[rd];
                        goto logical_done;
-- 
2.9.3

Reply via email to