svn commit: r327790 - head/sys/mips/mips
John Baldwin
jhb at FreeBSD.org
Wed Jan 10 21:08:45 UTC 2018
Author: jhb
Date: Wed Jan 10 21:08:43 2018
New Revision: 327790
URL: https://svnweb.freebsd.org/changeset/base/327790
Log:
Set the 'FR' bit in the status register for N32 kernels.
This permits N32 hard-float binaries to use 64-bit floating point
registers (which is what N32 binaries expect) matching the N64 ABI.
Reviewed by: imp, jmallett
Sponsored by: DARPA / AFRL
Differential Revision: https://reviews.freebsd.org/D13830
Modified:
head/sys/mips/mips/exception.S
head/sys/mips/mips/locore.S
head/sys/mips/mips/swtch.S
head/sys/mips/mips/trap.c
Modified: head/sys/mips/mips/exception.S
==============================================================================
--- head/sys/mips/mips/exception.S Wed Jan 10 21:05:46 2018 (r327789)
+++ head/sys/mips/mips/exception.S Wed Jan 10 21:08:43 2018 (r327790)
@@ -1110,7 +1110,7 @@ NESTED(MipsFPTrap, CALLFRAME_SIZ, ra)
REG_S ra, CALLFRAME_RA(sp)
.mask 0x80000000, (CALLFRAME_RA - CALLFRAME_SIZ)
-#if defined(__mips_n64)
+#if defined(__mips_n32) || defined(__mips_n64)
or t1, t0, MIPS_SR_COP_1_BIT | MIPS_SR_FR
#else
or t1, t0, MIPS_SR_COP_1_BIT
Modified: head/sys/mips/mips/locore.S
==============================================================================
--- head/sys/mips/mips/locore.S Wed Jan 10 21:05:46 2018 (r327789)
+++ head/sys/mips/mips/locore.S Wed Jan 10 21:08:43 2018 (r327790)
@@ -117,8 +117,11 @@ VECTOR(_locore, unknown)
* Enable FPU
*/
li t1, MIPS_SR_COP_1_BIT
+#if defined(__mips_n32) || defined(__mips_n64)
+ or t1, MIPS_SR_FR
+#endif
#ifdef __mips_n64
- or t1, MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX | MIPS_SR_FR
+ or t1, MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX
#endif
#endif
/*
Modified: head/sys/mips/mips/swtch.S
==============================================================================
--- head/sys/mips/mips/swtch.S Wed Jan 10 21:05:46 2018 (r327789)
+++ head/sys/mips/mips/swtch.S Wed Jan 10 21:08:43 2018 (r327790)
@@ -416,7 +416,7 @@ LEAF(MipsSwitchFPState)
.set hardfloat
mfc0 t1, MIPS_COP_0_STATUS # Save old SR
HAZARD_DELAY
-#if defined(__mips_n64)
+#if defined(__mips_n32) || defined(__mips_n64)
or t0, t1, MIPS_SR_COP_1_BIT | MIPS_SR_FR # enable the coprocessor
#else
or t0, t1, MIPS_SR_COP_1_BIT # enable the coprocessor
@@ -546,7 +546,7 @@ LEAF(MipsFPID)
.set hardfloat
mfc0 t1, MIPS_COP_0_STATUS # Save the status register.
HAZARD_DELAY
-#if defined(__mips_n64)
+#if defined(__mips_n32) || defined(__mips_n64)
or t0, t1, MIPS_SR_COP_1_BIT | MIPS_SR_FR
#else
or t0, t1, MIPS_SR_COP_1_BIT
@@ -585,7 +585,7 @@ LEAF(MipsSaveCurFPState)
PTR_L a0, TD_PCB(a0) # get pointer to pcb for thread
mfc0 t1, MIPS_COP_0_STATUS # Disable interrupts and
HAZARD_DELAY
-#if defined(__mips_n64)
+#if defined(__mips_n32) || defined(__mips_n64)
or t0, t1, MIPS_SR_COP_1_BIT | MIPS_SR_FR # enable the coprocessor
#else
or t0, t1, MIPS_SR_COP_1_BIT # enable the coprocessor
Modified: head/sys/mips/mips/trap.c
==============================================================================
--- head/sys/mips/mips/trap.c Wed Jan 10 21:05:46 2018 (r327789)
+++ head/sys/mips/mips/trap.c Wed Jan 10 21:08:43 2018 (r327790)
@@ -983,7 +983,7 @@ dofault:
addr = trapframe->pc;
MipsSwitchFPState(PCPU_GET(fpcurthread), td->td_frame);
PCPU_SET(fpcurthread, td);
-#if defined(__mips_n64)
+#if defined(__mips_n32) || defined(__mips_n64)
td->td_frame->sr |= MIPS_SR_COP_1_BIT | MIPS_SR_FR;
#else
td->td_frame->sr |= MIPS_SR_COP_1_BIT;
More information about the svn-src-all
mailing list