关于Arm架构
简述
Arm架构是一个load-store类型的架构,地址范围取决于你所使用的是32-bit还是64-bit的架构。
ARM处理器是典型的RISC指令集处理器,其特点就是任何的内存访问只能通过load和store指令进行。数据处理指令只会操作在寄存器组上的数据。
Armv8是下一代的主架构,其是由Armv7迭代而来。它是一个64位的架构,但同时也兼容32位,因此它有两种执行状态。
AArch32
在AArch32的状态下,代码能够访问32位通用寄存器。代码执行在AArch32状态下只能使用A32和T32指令集,这个状态可以最大程度兼容Armv7-A架构。
同时在AArch32执行状态下又可以细分为A32的执行状态和T32的执行状态,这是由执行代码使用的指令集所决定的。
AArch64
在AArch64状态下,代码能够访问64位通用寄存器。这个状态是Armv8架构独有的状态,代码执行也只能使用A64指令集。
A32和T32指令集
A32指令由32位指令字长。T32指令既包含32位指令字长的指令又包含16位指令字长的指令。
A32指令集提供了一个综合全面的操作集。在A32指令集中,一条指令可以实现大多数功能,但是一些操作需要多条指令配合。T32指令集则可以提供更紧凑的代码实现。
T32指令集中的32位和16位组合起来所提供的指令操作几乎和A32指令集一模一样。但因为T32指令集得益于其更紧凑的代码结构,因此可以达到比A32代码更高的性能。
Arm6-M、Armv7-M、Armv8-M架构都不支持A32指令集。在这些架构下,绝对不要尝试将运行状态改到A32的执行状态。Armv7-A、Armv7-R、Armv8-A和Armv8-R架构同时支持A32和T32指令集。
在Armv8架构中,A32和T32指令集于Armv7架构相比大部分没有改变。但是它们指令运行在AArch32下。主要的改变是在Armv8中添加了一些新的指令,同时也废弃了一些指令操作。
Armv8中也定义了一个可选的Crypto Extension。这个扩展提供了用于图像加密和Hash的A32指令。
A64指令集
A64指令也是32位字长指令。
Armv8中介绍了一种新的32位字长的指令集A64,这种指令集拥有一种新的编码方式和汇编语言。A64指令集也仅可运行于AArch64的状态下。它提供了A32和T32指令集的功能的同时增加了虚拟地址的可寻址范围,同时还有一些其它的更改,包括减少了条件判断。
当然,Crypto Extension这个Armv8的可选扩展体提供了相应的A64指令操作。
Advanced SIMD
Advanced SIMD是一个64位与128位混合的单指令多数据技术,被用在高端的媒体和信号处理应用和嵌入式处理器当中。
Advanced SIMD虽然作为Arm处理器的一部分实现,但拥有自己的流水线和寄存器组。
Advanced SIMD的指令同时指出A32和A64指令集。A64的Advanced SIMD指令是基于A32的实现的。它们的主要区别如下:
- 不同的指令可访问范围和语法
- 在A32中有16个128位向量寄存器可用,A64下有32个可用
- A64的Advanced SIMD指令同时支持单精度和双精度的浮点数据类型
- A32只支持单精度的浮点数据类型
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yxhlfx@163.com
文章标题:关于Arm架构
本文作者:红尘追风
发布时间:2019-04-17, 15:36:43
原始链接:http://www.micernel.com/2019/04/17/%E5%85%B3%E4%BA%8EArm%E6%9E%B6%E6%9E%84/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。