4.2.2. __fp_status()

旧バージョンの ARM ライブラリには、浮動小数点環境でステータスワードを操作する __fp_status という名前の関数が実装されていました。 この関数は、__ieee_status と同じですが、旧式のステータスワードのレイアウトを使用します。 互換性を維持するため、ARM では現在も __fp_status 関数がサポートされています。__fp_status は、stdlib.h 内で定義されています。

__fp_status のプロトタイプを以下に示します。

unsigned int __fp_status(unsigned int mask, unsigned int flags);

Figure 4.2 は、__fp_status を使用したときのステータスワードのレイアウトを示しています。

Figure 4.2. 浮動小数点ステータスワードのレイアウト

浮動小数点ステータスワードのレイアウト

Figure 4.2 は以下のフィールドを示しています。

丸めモードを __fp_status 呼び出しで変更することはできません。

__fp_status 呼び出しの定義に加え、stdlib.h ではその引数に使用されるいくつかの定数も定義されています。

#define __fpsr_IXE  0x100000
#define __fpsr_UFE  0x80000
#define __fpsr_OFE  0x40000
#define __fpsr_DZE  0x20000
#define __fpsr_IOE  0x10000
#define __fpsr_IXC  0x10
#define __fpsr_UFC  0x8
#define __fpsr_OFC  0x4
#define __fpsr_DZC  0x2
#define __fpsr_IOC  0x1

例えば、無効演算例外をトラップして、他のすべての例外のトラップを無効にするには、以下のように記述します。

__fp_status(_fpsr_IXE | _fpsr_UFE | _fpsr_OFE |
            _fpsr_DZE | _fpsr_IOE, _fpsr_IOE);

不正確結果例外のトラップを無効にするには、以下のように記述します。

__fp_status(_fpsr_IXE, 0);

アンダーフロー sticky フラグをクリアするには、以下のように記述します。

__fp_status(_fpsr_UFC, 0);
Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0349AJ
Non-Confidential