]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/doc/gccint.info-20
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / doc / gccint.info-20
diff --git a/gcc/doc/gccint.info-20 b/gcc/doc/gccint.info-20
deleted file mode 100644 (file)
index 0939fc1..0000000
+++ /dev/null
@@ -1,1110 +0,0 @@
-This is doc/gccint.info, produced by makeinfo version 4.5 from
-doc/gccint.texi.
-
-INFO-DIR-SECTION Programming
-START-INFO-DIR-ENTRY
-* gccint: (gccint).            Internals of the GNU Compiler Collection.
-END-INFO-DIR-ENTRY
-   This file documents the internals of the GNU compilers.
-
-   Published by the Free Software Foundation
-59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
-   Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
-   Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU General Public License" and "Funding Free
-Software", the Front-Cover texts being (a) (see below), and with the
-Back-Cover Texts being (b) (see below).  A copy of the license is
-included in the section entitled "GNU Free Documentation License".
-
-   (a) The FSF's Front-Cover Text is:
-
-   A GNU Manual
-
-   (b) The FSF's Back-Cover Text is:
-
-   You have freedom to copy and modify this GNU Manual, like GNU
-software.  Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-\1f
-File: gccint.info,  Node: Target Attributes,  Next: Misc,  Prev: Mode Switching,  Up: Target Macros
-
-Defining target-specific uses of `__attribute__'
-================================================
-
-   Target-specific attributes may be defined for functions, data and
-types.  These are described using the following target hooks; they also
-need to be documented in `extend.texi'.
-
- - Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
-     If defined, this target hook points to an array of `struct
-     attribute_spec' (defined in `tree.h') specifying the machine
-     specific attributes for this target and some of the restrictions
-     on the entities to which these attributes are applied and the
-     arguments they take.
-
- - Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (tree TYPE1, tree TYPE2)
-     If defined, this target hook is a function which returns zero if
-     the attributes on TYPE1 and TYPE2 are incompatible, one if they
-     are compatible, and two if they are nearly compatible (which
-     causes a warning to be generated).  If this is not defined,
-     machine-specific attributes are supposed always to be compatible.
-
- - Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
-     If defined, this target hook is a function which assigns default
-     attributes to newly defined TYPE.
-
- - Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
-          TYPE2)
-     Define this target hook if the merging of type attributes needs
-     special handling.  If defined, the result is a list of the combined
-     `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
-     `comptypes' has already been called and returned 1.  This function
-     may call `merge_attributes' to handle machine-independent merging.
-
- - Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
-          NEWDECL)
-     Define this target hook if the merging of decl attributes needs
-     special handling.  If defined, the result is a list of the combined
-     `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
-     declaration of OLDDECL.  Examples of when this is needed are when
-     one attribute overrides another, or when an attribute is nullified
-     by a subsequent definition.  This function may call
-     `merge_attributes' to handle machine-independent merging.
-
-     If the only target-specific handling you require is `dllimport' for
-     Windows targets, you should define the macro
-     `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  This links in a function
-     called `merge_dllimport_decl_attributes' which can then be defined
-     as the expansion of `TARGET_MERGE_DECL_ATTRIBUTES'.  This is done
-     in `i386/cygwin.h' and `i386/i386.c', for example.
-
- - Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
-          *ATTR_PTR)
-     Define this target hook if you want to be able to add attributes
-     to a decl when it is being created.  This is normally useful for
-     back ends which wish to implement a pragma by using the attributes
-     which correspond to the pragma's effect.  The NODE argument is the
-     decl which is being created.  The ATTR_PTR argument is a pointer
-     to the attribute list for this decl.  The list itself should not
-     be modified, since it may be shared with other decls, but
-     attributes may be chained on the head of the list and `*ATTR_PTR'
-     modified to point to the new attributes, or a copy of the list may
-     be made if further changes are needed.
-
- - Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree FNDECL)
-     This target hook returns `true' if it is ok to inline FNDECL into
-     the current function, despite its having target-specific
-     attributes, `false' otherwise.  By default, if a function has a
-     target specific attribute attached to it, it will not be inlined.
-
-\1f
-File: gccint.info,  Node: Misc,  Prev: Target Attributes,  Up: Target Macros
-
-Miscellaneous Parameters
-========================
-
-   Here are several miscellaneous parameters.
-
-`PREDICATE_CODES'
-     Define this if you have defined special-purpose predicates in the
-     file `MACHINE.c'.  This macro is called within an initializer of an
-     array of structures.  The first field in the structure is the name
-     of a predicate and the second field is an array of rtl codes.  For
-     each predicate, list all rtl codes that can be in expressions
-     matched by the predicate.  The list should have a trailing comma.
-     Here is an example of two entries in the list for a typical RISC
-     machine:
-
-          #define PREDICATE_CODES \
-            {"gen_reg_rtx_operand", {SUBREG, REG}},  \
-            {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
-
-     Defining this macro does not affect the generated code (however,
-     incorrect definitions that omit an rtl code that may be matched by
-     the predicate can cause the compiler to malfunction).  Instead, it
-     allows the table built by `genrecog' to be more compact and
-     efficient, thus speeding up the compiler.  The most important
-     predicates to include in the list specified by this macro are
-     those used in the most insn patterns.
-
-     For each predicate function named in `PREDICATE_CODES', a
-     declaration will be generated in `insn-codes.h'.
-
-`SPECIAL_MODE_PREDICATES'
-     Define this if you have special predicates that know special things
-     about modes.  Genrecog will warn about certain forms of
-     `match_operand' without a mode; if the operand predicate is listed
-     in `SPECIAL_MODE_PREDICATES', the warning will be suppressed.
-
-     Here is an example from the IA-32 port (`ext_register_operand'
-     specially checks for `HImode' or `SImode' in preparation for a
-     byte extraction from `%ah' etc.).
-
-          #define SPECIAL_MODE_PREDICATES \
-            "ext_register_operand",
-
-`CASE_VECTOR_MODE'
-     An alias for a machine mode name.  This is the machine mode that
-     elements of a jump-table should have.
-
-`CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)'
-     Optional: return the preferred mode for an `addr_diff_vec' when
-     the minimum and maximum offset are known.  If you define this, it
-     enables extra code in branch shortening to deal with
-     `addr_diff_vec'.  To make this work, you also have to define
-     INSN_ALIGN and make the alignment for `addr_diff_vec' explicit.
-     The BODY argument is provided so that the offset_unsigned and scale
-     flags can be updated.
-
-`CASE_VECTOR_PC_RELATIVE'
-     Define this macro to be a C expression to indicate when jump-tables
-     should contain relative addresses.  If jump-tables never contain
-     relative addresses, then you need not define this macro.
-
-`CASE_DROPS_THROUGH'
-     Define this if control falls through a `case' insn when the index
-     value is out of range.  This means the specified default-label is
-     actually ignored by the `case' insn proper.
-
-`CASE_VALUES_THRESHOLD'
-     Define this to be the smallest number of different values for
-     which it is best to use a jump-table instead of a tree of
-     conditional branches.  The default is four for machines with a
-     `casesi' instruction and five otherwise.  This is best for most
-     machines.
-
-`WORD_REGISTER_OPERATIONS'
-     Define this macro if operations between registers with integral
-     mode smaller than a word are always performed on the entire
-     register.  Most RISC machines have this property and most CISC
-     machines do not.
-
-`LOAD_EXTEND_OP (MODE)'
-     Define this macro to be a C expression indicating when insns that
-     read memory in MODE, an integral mode narrower than a word, set the
-     bits outside of MODE to be either the sign-extension or the
-     zero-extension of the data read.  Return `SIGN_EXTEND' for values
-     of MODE for which the insn sign-extends, `ZERO_EXTEND' for which
-     it zero-extends, and `NIL' for other modes.
-
-     This macro is not called with MODE non-integral or with a width
-     greater than or equal to `BITS_PER_WORD', so you may return any
-     value in this case.  Do not define this macro if it would always
-     return `NIL'.  On machines where this macro is defined, you will
-     normally define it as the constant `SIGN_EXTEND' or `ZERO_EXTEND'.
-
-`SHORT_IMMEDIATES_SIGN_EXTEND'
-     Define this macro if loading short immediate values into registers
-     sign extends.
-
-`FIXUNS_TRUNC_LIKE_FIX_TRUNC'
-     Define this macro if the same instructions that convert a floating
-     point number to a signed fixed point number also convert validly
-     to an unsigned one.
-
-`MOVE_MAX'
-     The maximum number of bytes that a single instruction can move
-     quickly between memory and registers or between two memory
-     locations.
-
-`MAX_MOVE_MAX'
-     The maximum number of bytes that a single instruction can move
-     quickly between memory and registers or between two memory
-     locations.  If this is undefined, the default is `MOVE_MAX'.
-     Otherwise, it is the constant value that is the largest value that
-     `MOVE_MAX' can have at run-time.
-
-`SHIFT_COUNT_TRUNCATED'
-     A C expression that is nonzero if on this machine the number of
-     bits actually used for the count of a shift operation is equal to
-     the number of bits needed to represent the size of the object
-     being shifted.  When this macro is nonzero, the compiler will
-     assume that it is safe to omit a sign-extend, zero-extend, and
-     certain bitwise `and' instructions that truncates the count of a
-     shift operation.  On machines that have instructions that act on
-     bit-fields at variable positions, which may include `bit test'
-     instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
-     deletion of truncations of the values that serve as arguments to
-     bit-field instructions.
-
-     If both types of instructions truncate the count (for shifts) and
-     position (for bit-field operations), or if no variable-position
-     bit-field instructions exist, you should define this macro.
-
-     However, on some machines, such as the 80386 and the 680x0,
-     truncation only applies to shift operations and not the (real or
-     pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
-     to be zero on such machines.  Instead, add patterns to the `md'
-     file that include the implied truncation of the shift instructions.
-
-     You need not define this macro if it would always have the value
-     of zero.
-
-`TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)'
-     A C expression which is nonzero if on this machine it is safe to
-     "convert" an integer of INPREC bits to one of OUTPREC bits (where
-     OUTPREC is smaller than INPREC) by merely operating on it as if it
-     had only OUTPREC bits.
-
-     On many machines, this expression can be 1.
-
-     When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
-     modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
-     If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
-     such cases may improve things.
-
-`STORE_FLAG_VALUE'
-     A C expression describing the value returned by a comparison
-     operator with an integral mode and stored by a store-flag
-     instruction (`sCOND') when the condition is true.  This
-     description must apply to _all_ the `sCOND' patterns and all the
-     comparison operators whose results have a `MODE_INT' mode.
-
-     A value of 1 or -1 means that the instruction implementing the
-     comparison operator returns exactly 1 or -1 when the comparison is
-     true and 0 when the comparison is false.  Otherwise, the value
-     indicates which bits of the result are guaranteed to be 1 when the
-     comparison is true.  This value is interpreted in the mode of the
-     comparison operation, which is given by the mode of the first
-     operand in the `sCOND' pattern.  Either the low bit or the sign
-     bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits are
-     used by the compiler.
-
-     If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
-     generate code that depends only on the specified bits.  It can also
-     replace comparison operators with equivalent operations if they
-     cause the required bits to be set, even if the remaining bits are
-     undefined.  For example, on a machine whose comparison operators
-     return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
-     `0x80000000', saying that just the sign bit is relevant, the
-     expression
-
-          (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
-
-     can be converted to
-
-          (ashift:SI X (const_int N))
-
-     where N is the appropriate shift count to move the bit being
-     tested into the sign bit.
-
-     There is no way to describe a machine that always sets the
-     low-order bit for a true value, but does not guarantee the value
-     of any other bits, but we do not know of any machine that has such
-     an instruction.  If you are trying to port GCC to such a machine,
-     include an instruction to perform a logical-and of the result with
-     1 in the pattern for the comparison operators and let us know at
-     <gcc@gcc.gnu.org>.
-
-     Often, a machine will have multiple instructions that obtain a
-     value from a comparison (or the condition codes).  Here are rules
-     to guide the choice of value for `STORE_FLAG_VALUE', and hence the
-     instructions to be used:
-
-        * Use the shortest sequence that yields a valid definition for
-          `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
-          "normalize" the value (convert it to, e.g., 1 or 0) than for
-          the comparison operators to do so because there may be
-          opportunities to combine the normalization with other
-          operations.
-
-        * For equal-length sequences, use a value of 1 or -1, with -1
-          being slightly preferred on machines with expensive jumps and
-          1 preferred on other machines.
-
-        * As a second choice, choose a value of `0x80000001' if
-          instructions exist that set both the sign and low-order bits
-          but do not define the others.
-
-        * Otherwise, use a value of `0x80000000'.
-
-     Many machines can produce both the value chosen for
-     `STORE_FLAG_VALUE' and its negation in the same number of
-     instructions.  On those machines, you should also define a pattern
-     for those cases, e.g., one matching
-
-          (set A (neg:M (ne:M B C)))
-
-     Some machines can also perform `and' or `plus' operations on
-     condition code values with less instructions than the corresponding
-     `sCOND' insn followed by `and' or `plus'.  On those machines,
-     define the appropriate patterns.  Use the names `incscc' and
-     `decscc', respectively, for the patterns which perform `plus' or
-     `minus' operations on condition code values.  See `rs6000.md' for
-     some examples.  The GNU Superoptizer can be used to find such
-     instruction sequences on other machines.
-
-     You need not define `STORE_FLAG_VALUE' if the machine has no
-     store-flag instructions.
-
-`FLOAT_STORE_FLAG_VALUE (MODE)'
-     A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
-     returned when comparison operators with floating-point results are
-     true.  Define this macro on machine that have comparison
-     operations that return floating-point values.  If there are no
-     such operations, do not define this macro.
-
-`Pmode'
-     An alias for the machine mode for pointers.  On most machines,
-     define this to be the integer mode corresponding to the width of a
-     hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
-     machines.  On some machines you must define this to be one of the
-     partial integer modes, such as `PSImode'.
-
-     The width of `Pmode' must be at least as large as the value of
-     `POINTER_SIZE'.  If it is not equal, you must define the macro
-     `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
-     `Pmode'.
-
-`FUNCTION_MODE'
-     An alias for the machine mode used for memory references to
-     functions being called, in `call' RTL expressions.  On most
-     machines this should be `QImode'.
-
-`INTEGRATE_THRESHOLD (DECL)'
-     A C expression for the maximum number of instructions above which
-     the function DECL should not be inlined.  DECL is a
-     `FUNCTION_DECL' node.
-
-     The default definition of this macro is 64 plus 8 times the number
-     of arguments that the function accepts.  Some people think a larger
-     threshold should be used on RISC machines.
-
-`STDC_0_IN_SYSTEM_HEADERS'
-     In normal operation, the preprocessor expands `__STDC__' to the
-     constant 1, to signify that GCC conforms to ISO Standard C.  On
-     some hosts, like Solaris, the system compiler uses a different
-     convention, where `__STDC__' is normally 0, but is 1 if the user
-     specifies strict conformance to the C Standard.
-
-     Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
-     convention when processing system header files, but when
-     processing user files `__STDC__' will always expand to 1.
-
-`SCCS_DIRECTIVE'
-     Define this if the preprocessor should ignore `#sccs' directives
-     and print no error message.
-
-`NO_IMPLICIT_EXTERN_C'
-     Define this macro if the system header files support C++ as well
-     as C.  This macro inhibits the usual method of using system header
-     files in C++, which is to pretend that the file's contents are
-     enclosed in `extern "C" {...}'.
-
-`HANDLE_PRAGMA (GETC, UNGETC, NAME)'
-     This macro is no longer supported.  You must use
-     `REGISTER_TARGET_PRAGMAS' instead.
-
-`REGISTER_TARGET_PRAGMAS (PFILE)'
-     Define this macro if you want to implement any target-specific
-     pragmas.  If defined, it is a C expression which makes a series of
-     calls to `cpp_register_pragma' for each pragma, with PFILE passed
-     as the first argument to to these functions.  The macro may also
-     do any setup required for the pragmas.
-
-     The primary reason to define this macro is to provide
-     compatibility with other compilers for the same target.  In
-     general, we discourage definition of target-specific pragmas for
-     GCC.
-
-     If the pragma can be implemented by attributes then you should
-     consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
-     well.
-
-     Preprocessor macros that appear on pragma lines are not expanded.
-     All `#pragma' directives that do not match any registered pragma
-     are silently ignored, unless the user specifies
-     `-Wunknown-pragmas'.
-
-      - Function: void cpp_register_pragma (cpp_reader *PFILE, const
-               char *SPACE, const char *NAME, void (*CALLBACK)
-               (cpp_reader *))
-          Each call to `cpp_register_pragma' establishes one pragma.
-          The CALLBACK routine will be called when the preprocessor
-          encounters a pragma of the form
-
-               #pragma [SPACE] NAME ...
-
-          SPACE is the case-sensitive namespace of the pragma, or
-          `NULL' to put the pragma in the global namespace.  The
-          callback routine receives PFILE as its first argument, which
-          can be passed on to cpplib's functions if necessary.  You can
-          lex tokens after the NAME by calling `c_lex'.  Tokens that
-          are not read by the callback will be silently ignored.  The
-          end of the line is indicated by a token of type `CPP_EOF'.
-
-          For an example use of this routine, see `c4x.h' and the
-          callback routines defined in `c4x-c.c'.
-
-          Note that the use of `c_lex' is specific to the C and C++
-          compilers.  It will not work in the Java or Fortran
-          compilers, or any other language compilers for that matter.
-          Thus if `c_lex' is going to be called from target-specific
-          code, it must only be done so when building the C and C++
-          compilers.  This can be done by defining the variables
-          `c_target_objs' and `cxx_target_objs' in the target entry in
-          the `config.gcc' file.  These variables should name the
-          target-specific, language-specific object file which contains
-          the code that uses `c_lex'.  Note it will also be necessary
-          to add a rule to the makefile fragment pointed to by
-          `tmake_file' that shows how to build this object file.
-
-`HANDLE_SYSV_PRAGMA'
-     Define this macro (to a value of 1) if you want the System V style
-     pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]'
-     to be supported by gcc.
-
-     The pack pragma specifies the maximum alignment (in bytes) of
-     fields within a structure, in much the same way as the
-     `__aligned__' and `__packed__' `__attribute__'s do.  A pack value
-     of zero resets the behavior to the default.
-
-     The weak pragma only works if `SUPPORTS_WEAK' and
-     `ASM_WEAKEN_LABEL' are defined.  If enabled it allows the creation
-     of specifically named weak labels, optionally with a value.
-
-`HANDLE_PRAGMA_PACK_PUSH_POP'
-     Define this macro (to a value of 1) if you want to support the
-     Win32 style pragmas `#pragma pack(push,N)' and `#pragma
-     pack(pop)'.  The `pack(push,N)' pragma specifies the maximum
-     alignment (in bytes) of fields within a structure, in much the
-     same way as the `__aligned__' and `__packed__' `__attribute__'s
-     do.  A pack value of zero resets the behavior to the default.
-     Successive invocations of this pragma cause the previous values to
-     be stacked, so that invocations of `#pragma pack(pop)' will return
-     to the previous value.
-
-`DOLLARS_IN_IDENTIFIERS'
-     Define this macro to control use of the character `$' in identifier
-     names.  0 means `$' is not allowed by default; 1 means it is
-     allowed.  1 is the default; there is no need to define this macro
-     in that case.  This macro controls the compiler proper; it does
-     not affect the preprocessor.
-
-`NO_DOLLAR_IN_LABEL'
-     Define this macro if the assembler does not accept the character
-     `$' in label names.  By default constructors and destructors in
-     G++ have `$' in the identifiers.  If this macro is defined, `.' is
-     used instead.
-
-`NO_DOT_IN_LABEL'
-     Define this macro if the assembler does not accept the character
-     `.' in label names.  By default constructors and destructors in G++
-     have names that use `.'.  If this macro is defined, these names
-     are rewritten to avoid `.'.
-
-`DEFAULT_MAIN_RETURN'
-     Define this macro if the target system expects every program's
-     `main' function to return a standard "success" value by default
-     (if no other value is explicitly returned).
-
-     The definition should be a C statement (sans semicolon) to
-     generate the appropriate rtl instructions.  It is used only when
-     compiling the end of `main'.
-
-`NEED_ATEXIT'
-     Define this if the target system lacks the function `atexit' from
-     the ISO C standard.  If this macro is defined, a default definition
-     will be provided to support C++.  If `ON_EXIT' is not defined, a
-     default `exit' function will also be provided.
-
-`ON_EXIT'
-     Define this macro if the target has another way to implement atexit
-     functionality without replacing `exit'.  For instance, SunOS 4 has
-     a similar `on_exit' library function.
-
-     The definition should be a functional macro which can be used just
-     like the `atexit' function.
-
-`EXIT_BODY'
-     Define this if your `exit' function needs to do something besides
-     calling an external function `_cleanup' before terminating with
-     `_exit'.  The `EXIT_BODY' macro is only needed if `NEED_ATEXIT' is
-     defined and `ON_EXIT' is not defined.
-
-`INSN_SETS_ARE_DELAYED (INSN)'
-     Define this macro as a C expression that is nonzero if it is safe
-     for the delay slot scheduler to place instructions in the delay
-     slot of INSN, even if they appear to use a resource set or
-     clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
-     knows that every `call_insn' has this behavior.  On machines where
-     some `insn' or `jump_insn' is really a function call and hence has
-     this behavior, you should define this macro.
-
-     You need not define this macro if it would always return zero.
-
-`INSN_REFERENCES_ARE_DELAYED (INSN)'
-     Define this macro as a C expression that is nonzero if it is safe
-     for the delay slot scheduler to place instructions in the delay
-     slot of INSN, even if they appear to set or clobber a resource
-     referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
-     On machines where some `insn' or `jump_insn' is really a function
-     call and its operands are registers whose use is actually in the
-     subroutine it calls, you should define this macro.  Doing so
-     allows the delay slot scheduler to move instructions which copy
-     arguments into the argument registers into the delay slot of INSN.
-
-     You need not define this macro if it would always return zero.
-
-`MACHINE_DEPENDENT_REORG (INSN)'
-     In rare cases, correct code generation requires extra machine
-     dependent processing between the second jump optimization pass and
-     delayed branch scheduling.  On those machines, define this macro
-     as a C statement to act on the code starting at INSN.
-
-`MULTIPLE_SYMBOL_SPACES'
-     Define this macro if in some cases global symbols from one
-     translation unit may not be bound to undefined symbols in another
-     translation unit without user intervention.  For instance, under
-     Microsoft Windows symbols must be explicitly imported from shared
-     libraries (DLLs).
-
-`MD_ASM_CLOBBERS (CLOBBERS)'
-     A C statement that adds to CLOBBERS `STRING_CST' trees for any
-     hard regs the port wishes to automatically clobber for all asms.
-
-`MAX_INTEGER_COMPUTATION_MODE'
-     Define this to the largest integer machine mode which can be used
-     for operations other than load, store and copy operations.
-
-     You need only define this macro if the target holds values larger
-     than `word_mode' in general purpose registers.  Most targets
-     should not define this macro.
-
-`MATH_LIBRARY'
-     Define this macro as a C string constant for the linker argument
-     to link in the system math library, or `""' if the target does not
-     have a separate math library.
-
-     You need only define this macro if the default of `"-lm"' is wrong.
-
-`LIBRARY_PATH_ENV'
-     Define this macro as a C string constant for the environment
-     variable that specifies where the linker should look for libraries.
-
-     You need only define this macro if the default of `"LIBRARY_PATH"'
-     is wrong.
-
-`TARGET_HAS_F_SETLKW'
-     Define this macro if the target supports file locking with fcntl /
-     F_SETLKW.  Note that this functionality is part of POSIX.
-     Defining `TARGET_HAS_F_SETLKW' will enable the test coverage code
-     to use file locking when exiting a program, which avoids race
-     conditions if the program has forked.
-
-`MAX_CONDITIONAL_EXECUTE'
-     A C expression for the maximum number of instructions to execute
-     via conditional execution instructions instead of a branch.  A
-     value of `BRANCH_COST'+1 is the default if the machine does not
-     use cc0, and 1 if it does use cc0.
-
-`IFCVT_MODIFY_TESTS'
-     A C expression to modify the tests in `TRUE_EXPR', and
-     `FALSE_EXPR' for use in converting insns in `TEST_BB', `THEN_BB',
-     `ELSE_BB', and `JOIN_BB' basic blocks to conditional execution.
-     Set either `TRUE_EXPR' or `FALSE_EXPR' to a null pointer if the
-     tests cannot be converted.
-
-`IFCVT_MODIFY_INSN'
-     A C expression to modify the `PATTERN' of an `INSN' that is to be
-     converted to conditional execution format.
-
-`IFCVT_MODIFY_FINAL'
-     A C expression to perform any final machine dependent
-     modifications in converting code to conditional execution in the
-     basic blocks `TEST_BB', `THEN_BB', `ELSE_BB', and `JOIN_BB'.
-
-`IFCVT_MODIFY_CANCEL'
-     A C expression to cancel any machine dependent modifications in
-     converting code to conditional execution in the basic blocks
-     `TEST_BB', `THEN_BB', `ELSE_BB', and `JOIN_BB'.
-
- - Target Hook: void TARGET_INIT_BUILTINS ()
-     Define this hook if you have any machine-specific built-in
-     functions that need to be defined.  It should be a function that
-     performs the necessary setup.
-
-     Machine specific built-in functions can be useful to expand
-     special machine instructions that would otherwise not normally be
-     generated because they have no equivalent in the source language
-     (for example, SIMD vector instructions or prefetch instructions).
-
-     To create a built-in function, call the function `builtin_function'
-     which is defined by the language front end.  You can use any type
-     nodes set up by `build_common_tree_nodes' and
-     `build_common_tree_nodes_2'; only language front ends that use
-     those two functions will call `TARGET_INIT_BUILTINS'.
-
- - Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
-          SUBTARGET, enum machine_mode MODE, int IGNORE)
-     Expand a call to a machine specific built-in function that was set
-     up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
-     function call; the result should go to TARGET if that is
-     convenient, and have mode MODE if that is convenient.  SUBTARGET
-     may be used as the target for computing one of EXP's operands.
-     IGNORE is nonzero if the value is to be ignored.  This function
-     should return the result of the call to the built-in function.
-
-`MD_CAN_REDIRECT_BRANCH(BRANCH1, BRANCH2)'
-     Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
-     if redirecting BRANCH1 to the destination of BRANCH2 is possible.
-
-     On some targets, branches may have a limited range.  Optimizing the
-     filling of delay slots can result in branches being redirected,
-     and this may in turn cause a branch offset to overflow.
-
-`ALLOCATE_INITIAL_VALUE(HARD_REG)'
-     When the initial value of a hard register has been copied in a
-     pseudo register, it is often not necessary to actually allocate
-     another register to this pseudo register, because the original
-     hard register or a stack slot it has been saved into can be used.
-     `ALLOCATE_INITIAL_VALUE', if defined, is called at the start of
-     register allocation once for each hard register that had its
-     initial value copied by using `get_func_hard_reg_initial_val' or
-     `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
-     you don't want to do any special allocation, a `REG' rtx--that
-     would typically be the hard register itself, if it is known not to
-     be clobbered--or a `MEM'.  If you are returning a `MEM', this is
-     only a hint for the allocator; it might decide to use another
-     register anyways.  You may use `current_function_leaf_function' in
-     the definition of the macro, functions that use `REG_N_SETS', to
-     determine if the hard register in question will not be clobbered.
-
-`TARGET_OBJECT_SUFFIX'
-     Define this macro to be a C string representing the suffix for
-     object files on your target machine.  If you do not define this
-     macro, GCC will use `.o' as the suffix for object files.
-
-`TARGET_EXECUTABLE_SUFFIX'
-     Define this macro to be a C string representing the suffix to be
-     automatically added to executable files on your target machine.
-     If you do not define this macro, GCC will use the null string as
-     the suffix for executable files.
-
-`COLLECT_EXPORT_LIST'
-     If defined, `collect2' will scan the individual object files
-     specified on its command line and create an export list for the
-     linker.  Define this macro for systems like AIX, where the linker
-     discards object files that are not referenced from `main' and uses
-     export lists.
-
-
- - Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
-     This target hook returns `true' past the point in which new jump
-     instructions could be created.  On machines that require a
-     register for every jump such as the SHmedia ISA of SH5, this point
-     would typically be reload, so this target hook should be defined
-     to a function such as:
-
-          static bool
-          cannot_modify_jumps_past_reload_p ()
-          {
-            return (reload_completed || reload_in_progress);
-          }
-
-\1f
-File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
-
-Host Configuration Headers
-**************************
-
-   Host configuration headers contain macro definitions that describe
-the machine and system on which the compiler is running.  They are
-usually unnecessary.  Most of the things GCC needs to know about the
-host system can be deduced by the `configure' script.
-
-   If your host does need a special configuration header, it should be
-named `xm-MACHINE.h', where MACHINE is a short mnemonic for the
-machine.  Here are some macros which this header can define.
-
-`VMS'
-     Define this macro if the host system is VMS.
-
-`FATAL_EXIT_CODE'
-     A C expression for the status code to be returned when the compiler
-     exits after serious errors.  The default is the system-provided
-     macro `EXIT_FAILURE', or `1' if the system doesn't define that
-     macro.  Define this macro only if these defaults are incorrect.
-
-`SUCCESS_EXIT_CODE'
-     A C expression for the status code to be returned when the compiler
-     exits without serious errors.  (Warnings are not serious errors.)
-     The default is the system-provided macro `EXIT_SUCCESS', or `0' if
-     the system doesn't define that macro.  Define this macro only if
-     these defaults are incorrect.
-
-`USE_C_ALLOCA'
-     Define this macro if GCC should use the C implementation of
-     `alloca' provided by `libiberty.a'.  This only affects how some
-     parts of the compiler itself allocate memory.  It does not change
-     code generation.
-
-     When GCC is built with a compiler other than itself, the C `alloca'
-     is always used.  This is because most other implementations have
-     serious bugs.  You should define this macro only on a system where
-     no stack-based `alloca' can possibly work.  For instance, if a
-     system has a small limit on the size of the stack, GCC's builtin
-     `alloca' will not work reliably.
-
-`HAVE_DOS_BASED_FILE_SYSTEM'
-     Define this macro if the host file system obeys the semantics
-     defined by MS-DOS instead of Unix.  DOS file systems are case
-     insensitive, file specifications may begin with a drive letter,
-     and both forward slash and backslash (`/' and `\') are directory
-     separators.  If you define this macro, you probably need to define
-     the next three macros too.
-
-`PATH_SEPARATOR'
-     If defined, this macro should expand to a character constant
-     specifying the separator for elements of search paths.  The
-     default value is a colon (`:').  DOS-based systems usually use
-     semicolon (`;').
-
-`DIR_SEPARATOR'
-`DIR_SEPARATOR_2'
-     If defined, these macros expand to character constants specifying
-     separators for directory names within a file specification.  They
-     are used somewhat inconsistently throughout the compiler.  If your
-     system behaves like Unix (only forward slash separates pathnames),
-     define neither of them.  If your system behaves like DOS (both
-     forward and backward slash can be used), define `DIR_SEPARATOR' to
-     `/' and `DIR_SEPARATOR_2' to `\'.
-
-`HOST_OBJECT_SUFFIX'
-     Define this macro to be a C string representing the suffix for
-     object files on your host machine.  If you do not define this
-     macro, GCC will use `.o' as the suffix for object files.
-
-`HOST_EXECUTABLE_SUFFIX'
-     Define this macro to be a C string representing the suffix for
-     executable files on your host machine.  If you do not define this
-     macro, GCC will use the null string as the suffix for executable
-     files.
-
-`HOST_BIT_BUCKET'
-     A pathname defined by the host operating system, which can be
-     opened as a file and written to, but all the information written
-     is discarded.  This is commonly known as a "bit bucket" or "null
-     device".  If you do not define this macro, GCC will use
-     `/dev/null' as the bit bucket.  If the host does not support a bit
-     bucket, define this macro to an invalid filename.
-
-`COLLECT2_HOST_INITIALIZATION'
-     If defined, a C statement (sans semicolon) that performs
-     host-dependent initialization when `collect2' is being initialized.
-
-`GCC_DRIVER_HOST_INITIALIZATION'
-     If defined, a C statement (sans semicolon) that performs
-     host-dependent initialization when a compilation driver is being
-     initialized.
-
-`UPDATE_PATH_HOST_CANONICALIZE (PATH)'
-     If defined, a C statement (sans semicolon) that performs
-     host-dependent canonicalization when a path used in a compilation
-     driver or preprocessor is canonicalized.  PATH is a malloc-ed path
-     to be canonicalized.  If the C statement does canonicalize PATH
-     into a different buffer, the old path should be freed and the new
-     buffer should have been allocated with malloc.
-
-`DUMPFILE_FORMAT'
-     Define this macro to be a C string representing the format to use
-     for constructing the index part of debugging dump file names.  The
-     resultant string must fit in fifteen bytes.  The full filename
-     will be the concatenation of: the prefix of the assembler file
-     name, the string resulting from applying this format to an index
-     number, and a string unique to each dump file kind, e.g. `rtl'.
-
-     If you do not define this macro, GCC will use `.%02d.'.  You should
-     define this macro if using the default will create an invalid file
-     name.
-
-`SMALL_ARG_MAX'
-     Define this macro if the host system has a small limit on the total
-     size of an argument vector.  This causes the driver to take more
-     care not to pass unnecessary arguments to subprocesses.
-
-   In addition, if `configure' generates an incorrect definition of any
-of the macros in `auto-host.h', you can override that definition in a
-host configuration header.  If you need to do this, first see if it is
-possible to fix `configure'.
-
-   If you need to define only a few of these macros, and they have
-simple definitions, consider using the `xm_defines' variable in your
-`config.gcc' entry instead of creating a host configuration header.
-*Note System Config::.
-
-\1f
-File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
-
-Makefile Fragments
-******************
-
-   When you configure GCC using the `configure' script, it will
-construct the file `Makefile' from the template file `Makefile.in'.
-When it does this, it can incorporate makefile fragments from the
-`config' directory.  These are used to set Makefile parameters that are
-not amenable to being calculated by autoconf.  The list of fragments to
-incorporate is set by `config.gcc'; *Note System Config::.
-
-   Fragments are named either `t-TARGET' or `x-HOST', depending on
-whether they are relevant to configuring GCC to produce code for a
-particular target, or to configuring GCC to run on a particular host.
-Here TARGET and HOST are mnemonics which usually have some relationship
-to the canonical system name, but no formal connection.
-
-   If these files do not exist, it means nothing needs to be added for a
-given target or host.  Most targets need a few `t-TARGET' fragments,
-but needing `x-HOST' fragments is rare.
-
-* Menu:
-
-* Target Fragment:: Writing `t-TARGET' files.
-* Host Fragment::   Writing `x-HOST' files.
-
-\1f
-File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
-
-Target Makefile Fragments
-=========================
-
-   Target makefile fragments can set these Makefile variables.
-
-`LIBGCC2_CFLAGS'
-     Compiler flags to use when compiling `libgcc2.c'.
-
-`LIB2FUNCS_EXTRA'
-     A list of source file names to be compiled or assembled and
-     inserted into `libgcc.a'.
-
-`Floating Point Emulation'
-     To have GCC include software floating point libraries in `libgcc.a'
-     define `FPBIT' and `DPBIT' along with a few rules as follows:
-          # We want fine grained libraries, so use the new code
-          # to build the floating point emulation libraries.
-          FPBIT = fp-bit.c
-          DPBIT = dp-bit.c
-          
-          
-          fp-bit.c: $(srcdir)/config/fp-bit.c
-                  echo '#define FLOAT' > fp-bit.c
-                  cat $(srcdir)/config/fp-bit.c >> fp-bit.c
-          
-          dp-bit.c: $(srcdir)/config/fp-bit.c
-                  cat $(srcdir)/config/fp-bit.c > dp-bit.c
-
-     You may need to provide additional #defines at the beginning of
-     `fp-bit.c' and `dp-bit.c' to control target endianness and other
-     options.
-
-`CRTSTUFF_T_CFLAGS'
-     Special flags used when compiling `crtstuff.c'.  *Note
-     Initialization::.
-
-`CRTSTUFF_T_CFLAGS_S'
-     Special flags used when compiling `crtstuff.c' for shared linking.
-     Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
-     *Note Initialization::.
-
-`MULTILIB_OPTIONS'
-     For some targets, invoking GCC in different ways produces objects
-     that can not be linked together.  For example, for some targets GCC
-     produces both big and little endian code.  For these targets, you
-     must arrange for multiple versions of `libgcc.a' to be compiled,
-     one for each set of incompatible options.  When GCC invokes the
-     linker, it arranges to link in the right version of `libgcc.a',
-     based on the command line options used.
-
-     The `MULTILIB_OPTIONS' macro lists the set of options for which
-     special versions of `libgcc.a' must be built.  Write options that
-     are mutually incompatible side by side, separated by a slash.
-     Write options that may be used together separated by a space.  The
-     build procedure will build all combinations of compatible options.
-
-     For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
-     msoft-float', `Makefile' will build special versions of `libgcc.a'
-     using the following sets of options:  `-m68000', `-m68020',
-     `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
-
-`MULTILIB_DIRNAMES'
-     If `MULTILIB_OPTIONS' is used, this variable specifies the
-     directory names that should be used to hold the various libraries.
-     Write one element in `MULTILIB_DIRNAMES' for each element in
-     `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
-     default value will be `MULTILIB_OPTIONS', with all slashes treated
-     as spaces.
-
-     For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
-     msoft-float', then the default value of `MULTILIB_DIRNAMES' is
-     `m68000 m68020 msoft-float'.  You may specify a different value if
-     you desire a different set of directory names.
-
-`MULTILIB_MATCHES'
-     Sometimes the same option may be written in two different ways.
-     If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
-     about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
-     list of items of the form `option=option' to describe all relevant
-     synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
-
-`MULTILIB_EXCEPTIONS'
-     Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
-     specified, there are combinations that should not be built.  In
-     that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
-     exceptions in shell case syntax that should not be built.
-
-     For example, in the PowerPC embedded ABI support, it is not
-     desirable to build libraries compiled with the `-mcall-aix' option
-     and either of the `-fleading-underscore' or `-mlittle' options at
-     the same time.  Therefore `MULTILIB_EXCEPTIONS' is set to
-          *mcall-aix/*fleading-underscore* *mlittle/*mcall-aix*
-
-`MULTILIB_EXTRA_OPTS'
-     Sometimes it is desirable that when building multiple versions of
-     `libgcc.a' certain options should always be passed on to the
-     compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
-     of options to be used for all builds.
-
-\1f
-File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
-
-Host Makefile Fragments
-=======================
-
-   The use of `x-HOST' fragments is discouraged.  You should do so only
-if there is no other mechanism to get the behavior desired.  Host
-fragments should never forcibly override variables set by the configure
-script, as they may have been adjusted by the user.
-
-   Variables provided for host fragments to set include:
-
-`X_CFLAGS'
-`X_CPPFLAGS'
-     These are extra flags to pass to the C compiler and preprocessor,
-     respectively.  They are used both when building GCC, and when
-     compiling things with the just-built GCC.
-
-`XCFLAGS'
-     These are extra flags to use when building the compiler.  They are
-     not used when compiling `libgcc.a'.  However, they _are_ used when
-     recompiling the compiler with itself in later stages of a
-     bootstrap.
-
-`BOOT_LDFLAGS'
-     Flags to be passed to the linker when recompiling the compiler with
-     itself in later stages of a bootstrap.  You might need to use this
-     if, for instance, one of the front ends needs more text space than
-     the linker provides by default.
-
-`EXTRA_PROGRAMS'
-     A list of additional programs required to use the compiler on this
-     host, which should be compiled with GCC and installed alongside
-     the front ends.  If you set this variable, you must also provide
-     rules to build the extra programs.
-
-
-\1f
-File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
-
-`collect2'
-**********
-
-   GNU CC uses a utility called `collect2' on nearly all systems to
-arrange to call various initialization functions at start time.
-
-   The program `collect2' works by linking the program once and looking
-through the linker output file for symbols with particular names
-indicating they are constructor functions.  If it finds any, it creates
-a new temporary `.c' file containing a table of them, compiles it, and
-links the program a second time including that file.
-
-   The actual calls to the constructors are carried out by a subroutine
-called `__main', which is called (automatically) at the beginning of
-the body of `main' (provided `main' was compiled with GNU CC).  Calling
-`__main' is necessary, even when compiling C code, to allow linking C
-and C++ object code together.  (If you use `-nostdlib', you get an
-unresolved reference to `__main', since it's defined in the standard
-GCC library.  Include `-lgcc' at the end of your compiler command line
-to resolve this reference.)
-
-   The program `collect2' is installed as `ld' in the directory where
-the passes of the compiler are installed.  When `collect2' needs to
-find the _real_ `ld', it tries the following file names:
-
-   * `real-ld' in the directories listed in the compiler's search
-     directories.
-
-   * `real-ld' in the directories listed in the environment variable
-     `PATH'.
-
-   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
-     if specified.
-
-   * `ld' in the compiler's search directories, except that `collect2'
-     will not execute itself recursively.
-
-   * `ld' in `PATH'.
-
-   "The compiler's search directories" means all the directories where
-`gcc' searches for passes of the compiler.  This includes directories
-that you specify with `-B'.
-
-   Cross-compilers search a little differently:
-
-   * `real-ld' in the compiler's search directories.
-
-   * `TARGET-real-ld' in `PATH'.
-
-   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
-     if specified.
-
-   * `ld' in the compiler's search directories.
-
-   * `TARGET-ld' in `PATH'.
-
-   `collect2' explicitly avoids running `ld' using the file name under
-which `collect2' itself was invoked.  In fact, it remembers up a list
-of such names--in case one copy of `collect2' finds another copy (or
-version) of `collect2' installed as `ld' in a second place in the
-search path.
-
-   `collect2' searches for the utilities `nm' and `strip' using the
-same algorithm as above for `ld'.
-
-\1f
-File: gccint.info,  Node: Header Dirs,  Next: Funding,  Prev: Collect2,  Up: Top
-
-Standard Header File Directories
-********************************
-
-   `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
-where GNU CC stores its private include files, and also where GNU CC
-stores the fixed include files.  A cross compiled GNU CC runs
-`fixincludes' on the header files in `$(tooldir)/include'.  (If the
-cross compilation header files need to be fixed, they must be installed
-before GNU CC is built.  If the cross compilation header files are
-already suitable for ISO C and GNU CC, nothing special need be done).
-
-   `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.
-It is where `g++' looks first for header files.  The C++ library
-installs only target independent header files in that directory.
-
-   `LOCAL_INCLUDE_DIR' is used only by native compilers.  GNU CC
-doesn't install anything there.  It is normally `/usr/local/include'.
-This is where local additions to a packaged system should place header
-files.
-
-   `CROSS_INCLUDE_DIR' is used only by cross compilers.  GNU CC doesn't
-install anything there.
-
-   `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It
-is the place for other packages to install header files that GNU CC will
-use.  For a cross-compiler, this is the equivalent of `/usr/include'.
-When you build a cross-compiler, `fixincludes' processes any header
-files in this directory.
-