ARMアセンブリがすべてのタイプのARMに共通であるかどうかに興味がありますか?たとえば、ARM
アセンブリで関数を記述した場合、Cortex、Nvidia Tegra、Qualcommなどでも同じように機能しますか?同じ命令セットまたはSIMD
エンジンを使用できますか、またはNEON
異なるARMプロセッサ(x86-64アセンブリなど)で使用できますか?
2 に答える
Cortex、Nvidia Tegra、およびQualcommを1つの文にリストします。これは、一種の混合概念です。CortexはARMによって開発されたCPUコアファミリの名前ですが、TegraはARM CPUを使用するシステムオンチップの名前です(例:Tegra 2/3)。チップはCortex-A9コアを使用します。
重要なのは、各ターゲットチップでサポートされている命令セットです。これは、使用するARMコアによって異なります。この既存のARMコアの概要は、出発点として適しています。また、 ARMのページからのこの図は、素晴らしく、迅速な概要を示しています。
確認すべきもう1つの優れたドキュメントは、ARMアーキテクチャリファレンスマニュアルARMv7-AおよびARMv7-Rエディションです(アクセスするには、無料のアカウントに登録する必要があります)。
NEONの時点で、ARM Webページによると、Cortex-A7、Cortex-A8、およびCortex-A15コアにはデフォルトでNEONが装備されていますが、Cortex-A5およびCortex-A9の場合はオプション機能です(つまり、チップメーカーがそれを含めることを決定します) 。この場合も、チップのデータシートを参照して、NEONがサポートされているかどうかを確認する必要があります。
NEON命令セットは1つだけです(これまでのところ)。それをサポートするARMプロセッサは、同じコードを実行できます。すべてのARMCPUにNEONのサポートが含まれているわけではありません。Androidはその存在をテストする機能を提供し、WindowsRTはそれを必要とします。基本的なARM命令セットにはいくつかのバージョンがあります。リストしたプロセッサの最近のリリースはすべて、最新の出荷バージョン(ARMv7A)をサポートしています。このレベルには、次の2つの命令セットが含まれています。
- ARM32ビット命令
- Thumb216ビット命令
どちらかまたは両方の使用を許可するかどうかは、オペレーティングシステム次第です。たとえば、WindowsRTは、Thumb2モードでのコードの実行のみを許可します。
言い換えれば、ARMの世界はIntelの世界よりも断片化されていません。NEONバージョン2、3、4、4.1などはありません。
コメントで述べたように、ARMv8 64ビット命令セットがありますが、コンシューマーハードウェアではまだ利用できません。