112771Sqtt2@cornell.edu// See LICENSE for license details. 212771Sqtt2@cornell.edu 312771Sqtt2@cornell.edu#ifndef _ENV_VIRTUAL_SINGLE_CORE_H 412771Sqtt2@cornell.edu#define _ENV_VIRTUAL_SINGLE_CORE_H 512771Sqtt2@cornell.edu 612771Sqtt2@cornell.edu#include "../p/riscv_test.h" 712771Sqtt2@cornell.edu 812771Sqtt2@cornell.edu//----------------------------------------------------------------------- 912771Sqtt2@cornell.edu// Begin Macro 1012771Sqtt2@cornell.edu//----------------------------------------------------------------------- 1112771Sqtt2@cornell.edu 1212771Sqtt2@cornell.edu#undef RVTEST_FP_ENABLE 1312771Sqtt2@cornell.edu#define RVTEST_FP_ENABLE fssr x0 1412771Sqtt2@cornell.edu 1512771Sqtt2@cornell.edu#undef RVTEST_CODE_BEGIN 1612771Sqtt2@cornell.edu#define RVTEST_CODE_BEGIN \ 1712771Sqtt2@cornell.edu .text; \ 1812771Sqtt2@cornell.edu .global userstart; \ 1912771Sqtt2@cornell.eduuserstart: \ 2012771Sqtt2@cornell.edu init 2112771Sqtt2@cornell.edu 2212771Sqtt2@cornell.edu//----------------------------------------------------------------------- 2312771Sqtt2@cornell.edu// Pass/Fail Macro 2412771Sqtt2@cornell.edu//----------------------------------------------------------------------- 2512771Sqtt2@cornell.edu 2612771Sqtt2@cornell.edu#undef RVTEST_PASS 2712771Sqtt2@cornell.edu#define RVTEST_PASS li a0, 1; scall 2812771Sqtt2@cornell.edu 2912771Sqtt2@cornell.edu#undef RVTEST_FAIL 3012771Sqtt2@cornell.edu#define RVTEST_FAIL sll a0, TESTNUM, 1; 1:beqz a0, 1b; or a0, a0, 1; scall; 3112771Sqtt2@cornell.edu 3212771Sqtt2@cornell.edu//----------------------------------------------------------------------- 3312771Sqtt2@cornell.edu// Data Section Macro 3412771Sqtt2@cornell.edu//----------------------------------------------------------------------- 3512771Sqtt2@cornell.edu 3612771Sqtt2@cornell.edu#undef RVTEST_DATA_END 3712771Sqtt2@cornell.edu#define RVTEST_DATA_END 3812771Sqtt2@cornell.edu 3912771Sqtt2@cornell.edu//----------------------------------------------------------------------- 4012771Sqtt2@cornell.edu// Supervisor mode definitions and macros 4112771Sqtt2@cornell.edu//----------------------------------------------------------------------- 4212771Sqtt2@cornell.edu 4312771Sqtt2@cornell.edu#define MAX_TEST_PAGES 63 // this must be the period of the LFSR below 4412771Sqtt2@cornell.edu#define LFSR_NEXT(x) (((((x)^((x)>>1)) & 1) << 5) | ((x) >> 1)) 4512771Sqtt2@cornell.edu 4612771Sqtt2@cornell.edu#define PGSHIFT 12 4712771Sqtt2@cornell.edu#define PGSIZE (1UL << PGSHIFT) 4812771Sqtt2@cornell.edu 4912771Sqtt2@cornell.edu#define SIZEOF_TRAPFRAME_T ((__riscv_xlen / 8) * 36) 5012771Sqtt2@cornell.edu 5112771Sqtt2@cornell.edu#ifndef __ASSEMBLER__ 5212771Sqtt2@cornell.edu 5312771Sqtt2@cornell.edutypedef unsigned long pte_t; 5412771Sqtt2@cornell.edu#define LEVELS (sizeof(pte_t) == sizeof(uint64_t) ? 3 : 2) 5512771Sqtt2@cornell.edu#define PTIDXBITS (PGSHIFT - (sizeof(pte_t) == 8 ? 3 : 2)) 5612771Sqtt2@cornell.edu#define VPN_BITS (PTIDXBITS * LEVELS) 5712771Sqtt2@cornell.edu#define VA_BITS (VPN_BITS + PGSHIFT) 5812771Sqtt2@cornell.edu#define PTES_PER_PT (1UL << RISCV_PGLEVEL_BITS) 5912771Sqtt2@cornell.edu#define MEGAPAGE_SIZE (PTES_PER_PT * PGSIZE) 6012771Sqtt2@cornell.edu 6112771Sqtt2@cornell.edutypedef struct 6212771Sqtt2@cornell.edu{ 6312771Sqtt2@cornell.edu long gpr[32]; 6412771Sqtt2@cornell.edu long sr; 6512771Sqtt2@cornell.edu long epc; 6612771Sqtt2@cornell.edu long badvaddr; 6712771Sqtt2@cornell.edu long cause; 6812771Sqtt2@cornell.edu} trapframe_t; 6912771Sqtt2@cornell.edu#endif 7012771Sqtt2@cornell.edu 7112771Sqtt2@cornell.edu#endif 72