4.1 コンパイラ組み込み関数

コンパイラ組み込み関数は、コンパイラによって提供される関数です。コンパイラ組み込み関数を使用すると、アセンブリ言語での複雑な実装手段をとらずに、C および C++ ソースコードでドメイン固有の演算を簡単に組み込むことができます。

C 言語および C++ 言語は、広範囲に及ぶタスクに適していますが、例えばデジタル信号処理(DSP)などのアプリケーションの特定エリアのサポートは組み込まれていません。
特定のアプリケーションドメイン内には、通常、頻繁に実行する必要のあるドメイン固有のさまざまな演算があります。ただし、これらの演算は C または C++ では効率的に実装できない場合もよくあります。代表的な例としては、通常 DSP プログラミングで使用する 2 の補数の 32 ビット符号付き整数のサチュレート加算があります。以下の例に、サチュレート加算演算の C 実装を示します。
#include <limits.h>
int L_add(const int a, const int b)
{
    int c;
    c = a + b;
    if (((a ^ b) & INT_MIN) == 0)
    {
        if ((c ^ a) & INT_MIN)
        {
            c = (a < 0) ?INT_MIN : INT_MAX;
        }
    }
    return c;
}
コンパイラ組み込み関数を使用すると、コンパイラの命令選択よりも包括的にターゲットアーキテクチャの命令を実行できます。
コンパイラ組み込み関数は、C または C++ の関数呼び出しのように見えますが、コンパイル時に特定のシーケンスのローレベルの命令によって置換されます。コンパイラ組み込み関数を使用して実装した場合は、前のサンプルのサチュレート加算関数は以下の形式になります。
include <dspfns.h>    /* ETSI 組み込み関数をインクルードする */
...
int a, b, result;
...
result = L_add(a, b);  /* a と b のサチュレート加算 */
関連する概念
4.5 IRQ 割り込みと FIQ 割り込みの制御のためのコンパイラ組み込み関数
4.12 コンパイラで提供される NEON 組み込み関数
4.9 European Telecommunications Standards Institute(ETSI)の基本操作に対するコンパイラサポート
4.11 C コードの最適化のための Texas Instruments(TI)C55x コンパイラ組み込み関数
関連する参考文書
4.2 コンパイラ組み込み関数のパフォーマンス上の利点
4.3 ARM アセンブラ命令の組み込み
10.154 ETSI の基本操作
10.105 命令のコンパイラ組み込み関数
10.155 C55x コンパイラ組み込み関数
章 18 NEON サポートの使用
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.