10.155 C55x コンパイラ組み込み関数

ARM コンパイラは、選択した TI C55x コンパイラ組み込み関数のエミュレーションをサポートします。

ユーザコード内で TI C55x コンパイラ組み込み関数を使用するには、標準のヘッダファイル c55x.h をインクルードします。c55x.h に提供されているコンパイラ組み込み関数を以下の表に示します。

表 10-17 コンパイルツールがサポートする TI C55x コンパイラ組み込み関数

組み込み関数
_a_lsadd _a_sadd _a_smac _a_smacr
_a_smas _a_smasr _abss _count
_divs _labss _lmax _lmin
_lmpy _lmpysu _lmpyu _lnorm
_lsadd _lsat _lshl _shrs
_lsmpy _lsmpyi _lsmpyr _lsmpysu
_lsmpysui _lsmpyu _lsmpyui _lsneg
_lsshl _lssub _max _min
_norm _rnd _round _roundn
_sadd _shl _shrs _smac
_smaci _smacr _smacsu _smacsui
_smas _smasi _smasr _smassu
_smassui _smpy _sneg _sround
_sroundn _sshl _ssub -

制約条件

C55x コンパイラ組み込み関数は、__qadd__qdbl、および __qsub コンパイラ組み込み関数をサポートするターゲットのみでサポートされています。それ以外のターゲットでは、エラーメッセージが生成される代わりに、__qadd__qdbl、または __qsub のうちの対応する関数の呼び出しが自動的に生成されます。

#include <limits.h>
#include <stdint.h>
#include <c55x.h>       // include TI C55x intrinsics
__asm int32_t asm_lsadd(int32_t a, int32_t b)
{
    qadd r0, r0, r1
    bx lr}
int32_t foo(int32_t a, int32_t b)
{
    int32_t c, d, e;
    c = asm_lsadd(a, b);  // assembly language saturating add
    d = __qadd(a, b);     // ARM intrinsic saturating add
    e = _lsadd(a, b);     // TI C55x saturating add
    return c == d == e;   // returns 1
}
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.