svn commit: r324724 - in head/sys: conf mips/mips

John Baldwin jhb at FreeBSD.org
Wed Oct 18 17:23:17 UTC 2017


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) {


More information about the svn-src-head mailing list