arm32和64的区别

发布于2022-01-04 18:46:00

最近三个月的时间,都在进行解码库的arm架构汇编优化,包括arm32位汇编优化和arm64位汇编优化。在arm32位入门之后,只要掌握了两种架构的寄存器和指令集差异之后,就可以很快上手编写arm64位汇编代码了。下面就arm32位和arm6

1个回答
admin
网友回答2022-01-04

最近三个月的时间,都在进行解码库的arm架构汇编优化,包括arm32位汇编优化和arm64位汇编优化。在arm32位入门之后,只要掌握了两种架构的寄存器和指令集差异之后,就可以很快上手编写arm64位汇编代码了。下面就arm32位和arm64位架构、寄存器和指令差异进行分析总结。

架构差异

ARM是RISC(精简指令集)处理器,不同于x86指令集(CISC,复杂指令集)。

Arm32位是ARMV7架构,32位的,对应处理器为Cortex-A15等; iphone5以前均是32位的;

需要注意:ARMV7-A和ARMV7-R系列支持neon指令集,ARMv7-M系列不支持neon指令集。

ARM64位采用ARMv8架构,64位操作长度,对应处理器有Cortex-A53、Cortex-A57、Cortex-A73、iphones的A7和A8等,苹果手机从iphone 5s开始使用64位的处理器。

寄存器差异

4.1 ARM通用寄存器

ARM32位通用寄存器和ARM64位通用寄存器差异详见:ARM寄存器及其说明

4.2 NEON寄存器

ARM32位neon寄存器和ARM64位neon寄存器差异:

32位下 NEON寄存器:

包括:

32个S寄存器,S0~S31,(单字,32bit)

32个D寄存器,D0~D31,(双字,64bit)

16个Q寄存器,Q0~Q15,(四字,128bit)

使用注意:

1、NEON寄存器将每个寄存器均视为一个向量,该向量又包含1,2,4,8或16个大小和类型均相同的元素。也可以将各个元素当做标量访问。

NEON的这三种寄存器是重叠的,物理地址是一样的。

2、NEON寄存器在使用时,如果用到d8~d15寄存器,需要先入栈保存vpush {d8-d15},使用完之后要出栈vpop {d8-d15}。

64位下NEON寄存器:

包括:

32个B寄存器(B0~B31),8bit

32个H寄存器(H0~H31),半字 16bit

32个S寄存器(S0~S31) ,单字 32bit

32个D寄存器(D0~D31),双字 64bit

32个Q寄存器(V0~V31),四字 128bit

不同位数下寄存器之间的关系如下图所示:

其中S0是D0的低半部分,D0是V0的低半部分 。

arm32和64的区别

回到
顶部