diff options
author | Tim Newsome <tim@sifive.com> | 2016-06-08 19:53:57 -0700 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2016-07-18 18:51:54 -0700 |
commit | e291177a1cbeb6cef46aa5f8f019346c3202c3ef (patch) | |
tree | 2f5ad27f1a4163697dc0407b37e81ca5f84a3dc8 /debug/programs | |
parent | 6990284b8eab8d4e4f57f82ac8918913c5c63e97 (diff) | |
download | riscv-tests-e291177a1cbeb6cef46aa5f8f019346c3202c3ef.zip riscv-tests-e291177a1cbeb6cef46aa5f8f019346c3202c3ef.tar.gz riscv-tests-e291177a1cbeb6cef46aa5f8f019346c3202c3ef.tar.bz2 |
All tests pass with spike now.
I did comment out a couple.
Diffstat (limited to 'debug/programs')
-rwxr-xr-x | debug/programs/entry.S | 132 | ||||
-rw-r--r-- | debug/programs/mprv.S | 6 | ||||
-rw-r--r-- | debug/programs/regs.S | 5 |
3 files changed, 139 insertions, 4 deletions
diff --git a/debug/programs/entry.S b/debug/programs/entry.S new file mode 100755 index 0000000..e17b236 --- /dev/null +++ b/debug/programs/entry.S @@ -0,0 +1,132 @@ +#ifndef ENTRY_S +#define ENTRY_S + +#include "encoding.h" + +#define STACK_SIZE ((1 << 12) - 128) + +#ifdef __riscv64 +# define LREG ld +# define SREG sd +# define REGBYTES 8 +#else +# define LREG lw +# define SREG sw +# define REGBYTES 4 +#endif + + .section .text.entry + .globl _start +_start: + j handle_reset + +nmi_vector: + j nmi_vector + +trap_vector: + j trap_entry + +handle_reset: + la t0, trap_entry + csrw mtvec, t0 + csrwi mstatus, 0 + csrwi mideleg, 0 + csrwi medeleg, 0 + csrwi mie, 0 + + # initialize global pointer + la gp, _gp + + # initialize stack pointer + la sp, stack_top + + # perform the rest of initialization in C + j _init + + +trap_entry: + addi sp, sp, -32*REGBYTES + + SREG x1, 1*REGBYTES(sp) + SREG x2, 2*REGBYTES(sp) + SREG x3, 3*REGBYTES(sp) + SREG x4, 4*REGBYTES(sp) + SREG x5, 5*REGBYTES(sp) + SREG x6, 6*REGBYTES(sp) + SREG x7, 7*REGBYTES(sp) + SREG x8, 8*REGBYTES(sp) + SREG x9, 9*REGBYTES(sp) + SREG x10, 10*REGBYTES(sp) + SREG x11, 11*REGBYTES(sp) + SREG x12, 12*REGBYTES(sp) + SREG x13, 13*REGBYTES(sp) + SREG x14, 14*REGBYTES(sp) + SREG x15, 15*REGBYTES(sp) + SREG x16, 16*REGBYTES(sp) + SREG x17, 17*REGBYTES(sp) + SREG x18, 18*REGBYTES(sp) + SREG x19, 19*REGBYTES(sp) + SREG x20, 20*REGBYTES(sp) + SREG x21, 21*REGBYTES(sp) + SREG x22, 22*REGBYTES(sp) + SREG x23, 23*REGBYTES(sp) + SREG x24, 24*REGBYTES(sp) + SREG x25, 25*REGBYTES(sp) + SREG x26, 26*REGBYTES(sp) + SREG x27, 27*REGBYTES(sp) + SREG x28, 28*REGBYTES(sp) + SREG x29, 29*REGBYTES(sp) + SREG x30, 30*REGBYTES(sp) + SREG x31, 31*REGBYTES(sp) + + csrr a0, mcause + csrr a1, mepc + mv a2, sp + jal handle_trap + csrw mepc, a0 + + # Remain in M-mode after mret + li t0, MSTATUS_MPP + csrs mstatus, t0 + + LREG x1, 1*REGBYTES(sp) + LREG x2, 2*REGBYTES(sp) + LREG x3, 3*REGBYTES(sp) + LREG x4, 4*REGBYTES(sp) + LREG x5, 5*REGBYTES(sp) + LREG x6, 6*REGBYTES(sp) + LREG x7, 7*REGBYTES(sp) + LREG x8, 8*REGBYTES(sp) + LREG x9, 9*REGBYTES(sp) + LREG x10, 10*REGBYTES(sp) + LREG x11, 11*REGBYTES(sp) + LREG x12, 12*REGBYTES(sp) + LREG x13, 13*REGBYTES(sp) + LREG x14, 14*REGBYTES(sp) + LREG x15, 15*REGBYTES(sp) + LREG x16, 16*REGBYTES(sp) + LREG x17, 17*REGBYTES(sp) + LREG x18, 18*REGBYTES(sp) + LREG x19, 19*REGBYTES(sp) + LREG x20, 20*REGBYTES(sp) + LREG x21, 21*REGBYTES(sp) + LREG x22, 22*REGBYTES(sp) + LREG x23, 23*REGBYTES(sp) + LREG x24, 24*REGBYTES(sp) + LREG x25, 25*REGBYTES(sp) + LREG x26, 26*REGBYTES(sp) + LREG x27, 27*REGBYTES(sp) + LREG x28, 28*REGBYTES(sp) + LREG x29, 29*REGBYTES(sp) + LREG x30, 30*REGBYTES(sp) + LREG x31, 31*REGBYTES(sp) + + addi sp, sp, 32*REGBYTES + mret + + .bss + .align 4 +stack_bottom: + .skip STACK_SIZE +stack_top: +#endif diff --git a/debug/programs/mprv.S b/debug/programs/mprv.S index df346b3..2725b67 100644 --- a/debug/programs/mprv.S +++ b/debug/programs/mprv.S @@ -1,10 +1,10 @@ -#include "../riscv/encoding.h" +#include "../../env/encoding.h" #define PGSHIFT 12 - .global _start + .global main .section .text -_start: +main: # Set up a page table entry that maps 0x0... to 0x8... la t0, page_table srli t0, t0, PGSHIFT diff --git a/debug/programs/regs.S b/debug/programs/regs.S index 54b3961..65b62ec 100644 --- a/debug/programs/regs.S +++ b/debug/programs/regs.S @@ -8,6 +8,8 @@ # define REGBYTES 4 #endif +#include "../../env/encoding.h" + .global main main: j main @@ -44,10 +46,11 @@ write_regs: SREG x30, 224(a0) SREG x31, 232(a0) - csrr x1, 1 # fflags + csrr x1, CSR_MSCRATCH all_done: j all_done + .align 16 data: .fill 64, 8, 0 |