我可以对不同的ARM处理器(Cortex,Tegra等)使用相同的ARM程序集吗?

问题描述 投票:4回答:2

我是否对所有类型的ARM通用的ARM汇编感兴趣?例如,如果我在ARM程序集中编写某些功能,那么它在Cortex,Nvidia Tegra,高通等平台上是否可以正常工作?是否可以在不同的ARM处理器上使用相同的指令集或SIMD引擎或NEON(例如在x86-64汇编中)?

assembly arm cpu-architecture instruction-set
2个回答
4
投票

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

对您来说重要的是每个目标芯片支持的指令集,而这又取决于所使用的ARM内核。此overview of existing ARM cores可以是一个很好的起点。同样,ARM页面上的this diagram给出了很好的快速概述。

另一个要检查的好文件是ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition(您需要注册一个免费帐户才能访问它)。

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


3
投票

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

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

取决于操作系统是否允许使用两者之一。例如,WindowsRT将仅允许代码以Thumb2模式执行。

换句话说,ARM世界的分散程度不及Intel。没有NEON版本2、3、4、4.1等。

如评论中所述,有一个ARMv8 64位指令集,但在消费类硬件中尚不可用。

© www.soinside.com 2019 - 2024. All rights reserved.