ARM および Thumb の浮動小数点ビルドオプション(ARMv6 以前)

ARM コードおよび Thumb コードで浮動小数点演算を実行するコードをコンパイルするには、以下のオプションがあります。

ARM のみ

浮動小数点演算が含まれた関数専用の ARM コードをコンパイラで生成するには、オプション --fpu vfpv2 を選択します。

オプション --fpu vfpv2 が選択されている場合、コンパイラは、コンパイルの対象が ARM と Thumb のどちらであるかにかかわらず、浮動小数点演算が含まれた任意の関数用の ARM コードを生成します。 ARMv6 以前の Thumb 命令セットには VFP 命令が含まれないので、VFP レジスタにアクセスできません。 この場合、ハードウェア VFP リンケージが使用されます。つまり、浮動小数点引数が浮動小数点レジスタに渡されます。

ARM 用にのみコンパイルする場合は、--fpu=softvfp+vfpv2 ではなく、--fpu=vfpv2 を使用します。 ソフトウェアリンケージによって、VFP と ARM の間で値を転送するときにオーバーヘッドが生じるため、転送が遅くなり、追加の令が必要になります。

ARM/Thumb の混合

ARM/Thumb の混合コードをコンパイラで生成するには、オプション --fpu softvfp+vfpv2 を選択します。

オプション --fpu softvfp+vfpv2 が選択されている場合は、すべての関数のコンパイルにソフトウェア浮動小数点リンケージが使用されます。 つまり、関数との浮動小数点引数受け渡しには、整数レジスタが使用されます。

ARMv6 以前の Thumb 命令セットには VFP 命令が含まれないので、VFP レジスタにアクセスできません。 Thumb 用にコンパイルする場合は、--fpu=softvfp+vfpv2 を設定して ARM コンパイラライブラリを使用できるようにすることにより、ソフトウェアリンケージを使用して VFP レジスタにアクセスできるようになります。

このライブラリは、ソフトウェア浮動小数点関数を含みます。これらは、ARM 用にコンパイルされ、VFP 命令を使用します。 これらのライブラリ関により、完全なソフトウェア浮動小数点関数に比べてパフォーマンスが向上し、コードサイズが小さくなります。

コードサイズまたはパフォーマンスを最適化するオプションは、どのコードをコンパイルしようとしているかによって異なります。 ARM 用にコンイルする場合は、オプション --fpu softvfp+vfpv2 および --fpu vfpv2 を使用して、必要なコードサイズとパフォーマンスがどちらのオプションによって実現されるかを調べることができます。

ARM と Thumb を混用する場合は、--fpu オプションを試してみて下さい。

Show/hide関連項目

参照

『アセンブラリファレンス』

その他の情報
Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0471GJ
Non-ConfidentialID051612