--fpmode=model

このオプションを使用して、浮動小数点適合性を指定し、ライブラリの属性と浮動小数点の最適化を設定できます。

Show/hide構文

--fpmode=model

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

ieee_full

IEEE 標準で保証されているすべての機能、演算、および表現を、単精度および倍精度で使用できます。演算モードは、実行時に動的に選択できます。

このオプションでは以下のシンボルが定義されます。

__FP_IEEE
__FP_FENV_EXCEPTIONS
__FP_FENV_ROUNDING
__FP_INEXACT_EXCEPTION
ieee_fixed

最も近い値に丸め、不正確な例外の発生を報告しない IEEE 標準。

このオプションでは以下のシンボルが定義されます。

__FP_IEEE
__FP_FENV_EXCEPTIONS
ieee_no_fenv

最も近い値に丸め、例外を発生させない IEEE 標準。このモードはステートレスであり、Java の浮動小数点算術モデルと互換性があります。

このオプションではシンボル __FP_IEEE が定義されます。

none

どのような種類の浮動小数点型もソースコードには使用できないことを示す --fpmode=none --fpu=none の代わりに使用できます。

std

0 にフラッシュされる非正規化数があり、最も近い値に丸め、例外の発生を報告しない IEEE 有限値。標準 C および C++ との互換性があります。これがデフォルトです。

通常の有限値は、IEEE 標準によって予測されます。ただし、以下のような例外もあります。

  • IEEE モデルによって定義されているすべての状況で NaN と無限値が生成されるとは限りません。また、それらが生成される場合、異なる符号が使用される可能性があります。

  • 0 の符号は IEEE モデルによって予測される符号と異なる可能性があります。

fast

強力な浮動小数点の最適化を実行します。大幅なパフォーマンス向上と引き換えに、精度がやや落ちる可能性があります。このオプションではシンボル __FP_FAST が定義されます。

このオプションを選択すると、ISO C および C++ 標準に対して完全には準拠しない動作となります。ただし、数値的に頑健な浮動小数点プログラム正しく動作します。

以下のような多くの変換が実行される場合があります。

  • すべての浮動小数点引数を単精度数値として正確に表現でき、その結果が即座に単精度数値に変換される場合、倍精度数学関数は単精度数学関数変換される可能性があります。

    この変換は、選択したライブラリに単精度数学関数が含まれている場合(選択したライブラリが armccaeabi_glibc である場合)にのみ実行されます。

    以下に例を示します。

    float f(float a)
    {
        return sqrt(a);
    }
    

    上記のコードが以下のコードに変換されます。

    float f(float a)
    {
        return sqrtf(a);
    }.
    
  • 倍精度から単精度に変換された浮動小数点式は、必要に応じて単精度で評価されます。例えば、float y = (float)(x + 1.0)float y = (float)x + 1.0f として評価されます。

  • 浮動小数点定数による除算は、逆数を使用した乗算に置き換えられます。例えば、x / 3.0x * (1.0 / 3.0) として評価されます。

  • 数学関数が呼び出された後、errno の値が ISO C または C++ 標準に準拠するとは限りません。このため、コンパイラは sqrt() または sqrtf() を呼び出す代わりに、VFP 平方根命令をインライン展開できます。

Note

VFP を有効にするために、初期化コードが必要となる場合があります。詳細については、『コンパイラの使用』浮動小数点演算のハードウェアによる処理に関する制限(6-61 ページ)を参照して下さい。

Show/hideデフォルト

デフォルトでは、--fpmode=std が適用されます。

Show/hide関連項目

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