我是否对所有类型的ARM通用的ARM汇编感兴趣?例如,如果我在ARM
程序集中编写某些功能,那么它在Cortex,Nvidia Tegra,高通等平台上是否可以正常工作?是否可以在不同的ARM处理器上使用相同的指令集或SIMD
引擎或NEON
(例如在x86-64汇编中)?
您在一个句子中列出了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-A7,Cortex-A8和Cortex-A15内核默认配备NEON,而Cortex-A5和Cortex-A9则是可选功能(即芯片制造商决定包括它)。同样,在这种情况下,您必须查阅芯片的数据表以检查是否支持NEON。
(到目前为止,只有一个NEON指令集。任何支持它的ARM处理器都可以运行相同的代码。并非所有的ARM CPU都包括对NEON的支持。 Android提供了一项功能来测试其存在性,而WindowsRT需要它。基本的ARM指令集有多种版本。您列出的处理器的所有最新版本都支持最新的发行版本(ARMv7A)。此级别包含两个指令集:
取决于操作系统是否允许使用两者之一。例如,WindowsRT将仅允许代码以Thumb2模式执行。
换句话说,ARM世界的分散程度不及Intel。没有NEON版本2、3、4、4.1等。
如评论中所述,有一个ARMv8 64位指令集,但在消费类硬件中尚不可用。