62 SPARC JPS1 Implementation Supplement: Fujitsu SPARC64 V • Release 1.0, 1 July 2002
SPARC64 V floating-point hardware has its specific range of computation. If either
the values of input operands or the value of the intermediate result shows that the
computation may not fall in the range that hardware provides, SPARC64 V generates
an
fp_exception_other
exception (tt = 022
16
) with FSR.ftt =02
16
(
unfinished_FPop
)
and the operation is taken over by software.
The kernel emulation routine completes the remaining floating-point operation in
accordance with the IEEE 754-1985 floating-point standard (impl. dep. #3).
SPARC64 V implements a nonstandard mode, enabled when FSR.NS is set (see
FSR_nonstandard_fp (NS) on page 18). Depending on the setting in FSR.NS, the
behavior of SPARC64 V with respect to the floating-point computation varies.
B.6.1
fp_exception_other
Exception (ftt=
unfinished_FPop
)
SPARC64 V may invoke an
fp_exception_other
(tt = 022
16
) exception with FSR.ftt =
unfinished_FPop
(ftt = 02
16
) in FsTOd, FdTOs, FADD(s,d), FSUB(s,d),
FsMULd(s,d), FMUL(s,d), FDIV(s,d), FSQRT(s,d) floating-point instructions. In
addition, Floating-point Multiply-Add/Subtract instructions generate the exception,
since the instruction is the combination of a multiply and an add/subtract operation:
FMADD(s,d), FMSUB(s,d), FNMADD(s,d), and FNMADD(s,d).
The following basic policies govern the detection of boundary conditions:
1. When one of the operands is a denormalized number and the other operand is a
normal non-zero floating-point number (except for a NaN or an infinity), an
fp_exception_other
with
unfinished_FPop
condition is signalled. The cases in which
the result is a zero or an overflow are excluded.
2. When both operands are denormalized numbers, except for the cases in which the
result is a zero or an overflow, an
fp_exception_other
with
unfinished_FPop
condition
is signalled.
3. When both operands are normal, the result before rounding is a denormalized
number and TEM.UFM =0, and
fp_exception_other
with
unfinished_FPop
condition
is signalled, except for the cases in which the result is a zero.
When the result is expected to be a constant, such as an exact zero or an infinity, and
an insignificant computation will furnish the result, SPARC64 V tries to calculate the
result without signalling an
unfinished_FPop
exception.