ホーム フォーラム Texas Instruments 開発環境 Code Composer Studio 最大値、最小値計算の最適化

このトピックには1件の返信が含まれ、2人の参加者がいます。5 年、 6 ヶ月前Yojiro Yojiro さんが最後の更新を行いました。

2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • #6013 返信

    satoshi
    参加者

    最大値、最小値計算の最適化

    デバイス型番:TMS320F280049C

    お世話になっております。

    Code Composer Studio でTMS320F28004x向けのソフトウェアを開発しています。
    最大値、最小値を求める計算についてですが、

    `if(a > b) a = b;

    のようなコードをコンパイルすると、
    a, bがfloat32の時はMAXF32命令に生成されますが、
    a, bがint16の場合はCMPL命令とMOV命令が生成されています。

    a, bがint16の場合、MAX命令が生成されて欲しいのですが、
    どのように設定、コーディング等すればいいのでしょうか。

    最適化オプションについては、
    ・Optimization level:4(Whole Program Optimiztions)
    ・Speed vs. size trade-offs:5(speed)
    ・Floating Point mode:strict
    ・Allow reassociation of FP arithmetic:on
    となっています。

    #6020 返信
    Yojiro
    Yojiro
    従業員

    satoshiさん

    `if(a > b) a = b;

    のようなコードをコンパイルすると、
    a, bがfloat32の時はMAXF32命令に生成されますが、
    a, bがint16の場合はCMPL命令とMOV命令が生成されています。

    a, bがint16の場合、MAX命令が生成されて欲しいのですが、
    どのように設定、コーディング等すればいいのでしょうか。

    C2000シリーズのコンパイラには、組み込み(Intrinsics)関数がございます。
    この中に、MAX命令を出力する関数が用意されておりますので、こちらをご利用いただけますでしょうか。

    int __max(int dst, int src);    // If src > dst, copy src to dst

    Intrinsics関数には、上記の他にも色々な最適化に有用な関数が用意されております。
    コンパイラのユーザーズガイドのTable 7-6に一覧がございますので、必要に応じてご参照いただけますでしょうか。

    ご確認のほど、よろしくお願いいたします。

2件の投稿を表示中 - 1 - 2件目 (全2件中)