次のマクロ関数を使用して、コントロール・レジスターの各ビットを読み書きできます。詳細は、「ストリーミング SIMD 拡張命令のレジスターを読み書きする組み込み関数」を参照してください。Itanium(R) ベースのシステムでは、これらのマクロではアクセスできない FPSR ビットもあります。詳細については、「Itanium(R) 命令のネイティブ組み込み関数」の getfpsr() および setfpsr() 組み込み関数を参照してください。
例外状態マクロ | マクロ引数 |
---|---|
_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_MASK_OVERFLOW と _MM_MASK_UNDERFLOW による例外マスクの変更 |
---|
_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 (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 による FTZ モードの変更 |
---|
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF) |