ARM Banked Register是否会发生冲突?

时间:2018-10-16 15:00:39

标签: arm cpu-registers

阅读ARM Generic Interrupt Controller第4.1.4节,其解释如下:

  

寄存器银行业务是指在同一地址提供多个寄存器副本。寄存器访问的属性确定要寻址寄存器的哪个副本。

我对at the same address有点困惑。 例如如果R12和R12_fiq是相同的寄存器,处理器将如何保证在fiq模式下R12中的原始数据不会被覆盖。并且需要保证吗?

我正在网上搜索很长时间。但是没用。 All the related questions对我没有帮助。

我认为Benoit在What does 'bank'ing a register mean?中的回答对您有所帮助,但我不确定。

谢谢。

------------更新-----

由于domen的回答,R8_usr和R8_fiq是两个不同的寄存器。对不起,我不知道如何投票给他。而且我还注意到在ensc的答案中提到了“专用”一词,也许他知道它们是不同的。但是由于我的描述不清,他没有强调这一点。

1 个答案:

答案 0 :(得分:1)

“ GIC”和R12没有太多共同之处。 GIC是一个控制器(由某些但不是每个ARM CPU使用),可以通过内存地址进行访问。根据安全模式和/或cpu节点,相同的地址可以提供对不同内部寄存器的视图。

R12是一个CPU寄存器。出于效率方面的考虑(例如,避免在退出FIQ时恢复其先前的值),FIQ模式具有专用的高位寄存器组(r8-r15)。

堆栈指针(r13)和lrr14)也可以存储,因此例如IRQ模式可以拥有自己的堆栈,也可以发出lr中的某些状态信号(例如,堆栈对齐)。