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;