mirror of
https://github.com/openhwgroup/cvw.git
synced 2025-06-27 08:50:26 -04:00
29 lines
No EOL
937 B
ArmAsm
29 lines
No EOL
937 B
ArmAsm
.section .text.init
|
|
.globl rvtest_entry_point
|
|
|
|
rvtest_entry_point:
|
|
|
|
# set up trap trap_handler
|
|
la t0, trap_handler # address of trap trap_handler
|
|
csrw mtvec, t0 # mtvec = pointer to trap handler
|
|
la t0, trapstack # address of trap stack
|
|
csrw mscratch, t0 # mscratch = pointer to trap stack
|
|
|
|
lw t0, 1(zero) # cause access or misaligned load fault to invoke trap handler
|
|
|
|
self_loop:
|
|
j self_loop
|
|
|
|
|
|
trap_handler:
|
|
csrrw tp, mscratch, tp # swap tp and mscratch to put a trap stack pointer in tp
|
|
sw t0, 0(tp) # save t0 on trap stack
|
|
csrr t0, mepc # read mepc
|
|
addi t0, t0, 4 # mepc + 4
|
|
csrw mepc, t0 # mepc = mpec + 4 (return to next instruction)
|
|
lw t0, 0(tp) # restore t0 from trap stack
|
|
csrrw tp, mscratch, tp # restore tp and trap stack pointer
|
|
mret
|
|
|
|
trapstack:
|
|
.word 0 # room to save a register |