aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/common/crt.S
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/common/crt.S')
-rw-r--r--benchmarks/common/crt.S19
1 files changed, 17 insertions, 2 deletions
diff --git a/benchmarks/common/crt.S b/benchmarks/common/crt.S
index 19ff3b2..0c99c4a 100644
--- a/benchmarks/common/crt.S
+++ b/benchmarks/common/crt.S
@@ -67,8 +67,23 @@ _start:
li t0, MSTATUS_FS; csrs mstatus, t0 # enable FPU
li t0, MSTATUS_XS; csrs mstatus, t0 # enable accelerator
-#ifndef __riscv64
- li t0, MSTATUS_UA; csrc mstatus, t0 # disable RV64 for user mode
+ li t0, ((MSTATUS64_UA & ~(MSTATUS64_UA << 1)) * UA_RV64) >> 31
+ sll t0, t0, 31
+ li t1, ((MSTATUS64_SA & ~(MSTATUS64_SA << 1)) * UA_RV64) >> 31
+ sll t1, t1, 31
+#ifdef __riscv64
+ # make sure processor supports RV64 if this was compiled for RV64
+ bnez t0, 1f
+ li a0, 1234
+ j tohost_exit
+1:
+ # enable RV64 for user and supervisor
+ csrs mstatus, t0
+ csrs mstatus, t1
+#else
+ # disable RV64 for user and supervisor
+ csrc mstatus, t0
+ csrc mstatus, t1
#endif
csrr t0, mstatus