インテル® 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_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)