5.51 浮動小数点リンケージと浮動小数点計算のコンパイラオプション

コンパイラオプションによって、浮動小数点リンケージと浮動小数点計算の種類が決まります。

必要な浮動小数点リンケージの種類と浮動小数点計算の種類を指定することにより、以下の表から、使用できるコンパイラコマンドラインオプションを特定できます。

表 5-13 浮動小数点リンケージと浮動小数点計算のコンパイラオプション

リンケージ 計算    
ハードウェア浮動小数点リンケージ ソフトウェア浮動小数点リンケージ ハードウェア浮動小数点コプロセッサ ソフトウェア浮動小数点ライブラリ(fplib) コンパイラオプション
なし なし
--fpu=softvfp
--apcs=/softfp
なし なし
--fpu=softvfp+vfpv2
--fpu=softvfp+vfpv3
--fpu=softvfp+vfpv3_fp16
--fpu=softvfp+vfpv3_d16
--fpu=softvfp+vfp3_d16_fp16
--fpu=softvfp+vfpv4
--fpu=softvfp+vfpv4_d16
--fpu=softvfp+fpv4-sp
--apcs=/softfp
なし なし
--fpu=vfp
--fpu=vfpv2
--fpu=vfpv3
--fpu=vfpv3_fp16
--fpu=vfpv3_dp16
--fpu=vfpv3_d16_fp16
--fpu=vpfv4
--fpu=vfpv4_d16
--fpu=fpv4-sp
--apcs=/hardfp
softvfp は、ソフトウェア浮動小数点リンケージを指定します。ソフトウェア浮動小数点リンケージが使用される場合は、以下のいずれかが必要となります。
  • 呼び出し元関数と呼び出し先関数は、--softvfp--fpu softvfp+vfpv2、--fpu softvfp+vfpv3--fpu softvfp+vfpv3_fp16softvfp+vfpv3_d16softvfp+vfpv3_d16_fp16softvfp+vfpv4softvfp+vfpv4_d16、または softvfp+fpv4-sp のいずれかのオプションを使用してコンパイルする必要があります。
  • 呼び出し元関数と呼び出し先関数は、 __softfp キーワードを使用して宣言する必要があります。
--fpu softvfp--fpu softvfp+vfpv2--fpu softvfp+vfpv3--fpu softvfp+vfpv3_fp16--fpu softvfpv3_d16--fpu softvfpv3_d16_fp16--fpu softvfp+vfpv4softvfp+vfpv4_d16、および softvfp+fpv4-sp の各オプションは、ファイル全体のソフトウェア浮動小数点リンケージを指定します。一方、__softfp キーワードを使用すると、関数単位でソフトウェア浮動小数点リンケージを指定できます。

個別のコンパイラオプションを使用して必要な浮動小数点リンケージの種類と浮動小数点計算の種類を選択しなくても、1 つのコンパイラオプション --fpu を使用して両方を一度に選択できます例えば、--fpu=softvfp+vfpv2ソフトウェア浮動小数点リンケージ、および計算用にハードウェアコプロセッサを選択します。softvfp を使用した場合は、ソフトウェア浮動小数点リンケージが指定されます。
--fpu オプションを使用する場合、ターゲットプロセッサで実装されている VFP アーキテクチャバージョンを把握しておく必要があります。--fpu=softvfp+... の代わりに、 --apcs=/softfp を使用できます。--cpu によって暗示されるあらゆる VFP アーキテクチャバージョンとのソフトウェアリンケージが指定されます。ARM アーキテクチャ向けプロシージャコール標準(AAPCS)の整数型または浮動小数点型のバリアントを要求する別の方法として、--apcs=/softfp および --apcs=/hardfp もあります。
ARM Linux をターゲットとした場合にハードウェア浮動小数点リンケージを使用するには、ハードウェア浮動小数点リンケージを暗示する --fpu オプションを明示的に指定する(例えば、--fpu=vfpv3)か、または --apcs=/hardfp を使用してコンパイルを実行する必要があります。ARM Linux ABI では、ハードウェア浮動小数点リンケージをサポートしません。これに対して、コンパイラは警告を発行します。
関連する概念
5.41 浮動小数点演算に対するコンパイラサポート
5.42 デフォルトで選択されるハードウェアまたはソフトウェアによる浮動小数点サポート
5.43 浮動小数点演算に関するハードウェアサポートとソフトウェアサポートの違いの例
5.44 ベクタ浮動小数点(VFP)アーキテクチャ
5.45 浮動小数点演算のハードウェアによる処理に関する制限
5.46 ベクタ浮動小数点(VFP)サポートコードの実装
5.47 半精度浮動小数点数に対するコンパイラおよびライブラリサポート
5.48 半精度浮動小数点数の形式
5.49 浮動小数点計算と浮動小数点リンケージに対するコンパイラサポート
5.50 浮動小数点リンケージの種類
関連する参考文書
5.52 コンパイラオプションの浮動小数点リンケージと浮動小数点計算の要件
5.53 プロセッサおよび暗黙の浮動小数点ユニット(FPU)
8.6 --apcs=qualifier...qualifier
8.88 --fpu=name コンパイラオプション
8.114 --library_interface=lib
10.15 __softfp
10.100 #pragma softfp_linkage、#pragma no_softfp_linkage
関連情報
『Procedure Call Standard for the ARM Architecture』
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.