aboutsummaryrefslogtreecommitdiff
path: root/pk/minit.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-03-31 01:44:49 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-03-31 01:44:49 -0700
commite554f30be8f77a08c7da2d2678aac640e664cc44 (patch)
tree406ffba524043d1795eeb7586a312d3290e9d30b /pk/minit.c
parent91058db5a6a5d72631981b00788bc5c906bf5f14 (diff)
downloadpk-e554f30be8f77a08c7da2d2678aac640e664cc44.zip
pk-e554f30be8f77a08c7da2d2678aac640e664cc44.tar.gz
pk-e554f30be8f77a08c7da2d2678aac640e664cc44.tar.bz2
Don't rely on mstatus.fs to determine FPU presence
Diffstat (limited to 'pk/minit.c')
-rw-r--r--pk/minit.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/pk/minit.c b/pk/minit.c
index abaa5e1..01625bd 100644
--- a/pk/minit.c
+++ b/pk/minit.c
@@ -49,13 +49,17 @@ static void hart_init()
static void fp_init()
{
-#ifdef __riscv_hard_float
kassert(read_csr(mstatus) & MSTATUS_FS);
- SET_FCSR(0);
+ extern int test_fpu_presence();
+
+#ifdef __riscv_hard_float
+ if (!test_fpu_presence())
+ panic("FPU not found; recompile pk with -msoft-float");
for (int i = 0; i < 32; i++)
init_fp_reg(i);
#else
- kassert(!(read_csr(mstatus) & MSTATUS_FS));
+ if (test_fpu_presence())
+ panic("FPU unexpectedly found; recompile pk without -msoft-float");
#endif
}