// See LICENSE for license details. #ifndef _ENV_VIRTUAL_SINGLE_CORE_H #define _ENV_VIRTUAL_SINGLE_CORE_H #include "../p/riscv_test.h" //----------------------------------------------------------------------- // Begin Macro //----------------------------------------------------------------------- #undef RVTEST_FP_ENABLE #define RVTEST_FP_ENABLE fssr x0 #undef RVTEST_CODE_BEGIN #define RVTEST_CODE_BEGIN \ .text; \ .global userstart; \ userstart: \ init //----------------------------------------------------------------------- // Pass/Fail Macro //----------------------------------------------------------------------- #undef RVTEST_PASS #define RVTEST_PASS li a0, 1; scall #undef RVTEST_FAIL #define RVTEST_FAIL sll a0, TESTNUM, 1; 1:beqz a0, 1b; or a0, a0, 1; scall; //----------------------------------------------------------------------- // Data Section Macro //----------------------------------------------------------------------- #undef RVTEST_DATA_END #define RVTEST_DATA_END //----------------------------------------------------------------------- // Supervisor mode definitions and macros //----------------------------------------------------------------------- #define MAX_TEST_PAGES 63 // this must be the period of the LFSR below #define LFSR_NEXT(x) (((((x)^((x)>>1)) & 1) << 5) | ((x) >> 1)) #define PGSHIFT 12 #define PGSIZE (1UL << PGSHIFT) #define SIZEOF_TRAPFRAME_T ((__riscv_xlen / 8) * 36) #ifndef __ASSEMBLER__ typedef unsigned long pte_t; #define LEVELS (sizeof(pte_t) == sizeof(uint64_t) ? 3 : 2) #define PTIDXBITS (PGSHIFT - (sizeof(pte_t) == 8 ? 3 : 2)) #define VPN_BITS (PTIDXBITS * LEVELS) #define VA_BITS (VPN_BITS + PGSHIFT) #define PTES_PER_PT (1UL << RISCV_PGLEVEL_BITS) #define MEGAPAGE_SIZE (PTES_PER_PT * PGSIZE) typedef struct { long gpr[32]; long sr; long epc; long badvaddr; long cause; } trapframe_t; #endif #endif