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