diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-04-03 22:14:53 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-04-03 22:14:53 -0700 |
commit | 5387d5a194d8e0afb9b62dca7b2e6cc6dec9fb1c (patch) | |
tree | f492682b35a9bf6ca28d18ca15d31e8d9ac12402 /p | |
parent | b79db7710e027de487986d03729f7e306c3cd94a (diff) | |
download | env-5387d5a194d8e0afb9b62dca7b2e6cc6dec9fb1c.zip env-5387d5a194d8e0afb9b62dca7b2e6cc6dec9fb1c.tar.gz env-5387d5a194d8e0afb9b62dca7b2e6cc6dec9fb1c.tar.bz2 |
Don't assume initial values of mstatus.ua/sa
Diffstat (limited to 'p')
-rw-r--r-- | p/riscv_test.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/p/riscv_test.h b/p/riscv_test.h index 123fde6..a94c81c 100644 --- a/p/riscv_test.h +++ b/p/riscv_test.h @@ -72,12 +72,21 @@ .endm #define RVTEST_32_ENABLE \ - li a0, MSTATUS64_UA >> 31; \ + li a0, (MSTATUS64_UA | MSTATUS64_SA) >> 31; \ slli a0, a0, 31; \ - csrc mstatus, a0; \ - li a0, MSTATUS64_SA >> 31; \ - slli a0, a0, 31; \ - csrc mstatus, a0; \ + csrc mstatus, a0 + +#ifdef __riscv64 +# define RVTEST_64_ENABLE \ + RVTEST_32_ENABLE; \ + li a0, UA_RV64 * (MSTATUS64_UA & ~(MSTATUS64_UA<<1)); \ + csrs mstatus, a0; \ + li a0, UA_RV64 * (MSTATUS64_SA & ~(MSTATUS64_SA<<1)); \ + csrs mstatus, a0 +#else +# define RVTEST_64_ENABLE +#endif + #define RVTEST_ENABLE_SUPERVISOR \ li a0, MSTATUS_PRV1 & (MSTATUS_PRV1 >> 1); \ @@ -176,6 +185,7 @@ tvec_machine: \ .globl _start; \ _start: \ RISCV_MULTICORE_DISABLE; \ + RVTEST_64_ENABLE; \ la t0, stvec_handler; \ beqz t0, skip_set_stvec; \ csrw stvec, t0; \ |