8.88 --fpu=name コンパイラオプション

ターゲットの FPU アーキテクチャを指定します。

このオプションを指定した場合、コマンドラインの暗黙的な FPU オプション (--cpu オプションなどを指定した場合など)がオーバーライドされます。
The コンパイラ sets a build attribute corresponding to name in the object file. The linker determines compatibility between object files, and selection of libraries, accordingly.
FPU アーキテクチャがすべて記載された一覧を表示するには、 --fpu=list オプションを使用します。

構文

--fpu= name
name には以下のいずれかを指定できます。
なし
浮動小数点オプションが使用されないことを示します。このオプションを指定すると、浮動小数点コードは使用できません。これにより、オブジェクトファイルと任意の FPU でビルドされた他のオブジェクトファイルとの互換性を確保できます。
This produces an error if your code contains float types.
vfp
これは vfpv2 と同じ意味です。
vfpv2
アーキテクチャ VFPv2 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。

コマンドラインで armcc --thumb --fpu=vfpv2 を指定すると、コンパイラはできる限り Thumb 命令セットを使用してコードをコンパイルしますが、浮動小数点に深く依存した関数は ARM コードにコンパイルされます。この場合、事前定義された __thumb は無効になります。
vfpv3
アーキテクチャ VFPv3 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。VFPv3 は、浮動小数点の例外をトラップできないことを除いては、VFPv2 と下位互換性があります。
vfpv3_fp16
半精度拡張機能も備えたアーキテクチャ VFPv3 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。
vfpv3_d16
アーキテクチャ VFPv3-D16 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。
vfpv3_d16_fp16
半精度拡張機能も備えたアーキテクチャ VFPv3-D16 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。
vfpv4
VFPv4 アーキテクチャに適合するハードウェア浮動小数点ユニットを選択します。
vfpv4_d16
アーキテクチャ VFPv4-D16 に適合するハードウェア浮動小数点ユニットを選択します。
fpv4-sp
アーキテクチャ FPv4 の単精度バリアントに適合するハードウェア浮動小数点ユニットを選択します。
fpv5_d16
アーキテクチャ FPv5-D16 に適合するハードウェア浮動小数点ユニットを選択します。
fpv5-sp
アーキテクチャ FPv5 の単精度バリアントに適合するハードウェア浮動小数点ユニットを選択します。
softvfp
浮動小数点演算が浮動小数点ライブラリ fplib によって実行されるソフトウェア浮動小数点サポートを選択します。--fpu オプションが指定されていない場合、 または FPU を備えていないプロセッサを選択した場合は、これがデフォルトになります。
softvfp+vfpv2
VFPv2 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。VFP ユニットを実装するシステムで ARM コードを Thumb コードとインターワークさせる場合は、このオプションを選択します。
このオプションを設定した場合、以下のようになります。
  • --thumb を使用してビルドすると、 VFP 命令を使用する浮動小数点ライブラリにリンクされている点を除き、--fpu=softvfp を指定した場合と同じように動作します。
  • --arm を使用してビルドすると、すべての関数にソフトウェア浮動小数点リンケージが用いられる点を除き、--fpu=vfpv2 を指定した場合と同じように動作します。したがって、このオプションを使用してコンパイルされた関数は、fpu=softvfp を指定した場合と同じ方法で浮動小数点引数と結果を受け渡しますが、内部では VFP 命令が使用されます。

C コードにおいて、softvfp+vfpv2--arm または --thumb オプションと組み合わせて使用すると、インターワークする浮動小数点コードがソフトウェア浮動小数点リンケージを使用するようにコンパイルされます。
softvfp+vfpv3
VFPv3 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+vfpv3_fp16
VFPv3-fp16 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+vfpv3_d16
VFPv3-D16 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+vfpv3_d16_fp16
VFPv3-D16-fp16 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+vfpv4
FPv4 に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+vfpv4_d16
VFPv4-D16 に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+fpv4-sp
FPv4-SP に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+fpv5_d16
FPv5-D16 に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。
softvfp+fpv5-sp
FPv5-SP に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。

使用法

--fpu オプションを使用して明示的に選択された FPU は、--cpu オプションを使用して暗黙的に選択された FPU を常にオーバーライドします。例えば、オプション--cpu=ARM1136JF-S --fpu=softvfpは、プロセッサの選択によってアーキテクチャVFPv2の使用が暗黙的に指定されている場合でも、ソフトウェア浮動小数点ライブラリfplibを使用するコードを生成します。
FPU の選択に影響を及ぼさずに浮動小数点リンケージを制御するには、 --apcs=/softfp または --apcs=/hardfp を使用します。

制約条件

MRRC および MCRR 命令がプロセッサ命令セットでサポートされている場合、コンパイラ ではハードウェア VFP アーキテクチャのみを指定できます(例えば、--fpu=vfpv3--fpu=softvfp+vfpv2)。MRRC および MCRR 命令は 4、4T、5T、および 6-M ではサポートされていません。したがって、コンパイラ ではこれらのアーキテクチャをハードウェア VFP アーキテクチャと共に使用できません。
そのうえ コンパイラ は、--cpu および --fpu の組み合わせが有効であることを確認しません。アーキテクチャ上の制約は、コンパイラに関するもの以外にも存在します。たとえば、ARMv7 より前のアーキテクチャでは VFPv3 はサポートされません。したがって、コンパイラ によって許可される --fpu オプションと --cpu オプションの組み合わせは、 必ずしも使用中のデバイスに変換されるとは限りません。
コンパイラは、スカラ浮動小数点演算のみを生成します。VFP ベクタ演算を使用するには、アセンブリコードを使用する必要があります。
softvfp では NEON サポートは無効です。

デフォルト

デフォルトのターゲット FPU アーキテクチャは、使用された --cpu オプションに基づいて決定されます。
--cpu で指定されたプロセッサに VFP コプロセッサがある場合、デフォルトのターゲット FPU アーキテクチャは、そのプロセッサの VFP アーキテクチャになります。例えば、オプションとして --cpu ARM1136JF-S を指定すると、--fpu vfpv2 というオプションが暗黙的に選択されます。VFP コプロセッサが存在する場合は、VFP 命令が生成されます。
ARM Linux アプリケーションを --arm_linux または --arm_linux_paths でビルドする場合、デフォルトは常にソフトウェア浮動小数点リンケージとなります。FPU が暗黙的に決まるような CPU を指定したとしても(--cpu=ARM1136JF-S など)、デフォルトはあくまで --fpu=softvfp+vfp であり、--fpu=vfp とはなりません。
VFP コプロセッサがない場合は、浮動小数点演算を実行するために、ソフトウェアの浮動小数点ライブラリ fplib を呼び出すコードが生成されます。
関連する概念
5.44 ベクタ浮動小数点(VFP)アーキテクチャ
5.49 浮動小数点計算と浮動小数点リンケージに対するコンパイラサポート
関連する参考文書
8.6 --apcs=qualifier...qualifier
8.7 --arm
8.42 --cpu=name コンパイラオプション
8.86 --fpmode=model
8.180 --thumb
10.15 __softfp
関連情報
MRC および MRC2
ARM および Thumb の浮動小数点ビルドオプション(ARMv6 以前)
ARM および Thumb の浮動小数点ビルドオプション(ARMv7 以降)
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.