// See LICENSE for license details. #ifndef _RISCV_TEST_DEFAULTS_H #define _RISCV_TEST_DEFAULTS_H #define TESTNUM x28 #define TESTBASE 0x4000 #define RVTEST_RV32U \ .macro init; \ .endm #define RVTEST_RV64U \ .macro init; \ .endm #define RVTEST_RV32UF \ .macro init; \ /* If FPU exists, initialize FCSR. */ \ csrr t0, misa; \ andi t0, t0, 1 << ('F' - 'A'); \ beqz t0, 1f; \ /* Enable FPU if it exists. */ \ li t0, MSTATUS_FS; \ csrs mstatus, t0; \ fssr x0; \ 1: ; \ .endm #define RVTEST_RV64UF \ .macro init; \ /* If FPU exists, initialize FCSR. */ \ csrr t0, misa; \ andi t0, t0, 1 << ('F' - 'A'); \ beqz t0, 1f; \ /* Enable FPU if it exists. */ \ li t0, MSTATUS_FS; \ csrs mstatus, t0; \ fssr x0; \ 1: ; \ .endm #define RVTEST_CODE_BEGIN \ .section .text.init; \ .globl _prog_start; \ _prog_start: \ init; #define RVTEST_CODE_END \ unimp #define RVTEST_PASS \ fence; \ li t0, TESTBASE; \ li t1, 0x5555; \ sw t1, 0(t0); \ 1: \ j 1b; #define RVTEST_FAIL \ li t0, TESTBASE; \ li t1, 0x3333; \ slli a0, a0, 16; \ add a0, a0, t1; \ sw a0, 0(t0); \ 1: \ j 1b; #define EXTRA_DATA #define RVTEST_DATA_BEGIN \ EXTRA_DATA \ .align 4; .global begin_signature; begin_signature: #define RVTEST_DATA_END \ _msg_init: .asciz "RUN\r\n"; \ _msg_pass: .asciz "PASS"; \ _msg_fail: .asciz "FAIL "; \ _msg_end: .asciz "\r\n"; \ .align 4; .global end_signature; end_signature: #endif /* _RISCV_TEST_DEFAULTS_H */