#endif
 }
 
+#define PPC_INST_STR_LEN sizeof("00000000 00000000")
+
+static inline char *__ppc_inst_as_str(char str[PPC_INST_STR_LEN], struct ppc_inst x)
+{
+       if (ppc_inst_prefixed(x))
+               sprintf(str, "%08x %08x", ppc_inst_val(x), ppc_inst_suffix(x));
+       else
+               sprintf(str, "%08x", ppc_inst_val(x));
+
+       return str;
+}
+
+#define ppc_inst_as_str(x)             \
+({                                     \
+       char __str[PPC_INST_STR_LEN];   \
+       __ppc_inst_as_str(__str, x);    \
+       __str;                          \
+})
+
 int probe_user_read_inst(struct ppc_inst *inst,
                         struct ppc_inst __user *nip);
 
 
 
        /* Make sure it is what we expect it to be */
        if (!ppc_inst_equal(replaced, old)) {
-               pr_err("%p: replaced (%#x) != old (%#x)",
-               (void *)ip, ppc_inst_val(replaced), ppc_inst_val(old));
+               pr_err("%p: replaced (%s) != old (%s)",
+               (void *)ip, ppc_inst_as_str(replaced), ppc_inst_as_str(old));
                return -EINVAL;
        }
 
 
        /* Make sure that that this is still a 24bit jump */
        if (!is_bl_op(op)) {
-               pr_err("Not expected bl: opcode is %x\n", ppc_inst_val(op));
+               pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
                return -EINVAL;
        }
 
        /* We expect either a mflr r0, or a std r0, LRSAVE(r1) */
        if (!ppc_inst_equal(op, ppc_inst(PPC_INST_MFLR)) &&
            !ppc_inst_equal(op, ppc_inst(PPC_INST_STD_LR))) {
-               pr_err("Unexpected instruction %08x around bl _mcount\n",
-                      ppc_inst_val(op));
+               pr_err("Unexpected instruction %s around bl _mcount\n",
+                      ppc_inst_as_str(op));
                return -EINVAL;
        }
 #else
        }
 
        if (!ppc_inst_equal(op,  ppc_inst(PPC_INST_LD_TOC))) {
-               pr_err("Expected %08x found %08x\n", PPC_INST_LD_TOC, ppc_inst_val(op));
+               pr_err("Expected %08x found %s\n", PPC_INST_LD_TOC, ppc_inst_as_str(op));
                return -EINVAL;
        }
 #endif /* CONFIG_MPROFILE_KERNEL */
 
        /* Make sure that that this is still a 24bit jump */
        if (!is_bl_op(op)) {
-               pr_err("Not expected bl: opcode is %x\n", ppc_inst_val(op));
+               pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
                return -EINVAL;
        }
 
 
        /* Make sure that that this is still a 24bit jump */
        if (!is_bl_op(op)) {
-               pr_err("Not expected bl: opcode is %x\n", ppc_inst_val(op));
+               pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
                return -EINVAL;
        }
 
                return -EFAULT;
 
        if (!expected_nop_sequence(ip, op[0], op[1])) {
-               pr_err("Unexpected call sequence at %p: %x %x\n",
-               ip, ppc_inst_val(op[0]), ppc_inst_val(op[1]));
+               pr_err("Unexpected call sequence at %p: %s %s\n",
+               ip, ppc_inst_as_str(op[0]), ppc_inst_as_str(op[1]));
                return -EINVAL;
        }
 
 
        /* It should be pointing to a nop */
        if (!ppc_inst_equal(op,  ppc_inst(PPC_INST_NOP))) {
-               pr_err("Expected NOP but have %x\n", ppc_inst_val(op));
+               pr_err("Expected NOP but have %s\n", ppc_inst_as_str(op));
                return -EINVAL;
        }
 
        }
 
        if (!ppc_inst_equal(op, ppc_inst(PPC_INST_NOP))) {
-               pr_err("Unexpected call sequence at %p: %x\n", ip, ppc_inst_val(op));
+               pr_err("Unexpected call sequence at %p: %s\n", ip, ppc_inst_as_str(op));
                return -EINVAL;
        }
 
 
        /* Make sure that that this is still a 24bit jump */
        if (!is_bl_op(op)) {
-               pr_err("Not expected bl: opcode is %x\n", ppc_inst_val(op));
+               pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
                return -EINVAL;
        }
 
 
 
        if (analyse_instr(&op, regs, instr) != 1 ||
            GETTYPE(op.type) != COMPUTE) {
-               pr_info("emulation failed, instruction = 0x%08x\n", ppc_inst_val(instr));
+               pr_info("execution failed, instruction = %s\n", ppc_inst_as_str(instr));
                return -EFAULT;
        }
 
        /* Patch the NOP with the actual instruction */
        patch_instruction_site(&patch__exec_instr, instr);
        if (exec_instr(regs)) {
-               pr_info("execution failed, instruction = 0x%08x\n", ppc_inst_val(instr));
+               pr_info("execution failed, instruction = %s\n", ppc_inst_as_str(instr));
                return -EFAULT;
        }