112771Sqtt2@cornell.edu#include "riscv_test.h" 212771Sqtt2@cornell.edu 312771Sqtt2@cornell.edu#if __riscv_xlen == 64 412771Sqtt2@cornell.edu# define STORE sd 512771Sqtt2@cornell.edu# define LOAD ld 612771Sqtt2@cornell.edu# define REGBYTES 8 712771Sqtt2@cornell.edu#else 812771Sqtt2@cornell.edu# define STORE sw 912771Sqtt2@cornell.edu# define LOAD lw 1012771Sqtt2@cornell.edu# define REGBYTES 4 1112771Sqtt2@cornell.edu#endif 1212771Sqtt2@cornell.edu 1312771Sqtt2@cornell.edu#define STACK_TOP (_end + 4096) 1412771Sqtt2@cornell.edu 1512771Sqtt2@cornell.edu .section ".text.init","ax",@progbits 1612771Sqtt2@cornell.edu .globl _start 1712771Sqtt2@cornell.edu_start: 1812771Sqtt2@cornell.edu j handle_reset 1912771Sqtt2@cornell.edu 2012771Sqtt2@cornell.edu /* NMI vector */ 2112771Sqtt2@cornell.edunmi_vector: 2212771Sqtt2@cornell.edu j wtf 2312771Sqtt2@cornell.edu 2412771Sqtt2@cornell.edutrap_vector: 2512771Sqtt2@cornell.edu j wtf 2612771Sqtt2@cornell.edu 2712771Sqtt2@cornell.eduhandle_reset: 2812771Sqtt2@cornell.edu la t0, trap_vector 2912771Sqtt2@cornell.edu csrw mtvec, t0 3012771Sqtt2@cornell.edu la sp, STACK_TOP - SIZEOF_TRAPFRAME_T 3112771Sqtt2@cornell.edu csrr t0, mhartid 3212771Sqtt2@cornell.edu slli t0, t0, 12 3312771Sqtt2@cornell.edu add sp, sp, t0 3412771Sqtt2@cornell.edu csrw mscratch, sp 3512771Sqtt2@cornell.edu la a0, userstart 3612771Sqtt2@cornell.edu j vm_boot 3712771Sqtt2@cornell.edu 3812771Sqtt2@cornell.edu .globl pop_tf 3912771Sqtt2@cornell.edupop_tf: 4012771Sqtt2@cornell.edu LOAD t0,33*REGBYTES(a0) 4112771Sqtt2@cornell.edu csrw sepc,t0 4212771Sqtt2@cornell.edu LOAD x1,1*REGBYTES(a0) 4312771Sqtt2@cornell.edu LOAD x2,2*REGBYTES(a0) 4412771Sqtt2@cornell.edu LOAD x3,3*REGBYTES(a0) 4512771Sqtt2@cornell.edu LOAD x4,4*REGBYTES(a0) 4612771Sqtt2@cornell.edu LOAD x5,5*REGBYTES(a0) 4712771Sqtt2@cornell.edu LOAD x6,6*REGBYTES(a0) 4812771Sqtt2@cornell.edu LOAD x7,7*REGBYTES(a0) 4912771Sqtt2@cornell.edu LOAD x8,8*REGBYTES(a0) 5012771Sqtt2@cornell.edu LOAD x9,9*REGBYTES(a0) 5112771Sqtt2@cornell.edu LOAD x11,11*REGBYTES(a0) 5212771Sqtt2@cornell.edu LOAD x12,12*REGBYTES(a0) 5312771Sqtt2@cornell.edu LOAD x13,13*REGBYTES(a0) 5412771Sqtt2@cornell.edu LOAD x14,14*REGBYTES(a0) 5512771Sqtt2@cornell.edu LOAD x15,15*REGBYTES(a0) 5612771Sqtt2@cornell.edu LOAD x16,16*REGBYTES(a0) 5712771Sqtt2@cornell.edu LOAD x17,17*REGBYTES(a0) 5812771Sqtt2@cornell.edu LOAD x18,18*REGBYTES(a0) 5912771Sqtt2@cornell.edu LOAD x19,19*REGBYTES(a0) 6012771Sqtt2@cornell.edu LOAD x20,20*REGBYTES(a0) 6112771Sqtt2@cornell.edu LOAD x21,21*REGBYTES(a0) 6212771Sqtt2@cornell.edu LOAD x22,22*REGBYTES(a0) 6312771Sqtt2@cornell.edu LOAD x23,23*REGBYTES(a0) 6412771Sqtt2@cornell.edu LOAD x24,24*REGBYTES(a0) 6512771Sqtt2@cornell.edu LOAD x25,25*REGBYTES(a0) 6612771Sqtt2@cornell.edu LOAD x26,26*REGBYTES(a0) 6712771Sqtt2@cornell.edu LOAD x27,27*REGBYTES(a0) 6812771Sqtt2@cornell.edu LOAD x28,28*REGBYTES(a0) 6912771Sqtt2@cornell.edu LOAD x29,29*REGBYTES(a0) 7012771Sqtt2@cornell.edu LOAD x30,30*REGBYTES(a0) 7112771Sqtt2@cornell.edu LOAD x31,31*REGBYTES(a0) 7212771Sqtt2@cornell.edu LOAD a0,10*REGBYTES(a0) 7312771Sqtt2@cornell.edu sret 7412771Sqtt2@cornell.edu 7512771Sqtt2@cornell.edu .global trap_entry 7612771Sqtt2@cornell.edutrap_entry: 7712771Sqtt2@cornell.edu csrrw sp, sscratch, sp 7812771Sqtt2@cornell.edu 7912771Sqtt2@cornell.edu # save gprs 8012771Sqtt2@cornell.edu STORE x1,1*REGBYTES(sp) 8112771Sqtt2@cornell.edu STORE x3,3*REGBYTES(sp) 8212771Sqtt2@cornell.edu STORE x4,4*REGBYTES(sp) 8312771Sqtt2@cornell.edu STORE x5,5*REGBYTES(sp) 8412771Sqtt2@cornell.edu STORE x6,6*REGBYTES(sp) 8512771Sqtt2@cornell.edu STORE x7,7*REGBYTES(sp) 8612771Sqtt2@cornell.edu STORE x8,8*REGBYTES(sp) 8712771Sqtt2@cornell.edu STORE x9,9*REGBYTES(sp) 8812771Sqtt2@cornell.edu STORE x10,10*REGBYTES(sp) 8912771Sqtt2@cornell.edu STORE x11,11*REGBYTES(sp) 9012771Sqtt2@cornell.edu STORE x12,12*REGBYTES(sp) 9112771Sqtt2@cornell.edu STORE x13,13*REGBYTES(sp) 9212771Sqtt2@cornell.edu STORE x14,14*REGBYTES(sp) 9312771Sqtt2@cornell.edu STORE x15,15*REGBYTES(sp) 9412771Sqtt2@cornell.edu STORE x16,16*REGBYTES(sp) 9512771Sqtt2@cornell.edu STORE x17,17*REGBYTES(sp) 9612771Sqtt2@cornell.edu STORE x18,18*REGBYTES(sp) 9712771Sqtt2@cornell.edu STORE x19,19*REGBYTES(sp) 9812771Sqtt2@cornell.edu STORE x20,20*REGBYTES(sp) 9912771Sqtt2@cornell.edu STORE x21,21*REGBYTES(sp) 10012771Sqtt2@cornell.edu STORE x22,22*REGBYTES(sp) 10112771Sqtt2@cornell.edu STORE x23,23*REGBYTES(sp) 10212771Sqtt2@cornell.edu STORE x24,24*REGBYTES(sp) 10312771Sqtt2@cornell.edu STORE x25,25*REGBYTES(sp) 10412771Sqtt2@cornell.edu STORE x26,26*REGBYTES(sp) 10512771Sqtt2@cornell.edu STORE x27,27*REGBYTES(sp) 10612771Sqtt2@cornell.edu STORE x28,28*REGBYTES(sp) 10712771Sqtt2@cornell.edu STORE x29,29*REGBYTES(sp) 10812771Sqtt2@cornell.edu STORE x30,30*REGBYTES(sp) 10912771Sqtt2@cornell.edu STORE x31,31*REGBYTES(sp) 11012771Sqtt2@cornell.edu 11112771Sqtt2@cornell.edu csrrw t0,sscratch,sp 11212771Sqtt2@cornell.edu STORE t0,2*REGBYTES(sp) 11312771Sqtt2@cornell.edu 11412771Sqtt2@cornell.edu # get sr, epc, badvaddr, cause 11512771Sqtt2@cornell.edu csrr t0,sstatus 11612771Sqtt2@cornell.edu STORE t0,32*REGBYTES(sp) 11712771Sqtt2@cornell.edu csrr t0,sepc 11812771Sqtt2@cornell.edu STORE t0,33*REGBYTES(sp) 11912771Sqtt2@cornell.edu csrr t0,sbadaddr 12012771Sqtt2@cornell.edu STORE t0,34*REGBYTES(sp) 12112771Sqtt2@cornell.edu csrr t0,scause 12212771Sqtt2@cornell.edu STORE t0,35*REGBYTES(sp) 12312771Sqtt2@cornell.edu 12412771Sqtt2@cornell.edu move a0, sp 12512771Sqtt2@cornell.edu j handle_trap 126