#include "riscv_test.h"
#include "test_macros.h"
-RVTEST_RV32S
-RVTEST_CODE_BEGIN
+#undef RVTEST_RV64S
+#define RVTEST_RV64S RVTEST_RV32S
- la t0, evec
- csrw evec, t0
-
- csrr t0, count
- add t0, t0, 1000
- csrw compare, t0
-
- li t1, 1<<23
- csrs status, t1 # turn on timer IRQ 7
- csrsi status, 4 # enable interrupts
-
- li TESTNUM, 2
- li a0,10000
-loop:
- div x0, x0, x0
- addi a0, a0, -1
- bne a0, x0, loop
- j fail # assumption is that you can't divide in one cycle
-
- TEST_PASSFAIL
-
-evec:
- li TESTNUM, 3
- li t1, 0x80000000|IRQ_TIMER
- csrr t0, cause
- bne t0, t1, fail
- j pass
-
-RVTEST_CODE_END
-
- .data
-RVTEST_DATA_BEGIN
-
- TEST_DATA
-
-RVTEST_DATA_END
+#include "../rv64si/timer.S"
srl s0,s0,1
sll s2,s2,9
or s0,s2,s0
- sll s0,s0,54
- srl s0,s0,54
+ and s0, s0, 0x3FF
add s4, s4, 1
bltu s8, s9, 1b
TEST_PASSFAIL
handler:
- csrr t0, cause
- li t1, 0x8000000000000007
li TESTNUM, 3
- bne t0, t1, fail
+ csrr t0, cause
+ bgez t0, fail
+
+ sll t0, t0, 1
+ addi t0, t0, -2*IRQ_TIMER
+ bnez t0, fail
csrr t0, count
addi t0, t0, 999