與ARMv7-A兼容意味著诬滩,對于以AArch32執(zhí)行狀態(tài)運行的處理器萌狂,ARMv8-A架構(gòu)的AArch32狀態(tài)與ARMv7-A通用寄存器提供的視圖之間必須存在某些對應(yīng)關(guān)系冠场。
記住炬丸,在ARMv7-A體系結(jié)構(gòu)中秆麸,有16個供軟件使用的32位通用寄存器(R0-R15)初嘹。 其中15個(R0-R14)可用于通用數(shù)據(jù)存儲。剩下的R15寄存器是程序計數(shù)器(PC)沮趣,當硬件內(nèi)核執(zhí)行指令時屯烦,其值被改變。 軟件還可以訪問CPSR房铭,以及從SPSR中訪問先前執(zhí)行的模式中保存的CPSR副本驻龟。 在發(fā)生異常時,將CPSR復制到發(fā)生異常的模式的SPSR缸匪。
這些寄存器中的那個及在哪里被訪問翁狐,取決于軟件執(zhí)行的處理器模式和寄存器本身。 這被稱為banking豪嗽。 下圖中的陰影寄存器被存儲備份谴蔑。它們使用物理上獨立的存儲豌骏,并且通常只有進程執(zhí)行在特定模式下時才可以訪問。
在ARMv7中使用Banking來減少異常的延遲隐锭。 但是窃躲,這也意味著在相當多的可能的寄存器中,任何時候只有不到一半的寄存器可用钦睡。
ARMv8-A具有31個64位通用寄存器蒂窒,在所有異常級別都可以訪問。
當發(fā)生從AArch32到AArch64的異常時荞怒,有一些特殊的情況要考慮洒琢。 AArch64處理程序代碼可能需要訪問AArch32寄存器,因此架構(gòu)定義了映射以允許訪問AArch32寄存器褐桌。
X寄存器的[63:32]位在AArch32狀態(tài)下不可用衰抑,并且要么為0,要么是AArch64中寫入的最后值荧嵌。 沒有架構(gòu)用來保證它是什么值呛踊。 因此通常訪問AArch32的寄存器,用W寄存器表示啦撮。
該映射如下圖所示:
AArch32還將存儲的寄存器映射到另外無法被訪問的AArch64寄存器谭网。
AArch32中的SPSR和ELR_Hyp寄存器是只能使用系統(tǒng)指令訪問的額外寄存器。 它們沒有映射到AArch64架構(gòu)的AArch64通用寄存器空間赃春。 其中一些寄存器在AArch32和AArch64之間對應(yīng):
- SPSR_svc映射到SPSR_EL1愉择。
- SPSR_hyp映射到SPSR_EL2。
- ELR_hyp映射到ELR_EL2织中。
以下寄存器僅在AArch32執(zhí)行期間使用锥涕。 然而,在使用AArch64的EL1執(zhí)行期間抠璃,它們保持其狀態(tài)站楚,并且在該異常級別的AArch64執(zhí)行期間不可訪問。
- SPSR_abt.
- SPSR_und.
- SPSR_irq.
- SPSR_fiq.
如果要訪問SPSR寄存器搏嗡,只能在AArch64執(zhí)行在更高的異常級別的上下文切換期間進行訪問。
如果從一個使用AArch32的異常級別發(fā)生一個使用AArch64的異常級別拉一,則AArch64 ELR_ELn的高32位全為零采盒。
AArch32上的系統(tǒng)寄存器
在ARMv7-A架構(gòu)中,系統(tǒng)寄存器提供的功能是通過CP15寄存器訪問的蔚润。與AArch64的32位W寄存器映射到AArch32通用寄存器的映射方式大致相同磅氨,在CP15寄存器和AArch64系統(tǒng)寄存器之間有一個定義好的映射。
許多系統(tǒng)寄存器都是32位的嫡纠,在這種情況下烦租,AArch32和AArch64實例之間有一對一的映射關(guān)系延赌。 例如,AArch32 Hyp系統(tǒng)控制寄存器(HSCTLR)映射到SCTLR_EL2
一些AArch64系統(tǒng)寄存器是64位寬的叉橱,通常映射到兩個AArch32 CP15寄存器挫以。 例如:
- HCR映射到HCR_EL2 [31:0]。
- HCR2映射到HCR_EL2 [63:32]窃祝。
AArch32上的PSTATE
在ARMv8-A中掐松,傳統(tǒng)CPSR的不同組件被呈現(xiàn)為可獨立訪問的處理器狀態(tài)(PSTATE)字段。 PSTATE還包括特定于AArch32狀態(tài)的字段粪小。
下圖顯示了AArch32上的CPSR位分配:
給予的額外PSTATE位只能在AArch32訪問:
名稱 | 說明 |
---|---|
Q | 累積飽和標志大磺。 |
GE(4) | 大于或等于標志。 |
IT(8) | If-Then執(zhí)行位探膊。 |
J | J位杠愧。 |
T | T32位。 |
E | 字節(jié)順序位逞壁。 |
M | 模式字段殴蹄。 |
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/registers-at-aarch32