Date: Wed, 18 Oct 2017 17:23:16 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r324724 - in head/sys: conf mips/mips Message-ID: <201710181723.v9IHNGQj055000@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201710181723.v9IHNGQj055000>