/** Copyright 2021, Haiku, Inc.* Distributed under the terms of the MIT License.*/#include <asm_defs.h>#include "arch_traps.h"#include "asm_offsets.h".align 4FUNCTION(SVec):PushTrapFrame IFRAME_rasd fp, IFRAME_sp(sp)csrr t0, sepcsd t0, IFRAME_epc(sp)csrr t0, sstatussd t0, IFRAME_status(sp)csrr t0, scausesd t0, IFRAME_cause(sp)csrr t0, stvalsd t0, IFRAME_tval(sp)mv a0, spcall STrapFUNCTION(SVecRet):ld t0, IFRAME_status(sp)csrw sstatus, t0ld t0, IFRAME_epc(sp)csrw sepc, t0PopTrapFrame IFRAME_rasretFUNCTION_END(SVec).align 4FUNCTION(SVecU):# switch to kernel stack, SSCRATCH will hold user SPcsrrw sp, sscratch, spPushTrapFrame IFRAME_racsrr t0, sscratchsd t0, IFRAME_sp(sp)csrr t0, sepcsd t0, IFRAME_epc(sp)csrr t0, sstatussd t0, IFRAME_status(sp)csrr t0, scausesd t0, IFRAME_cause(sp)csrr t0, stvalsd t0, IFRAME_tval(sp)ld tp, ARCH_STACK_thread(fp)la t0, SVeccsrw stvec, t0mv a0, spcall STrapFUNCTION(SVecURet):ld t0, IFRAME_status(sp)csrw sstatus, t0csrw sscratch, fp # save kernel SPla t0, SVecUcsrw stvec, t0ld tp, IFRAME_tp(sp)ld t0, IFRAME_epc(sp)csrw sepc, t0PopTrapFrame IFRAME_rasretFUNCTION_END(SVecU)