Developer Guide and Reference

Contents

Macro Functions to Read and Write Control Registers

The following macro functions enable you to read and write bits to and from the control register.
Exception State Macros
Macro Arguments
_MM_SET_EXCEPTION_STATE(x)
_MM_EXCEPT_INVALID
_MM_GET_EXCEPTION_STATE()
_MM_EXCEPT_DIV_ZERO
_MM_EXCEPT_DENORM
Macro Definitions
Write to and read from the six least significant control register bits, respectively.
_MM_EXCEPT_OVERFLOW
_MM_EXCEPT_UNDERFLOW
_MM_EXCEPT_INEXACT
The following example tests for a divide-by-zero exception.

Exception State Macros with _MM_EXCEPT_DIV_ZERO

Exception Mask Macros
Macro Arguments
_MM_SET_EXCEPTION_MASK(x)
_MM_MASK_INVALID
_MM_GET_EXCEPTION_MASK ()
_MM_MASK_DIV_ZERO
_MM_MASK_DENORM
Macro Definitions
Write to and read from bit 7 – 12 control register bits, respectively.
All six exception mask bits are always affected. Bits not set explicitly are cleared.
_MM_MASK_OVERFLOW
_MM_MASK_UNDERFLOW
_MM_MASK_INEXACT
To mask the overflow and underflow exceptions and unmask all other exceptions, use the macros as follows:
_MM_SET_EXCEPTION_MASK(MM_MASK_OVERFLOW | _MM_MASK_UNDERFLOW)
The following table lists the macros to set and get rounding modes, and the macro arguments that can be passed with the macros.
Rounding Mode
Macro Arguments
_MM_SET_ROUNDING_MODE(x)
_MM_ROUND_NEAREST
_MM_GET_ROUNDING_MODE()
_MM_ROUND_DOWN
Macro Definition
Write to and read from bits 13 and 14 of the control register.
_MM_ROUND_UP
_MM_ROUND_TOWARD_ZERO
To test the rounding mode for round toward zero, use the
_MM_ROUND_TOWARD_ZERO
macro as follows.
if (_MM_GET_ROUNDING_MODE() == _MM_ROUND_TOWARD_ZERO) { /* Rounding mode is round toward zero */ }
The following table lists the macros to set and get the flush-to-zero mode and the macro arguments that can be used.
Flush-to-Zero Mode
Macro Arguments
_MM_SET_FLUSH_ZERO_MODE(x)
_MM_FLUSH_ZERO_ON
_MM_GET_FLUSH_ZERO_MODE()
_MM_FLUSH_ZERO_OFF
Macro Definition
Write to and read from bit 15 of the control register.
To disable the flush-to-zero mode, use the
_MM_FLUSH_ZERO_OFF
macro.
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF)