4

我对所有类型的 ARM 是否通用 ARM 程序集感兴趣?例如,如果我在ARM汇编中编写一些函数,它会在 Cortex、Nvidia Tegra、Qualcomm 等上同样工作吗?我可以在不同的 ARM 处理器(如 x86-64 程序集)上使用相同的指令集或SIMD引擎吗?NEON

4

2 回答 2

5

您在一句话中列出了Cortex,Nvidia Tegra和Qualcomm,这是一种混合概念-Cortex是ARM开发的CPU内核系列的名称,而Tegra命名为使用ARM CPU的片上系统,例如Tegra 2/3芯片使用 Cortex-A9 内核。

对您来说重要的是每个目标芯片支持的指令集,这又取决于所使用的 ARM 内核。现有 ARM 内核的概述可能是一个很好的起点。此外,来自 ARM 页面的这张图表提供了一个很棒的快速概览。

另一个需要检查的好文档是ARM 架构参考手册 ARMv7-A 和 ARMv7-R 版本(您需要注册一个免费帐户才能访问它)。

截至 NEON,根据 ARM 网页,Cortex-A7Cortex-A8Cortex-A15内核默认配备 NEON,而对于Cortex-A5Cortex-A9,它是可选功能(即芯片制造商决定是否包含它) . 同样,在这种情况下,您必须查阅芯片的数据表以检查是否支持 NEON。

于 2012-10-30T14:32:24.357 回答
3

只有一个 NEON 指令集(到目前为止)。任何支持它的 ARM 处理器都能够运行相同的代码。并非所有 ARM CPU 都支持 NEON。Android 提供了一个函数来测试它的存在,而 WindowsRT 需要它。基本 ARM 指令集有多个版本。您列出的所有最新版本的处理器都支持最新发布的版本 (ARMv7A)。此级别包含两个指令集:

  1. ARM 32 位指令
  2. Thumb2 16 位指令

如果允许使用其中一个/两个,则取决于操作系统。例如,WindowsRT 将只允许代码在 Thumb2 模式下执行。

换句话说,ARM 的世界没有英特尔那么分散。没有 NEON 版本 2、3、4、4.1 等。

正如评论中提到的,有一个 ARMv8 64 位指令集,但尚未在消费类硬件中提供。

于 2012-10-30T14:18:51.267 回答