This adds emulation support for the following prefixed Fixed-Point
Arithmetic instructions:
  * Prefixed Add Immediate (paddi)

Signed-off-by: Jordan Niethe <jniet...@gmail.com>
---
v3: Since we moved the prefixed loads/stores into the load/store switch
statement it no longer makes sense to have paddi in there, so move it
out.
---
 arch/powerpc/lib/sstep.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index 8e4ec953e279..f2010a3e1e06 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -1331,6 +1331,26 @@ int analyse_instr(struct instruction_op *op, const 
struct pt_regs *regs,
 
        switch (opcode) {
 #ifdef __powerpc64__
+       case 1:
+               prefix_r = instr & (1ul << 20);
+               ra = (suffix >> 16) & 0x1f;
+               rd = (suffix >> 21) & 0x1f;
+               op->reg = rd;
+               op->val = regs->gpr[rd];
+               suffixopcode = suffix >> 26;
+               prefixtype = (instr >> 24) & 0x3;
+               switch (prefixtype) {
+               case 2:
+                       if (prefix_r && ra)
+                               return 0;
+                       switch (suffixopcode) {
+                       case 14:        /* paddi */
+                               op->type = COMPUTE | PREFIXED;
+                               op->val = mlsd_8lsd_ea(instr, suffix, regs);
+                               goto compute_done;
+                       }
+               }
+               break;
        case 2:         /* tdi */
                if (rd & trap_compare(regs->gpr[ra], (short) instr))
                        goto trap;
-- 
2.17.1

Reply via email to