コントロール・レジスターを読み書きするマクロ関数

次のマクロ関数を使用して、コントロール・レジスターの各ビットを読み書きできます。

Itanium® ベースのシステムでは、これらのマクロではアクセスできない FPSR ビットもあります。下記の関連情報を参照してください。

例外状態マクロ

マクロ引数

_MM_SET_EXCEPTION_STATE(x)

_MM_EXCEPT_INVALID

_MM_GET_EXCEPTION_STATE()

_MM_EXCEPT_DIV_ZERO

 

_MM_EXCEPT_DENORM

マクロの定義: コントロール・レジスターの最下位 6 ビットを読み書きします。

_MM_EXCEPT_OVERFLOW

 

_MM_EXCEPT_UNDERFLOW

 

_MM_EXCEPT_INEXACT

 

次の例では、ゼロ除算例外が発生したかどうかをテストします。

_MM_EXCEPT_DIV_ZERO マクロによる例外状態の確認


例外マスクマクロ

マクロ引数

_MM_SET_EXCEPTION_MASK(x)

_MM_MASK_INVALID

_MM_GET_EXCEPTION_MASK ()

_MM_MASK_DIV_ZERO

 

_MM_MASK_DENORM

マクロの定義: コントロール・レジスターのビット 7 ~ビット 12 を読み書きします。

Note icon

6 つの例外マスクビットのすべてが、常に影響を受けます。明示的にセットされないビットはクリアされます。



_MM_MASK_OVERFLOW

 

_MM_MASK_UNDERFLOW

 

_MM_MASK_INEXACT

 

オーバーフロー例外とアンダーフロー例外をマスクし、その他のすべての例外をマスク解除するには、次のようにマクロを使用します。
_MM_SET_EXCEPTION_MASK(MM_MASK_OVERFLOW | _MM_MASK_UNDERFLOW)

 

次の表は、丸めモードの取得および設定を行うマクロとその引数を示します。

丸めモード

マクロ引数

_MM_SET_ROUNDING_MODE(x)

_MM_ROUND_NEAREST

_MM_GET_ROUNDING_MODE()

_MM_ROUND_DOWN

マクロの定義: コントロール・レジスターのビット 13 とビット 14 を読み書きします。

_MM_ROUND_UP

 

_MM_ROUND_TOWARD_ZERO

 

丸めモードがゼロ方向への丸めになっているかどうかをテストするには、次のように _MM_ROUND_TOWARD_ZERO マクロを使用します。

if (_MM_GET_ROUNDING_MODE() == _MM_ROUND_TOWARD_ZERO) {

/* Rounding mode is round toward zero */

}

 

次の表は、FTZ モードの取得および設定を行うマクロとその引数を示します。

FTZ (Flush-to-Zero) モード

マクロ引数

_MM_SET_FLUSH_ZERO_MODE(x)

_MM_FLUSH_ZERO_ON

_MM_GET_FLUSH_ZERO_MODE()

_MM_FLUSH_ZERO_OFF

マクロの定義: コントロール・レジスターのビット 15 を読み書きします。

 

 

FTZ モードを無効にするには、_MM_FLUSH_ZERO_OFF マクロを使用します。

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF)

関連情報