summaryrefslogtreecommitdiff
path: root/ports/risc-v32/gnu/src/tx_initialize_low_level.S
diff options
context:
space:
mode:
Diffstat (limited to 'ports/risc-v32/gnu/src/tx_initialize_low_level.S')
-rw-r--r--ports/risc-v32/gnu/src/tx_initialize_low_level.S9
1 files changed, 5 insertions, 4 deletions
diff --git a/ports/risc-v32/gnu/src/tx_initialize_low_level.S b/ports/risc-v32/gnu/src/tx_initialize_low_level.S
index 2940f215..ca97ba62 100644
--- a/ports/risc-v32/gnu/src/tx_initialize_low_level.S
+++ b/ports/risc-v32/gnu/src/tx_initialize_low_level.S
@@ -62,8 +62,7 @@ __tx_free_memory_start:
/**************************************************************************/
/* VOID _tx_initialize_low_level(VOID)
{ */
- .weak _tx_initialize_low_level
- .weak _tx_initialize_low_level
+ .weak _tx_initialize_low_level // Weak: a BSP definition overrides this default
_tx_initialize_low_level:
/* Save the system stack pointer. */
@@ -79,8 +78,10 @@ _tx_initialize_low_level:
la t1, _tx_initialize_unused_memory // Pickup address of unused memory
sw t0, 0(t1) // Save unused memory address
- /* Initialize floating point control/status register if floating point is enabled. */
-#ifdef __riscv_flen
+ /* Initialize floating point state if floating point is enabled. */
+#if defined(__riscv_float_abi_double)
+ li t0, 0x2000 // mstatus.FS = Initial (bits 14:13 = 01)
+ csrrs zero, mstatus, t0 // Enable the FP unit before touching fcsr
li t0, 0
csrw fcsr, t0 // Clear FP control/status register
#endif