aboutsummaryrefslogtreecommitdiff
path: root/pk/minit.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-03-14 02:06:21 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-03-14 02:06:21 -0700
commit40668501fa8d52054f5678db4e6dd32b5ed7fe15 (patch)
tree3e3815cca73f9afd872e251e4ab206f3badcf425 /pk/minit.c
parent438823e1308b219aa7daf11cf86e3028e9b8667d (diff)
downloadpk-40668501fa8d52054f5678db4e6dd32b5ed7fe15.zip
pk-40668501fa8d52054f5678db4e6dd32b5ed7fe15.tar.gz
pk-40668501fa8d52054f5678db4e6dd32b5ed7fe15.tar.bz2
Fix some bugs in FP emulation
Diffstat (limited to 'pk/minit.c')
-rw-r--r--pk/minit.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/pk/minit.c b/pk/minit.c
index a8a449f..abaa5e1 100644
--- a/pk/minit.c
+++ b/pk/minit.c
@@ -47,6 +47,18 @@ static void hart_init()
panic("TODO: SMP support");
}
+static void fp_init()
+{
+#ifdef __riscv_hard_float
+ kassert(read_csr(mstatus) & MSTATUS_FS);
+ SET_FCSR(0);
+ for (int i = 0; i < 32; i++)
+ init_fp_reg(i);
+#else
+ kassert(!(read_csr(mstatus) & MSTATUS_FS));
+#endif
+}
+
void machine_init()
{
file_init();
@@ -57,6 +69,7 @@ void machine_init()
mstatus_init();
memory_init();
hart_init();
+ fp_init();
vm_init();
boot_loader(args);
}