ARMv8-A把64位架構支持引入到ARM結構中,包括:
A、31個64位通用寄存器:X0~X30;其中,X30也作為過程連接寄存器PLR(Produce Link Register)使用;
B、棧指針寄存器SP(Stack Pointer);
C、程序計數器PC(Program Counter);
D、64位數據處理和擴展的虛擬尋址;
E、兩種主要的執行狀態:
AArch64: 64位執行狀態,包括該狀態異常模型、內存模型、程序員模型和指令集支持;
AArch32: 32位執行狀態,包括該狀態異常模型、內存模型、程序員模型和指令集支持;
F、ARMv8-A的兩種執行狀態(AArch64AArch32)主要支持三種指令集:
A32: 32位定長ARM指令集,需要4字節邊界對齊;通過不同架構變體增強部分,32位架構執行環境現稱為AArch32;
T32: 16位定長Thumb指令集,需要2字節邊界對齊,在Thumb2技術中增強為16位和32位混合長度指令集;部分32位架構執行環境現稱為AArch32;
A64: 32位定長指令集,提供與ARM和Thumb指令集的功能類似,是一種支持AArch64執行狀態的全新32位固定長度指令集;隨着ARMv8-A一起引入,是一種AArch64指令集;
ARM-ISA不斷改進,在ARMv8-A中,對A32和T32進行了一些增補,以保持與A64指令集一致;
AArch64特征:
1、提供31個64位通用寄存器:X0~X30;其中,X30也可用作過程連接寄存器PLR(Produce Link Register);
2、提供64位的程序計數器PC(Program Counter)、棧指針寄存器SP(Stack Pointer)和異常鏈接寄存器ELR(Exception Link Register);
3、提供32個128位的SIMD Vector和標量浮點寄存器SFP(Scalar Floating Point):V0~V31,也可用作64位寄存器;所有向量寄存器都是128位;雙精度標量浮點使用Vx[63:0],單精度標量浮點使用Vx[31:0];
4、定義了4個執行級別寄存器(Executing Level):EL0、EL1、EL2、EL3;
5、支持64位的虛擬尋址(Virtual Addressing);
6、定義一組PSTATE,用以保存PE(Processing Element)狀態;
AArch32特征:
1、提供31個32位通用寄存器:X0~X30;其中R3用作棧指針SP,R14用作鏈接寄存器LR,R15用作程序計數器PC,且R14需同時供異常鏈接寄存器ELR與過程連接寄存器PLR之用;
2、提供1個異常鏈接寄存器ELR,用以作為從HpyerVisior-Mode的異常返回之用;
3、提供32個64位的高級SIMD Vector和標量浮點寄存器(Scalar Floating Point);
4、提供A32與T32兩種指令集;
5、支持32位虛擬尋址(Virtual Addressing);
6、只使用CPSR保存PE(Processing Element)狀態;
7、提供1個32位異常特征寄存器ESR(Exception Syndrome Register),這個寄存器有自己特有的編碼格式,且按照不同的執行級別EL(Executing Level)划分,每個執行級別都有一個ESR,名字分別記作:ESR_EL0、ESR_EL1、ESR_EL2、ESR_EL3;
A64通用寄存器:
X0~X7 : 參數/結果寄存器;
X8 : 直接結果位置寄存器;
X9~X15 : 臨時寄存器;
X16 : 第1個內部過程調用寄存器或臨時寄存器IP0;
X17 : 第2個內部過程調用寄存器或臨時寄存器IP1;
X18 : 平台寄存器/臨時寄存器;
X19~X28: 程序計數器/調用備份寄存器;
X29 : 用作幀指針寄存器FP;
X30 : 用作過程鏈接寄存器PLR(Produce Link Register)
SP : 棧指針寄存器;
A32通用寄存器:
R0~R3 : 參數/結果寄存器;
R4~R11: 臨時寄存器;
R12 : 內部過程調用寄存器或臨時寄存器IP;
R13 : 棧指針寄存器SP;
R14 : 鏈接寄存器LR;
R15 : 程序計數器PC;
ARMv8支持的數據類型:
字節/B: 8位,Byte;
半字/H: 16位,HalfWord;
單字/S: 32位,SingleWord;
雙字/D: 64位,DoubleWord;
四字/V: 128位,QuadWord;
使用這幾種數據類型時,ARMv8的通用寄存器可區分為32位和64位兩種,可供程序使用:
64位寄存器用作32位寄存器時記作:Wn; (W:Word)
64位寄存器用作64位寄存器時記作:Xn;
128位的浮點向量寄存器可分為5種:
用作8位寄存器時記作 :Bn; (Byte,字節)
用作16位寄存器時記作 :Hn; (Half Word,半字)
用作32位寄存器時記作 :Sn; (Single Word,單字)
用作64位寄存器時記作 :Dn; (Double Word,雙字)
用作128位寄存器時記作:Qn; (Quad Word,四字)
n=0 ... 30;
