From e0f235fc5344ccf79fa0e5bdd64591aef3814799 Mon Sep 17 00:00:00 2001 From: Scott Johnson Date: Wed, 7 Dec 2016 18:01:26 -0800 Subject: Initialize FPU properly * Only attempts if FPU actually implemented in design * Also initializes rounding modes, which are undefined at reset --- bsp/env/freedom-e300-hifive1/init.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'bsp/env') diff --git a/bsp/env/freedom-e300-hifive1/init.c b/bsp/env/freedom-e300-hifive1/init.c index be76f90..343f071 100644 --- a/bsp/env/freedom-e300-hifive1/init.c +++ b/bsp/env/freedom-e300-hifive1/init.c @@ -182,7 +182,10 @@ void _init() printf("core freq at %d Hz\n", get_cpu_freq()); write_csr(mtvec, &handle_trap); - write_csr(mstatus, MSTATUS_FS); // enable FPU + if (read_csr(misa) & (1 << ('F' - 'A'))) { // if F extension is present + write_csr(mstatus, MSTATUS_FS); // allow FPU instructions without trapping + write_csr(fcsr, 0); // initialize rounding mode, undefined at reset + } _exit(main(0, NULL)); } -- cgit v1.2.3