w568w
195 天前
有些朋友对 Arm 的称呼感到迷惑。之前博客写过一篇 Arm 相关术语命名的文章,摘几段过来供参考:
====分割线====
1. 「 Arm 架构」是一组精简指令集架构( RISC )的统称(注意,是一组,不是一个)。
2. 英国公司「 Arm Limited 」是这个架构的设计公司。
3. 字母全大写的「 ARM 」在很久以前是对橡果 RISC 机器和高级 RISC 机器两家公司的架构的称呼,这些架构今天已经不再使用,如果你想避免歧义,请尽量称呼「 Arm 」。
4. 「 Armv9 」和「 Armv8 」等是指 Arm 公司发布的一个架构版本 。
5. 「 Armv9.4-A 」是 Armv9 的一个最新的扩展,相当于架构的打补丁版本。后面的 -A 是指一个子版本,-A 指这个架构是用于应用场景( Application Profile )的,比如手机、电脑,还有 -R 用于实时场景( Real-time Profile ),例如无人驾驶和工业自动控制,-M 用于微控制器( Micro-controller Profile ),例如树莓派。
6. 「 AArch64 」是 Arm 处理器的一种执行状态 (注意,不是指令集,也不是架构!不要再说「 aarch64 架构」了!),在这个状态下,可以使用 64 位的寄存器,这一状态在 Armv8 中首次引入(所以 Armv7 及以前都是 32 位架构);相对应的,原先的 32 位状态被称为 AArch32 。同一个处理器可以通过设置一个专门的寄存器,在这两种状态之间切换,这就是为什么你可以在 64 位的系统上运行 32 位的程序。
7. 「 A64 」是 AArch64 状态下唯一的指令集 (注意,它才是指令集的名字);相应地,「 A32 」现在用来指代早期的 32 位指令集;「 T32 」是 A32 的一个子集,它特指 Thumb2 指令集(指令 16 位和 32 位长混合)。
8. 「 arm64 」这个说法,Arm 公司从来没有在正式文件中提过,这似乎是苹果、微软和 Linux 喜欢使用的简便称呼。我个人把它理解成一种移植( Port ),即一组指令集和架构的统称。
9 。 其他移植名还包括:armel 、armhf 、armv7hl 、armv7l 、armv8l 等。其中 armel 面向 armv4-v7 的 armeabi 接口,的兼容性最好(但性能可能最低)。再强调一次:这些名称不是标准,不同的发行版、公司、系统和项目都可能有不同的定义。例如,同一个架构,苹果设备上可能叫「 arm64 」,但在一些 Linux 中可能又叫「 aarch64 」了,非常混乱。如果你和别人交流移植相关的问题,务必明确你在说什么。目前比较通行的称呼一般来自 LLVM 和 Debian 。