次のマクロ関数を使用して、コントロール・レジスターの各ビットを読み書きできます。
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_SET_EXCEPTION_MASK(x) |
_MM_MASK_INVALID |
_MM_GET_EXCEPTION_MASK () |
_MM_MASK_DIV_ZERO |
|
_MM_MASK_DENORM |
マクロの定義: コントロール・レジスターのビット 7 ~ビット 12 を読み書きします。
|
_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)