X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fdoc%2Finterface.texi;h=f6fdc329e1037b60b9f11ef63996c9a5a8307c4f;hb=da71eacc268ed6e0b01861b6fbf82de6856145db;hp=846de56bd62c6429ccfd9e381d630fbd659b6944;hpb=c595c96a668b23f52cf95e6e5c9af82efbcd1520;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/doc/interface.texi b/gcc/doc/interface.texi index 846de56bd62..f6fdc329e10 100644 --- a/gcc/doc/interface.texi +++ b/gcc/doc/interface.texi @@ -1,5 +1,5 @@ @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -@c 1999, 2000, 2001 Free Software Foundation, Inc. +@c 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -28,8 +28,8 @@ long in the same registers used for @code{int} or @code{double} return values. (GCC typically allocates variables of such types in registers also.) Structures and unions of other sizes are returned by storing them into an address passed by the caller (usually in a -register). The machine-description macros @code{STRUCT_VALUE} and -@code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address. +register). The target hook @code{TARGET_STRUCT_VALUE_RTX} +tells GCC where to pass this address. By contrast, PCC on most target machines returns structures and unions of any size by copying the data into an area of static storage, and then @@ -57,7 +57,7 @@ compiler for the system. We may implement register argument passing on certain machines once we have a complete GNU system so that we can compile the libraries with GCC@. -On some machines (particularly the Sparc), certain types of arguments +On some machines (particularly the SPARC), certain types of arguments are passed ``by invisible reference''. This means that the value is stored in memory, and the address of the memory location is passed to the subroutine. @@ -69,34 +69,3 @@ values after a @code{longjmp}. And this is all GCC promises to do, because it is very difficult to restore register variables correctly, and one of GCC's features is that it can put variables in registers without your asking it to. - -If you want a variable to be unaltered by @code{longjmp}, and you don't -want to write @code{volatile} because old C compilers don't accept it, -just take the address of the variable. If a variable's address is ever -taken, even if just to compute it and ignore it, then the variable cannot -go in a register: - -@example -@{ - int careful; - &careful; - @dots{} -@} -@end example - -@cindex arithmetic libraries -@cindex math libraries -@opindex msoft-float -Code compiled with GCC may call certain library routines. Most of -them handle arithmetic for which there are no instructions. This -includes multiply and divide on some machines, and floating point -operations on any machine for which floating point support is disabled -with @option{-msoft-float}. Some standard parts of the C library, such as -@code{bcopy} or @code{memcpy}, are also called automatically. The usual -function call interface is used for calling the library routines. - -Some of these routines can be defined in mostly machine-independent C; -they appear in @file{libgcc2.c}. Others must be hand-written in -assembly language for each processor. Wherever they are defined, they -are compiled into the support library, @file{libgcc.a}, which is -automatically searched when you link programs with GCC@.