NaN Propagation
The FPU macro supports NaN (payload) propagation to facilitate code debugging. After the CPU issues an instruction to the FPU, the source operands are examined and a NaN value detected, compared, and then propagated. Two operand instructions propagate NaN values as shown in Table 6-38.
The FMAC instruction is a special case with respect to NaN propagation as it consists of essentially three operands consisting of the two source operands (for the multiply) and a prior FMAC result value (i.e, the intermediate used for the accumulate function). The source operands are examined as usual but in conjunction with the selected intermediate result, and any NaN values detected are propagated as defined by Table 6-38.
FFLIM is also a three-operand instruction, though it is ultimately either a two-operand maximum or minimum operation based on the value of the source operand. NaN values detected are propagated as defined by Table 6-37.
Source Operands | Result | Condition | Notes | |
---|---|---|---|---|
Fb | Fs | |||
FPN | sNaN | Quieted sNaN | — | INVAL signaled |
FPN | qNaN | qNaN | — | - |
sNaN | FPN | Quieted sNaN | — | INVAL signaled |
qNaN | FPN | qNaN | — | - |
qNaN1 | qNaN2 | qNaN1 | qNaN1 ≥qNaN2 | - |
qNaN2 | qNaN2 > qNaN1 | - | ||
sNaN | qNaN | qNaN | — | INVAL signaled |
qNaN | sNaN | qNaN | — | INVAL signaled |
sNaN1 | sNaN2 | Quieted sNaN1 | sNaN1 ≥ sNaN2 | INVAL signaled |
Quieted sNaN2 | sNaN2 > sNaN1 |