概述
ARMv8是支持64位指令集的处理器架构,可以包含32bit和64bit两种执行状态,分别为AArch64和AAch32,两种状态的切换需要先进入到异常模式EL中。AArch32和ARMv7a较为类似。AArch64常吃那个也被写作ARM64。
ARMV7:Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15, and Cortex-A17
ARMV8: Cortex-A53 and Cortex-A57
ARMv8通常支持由ARMv7编写的可执行程序,但是需要将ARMv8切换到aarch32模式。但是aarch64的代码无法在armv7架构运行。
切换模式
状态的切换只能发生在异常或复位时
如果是64bit的cpu,则支持AArch64指令集和AArch32指令集
若想使用32位指令集,则可以通过armv7的arm指令集,即通过cpsr寄存器来修改模式,其中cpsr.bit4是模式位,在ARMv7中此位默认1(32bit模式),ARMv8中将其设置成0即可。
若想使用64位指令集,由于在64位指令集中已移除cpsr寄存器,它的类似功能被一组寄存器 替代,这个寄存器组 叫做PSTATE,可通过相应的寄存器设置。
优势
1、64位指令集提高了性能,寄存器增多,aapcs约定在函数调用时超过4个参数时,ARMv7会采用栈来传参,这样会降低响应速度,而在ARMv8体系下,可以有8个寄存器参与函数调用过程中的传参。
2、64位的寄存器在运算过程中速度也更快,相同的机器周期能够完成的运算也会提高
3、aarch64能够访问更大的虚拟地址空间,虽然LPAE将32位的处理器物理地址总线扩展到了40bit,但是它并不拓展虚拟地址范围,因此应用程序能够访问的地址空间仍然是4GB
4、使用64位系统会造成内存的增大,每个指针都需要存储在内存中,而这是从4字节到8字节的增加。此外内存空间的加大也会造成cache命中率的下降,这在一定程度上降低了性能。