インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

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

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

例外状態マクロ

マクロ引数

_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 を読み書きします。

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) { 
/* 丸めモードはゼロ方向への丸め */ 
}

次の表は、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)

関連情報