powerpc sstep: Add support for prefixed fixed-point arithmetic
authorJordan Niethe <jniethe5@gmail.com>
Wed, 6 May 2020 03:40:50 +0000 (13:40 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 May 2020 14:11:03 +0000 (00:11 +1000)
This adds emulation support for the following prefixed Fixed-Point
Arithmetic instructions:
  * Prefixed Add Immediate (paddi)

Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Reviewed-by: Balamuruhan S <bala24@linux.ibm.com>
[mpe: Squash in get_op() usage]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200506034050.24806-31-jniethe5@gmail.com
arch/powerpc/lib/sstep.c

index 6549baa..5abe982 100644 (file)
@@ -1338,6 +1338,26 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
 
        switch (opcode) {
 #ifdef __powerpc64__
+       case 1:
+               prefix_r = word & (1ul << 20);
+               ra = (suffix >> 16) & 0x1f;
+               rd = (suffix >> 21) & 0x1f;
+               op->reg = rd;
+               op->val = regs->gpr[rd];
+               suffixopcode = get_op(suffix);
+               prefixtype = (word >> 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(word, suffix, regs);
+                               goto compute_done;
+                       }
+               }
+               break;
        case 2:         /* tdi */
                if (rd & trap_compare(regs->gpr[ra], (short) word))
                        goto trap;