112771Sqtt2@cornell.edu// See LICENSE for license details. 212771Sqtt2@cornell.edu 312771Sqtt2@cornell.edu#ifndef _ENV_PHYSICAL_SINGLE_CORE_H 412771Sqtt2@cornell.edu#define _ENV_PHYSICAL_SINGLE_CORE_H 512771Sqtt2@cornell.edu 612771Sqtt2@cornell.edu#include "../encoding.h" 712771Sqtt2@cornell.edu 812771Sqtt2@cornell.edu//----------------------------------------------------------------------- 912771Sqtt2@cornell.edu// Begin Macro 1012771Sqtt2@cornell.edu//----------------------------------------------------------------------- 1112771Sqtt2@cornell.edu 1212771Sqtt2@cornell.edu#define RVTEST_RV64U \ 1312771Sqtt2@cornell.edu .macro init; \ 1412771Sqtt2@cornell.edu .endm 1512771Sqtt2@cornell.edu 1612771Sqtt2@cornell.edu#define RVTEST_RV64UF \ 1712771Sqtt2@cornell.edu .macro init; \ 1812771Sqtt2@cornell.edu RVTEST_FP_ENABLE; \ 1912771Sqtt2@cornell.edu .endm 2012771Sqtt2@cornell.edu 2112771Sqtt2@cornell.edu#define RVTEST_RV32U \ 2212771Sqtt2@cornell.edu .macro init; \ 2312771Sqtt2@cornell.edu .endm 2412771Sqtt2@cornell.edu 2512771Sqtt2@cornell.edu#define RVTEST_RV32UF \ 2612771Sqtt2@cornell.edu .macro init; \ 2712771Sqtt2@cornell.edu RVTEST_FP_ENABLE; \ 2812771Sqtt2@cornell.edu .endm 2912771Sqtt2@cornell.edu 3012771Sqtt2@cornell.edu#define RVTEST_RV64M \ 3112771Sqtt2@cornell.edu .macro init; \ 3212771Sqtt2@cornell.edu RVTEST_ENABLE_MACHINE; \ 3312771Sqtt2@cornell.edu .endm 3412771Sqtt2@cornell.edu 3512771Sqtt2@cornell.edu#define RVTEST_RV64S \ 3612771Sqtt2@cornell.edu .macro init; \ 3712771Sqtt2@cornell.edu RVTEST_ENABLE_SUPERVISOR; \ 3812771Sqtt2@cornell.edu .endm 3912771Sqtt2@cornell.edu 4012771Sqtt2@cornell.edu#define RVTEST_RV32M \ 4112771Sqtt2@cornell.edu .macro init; \ 4212771Sqtt2@cornell.edu RVTEST_ENABLE_MACHINE; \ 4312771Sqtt2@cornell.edu .endm 4412771Sqtt2@cornell.edu 4512771Sqtt2@cornell.edu#define RVTEST_RV32S \ 4612771Sqtt2@cornell.edu .macro init; \ 4712771Sqtt2@cornell.edu RVTEST_ENABLE_SUPERVISOR; \ 4812771Sqtt2@cornell.edu .endm 4912771Sqtt2@cornell.edu 5012771Sqtt2@cornell.edu#if __riscv_xlen == 64 5112771Sqtt2@cornell.edu# define CHECK_XLEN li a0, 1; slli a0, a0, 31; bgez a0, 1f; RVTEST_PASS; 1: 5212771Sqtt2@cornell.edu#else 5312771Sqtt2@cornell.edu# define CHECK_XLEN li a0, 1; slli a0, a0, 31; bltz a0, 1f; RVTEST_PASS; 1: 5412771Sqtt2@cornell.edu#endif 5512771Sqtt2@cornell.edu 5612771Sqtt2@cornell.edu#define INIT_PMP \ 5712771Sqtt2@cornell.edu la t0, 1f; \ 5812771Sqtt2@cornell.edu csrw mtvec, t0; \ 5912771Sqtt2@cornell.edu li t0, -1; /* Set up a PMP to permit all accesses */ \ 6012771Sqtt2@cornell.edu csrw pmpaddr0, t0; \ 6112771Sqtt2@cornell.edu li t0, PMP_NAPOT | PMP_R | PMP_W | PMP_X; \ 6212771Sqtt2@cornell.edu csrw pmpcfg0, t0; \ 6312771Sqtt2@cornell.edu .align 2; \ 6412771Sqtt2@cornell.edu1: 6512771Sqtt2@cornell.edu 6612771Sqtt2@cornell.edu#define INIT_SATP \ 6712771Sqtt2@cornell.edu la t0, 1f; \ 6812771Sqtt2@cornell.edu csrw mtvec, t0; \ 6912771Sqtt2@cornell.edu csrwi sptbr, 0; \ 7012771Sqtt2@cornell.edu .align 2; \ 7112771Sqtt2@cornell.edu1: 7212771Sqtt2@cornell.edu 7312771Sqtt2@cornell.edu#define DELEGATE_NO_TRAPS \ 7412771Sqtt2@cornell.edu la t0, 1f; \ 7512771Sqtt2@cornell.edu csrw mtvec, t0; \ 7612771Sqtt2@cornell.edu csrwi medeleg, 0; \ 7712771Sqtt2@cornell.edu csrwi mideleg, 0; \ 7812771Sqtt2@cornell.edu csrwi mie, 0; \ 7912771Sqtt2@cornell.edu .align 2; \ 8012771Sqtt2@cornell.edu1: 8112771Sqtt2@cornell.edu 8212771Sqtt2@cornell.edu#define RVTEST_ENABLE_SUPERVISOR \ 8312771Sqtt2@cornell.edu li a0, MSTATUS_MPP & (MSTATUS_MPP >> 1); \ 8412771Sqtt2@cornell.edu csrs mstatus, a0; \ 8512771Sqtt2@cornell.edu li a0, SIP_SSIP | SIP_STIP; \ 8612771Sqtt2@cornell.edu csrs mideleg, a0; \ 8712771Sqtt2@cornell.edu 8812771Sqtt2@cornell.edu#define RVTEST_ENABLE_MACHINE \ 8912771Sqtt2@cornell.edu li a0, MSTATUS_MPP; \ 9012771Sqtt2@cornell.edu csrs mstatus, a0; \ 9112771Sqtt2@cornell.edu 9212771Sqtt2@cornell.edu#define RVTEST_FP_ENABLE \ 9312771Sqtt2@cornell.edu li a0, MSTATUS_FS & (MSTATUS_FS >> 1); \ 9412771Sqtt2@cornell.edu csrs mstatus, a0; \ 9512771Sqtt2@cornell.edu csrwi fcsr, 0 9612771Sqtt2@cornell.edu 9712771Sqtt2@cornell.edu#define RISCV_MULTICORE_DISABLE \ 9812771Sqtt2@cornell.edu csrr a0, mhartid; \ 9912771Sqtt2@cornell.edu 1: bnez a0, 1b 10012771Sqtt2@cornell.edu 10112771Sqtt2@cornell.edu#define EXTRA_TVEC_USER 10212771Sqtt2@cornell.edu#define EXTRA_TVEC_MACHINE 10312771Sqtt2@cornell.edu#define EXTRA_INIT 10412771Sqtt2@cornell.edu#define EXTRA_INIT_TIMER 10512771Sqtt2@cornell.edu 10612771Sqtt2@cornell.edu//----------------------------------------------------------------------- 10712771Sqtt2@cornell.edu// Begin Macro 10812771Sqtt2@cornell.edu// Jump to the first test case 10912771Sqtt2@cornell.edu//----------------------------------------------------------------------- 11012771Sqtt2@cornell.edu 11112771Sqtt2@cornell.edu#define RVTEST_CODE_BEGIN \ 11212771Sqtt2@cornell.edu .section .text.init; \ 11312771Sqtt2@cornell.edu .align 6; \ 11412771Sqtt2@cornell.edu .weak stvec_handler; \ 11512771Sqtt2@cornell.edu .weak mtvec_handler; \ 11612771Sqtt2@cornell.edu .globl _start; \ 11712771Sqtt2@cornell.edu_start: \ 11812771Sqtt2@cornell.edu la t0, 1f; \ 11912771Sqtt2@cornell.edu jr t0; \ 12012771Sqtt2@cornell.edu .align 2; \ 12112771Sqtt2@cornell.edu1: 12212771Sqtt2@cornell.edu 12312771Sqtt2@cornell.edu//----------------------------------------------------------------------- 12412771Sqtt2@cornell.edu// RVTEST_CODE_END Macro 12512771Sqtt2@cornell.edu// Call exit syscall to terminate the simulation 12612771Sqtt2@cornell.edu//----------------------------------------------------------------------- 12712771Sqtt2@cornell.edu 12812771Sqtt2@cornell.edu#define EXIT_SYSCALL 93 12912771Sqtt2@cornell.edu#define RVTEST_CODE_END \ 13012771Sqtt2@cornell.edu li a7, EXIT_SYSCALL; \ 13112771Sqtt2@cornell.edu ecall 13212771Sqtt2@cornell.edu 13312771Sqtt2@cornell.edu//----------------------------------------------------------------------- 13412771Sqtt2@cornell.edu// RVTEST_PASS Macro 13512771Sqtt2@cornell.edu// Pass 0 as a return code to an EXIT ecall 13612771Sqtt2@cornell.edu//----------------------------------------------------------------------- 13712771Sqtt2@cornell.edu 13812771Sqtt2@cornell.edu#define TESTNUM gp 13912771Sqtt2@cornell.edu#define RVTEST_PASS \ 14012771Sqtt2@cornell.edu fence; \ 14112771Sqtt2@cornell.edu li a0, 0; 14212771Sqtt2@cornell.edu 14312771Sqtt2@cornell.edu//----------------------------------------------------------------------- 14412771Sqtt2@cornell.edu// RVTEST_FAIL Macro 14512771Sqtt2@cornell.edu// Pass test case number as a return code to an EXIT ecall 14612771Sqtt2@cornell.edu//----------------------------------------------------------------------- 14712771Sqtt2@cornell.edu 14812771Sqtt2@cornell.edu#define TESTNUM gp 14912771Sqtt2@cornell.edu#define RVTEST_FAIL \ 15012771Sqtt2@cornell.edu fence; \ 15112771Sqtt2@cornell.edu mv a0, TESTNUM; \ 15212771Sqtt2@cornell.edu RVTEST_CODE_END 15312771Sqtt2@cornell.edu 15412771Sqtt2@cornell.edu//----------------------------------------------------------------------- 15512771Sqtt2@cornell.edu// Data Section Macro 15612771Sqtt2@cornell.edu//----------------------------------------------------------------------- 15712771Sqtt2@cornell.edu 15812771Sqtt2@cornell.edu#define EXTRA_DATA 15912771Sqtt2@cornell.edu 16012771Sqtt2@cornell.edu#define RVTEST_DATA_BEGIN \ 16112771Sqtt2@cornell.edu EXTRA_DATA \ 16212771Sqtt2@cornell.edu .pushsection .tohost,"aw",@progbits; \ 16312771Sqtt2@cornell.edu .align 6; .global tohost; tohost: .dword 0; \ 16412771Sqtt2@cornell.edu .align 6; .global fromhost; fromhost: .dword 0; \ 16512771Sqtt2@cornell.edu .popsection; \ 16612771Sqtt2@cornell.edu .align 4; .global begin_signature; begin_signature: 16712771Sqtt2@cornell.edu 16812771Sqtt2@cornell.edu#define RVTEST_DATA_END .align 4; .global end_signature; end_signature: 16912771Sqtt2@cornell.edu 17012771Sqtt2@cornell.edu#endif 171