随着开发工作逐渐迁移到 ARMv8 的 64 位平台,因此有必要尽快熟悉 ARMv8 架构。ARMv8 与先前较为熟悉的 ARMv7 架构有较大变化,其中非常重要的一点是支持了 A64 指令集,大大提升了处理器的性能。从目前的的了解来看,基本上 ARMv8 与上代架构的差别是非常大的。除了 A64 指令集之外,还有许多地方都有较大改动,下面列出几个目前比较关注的点:
· 执行状态与异常级别(异常级别为 EL0 - EL3)
· ARMv8 寄存器组(和先前完全不同的 64 位寄存器)
· A64 指令集(新的 64 位指令集)
· 内存管理(毕竟地址空间变成 64 位了)
· Memory Ordering
· 安全系统(例如普通世界和安全世界的切换)
本篇就依据上面的关键点对 ARMv8 架构进行一番探索。
ARMv8-A 架构基础
从上图可以看到,ARMv8 架构兼容了 ARMv7 架构的关键特性,例如支持 A32 和 T32 指令集,单精度浮点操作以及基于单精度浮点的 SIMD 指令。 ARMv7 为什么不支持双精度浮点的 SIMD 指令呢?也许是可用的浮点寄存器不够吧,AArch64 使用了 32*128-bit 的浮点寄存器,比 ARMv7 要多了一倍。