关于Arm架构

  1. 简述
  2. A32和T32指令集
  3. A64指令集
  4. Advanced SIMD

简述

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" 转载请保留原文链接及作者。

目录