Почему в обработчике прерываний К1921ВГ015 (RISC-V 32 бит), такое
странное сохранение контекста регистров с использованием регистра
t0? https://gitflic.ru/project/niiet/k1921vg015_sdk/blob
Файл memasm.h строка 138
// PLF_TRAP_STACK
// save context without trap stack
save_reg_offs t0, -1, sp // save original t0 (x5)
mv t0, sp // t0 = original sp
addi sp, sp, -TRAP_REGS_SPACE
andi sp, sp, -0x10 // align callee SP by 16
save_reg 1, sp // save ra (x1)
save_reg_offs t0, 2, sp // save original sp (x2)
load_reg_offs t0, -1, t0// restore original t0 (x5)
В функции, работу которой прервало прерывание, не испортится содержимое данных по адресу sp-4 (если они там есть, конечно)?
И почему не используется mscratch?
Как вообще правильно входить и выходить из прерывания (сохранять контекст)?
Спасибо!