Add riscv CSR tests, enable zicsr - Add build rules for the riscv-tests csr and mcsr targets, and enable the zicsr extension in the device config. Define macros needed to compile the tests, as well. Change-Id: I2fa571359eb44738a4e1c064a8944762d23a819d
diff --git a/platforms/riscv32/devices.bzl b/platforms/riscv32/devices.bzl index e6f0b56..8382df2 100644 --- a/platforms/riscv32/devices.bzl +++ b/platforms/riscv32/devices.bzl
@@ -24,7 +24,7 @@ "@platforms//os:none", ], substitutions = { - "ARCHITECTURE": "rv32i2p1m_zifencei_zbb", + "ARCHITECTURE": "rv32i2p1m_zicsr_zifencei_zbb", "ABI": "ilp32", "CMODEL": "medany", "[STACK_PROTECTOR]": "-fstack-protector-strong",
diff --git a/tests/riscv-tests/BUILD b/tests/riscv-tests/BUILD index 74b274b..23a147b 100644 --- a/tests/riscv-tests/BUILD +++ b/tests/riscv-tests/BUILD
@@ -124,6 +124,45 @@ ) for test in RV32UM_TESTS] kelvin_test( + name = "rv32mi_mcsr", + srcs = [ + "@riscv-tests//:isa/rv64mi/mcsr.S", + ], + copts = [ + "-Itests/riscv-tests", + "-Iexternal/riscv-tests/isa/macros/scalar", + "-Wno-variadic-macros", + ], + defines = [ + "RVTEST_RV64M=RVTEST_RV32M", + ], + hw_test_size = "small", + deps = [ + ":riscv_tests_base", + ], +) + +kelvin_test( + name = "rv32mi_csr", + srcs = [ + "@riscv-tests//:isa/rv64si/csr.S", + ], + copts = [ + "-Itests/riscv-tests", + "-Iexternal/riscv-tests/isa/macros/scalar", + "-Wno-variadic-macros", + ], + defines = [ + "RVTEST_RV64S=RVTEST_RV32M", + "__MACHINE_MODE", + ], + hw_test_size = "small", + deps = [ + ":riscv_tests_base", + ], +) + +kelvin_test( name = "alu", srcs = [ "alu.cc",
diff --git a/tests/riscv-tests/riscv_test.h b/tests/riscv-tests/riscv_test.h index 9d86895..b16cbd3 100644 --- a/tests/riscv-tests/riscv_test.h +++ b/tests/riscv-tests/riscv_test.h
@@ -21,6 +21,9 @@ #define RVTEST_RV32U \ .macro init; \ .endm +#define RVTEST_RV32M \ + .macro init; \ + .endm #define RVTEST_CODE_BEGIN \ .globl _start; \ _start: @@ -44,4 +47,10 @@ .align 4; \ .global end_signature; \ end_signature: + +#define MSTATUS_FS (0x00006000) +#define MSTATUS_MPP (0x00001800) +#define CAUSE_USER_ECALL (0x8) +#define CAUSE_ILLEGAL_INSTRUCTION (0x2) + #endif // TESTS_RISCV_TESTS_RISCV_TEST_H_