|
@@ -966,6 +966,19 @@ int analyse_instr(struct instruction_op *op, struct pt_regs *regs,
|
|
#endif
|
|
#endif
|
|
|
|
|
|
case 19: /* mfcr */
|
|
case 19: /* mfcr */
|
|
|
|
+ if ((instr >> 20) & 1) {
|
|
|
|
+ imm = 0xf0000000UL;
|
|
|
|
+ for (sh = 0; sh < 8; ++sh) {
|
|
|
|
+ if (instr & (0x80000 >> sh)) {
|
|
|
|
+ regs->gpr[rd] = regs->ccr & imm;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ imm >>= 4;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ goto instr_done;
|
|
|
|
+ }
|
|
|
|
+
|
|
regs->gpr[rd] = regs->ccr;
|
|
regs->gpr[rd] = regs->ccr;
|
|
regs->gpr[rd] &= 0xffffffffUL;
|
|
regs->gpr[rd] &= 0xffffffffUL;
|
|
goto instr_done;
|
|
goto instr_done;
|