次のマクロ関数を使用して、コントロール・レジスターの各ビットを読み書きできます。
例外状態マクロ
|
マクロ引数
|
_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) {
/* 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)