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

次のマクロ関数を使用して、コントロール・レジスタの各ビットを読み書きできます。詳細については、「設定操作」を参照してください。Itanium® ベースのシステムでは、これらのマクロではアクセスできない FPSR ビットもあります。詳細については、「Itanium® 命令のネイティブ組込み関数」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_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_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 */

}

 

ゼロ・フラッシュ・モード マクロ引数
_MM_SET_FLUSH_ZERO_MODE(x) _MM_FLUSH_ZERO_ON
_MM_GET_FLUSH_ZERO_MODE() _MM_FLUSH_ZERO_OFF
マクロの定義
コントロール・レジスタのビット15を読み書きします。
 

次の例では、ゼロ・フラッシュ・モードを無効にします。

_MM_FLUSH_ZERO_OFF によるゼロ・フラッシュ・モードの変更
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF)