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

次のマクロ関数を使用して、コントロール・レジスタの各ビットを読み書きできます。詳細は、「設定操作」を参照してください。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)