aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-03-12 17:39:44 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-03-12 17:39:44 -0700
commit7864b6441aad0bca337eb70fcd12394cc68bddc6 (patch)
tree04e9cc542d46b016706e1761100db94c2fc75b9c
parentd7dba3cbb448b2deeefa54653c7fcaab7e22940f (diff)
downloadriscv-tests-7864b6441aad0bca337eb70fcd12394cc68bddc6.zip
riscv-tests-7864b6441aad0bca337eb70fcd12394cc68bddc6.tar.gz
riscv-tests-7864b6441aad0bca337eb70fcd12394cc68bddc6.tar.bz2
Update to new privileged spec
-rw-r--r--benchmarks/common/crt.S69
-rw-r--r--benchmarks/common/syscalls.c2
-rw-r--r--benchmarks/common/test.ld7
m---------env10
-rw-r--r--isa/Makefile4
-rw-r--r--isa/macros/scalar/test_macros.h2
-rw-r--r--isa/macros/vector/test_macros.h2
-rw-r--r--isa/rv32si/Makefrag1
-rw-r--r--isa/rv32si/illegal.S12
-rw-r--r--isa/rv32si/ma_addr.S26
-rw-r--r--isa/rv32si/ma_fetch.S12
-rw-r--r--isa/rv32si/privileged.S40
-rw-r--r--isa/rv32si/sbreak.S12
-rw-r--r--isa/rv32si/scall.S14
-rw-r--r--isa/rv32si/shamt.S10
-rw-r--r--isa/rv32ui/lrsc.S10
-rw-r--r--isa/rv64si/Makefrag1
-rw-r--r--isa/rv64si/coreid.S31
-rw-r--r--isa/rv64si/csr.S53
-rw-r--r--isa/rv64si/ipi.S27
-rw-r--r--isa/rv64si/timer.S18
-rw-r--r--isa/rv64uf/Makefrag8
-rw-r--r--isa/rv64ui/Makefrag22
-rw-r--r--isa/rv64ui/lrsc.S10
24 files changed, 174 insertions, 229 deletions
diff --git a/benchmarks/common/crt.S b/benchmarks/common/crt.S
index a4f6671..debee6d 100644
--- a/benchmarks/common/crt.S
+++ b/benchmarks/common/crt.S
@@ -11,8 +11,24 @@
#endif
.text
- .globl _start
+ .align 6
+user_trap_entry:
+ j trap_entry
+
+ .align 6
+supervisor_trap_entry:
+ j supervisor_trap_entry
+
+ .align 6
+hypervisor_trap_entry:
+ j hypervisor_trap_entry
+ .align 6
+machine_trap_entry:
+ j trap_entry
+
+ .align 6
+ .globl _start
_start:
li x1, 0
li x2, 0
@@ -46,21 +62,23 @@ _start:
li x30,0
li x31,0
- # initialize status, enable fp, accelerator, interrupts
- li a0, SR_S | SR_PEI | SR_EF | SR_EA
- csrw status, a0
+ li t0, MSTATUS_PRV1; csrc mstatus, t0 # run tests in user mode
+ li t0, MSTATUS_IE1; csrs mstatus, t0 # enable interrupts in user mode
+ li t0, MSTATUS_FS; csrs mstatus, t0 # enable FPU
+ li t0, MSTATUS_XS; csrs mstatus, t0 # enable accelerator
-#ifdef __riscv64
- li a0, SR_U64 | SR_S64
- csrs status, a0
+#ifndef __riscv64
+ li t0, MSTATUS_UA; csrc mstatus, t0 # disable RV64 for user mode
#endif
- csrr t0, status
- and t1, t0, SR_EA
+ csrr t0, mstatus
+ li t1, MSTATUS_XS
+ and t1, t0, t1
sw t1, have_vec, t2
## if that didn't stick, we don't have a FPU, so don't initialize it
- and t1, t0, SR_EF
+ li t1, MSTATUS_FS
+ and t1, t0, t1
beqz t1, 1f
fssr x0
@@ -98,15 +116,14 @@ _start:
fmv.s.x f31,x0
1:
- la t0, trap_entry
- csrw evec, t0
-
la tp, _end + 63
and tp, tp, -64
- # get core id and number of cores
+ # get core id
csrr a0, hartid
- lw a1, 4(zero)
+ # for now, assume only 1 core
+ li a1, 1
+1:bgeu a0, a1, 1b
# give each core 128KB of stack + TLS
#define STKSHIFT 17
@@ -117,8 +134,8 @@ _start:
add sp, sp, tp
la t0, _init
- csrw epc, t0
- sret
+ csrw mepc, t0
+ mret
trap_entry:
addi sp, sp, -272
@@ -155,21 +172,11 @@ trap_entry:
SREG x30, 240(sp)
SREG x31, 248(sp)
- csrr t0, sup0
- csrr t1, status
- SREG t0, 256(sp)
- SREG t1, 264(sp)
-
- csrr a0, cause
- csrr a1, epc
+ csrr a0, mcause
+ csrr a1, mepc
mv a2, sp
jal handle_trap
- csrw epc, a0
-
- LREG t0, 256(sp)
- LREG t1, 264(sp)
- csrw sup0, t0
- csrw status, t1
+ csrw mepc, a0
LREG x1, 8(sp)
LREG x2, 16(sp)
@@ -204,7 +211,7 @@ trap_entry:
LREG x31, 248(sp)
addi sp, sp, 272
- sret
+ mret
.section ".tdata.begin"
.globl _tdata_begin
diff --git a/benchmarks/common/syscalls.c b/benchmarks/common/syscalls.c
index 3271694..12dab70 100644
--- a/benchmarks/common/syscalls.c
+++ b/benchmarks/common/syscalls.c
@@ -75,7 +75,7 @@ long handle_trap(long cause, long epc, long regs[32])
if (cause == CAUSE_ILLEGAL_INSTRUCTION &&
(*(int*)epc & *csr_insn) == *csr_insn)
;
- else if (cause != CAUSE_SYSCALL)
+ else if (cause != CAUSE_SCALL)
tohost_exit(1337);
else if (regs[17] == SYS_exit)
tohost_exit(regs[10]);
diff --git a/benchmarks/common/test.ld b/benchmarks/common/test.ld
index 438581c..816c948 100644
--- a/benchmarks/common/test.ld
+++ b/benchmarks/common/test.ld
@@ -13,11 +13,6 @@
OUTPUT_ARCH( "riscv" )
-/* The ENTRY command specifies the entry point (ie. first instruction
- to execute). The symbol _start should be defined in each test. */
-
-ENTRY( _start )
-
/*----------------------------------------------------------------------*/
/* Sections */
/*----------------------------------------------------------------------*/
@@ -26,7 +21,7 @@ SECTIONS
{
/* text: test code section */
- . = 0x00002000;
+ . = 0;
.text :
{
crt.o(.text)
diff --git a/env b/env
-Subproject 18e64b6ced40e97a0469b47471f2b66305264a1
+Subproject 3a2ed4c0966add8f9730c3962a784cc42389166
diff --git a/isa/Makefile b/isa/Makefile
index 19bd1e7..9c7f37e 100644
--- a/isa/Makefile
+++ b/isa/Makefile
@@ -6,9 +6,9 @@ isa_src_dir := .
include $(isa_src_dir)/rv64ui/Makefrag
include $(isa_src_dir)/rv64uf/Makefrag
-include $(isa_src_dir)/rv64uv/Makefrag
+#include $(isa_src_dir)/rv64uv/Makefrag
include $(isa_src_dir)/rv64si/Makefrag
-include $(isa_src_dir)/rv64sv/Makefrag
+#include $(isa_src_dir)/rv64sv/Makefrag
include $(isa_src_dir)/rv32ui/Makefrag
include $(isa_src_dir)/rv32si/Makefrag
diff --git a/isa/macros/scalar/test_macros.h b/isa/macros/scalar/test_macros.h
index ec39ea7..81052a6 100644
--- a/isa/macros/scalar/test_macros.h
+++ b/isa/macros/scalar/test_macros.h
@@ -696,7 +696,7 @@ handler ## testnum: \
#define TEST_PASSFAIL \
bne x0, TESTNUM, pass; \
fail: \
- RVTEST_FAIL \
+ RVTEST_FAIL; \
pass: \
RVTEST_PASS \
diff --git a/isa/macros/vector/test_macros.h b/isa/macros/vector/test_macros.h
index 736b587..a97ffe7 100644
--- a/isa/macros/vector/test_macros.h
+++ b/isa/macros/vector/test_macros.h
@@ -599,7 +599,7 @@ next ## testnum :
#define TEST_PASSFAIL \
bne x0, TESTNUM, pass; \
fail: \
- RVTEST_FAIL \
+ RVTEST_FAIL; \
pass: \
RVTEST_PASS \
diff --git a/isa/rv32si/Makefrag b/isa/rv32si/Makefrag
index 024a9a0..70cea70 100644
--- a/isa/rv32si/Makefrag
+++ b/isa/rv32si/Makefrag
@@ -7,7 +7,6 @@ rv32si_sc_tests = \
shamt \
ma_fetch \
illegal \
- privileged \
scall \
sbreak \
ma_addr \
diff --git a/isa/rv32si/illegal.S b/isa/rv32si/illegal.S
index aa97932..3bec030 100644
--- a/isa/rv32si/illegal.S
+++ b/isa/rv32si/illegal.S
@@ -13,8 +13,8 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la t0, evec
- csrw evec, t0
+ la t0, stvec
+ csrw stvec, t0
li TESTNUM, 2
.word 0
@@ -24,13 +24,13 @@ RVTEST_CODE_BEGIN
TEST_PASSFAIL
-evec:
+stvec:
li t1, CAUSE_ILLEGAL_INSTRUCTION
- csrr t0, cause
+ csrr t0, scause
bne t0, t1, fail
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 8
- csrw epc, t0
+ csrw sepc, t0
sret
RVTEST_CODE_END
diff --git a/isa/rv32si/ma_addr.S b/isa/rv32si/ma_addr.S
index 897282e..13ac778 100644
--- a/isa/rv32si/ma_addr.S
+++ b/isa/rv32si/ma_addr.S
@@ -13,10 +13,10 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la s0, evec_load
+ la s0, stvec_load
- la t0, evec_load
- csrw evec, t0
+ la t0, stvec_load
+ csrw stvec, t0
li TESTNUM, 2
lw x0, 1(s0)
@@ -38,8 +38,8 @@ RVTEST_CODE_BEGIN
lhu x0, 1(s0)
j fail
- la t0, evec_store
- csrw evec, t0
+ la t0, stvec_store
+ csrw stvec, t0
li TESTNUM, 7
sw x0, 1(s0)
@@ -61,22 +61,22 @@ RVTEST_CODE_BEGIN
TEST_PASSFAIL
-evec_load:
+stvec_load:
li t1, CAUSE_MISALIGNED_LOAD
- csrr t0, cause
+ csrr t0, scause
bne t0, t1, fail
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 8
- csrw epc, t0
+ csrw sepc, t0
sret
-evec_store:
+stvec_store:
li t1, CAUSE_MISALIGNED_STORE
- csrr t0, cause
+ csrr t0, scause
bne t0, t1, fail
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 8
- csrw epc, t0
+ csrw sepc, t0
sret
RVTEST_CODE_END
diff --git a/isa/rv32si/ma_fetch.S b/isa/rv32si/ma_fetch.S
index f310630..4aa7973 100644
--- a/isa/rv32si/ma_fetch.S
+++ b/isa/rv32si/ma_fetch.S
@@ -13,8 +13,8 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la t0, evec
- csrw evec, t0
+ la t0, stvec
+ csrw stvec, t0
li TESTNUM, 2
la t0, 1f
@@ -38,17 +38,17 @@ RVTEST_CODE_BEGIN
TEST_PASSFAIL
-evec:
+stvec:
li t0, 3
beq TESTNUM, t0, fail
li t1, CAUSE_MISALIGNED_FETCH
- csrr t0, cause
+ csrr t0, scause
bne t0, t1, fail
li t1, 0
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 2 // skip over instruction after jalr
- csrw epc, t0
+ csrw sepc, t0
sret
RVTEST_CODE_END
diff --git a/isa/rv32si/privileged.S b/isa/rv32si/privileged.S
deleted file mode 100644
index 519de80..0000000
--- a/isa/rv32si/privileged.S
+++ /dev/null
@@ -1,40 +0,0 @@
-# See LICENSE for license details.
-
-#*****************************************************************************
-# privileged.S
-#-----------------------------------------------------------------------------
-#
-# Test privileged instruction trap.
-#
-
-#include "riscv_test.h"
-#include "test_macros.h"
-
-RVTEST_RV32S
-RVTEST_CODE_BEGIN
-
- la t0, evec
- csrw evec, t0
-
- csrci status, 1
-
- li TESTNUM, 2
- sret
- j fail
-
- TEST_PASSFAIL
-
-evec:
- li t1, CAUSE_PRIVILEGED_INSTRUCTION
- csrr t0, cause
- bne t0, t1, fail
- j pass
-
-RVTEST_CODE_END
-
- .data
-RVTEST_DATA_BEGIN
-
- TEST_DATA
-
-RVTEST_DATA_END
diff --git a/isa/rv32si/sbreak.S b/isa/rv32si/sbreak.S
index 4349b35..cd920db 100644
--- a/isa/rv32si/sbreak.S
+++ b/isa/rv32si/sbreak.S
@@ -13,8 +13,8 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la t0, evec
- csrw evec, t0
+ la t0, stvec
+ csrw stvec, t0
li TESTNUM, 2
sbreak
@@ -24,13 +24,13 @@ RVTEST_CODE_BEGIN
TEST_PASSFAIL
-evec:
+stvec:
li t1, CAUSE_BREAKPOINT
- csrr t0, cause
+ csrr t0, scause
bne t0, t1, fail
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 8
- csrw epc, t0
+ csrw sepc, t0
sret
RVTEST_CODE_END
diff --git a/isa/rv32si/scall.S b/isa/rv32si/scall.S
index 3dda8b1..c5cc3ac 100644
--- a/isa/rv32si/scall.S
+++ b/isa/rv32si/scall.S
@@ -13,8 +13,8 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la t0, evec
- csrw evec, t0
+ la t0, stvec
+ csrw stvec, t0
li TESTNUM, 2
scall
@@ -24,13 +24,13 @@ RVTEST_CODE_BEGIN
TEST_PASSFAIL
-evec:
- li t1, CAUSE_SYSCALL
- csrr t0, cause
+stvec:
+ li t1, CAUSE_SCALL
+ csrr t0, scause
bne t0, t1, fail
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 8
- csrw epc, t0
+ csrw sepc, t0
sret
RVTEST_CODE_END
diff --git a/isa/rv32si/shamt.S b/isa/rv32si/shamt.S
index ee1c8b5..4fe7c2f 100644
--- a/isa/rv32si/shamt.S
+++ b/isa/rv32si/shamt.S
@@ -13,25 +13,25 @@
RVTEST_RV32S
RVTEST_CODE_BEGIN
- la t0, evec
- csrw evec, t0
+ la t0, stvec
+ csrw stvec, t0
# Make sure slli with shamt[4] set is legal.
TEST_CASE( 2, a0, 65536, li a0, 1; slli a0, a0, 16);
- # Make sure slli with shamt[4] set is not legal.
+ # Make sure slli with shamt[5] set is not legal.
TEST_CASE( 3, x0, 1, slli a0, a0, 32);
TEST_PASSFAIL
-evec:
+stvec:
# Trapping on test 3 is good.
# Note that since the test didn't complete, TESTNUM is smaller by 1.
li t0, 2
bne TESTNUM, t0, fail
# Make sure CAUSE indicates an illegal instructino.
- csrr t0, cause
+ csrr t0, scause
li t1, CAUSE_ILLEGAL_INSTRUCTION
bne t0, t1, fail
j pass
diff --git a/isa/rv32ui/lrsc.S b/isa/rv32ui/lrsc.S
index f559f29..2aee818 100644
--- a/isa/rv32ui/lrsc.S
+++ b/isa/rv32ui/lrsc.S
@@ -13,13 +13,17 @@
RVTEST_RV32U
RVTEST_CODE_BEGIN
-# wait for all cores to boot
+# get a unique core id
la a0, coreid
li a1, 1
amoadd.w a2, a1, (a0)
-lw a3, 4(x0)
+
+# for now, only run this on core 0
+1:li a3, 1
+bgeu a2, a3, 1b
+
1: lw a1, (a0)
-blt a1, a3, 1b
+bltu a1, a3, 1b
# make sure that sc without a reservation fails.
TEST_CASE( 2, a4, 1, \
diff --git a/isa/rv64si/Makefrag b/isa/rv64si/Makefrag
index f40a56f..c5a5d95 100644
--- a/isa/rv64si/Makefrag
+++ b/isa/rv64si/Makefrag
@@ -3,7 +3,6 @@
#-----------------------------------------------------------------------
rv64si_sc_tests = \
- coreid \
csr \
timer \
diff --git a/isa/rv64si/coreid.S b/isa/rv64si/coreid.S
deleted file mode 100644
index 0bfee16..0000000
--- a/isa/rv64si/coreid.S
+++ /dev/null
@@ -1,31 +0,0 @@
-# See LICENSE for license details.
-
-#*****************************************************************************
-# coreid.S
-#-----------------------------------------------------------------------------
-#
-# Test coreid.
-#
-
-#include "riscv_test.h"
-#include "test_macros.h"
-
-RVTEST_RV64S
-RVTEST_CODE_BEGIN
-
- #-------------------------------------------------------------
- # Basic tests
- #-------------------------------------------------------------
-
- TEST_CASE( 2, x1, 0x0, li x1, 1; csrr x1, hartid );
-
- TEST_PASSFAIL
-
-RVTEST_CODE_END
-
- .data
-RVTEST_DATA_BEGIN
-
- TEST_DATA
-
-RVTEST_DATA_END
diff --git a/isa/rv64si/csr.S b/isa/rv64si/csr.S
index 649c639..2a326a6 100644
--- a/isa/rv64si/csr.S
+++ b/isa/rv64si/csr.S
@@ -13,27 +13,34 @@
RVTEST_RV64S
RVTEST_CODE_BEGIN
- # Set up evec in case we trap.
- la t0, evec
- csrw evec, t0
- csrwi count, 0
-
- csrwi sup0, 3
- TEST_CASE( 2, a0, 3, csrr a0, sup0);
- TEST_CASE( 3, a1, 3, csrrci a1, sup0, 1);
- TEST_CASE( 4, a2, 2, csrrsi a2, sup0, 4);
- TEST_CASE( 5, a3, 6, csrrwi a3, sup0, 2);
- TEST_CASE( 6, a1, 2, li a0, 0xbad1dea; csrrw a1, sup0, a0);
- TEST_CASE( 7, a0, 0xbad1dea, li a0, 0x0001dea; csrrc a0, sup0, a0);
- TEST_CASE( 8, a0, 0xbad0000, li a0, 0x000beef; csrrs a0, sup0, a0);
- TEST_CASE( 9, a0, 0xbadbeef, csrr a0, sup0);
+ # Set up stvec in case we trap.
+ la t0, stvec
+ csrw stvec, t0
+ csrwi scycle, 0
+
+ csrwi sscratch, 3
+ TEST_CASE( 2, a0, 3, csrr a0, sscratch);
+ TEST_CASE( 3, a1, 3, csrrci a1, sscratch, 1);
+ TEST_CASE( 4, a2, 2, csrrsi a2, sscratch, 4);
+ TEST_CASE( 5, a3, 6, csrrwi a3, sscratch, 2);
+ TEST_CASE( 6, a1, 2, li a0, 0xbad1dea; csrrw a1, sscratch, a0);
+ TEST_CASE( 7, a0, 0xbad1dea, li a0, 0x0001dea; csrrc a0, sscratch, a0);
+ TEST_CASE( 8, a0, 0xbad0000, li a0, 0x000beef; csrrs a0, sscratch, a0);
+ TEST_CASE( 9, a0, 0xbadbeef, csrr a0, sscratch);
# Make sure writing the cycle counter causes an exception.
TEST_CASE(10, a0, 255, li a0, 255; csrrw a0, cycle, x0);
+ # Enter user mode
+ li t0, SSTATUS_PS
+ csrc sstatus, t0
+ la t0, 1f
+ csrw sepc, t0
+ sret
+ 1:
+
# Make sure reading status in user mode causes an exception.
- csrci status, SR_S|SR_PS
- TEST_CASE(11, a0, 255, li a0, 255; csrr a0, status);
+ TEST_CASE(11, a0, 255, li a0, 255; csrr a0, sstatus);
# Make sure rdcycle is legal in user mode.
TEST_CASE(12, x0, 0, rdcycle a0)
@@ -44,7 +51,7 @@ RVTEST_CODE_BEGIN
# We should only fall through to this if scall failed.
TEST_PASSFAIL
-evec:
+stvec:
# Trapping on tests 10, 11, and 13 is usually good news.
# Note that since the test didn't complete, TESTNUM is smaller by 1.
li t0, 9
@@ -59,19 +66,19 @@ evec:
privileged:
# Make sure CAUSE indicates a lack of privilege.
- csrr t0, cause
- li t1, CAUSE_PRIVILEGED_INSTRUCTION
+ csrr t0, scause
+ li t1, CAUSE_ILLEGAL_INSTRUCTION
bne t0, t1, fail
# Return to user mode, but skip the trapping instruction.
- csrr t0, epc
+ csrr t0, sepc
addi t0, t0, 4
- csrw epc, t0
+ csrw sepc, t0
sret
syscall:
# Make sure CAUSE indicates a syscall.
- csrr t0, cause
- li t1, CAUSE_SYSCALL
+ csrr t0, scause
+ li t1, CAUSE_SCALL
bne t0, t1, fail
# We're done.
diff --git a/isa/rv64si/ipi.S b/isa/rv64si/ipi.S
index 4845338..e45c663 100644
--- a/isa/rv64si/ipi.S
+++ b/isa/rv64si/ipi.S
@@ -10,23 +10,24 @@
#include "riscv_test.h"
#include "test_macros.h"
-RVTEST_RV64S
+RVTEST_RV64M
RVTEST_CODE_BEGIN
- # clear pending IPIs then enable interrupts
- la a0, handler
- csrw evec, a0
- csrw clear_ipi, x0
- li a0, SR_EI | (1 << (IRQ_IPI + SR_IM_SHIFT))
- csrs status, a0
+ # enable interrupts
+ csrs mstatus, MSTATUS_IE
- # wait for all cores to boot
+ # get a unique core id
la a0, coreid
li a1, 1
- amoadd.w x0, a1, 0(a0)
- lw a3, 4(x0)
- 1: lw a1, 0(a0)
- blt a1, a3, 1b
+ amoadd.w a2, a1, (a0)
+
+ # for now, only run this on core 0
+ 1:li a3, 1
+ bgeu a2, a3, 1b
+
+ # wait for all cores to boot
+ 1: lw a1, (a0)
+ bltu a1, a3, 1b
# IPI dominoes
csrr a0, hartid
@@ -36,7 +37,7 @@ RVTEST_CODE_BEGIN
csrw send_ipi, a0
1: j 1b
- handler:
+mtvec:
csrr a0, hartid
bnez a0, 2f
RVTEST_PASS
diff --git a/isa/rv64si/timer.S b/isa/rv64si/timer.S
index 0a90a60..584ced7 100644
--- a/isa/rv64si/timer.S
+++ b/isa/rv64si/timer.S
@@ -17,11 +17,11 @@ RVTEST_CODE_BEGIN
li s8, 0 # number of taken timer interrupts
li s9, 10 # how many interrupts to run for
la a0, handler
- csrw evec, a0
- csrw compare, 1
- csrw count, 0
- li a0, SR_EI | (1 << (IRQ_TIMER + SR_IM_SHIFT))
- csrs status, a0
+ csrw stvec, a0
+ csrw stimecmp, 1
+ csrw stime, 0
+ li a0, SSTATUS_IE | SSTATUS_TIE
+ csrs sstatus, a0
# advance an LFSR 1000 times
li s0, 1023
@@ -36,7 +36,7 @@ RVTEST_CODE_BEGIN
add s4, s4, 1
bltu s8, s9, 1b
- csrc status, SR_EI
+ csrc sstatus, SSTATUS_IE
# make sure the LFSR was computed correctly
li s1, 1023
@@ -54,16 +54,16 @@ RVTEST_CODE_BEGIN
handler:
li TESTNUM, 3
- csrr t0, cause
+ csrr t0, scause
bgez t0, fail
sll t0, t0, 1
addi t0, t0, -2*IRQ_TIMER
bnez t0, fail
- csrr t0, count
+ csrr t0, stime
addi t0, t0, 999
- csrw compare, t0
+ csrw stimecmp, t0
add s8, s8, 1
diff --git a/isa/rv64uf/Makefrag b/isa/rv64uf/Makefrag
index 95c8647..bf5cd33 100644
--- a/isa/rv64uf/Makefrag
+++ b/isa/rv64uf/Makefrag
@@ -7,12 +7,12 @@ rv64uf_sc_tests = \
ldst move structural \
rv64uf_sc_vec_tests = \
- fadd fcmp fcvt fcvt_w fmadd fmin fsgnj \
+# fadd fcmp fcvt fcvt_w fmadd fmin fsgnj \
rv64uf_p_tests = $(addprefix rv64uf-p-, $(rv64uf_sc_tests))
rv64uf_v_tests = $(addprefix rv64uf-v-, $(rv64uf_sc_tests))
-rv64uf_p_vec_tests = $(addprefix rv64uf-p-vec-, $(rv64uf_sc_vec_tests))
-rv64uf_pt_vec_tests = $(addprefix rv64uf-pt-vec-, $(rv64uf_sc_vec_tests))
-rv64uf_v_vec_tests = $(addprefix rv64uf-v-vec-, $(rv64uf_sc_vec_tests))
+#rv64uf_p_vec_tests = $(addprefix rv64uf-p-vec-, $(rv64uf_sc_vec_tests))
+#rv64uf_pt_vec_tests = $(addprefix rv64uf-pt-vec-, $(rv64uf_sc_vec_tests))
+#rv64uf_v_vec_tests = $(addprefix rv64uf-v-vec-, $(rv64uf_sc_vec_tests))
spike_tests += $(rv64uf_p_tests) $(rv64uf_v_tests) $(rv64uf_p_vec_tests) $(rv64uf_pt_vec_tests) $(rv64uf_v_vec_tests)
diff --git a/isa/rv64ui/Makefrag b/isa/rv64ui/Makefrag
index fd4ac41..a0f974d 100644
--- a/isa/rv64ui/Makefrag
+++ b/isa/rv64ui/Makefrag
@@ -30,17 +30,17 @@ rv64ui_mc_tests = \
lrsc
rv64ui_sc_vec_tests = \
- add addi addiw addw \
- and andi \
- lui \
- mul mulh mulhsu mulhu mulw \
- or ori \
- sll slli slliw sllw \
- slt slti sltiu sltu \
- sra srai sraiw sraw \
- srl srli srliw srlw \
- sub subw \
- xor xori \
+ #add addi addiw addw \
+ #and andi \
+ #lui \
+ #mul mulh mulhsu mulhu mulw \
+ #or ori \
+ #sll slli slliw sllw \
+ #slt slti sltiu sltu \
+ #sra srai sraiw sraw \
+ #srl srli srliw srlw \
+ #sub subw \
+ #xor xori \
rv64ui_p_tests = $(addprefix rv64ui-p-, $(rv64ui_sc_tests))
rv64ui_pm_tests = $(addprefix rv64ui-pm-, $(rv64ui_mc_tests))
diff --git a/isa/rv64ui/lrsc.S b/isa/rv64ui/lrsc.S
index 0300eae..6c4904e 100644
--- a/isa/rv64ui/lrsc.S
+++ b/isa/rv64ui/lrsc.S
@@ -13,13 +13,17 @@
RVTEST_RV64U
RVTEST_CODE_BEGIN
-# wait for all cores to boot
+# get a unique core id
la a0, coreid
li a1, 1
amoadd.w a2, a1, (a0)
-lw a3, 4(x0)
+
+# for now, only run this on core 0
+1:li a3, 1
+bgeu a2, a3, 1b
+
1: lw a1, (a0)
-blt a1, a3, 1b
+bltu a1, a3, 1b
# make sure that sc without a reservation fails.
TEST_CASE( 2, a4, 1, \