--fpu=name

このオプションを使用すると、ターゲットの FPU アーキテクチャを指定できます。

このオプションを指定した場合、コマンドラインの暗黙的な FPU オプション(--cpu オプションなどを指定した場合など)がオーバーライドされます。

FPU アーキテクチャがすべて記載された一覧を表示するには、--fpu=list オプションを使用します。

Show/hide構文

--fpu=name

name には以下のいずれかを指定できます。

none

浮動小数点オプションが使用されないことを示します。このオプションを指定すると、浮動小数点コードは使用できません。コードに float 型が含まれていると、エラーが生成されます。

vfpv

これは vfpv2 と同じ意味です。

vfpv2

アーキテクチャ VFPv2 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。

Note

コマンドラインで armcc --thumb --fpu=vfpv2 を指定すると、コンパイラはできる限り Thumb 命令セットを使用してコードをコンパイルしますが、浮動小数点に深く依存した関数は ARM コードにコンパイルされます。この場合、事前定義された __thumb は無効になります。

vfpv3

アーキテクチャ VFPv3 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。VFPv3 は、浮動小数点の例外をトラップできないことを除いては、VFPv2 と下位互換性があります。

vfpv3_fp16

半精度拡張機能も備えたアーキテクチャ VFPv3 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。

vfpv3_d16

アーキテクチャ VFPv3-D16 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。

vfpv3_d16_fp16

半精度拡張機能も備えたアーキテクチャ VFPv3-D16 に適合する、ハードウェアのベクタ浮動小数点ユニットを選択します。

vfpv4

アーキテクチャ FPv4 に適合するハードウェア浮動小数点ユニットを選択します。

vfpv4_d16

アーキテクチャ VFPv4-D16 に適合するハードウェア浮動小数点ユニットを選択します。

fpv4-sp

アーキテクチャ FPv4 の単精度バリアントに適合するハードウェア浮動小数点ユニットを選択します。

softvfp

浮動小数点演算が浮動小数点ライブラリ fplib によって実行されるソフトウェア浮動小数点サポートを選択します。--fpu オプションが指定されていない場合、または FPU を備えていない CPU を選択した場合は、これがデフォルトになります。

softvfp+vfpv2

VFPv2 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。VFP ユニットを実装するシステムで ARM コードを Thumb コードとインターワークさせる場合は、このオプションを選択します。

このオプションを設定した場合、以下のようになります。

  • --thumb オプションを使用してコンパイルを実行すると、VFP 命令を使用する浮動小数点ライブラリにリンクされる点を除き、--fpu=softvfp を指定した場合とまったく同じように動作します。

  • --arm オプションを使用してコンパイルを実行すると、すべての関数にソフトウェア浮動小数点リンケージが用いられる点を除き、--fpu=vfpv2 を指定した場合と同じように動作します。したがって、このオプションを使用してコンパイルされた ARM 関数は、--fpu=softvfp を指定した場合と同じ方法で浮動小数点引数と結果を受け渡しますが、内部では VFP 命令が使用されます。

Note

C コードにおいて、softvfp+vfpv2--arm または --thumb オプションと組み合わせて使用すると、インターワークする浮動小数点コードがソフトウェア浮動小数点リンケージを使用するようにコンパイルされます。

softvfp+vfpv3

VFPv3 に適合するハードウェアのベクタ浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。VFPv3 ユニットを実装するシステム ARM コードを Thumb コードとインターワークさせる場合は、このオプションを選択します。

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 に適合するハードウェア浮動小数点ユニットとソフトウェア浮動小数点リンケージを選択します。

Show/hide使用法

--fpu オプションを使用して明示的に選択された FPU は、--cpu オプションを使用して暗黙的に選択された FPU を常にオーバーライドします。例えば、オプション --cpu=ARM1136JF-S --fpu=softvfp は、CPU の選択によってアーキテクチャ VFPv2 の使用が暗黙的に示されている場合でも、ソフトウェア浮動小数点ライブラリ fplib を使用するコードを生成します。

FPU の選択に影響を及ぼさずに浮動小数点リンケージを制御するには、--apcs=/softfp または --apcs=/hardfp を使用します。

Show/hide制限

MRRC および MCRR 命令がプロセッサ命令セットでサポートされている場合、コンパイラではハードウェア VFP アーキテクチャのみを指定できます(例えば、--fpu=vfpv3--fpu=softvfp+vfpv2)。MRRC および MCRR 命令は 4、4T、5T、および 6-M ではサポートされていません。したがって、コンパイラではこれらの CPU アーキテクチャをハードウェア VFP アーキテクチャとともに使用できません。

そのうえコンパイラは、--cpu および --fpu の組み合わせが有効であることを確認しません。アーキテクチャ上の制約は、コンパイラに関するもの以外にも存在します。例えば、ARMv7 より前のアーキテクチャでは VFPv3 はサポートされません。したがって、コンパイラによって許可される --fpu オプションと --cpu オプションの組み合わせは、必ずしも使用中のデバイスに変換されるとは限りません。

コンパイラは、スカラ浮動小数点演算のみを生成します。VFP ベクタ演算を使用するには、アセンブリコードを使用する必要があります。

softvfp では NEON サポートは無効です。

Show/hideデフォルト

デフォルトのターゲット FPU アーキテクチャは、使用された --cpu オプションに基づいて決定されます。

--cpu で指定された CPU に VFP コプロセッサがある場合、デフォルトのターゲット FPU アーキテクチャは、その CPU の 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 を呼び出すコードが生成されます。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711