我正在尝试在程序集中为arm64(AArch64)编写FIQ处理程序。我已经写了一个IRQ处理程序,到目前为止运行良好。我只是想知道我的FIQ处理程序是否应该与我的IRQ看起来不同。
在AArh32中,FIQ曾经有存储寄存器R8-R12,LR,SP;不需要推到堆栈上。所以这与AArch32中的IRQ有一点不同,其中所有寄存器(LR,SP除外)都需要推入堆栈。
但我无法找到arm64中存储的寄存器(LR和SP除外)。 有人可以告诉我我的FIQ for arm64应该怎么做。如果有人可以指导我使用arm64的示例FIQ处理程序,那就更好了。
答案 0 :(得分:1)
理论上,您只需要在中断处理程序中保存那些被破坏的寄存器。但是从一般性的角度来看,你应该保存所有的通用寄存器(X0到X30)。
LR(链接寄存器)是arm64中X30的别名。您不需要保存SP,但是必须确保从FIQ处理程序返回时SP未更改,尤其是在使用汇编语言编写FIQ处理程序时。 C编译器将处理堆栈指针,因此您不必担心C ISR。