1. 背景
- 从1995年,ARMV4(主要对应ARM7 family)开始到现在ARM RISC体系结构到现在已经演化了20多年。从设计一开始ARM就关注到了低功耗
- 到2011年,所有的ARM-Cotex family都被设计成使用ARMV7架构。
1.1. 发展历程
- ARM7:采用ARMV4架构
- ARM9:ARMV4的变体
- ARM11:ARMV4的变体
- Cotex-A8:为了匹配不同的市场,ARMV7从Cotex-A8开始被划分为三种属性:Application-Profile、RealTime-Profile、Microcontroller-Profile
- Cotex-A9:引入了多核
- Cotex-A5:引入低功耗、低成本的网络互联
- Cotex-A7:引入了出色的能效管理,可以延长手机的续航时间
- Cotex-A15:引入了很多可选的扩展,如LPAE、虚拟化
1.2. 为何要引入ARMv8?
- 考虑到ARMV7被市场广泛接受,以及形成的成熟的生态,因此后续的体系结构升级需要做到向后兼容;
- 另外要让厂商能够愿意将软件系统迁移到新的体系结构,新的体系结构一定要有原体系结构不具有的优势
- 为了解决旧有架构遗留的问题,提供一种更加清晰的架构,同时考虑到将来的发展趋势,采用一种全新的架构来实现
2. ARMv8架构基本特性
- ARMV8目前只定义了Application profile
- ARMV8定义了48bit符号虚拟地址和达到48bit物理地址
- ARMV8采用了新的指令集A64
- ARMV8兼容ARMV7的指令
- A32和A64的转换只能发生在异常级别转换时
3. ARMv8两种执行状态
在ARMv8中引入了两种执行状态,如下:
- AArch32
- ARMv7的升级版
- A32(ARM)和T32(thumb),两种指令集
- ARMv8架构中,增加了一些指令
- 传统ARM的特权模式
- 通用寄存器位宽是32bit
- 使用单一CPSR保存PE状态
- 使用32bit的虚拟地址
- 支持协处理器
- AArch64
- 通用寄存器位宽是64bit
- 提供64bit PC,SP 和 ELR(exception-link-register)
- 新的指令集-A64,固定32bit的指令集
- 新的特权模式
- 使用一组PSTATE保存PE状态
- 不支持协处理器
- 使用64bit虚拟地址
AArch32(简称A32),兼容以前的arm指令,包括ARM和thumb指令,而AArch64,是全新的指令集,不兼容以前的arm指令。对于A64,使用64bit的虚拟地址,因此支持操作更大的memory空间。而pc也是64bit,因此可以在更大的memory空间上取指令执行。
可以认为AArch64(简称A64),是全新的ARM指令,和以前ARM指令完全不一样,因此区别也是比较大的。推出全新的指令集,是为了设计出更高性能的CPU。