<<<    Index    >>>
7-44
FLOATING-POINT UNIT
7.6.1.Operating on NaNs with Streaming SIMD Extensions
The information presented in Section 7.6., Â“Operating on NaNs”, is applicable to the floating-
point operations in the Streaming SIMD Extensions which operate on data in the floating-point
registers. Specific differences are noted in this section.
The invalid operation exception has a flag and a mask bit associated with it in MXCSR. The
mask bit determines how the an SNaN value is handled. If the invalid operation mask bit is set,
the SNaN is converted to a QNaN by setting the most-significant fraction bit of the value to 1.
The result is then stored in the destination operand and the invalid operation flag is set. If the
invalid operation mask is clear, an invalid operation fault is signaled and no result is stored in
the destination operand.
When a real operation or exception delivers a QNaN result, the value of the result depends on
the source operands, as shown in Table7-19. The exceptions to the behavior described in
Table7-19 are the MINPS and MAXPS instructions. If only one source is a NaN for these
instructions, the Src2 operand (either NaN or real value) is written to the result; this differs from
the behavior for other instructions as defined in Table7-19, which is to always write the NaN to
the result, regardless of which source operand contains the NaN. This approach for
MINPS/MAXPS allows NaN data to be screened out of the bounds-checking portion of an algo-
rithm. If instead of this behavior, it is required that the NaN source operand be returned, the
min/max functionality can be emulated using a sequence of instructions: comparison followed
by AND, ANDN and OR. 
In general Src1 and Src2 relate to an Katmai New Instruction instruction as follows:
ADDPS Src1, Src2/m128
Except for the rules given at the beginning of this section for encoding SNaNs and QNaNs, soft-
ware is free to use the bits in the significand of a NaN for any purpose. Both SNaNs and QNaNs
can be encoded to carry and store data, such as diagnostic information.
Table 7-18.  Rules for Generating QNaNs
Source Operands
QNaN Result
An SNaN and a QNaN.
The QNaN source operand.
Two SNaNs.
The SNaN with the larger significand converted 
into a QNaN.
Two QNaNs.
The QNaN with the larger significand.
An SNaN and a real value.
The SNaN converted into a QNaN.
A QNaN and a real value.
The QNaN source operand.
Neither source operand is a NaN and a floating-
point invalid operation exception is signaled.
The default QNaN real indefinite.
<<<    Index    >>>