C/C++ Programmer's Guide (G06.27+, H06.08+, J06.03+)

When the floattype attribute is explicitly specified with the -set flag, eld sets the floattype
attribute value for the output object file to that specified value. If an inconsistency is detected, a
warning message and an output object file are generated. If the floating-point state is invalid, no
output object file is created.
Any floating type combination is allowed if the user explicitly overrides the default with the set
floattype flag.
Table 50 shows the results of each floating-point state when the floattype attribute is explicitly
specified.
Table 50 Floating-Point State as Determined by eld floattype Attribute
-set Neutral-set IEEE-set TandemNeutralIEEETandem
Warning message is
generated and the output
Warning message is
generated and the
No message is
generated and the
0 or more01 or more
object file is
NEUTRAL_FLOAT.
output object file is
IEEE_FLOAT.
output object file is
TANDEM_FLOAT.
Warning message is
generated and the output
No message is
generated and the
Warning message is
generated and output
0 or more1 or more0
object file is
NEUTRAL_FLOAT.
output object file is
IEEE_FLOAT.
object file is
TANDEM_FLOAT.
Warning message is
generated and the output
Warning message is
generated and the
Warning message is
generated and output
0 or more1 or more1 or more
object file is
NEUTRAL_FLOAT.
output object file is
IEEE_FLOAT.
object file is
TANDEM_FLOAT.
No message is
generated and the output
Warning message is
generated and the
Warning message is
generated and output
1 or more00
object file is
NEUTRAL_FLOAT.
output object file is
IEEE_FLOAT.
object file is
TANDEM_FLOAT.
Run-Time Consistency Checking
Run-time consistency checking includes a check for floattype consistency between the program
file and the user library file, if one is used. IEEE and Tandem floating-point formats use different
data formats and calling conventions: IEEE floating-point values are typically passed in IEEE
floating-point registers; while Tandem floating-point values are passed in general-purpose registers.
Therefore, problems can occur if a function using one floating-point format calls a function using
the other format. Checks are performed at process creation to ensure that the user library (if there
is one) is marked with a floattype consistent with the program file.
These combinations are considered to be conflicting and are not allowed to begin to run:
floattype in user library filefloattype in program file
TandemIEEE
IEEETandem
IEEENeutral
The case in which the floattype attribute of the program file is IEEE and the user library file is
Neutral is not considered a conflict. In this case, the program is allowed to execute, and the C/C++
run-time libraries operate in IEEE mode.
If you are using a native user library, the library file should use the same floating-point format as
the program, and the library should be marked accordingly. If the user library doesn’t use floating
point at all, you can mark the library NEUTRAL_FLOAT using the eld -set floattype or
-change floattype command. Then the user library can be used by any type of program.
Compiling and Linking Floating-Point Programs 303