C および C++ コードのオーバーフローおよびキャリーステータスフラグ

dspfns.h での European Telecommunications Standards Institute(ETSI)の基本操作の実装により、ステータスフラグ OverflowCarry が公開されます。これらのフラグは、C または C++ プログラムで使用するグローバル変数として使用可能です。以下に例を示します。

#include <dspfns.h>                  /* ETSI 組み込み関数をインクルードする */
#include <stdio.h>
...
const int BUFLEN=255;
int a[BUFLEN], b[BUFLEN], c[BUFLEN];
...
Overflow = 0;                        /* オーバーフローフラグをクリアする */
for (i = 0; i < BUFLEN; ++i) {
    c[i] = L_add(a[i], b[i]);        /* a[i] と b[i] のサチュレート加算 */
}
if (Overflow)
{
    fprintf(stderr, "Overflow on saturated addition\n");
}

通常、サチュレート関数には、オーバーフローについて固定作用があります。すなわち、オーバーフローフラグの設定は、明示的にクリアされるで保持されます。

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