Author: jhb
Date: Wed Oct 18 17:23:16 2017
New Revision: 324724
URL: https://svnweb.freebsd.org/changeset/base/324724

Log:
  Remove CPU_HAVEFPU.
  
  Instead, use a runtime decision to handle COP1 traps.  If floating point
  support is present in the current CPU, enable saving of the floating point
  state.  If support is not present, fail with SIGILL.
  
  Reviewed by:  imp, br
  Sponsored by: DARPA / AFRL
  Differential Revision:        https://reviews.freebsd.org/D12707

Modified:
  head/sys/conf/kern.mk
  head/sys/conf/options.mips
  head/sys/mips/mips/trap.c

Modified: head/sys/conf/kern.mk
==============================================================================
--- head/sys/conf/kern.mk       Wed Oct 18 15:48:26 2017        (r324723)
+++ head/sys/conf/kern.mk       Wed Oct 18 17:23:16 2017        (r324724)
@@ -184,9 +184,6 @@ CFLAGS.gcc+=        -mcall-aixdesc
 .if ${MACHINE_CPUARCH} == "mips"
 CFLAGS+=       -msoft-float
 INLINE_LIMIT?= 8000
-.if ${MACHINE_ARCH:Mmips*hf} != ""
-CFLAGS+= -DCPU_HAVEFPU
-.endif
 .endif
 
 #

Modified: head/sys/conf/options.mips
==============================================================================
--- head/sys/conf/options.mips  Wed Oct 18 15:48:26 2017        (r324723)
+++ head/sys/conf/options.mips  Wed Oct 18 17:23:16 2017        (r324724)
@@ -39,7 +39,6 @@ CPU_PROAPTIV  opt_global.h
 CPU_MIPS32     opt_global.h
 CPU_MIPS64     opt_global.h
 CPU_SENTRY5    opt_global.h
-CPU_HAVEFPU    opt_global.h
 CPU_SB1        opt_global.h
 CPU_CNMIPS     opt_global.h
 CPU_RMI                opt_global.h

Modified: head/sys/mips/mips/trap.c
==============================================================================
--- head/sys/mips/mips/trap.c   Wed Oct 18 15:48:26 2017        (r324723)
+++ head/sys/mips/mips/trap.c   Wed Oct 18 17:23:16 2017        (r324724)
@@ -75,6 +75,7 @@ __FBSDID("$FreeBSD$");
 
 #include <machine/trap.h>
 #include <machine/cpu.h>
+#include <machine/cpuinfo.h>
 #include <machine/pte.h>
 #include <machine/pmap.h>
 #include <machine/md_var.h>
@@ -970,12 +971,13 @@ dofault:
        case T_COP_UNUSABLE + T_USER:
                cop = (trapframe->cause & MIPS_CR_COP_ERR) >> 
MIPS_CR_COP_ERR_SHIFT;
                if (cop == 1) {
-#if !defined(CPU_HAVEFPU)
-               /* FP (COP1) instruction */
-                       log_illegal_instruction("COP1_UNUSABLE", trapframe);
-                       i = SIGILL;
-                       break;
-#else
+                       /* FP (COP1) instruction */
+                       if (cpuinfo.fpu_id == 0) {
+                               log_illegal_instruction("COP1_UNUSABLE",
+                                   trapframe);
+                               i = SIGILL;
+                               break;
+                       }
                        addr = trapframe->pc;
                        MipsSwitchFPState(PCPU_GET(fpcurthread), td->td_frame);
                        PCPU_SET(fpcurthread, td);
@@ -986,7 +988,6 @@ dofault:
 #endif
                        td->td_md.md_flags |= MDTD_FPUSED;
                        goto out;
-#endif
                }
 #ifdef CPU_CNMIPS
                else  if (cop == 2) {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to