// See LICENSE for license details #ifndef ENTRY_S #define ENTRY_S #include "encoding.h" #include "bits.h" .section .text.entry .align 2 .global trap_entry trap_entry: addi sp, sp, -32*REGBYTES sw x1, 1*REGBYTES(sp) sw x2, 2*REGBYTES(sp) sw x3, 3*REGBYTES(sp) sw x4, 4*REGBYTES(sp) sw x5, 5*REGBYTES(sp) sw x6, 6*REGBYTES(sp) sw x7, 7*REGBYTES(sp) sw x8, 8*REGBYTES(sp) sw x9, 9*REGBYTES(sp) sw x10, 10*REGBYTES(sp) sw x11, 11*REGBYTES(sp) sw x12, 12*REGBYTES(sp) sw x13, 13*REGBYTES(sp) sw x14, 14*REGBYTES(sp) sw x15, 15*REGBYTES(sp) #ifndef __riscv_abi_rve sw x16, 16*REGBYTES(sp) sw x17, 17*REGBYTES(sp) sw x18, 18*REGBYTES(sp) sw x19, 19*REGBYTES(sp) sw x20, 20*REGBYTES(sp) sw x21, 21*REGBYTES(sp) sw x22, 22*REGBYTES(sp) sw x23, 23*REGBYTES(sp) sw x24, 24*REGBYTES(sp) sw x25, 25*REGBYTES(sp) sw x26, 26*REGBYTES(sp) sw x27, 27*REGBYTES(sp) sw x28, 28*REGBYTES(sp) sw x29, 29*REGBYTES(sp) sw x30, 30*REGBYTES(sp) sw x31, 31*REGBYTES(sp) #endif csrr a0, mcause csrr a1, mepc mv a2, sp call handle_trap csrw mepc, a0 lw x1, 1*REGBYTES(sp) lw x2, 2*REGBYTES(sp) lw x3, 3*REGBYTES(sp) lw x4, 4*REGBYTES(sp) lw x5, 5*REGBYTES(sp) lw x6, 6*REGBYTES(sp) lw x7, 7*REGBYTES(sp) lw x8, 8*REGBYTES(sp) lw x9, 9*REGBYTES(sp) lw x10, 10*REGBYTES(sp) lw x11, 11*REGBYTES(sp) lw x12, 12*REGBYTES(sp) lw x13, 13*REGBYTES(sp) lw x14, 14*REGBYTES(sp) lw x15, 15*REGBYTES(sp) #ifndef __riscv_abi_rve lw x16, 16*REGBYTES(sp) lw x17, 17*REGBYTES(sp) lw x18, 18*REGBYTES(sp) lw x19, 19*REGBYTES(sp) lw x20, 20*REGBYTES(sp) lw x21, 21*REGBYTES(sp) lw x22, 22*REGBYTES(sp) lw x23, 23*REGBYTES(sp) lw x24, 24*REGBYTES(sp) lw x25, 25*REGBYTES(sp) lw x26, 26*REGBYTES(sp) lw x27, 27*REGBYTES(sp) lw x28, 28*REGBYTES(sp) lw x29, 29*REGBYTES(sp) lw x30, 30*REGBYTES(sp) lw x31, 31*REGBYTES(sp) #endif mret .weak handle_trap handle_trap: 1: j 1b #endif