2017-04-02 5 views
0

私のCプログラムでは、プロセッサがMULとADDではなくFMADD命令を使って* b + cを計算します。これを行うためにこれをコンパイラにどのように指定するのですか?また、コンパイル後のアセンブリコードでFMADD命令を見たいと思います。MCCのGCCでFused Multiply Addを有効にする方法

gccのバージョン4.9.2 ARM v7のプロセッサあなたが次のFPUのいずれかを持っている必要があり

+2

math.hから関数 'fma'を使用して、適切な-marchフラグをコンパイラに渡してください。 –

+0

できます。 fmaの代わりにFP_CONTRACTと通常の*、+演算子を使用することは可能ですか? #pragma STDC FP_CONTRACT ONを試しました。動作しませんでした –

+0

-marchおよび-ffp-contractフラグに応じて、プラグマが必要ない場合もあります。 GCCは、fmaをネイティブにサポートしているターゲットでは、デフォルトで縮小を行います。 –

答えて

0

  • vfpv4
  • vfpv4-D16
  • fpv4を-SP-D16
  • fpv5-sp-d16
  • fpv5-d16
  • ネオンvfpv4
  • FP-armv8
  • ネオン-FP-armv8
  • 暗号ネオン-FP-armv8

あなたはハードフロート ABIオプションを使用する必要があります。

An example with integers
An example with floats

特別な関数呼び出しを指定する必要はありません。コンパイラは、有益であると判断した場合に命令を使用します。


生成のため責任arm.cのコードはTARGET_FMAはバージョン '4' 以上FPUされた状態で、

case FMA: 
    if (TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FMA) 

あります。

関連する問題