|
@@ -1025,6 +1025,24 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
|
|
|
|
|
return;
|
|
|
|
|
|
+ case 3:
|
|
|
+ /*
|
|
|
+ * Old (MIPS I and MIPS II) processors will set this code
|
|
|
+ * for COP1X opcode instructions that replaced the original
|
|
|
+ * COP3 space. We don't limit COP1 space instructions in
|
|
|
+ * the emulator according to the CPU ISA, so we want to
|
|
|
+ * treat COP1X instructions consistently regardless of which
|
|
|
+ * code the CPU chose. Therefore we redirect this trap to
|
|
|
+ * the FP emulator too.
|
|
|
+ *
|
|
|
+ * Then some newer FPU-less processors use this code
|
|
|
+ * erroneously too, so they are covered by this choice
|
|
|
+ * as well.
|
|
|
+ */
|
|
|
+ if (raw_cpu_has_fpu)
|
|
|
+ break;
|
|
|
+ /* Fall through. */
|
|
|
+
|
|
|
case 1:
|
|
|
if (used_math()) /* Using the FPU again. */
|
|
|
own_fpu(1);
|
|
@@ -1048,9 +1066,6 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
|
|
case 2:
|
|
|
raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs);
|
|
|
return;
|
|
|
-
|
|
|
- case 3:
|
|
|
- break;
|
|
|
}
|
|
|
|
|
|
force_sig(SIGILL, current);
|