Here is an explanation of implicit calls to library routines.
MULSI3_LIBCALL
__mulsi3
,
a function defined in `libgcc.a'.
DIVSI3_LIBCALL
__divsi3
, a
function defined in `libgcc.a'.
UDIVSI3_LIBCALL
__udivsi3
, a
function defined in `libgcc.a'.
MODSI3_LIBCALL
__modsi3
, a function defined in `libgcc.a'.
UMODSI3_LIBCALL
__umodsi3
, a function defined in `libgcc.a'.
MULDI3_LIBCALL
__muldi3
,
a function defined in `libgcc.a'.
DIVDI3_LIBCALL
__divdi3
, a
function defined in `libgcc.a'.
UDIVDI3_LIBCALL
__udivdi3
, a
function defined in `libgcc.a'.
MODDI3_LIBCALL
__moddi3
, a function defined in `libgcc.a'.
UMODDI3_LIBCALL
__umoddi3
, a function defined in `libgcc.a'.
INIT_TARGET_OPTABS
init_optabs
calls this macro after
initializing all the normal library routines.
TARGET_EDOM
EDOM
on the target machine, as a C integer constant
expression. If you don't define this macro, GNU CC does not attempt to
deposit the value of EDOM
into errno
directly. Look in
`/usr/include/errno.h' to find the value of EDOM
on your
system.
If you do not define TARGET_EDOM
, then compiled code reports
domain errors by calling the library function and letting it report the
error. If mathematical functions on your system use matherr
when
there is an error, then you should leave TARGET_EDOM
undefined so
that matherr
is used normally.
GEN_ERRNO_RTX
errno
. (On certain systems,
errno
may not actually be a variable.) If you don't define this
macro, a reasonable default is used.
TARGET_MEM_FUNCTIONS
memcpy
and memset
rather than the BSD functions bcopy
and bzero
.
LIBGCC_NEEDS_DOUBLE
float
arguments cannot be passed to
library routines (so they must be converted to double
). This
macro affects both how library calls are generated and how the library
routines in `libgcc1.c' accept their arguments. It is useful on
machines where floating and fixed point arguments are passed
differently, such as the i860.
FLOAT_ARG_TYPE
float
. (By default, they use a union
of float
and int
.)
The obvious choice would be float
---but that won't work with
traditional C compilers that expect all arguments declared as float
to arrive as double
. To avoid this conversion, the library routines
ask for the value as some other type and then treat it as a float
.
On some systems, no other type will work for this. For these systems,
you must use LIBGCC_NEEDS_DOUBLE
instead, to force conversion of
the values double
before they are passed.
FLOATIFY (passed-value)
float
argument as a float
instead of the type it was
passed as. The default is an expression which takes the float
field of the union.
FLOAT_VALUE_TYPE
float
. (By default, they
use int
.)
The obvious choice would be float
---but that won't work with
traditional C compilers gratuitously convert values declared as
float
into double
.
INTIFY (float-value)
float
-returning library routine should be packaged in order to
return it. These functions are actually declared to return type
FLOAT_VALUE_TYPE
(normally int
).
These values can't be returned as type float
because traditional
C compilers would gratuitously convert the value to a double
.
A local variable named intify
is always available when the macro
INTIFY
is used. It is a union of a float
field named
f
and a field named i
whose type is
FLOAT_VALUE_TYPE
or int
.
If you don't define this macro, the default definition works by copying
the value through that union.
nongcc_SI_type
SImode
in the system's own C compiler.
You need not define this macro if that type is long int
, as it usually
is.
nongcc_word_type
long int
, as it usually
is.
perform_...
float
and double
in the
library routines in `libgcc1.c'. See that file for a full list
of these macros and their arguments.
On most machines, you don't need to define any of these macros, because
the C compiler that comes with the system takes care of doing them.
NEXT_OBJC_RUNTIME
Go to the first, previous, next, last section, table of contents.