The following section provides information on floating-point processing on the POWER2 and POWER2 processors.
POWER and POWER2 floating-point hardware performs all calculations in IEEE double-precision mode. The hardware does not directly perform single-precision calculations, but it is capable of generating single-precision results by using the following sequence of operations:
This sequence always produces exactly the same bit-for-bit result, as if the single-precision IEEE operation had been performed.
As on the PowerPC machines, conversions from single-precision to double-precision have no negative performance impacts, but rounding operations from double-precision to single-precision do. Since the performance penalty of rounding operations would normally impact all single-precision computations on a POWER or POWER2 machine, the compiler attempts to reduce the number of rounding operations. It does this under the control of the norndsngl suboption of the -qfloat option.
When you specify the norndsgnl suboption, the compiler leaves all intermediate results of single-precision operations in double-precision. That is, it suppresses the rounding operation in the above sequence. The compiler only performs a rounding operation on the final result of an expression, when it stores that result into a single-precision memory location.
The following example shows the difference between using the norndsngl and the rndsngl suboptions:
REAL(4) a,b,c,d ... a = b + c + d
With norndsngl, the compiler does the following:
With rndsngl, the compiler follows the same steps except that it performs rounding in the first step. Note that norndsngl maintains increased precision for intermediate results and improves performance, but you may need to specify rndsngl to produce results that are bit-for-bit identical to those computed on other systems.
norndsngl is the default when you use -qarch to target a POWER, a POWER2, or a common architecture. rndsngl is the default when you target a PowerPC architecture. You can also explicitly set the rndsngl suboption for any target architecture.
The POWER architecture does not include a hardware status flag to indicate IEEE invalid operation exceptions that are caused by attempting to compute the square root of a negative number. Instead, the operating system must handle those exceptions by using a software mechanism. Therefore, using SQRT for a negative number may not reliably generate invalid operation exceptions on POWER platforms, depending on the level of the operating system installed on the computer.
The POWER2 architecture and many PowerPC architectures each has a hardware status flag for invalid SQRT operations, and each reliably generates exceptions.