Annotation of gcc/internals.texinfo, revision 1.1.1.7

1.1       root        1: \input texinfo  @c -*-texinfo-*-
                      2: 
                      3: @settitle Internals of GNU CC
                      4: @setfilename internals
                      5: 
                      6: @ifinfo
                      7: This file documents the internals of the GNU compiler.
                      8: 
1.1.1.2   root        9: Copyright (C) 1988 Free Software Foundation, Inc.
1.1       root       10: 
                     11: Permission is granted to make and distribute verbatim copies of
                     12: this manual provided the copyright notice and this permission notice
                     13: are preserved on all copies.
                     14: 
                     15: @ignore
                     16: Permission is granted to process this file through Tex and print the
                     17: results, provided the printed document carries copying permission
                     18: notice identical to this one except for the removal of this paragraph
                     19: (this paragraph not being relevant to the printed manual).
                     20: 
                     21: @end ignore
                     22: Permission is granted to copy and distribute modified versions of this
                     23: manual under the conditions for verbatim copying, provided also that the
                     24: section entitled ``GNU CC General Public License'' is included exactly as
                     25: in the original, and provided that the entire resulting derived work is
                     26: distributed under the terms of a permission notice identical to this one.
                     27: 
                     28: Permission is granted to copy and distribute translations of this manual
                     29: into another language, under the above conditions for modified versions,
1.1.1.2   root       30: except that the section entitled ``GNU CC General Public License'' and
                     31: this permission notice may be included in translations approved by the
                     32: Free Software Foundation instead of in the original English.
1.1       root       33: @end ifinfo
                     34: 
                     35: @setchapternewpage odd
                     36: 
                     37: @titlepage
                     38: @center @titlefont{Internals of GNU CC}
                     39: @sp 2
                     40: @center Richard M. Stallman
1.1.1.2   root       41: @sp 3
1.1.1.7 ! root       42: @center last updated 17 August 1988
1.1.1.2   root       43: @sp 1
1.1.1.7 ! root       44: @center for version 1.26
1.1       root       45: @page
                     46: @vskip 0pt plus 1filll
1.1.1.2   root       47: Copyright @copyright{} 1988 Free Software Foundation, Inc.
1.1       root       48: 
                     49: Permission is granted to make and distribute verbatim copies of
                     50: this manual provided the copyright notice and this permission notice
                     51: are preserved on all copies.
                     52: 
                     53: Permission is granted to copy and distribute modified versions of this
                     54: manual under the conditions for verbatim copying, provided also that the
                     55: section entitled ``GNU CC General Public License'' is included exactly as
                     56: in the original, and provided that the entire resulting derived work is
                     57: distributed under the terms of a permission notice identical to this one.
                     58: 
                     59: Permission is granted to copy and distribute translations of this manual
                     60: into another language, under the above conditions for modified versions,
                     61: except that the section entitled ``GNU CC General Public License'' may be
                     62: included in a translation approved by the author instead of in the original
                     63: English.
                     64: @end titlepage
                     65: @page
                     66: 
                     67: @ifinfo
1.1.1.2   root       68: @node Top, Copying,, (DIR)
                     69: @ichapter Introduction
1.1       root       70: 
1.1.1.2   root       71: This manual documents how to run, install and port the GNU C compiler, as
                     72: well as its new features and incompatibilities, and how to report bugs.
1.1       root       73: 
                     74: @end ifinfo
                     75: @menu
                     76: * Copying::         GNU CC General Public License says
                     77:                      how you can copy and share GNU CC.
1.1.1.2   root       78: * Contributors::    People who have contributed to GNU CC.
                     79: * Options::         Command options supported by @samp{gcc}.
1.1       root       80: * Installation::    How to configure, compile and install GNU CC.
1.1.1.3   root       81: * Trouble::         If you have trouble installing GNU CC.
1.1.1.2   root       82: * Incompatibilities:: Incompatibilities of GNU CC.
                     83: * Extensions::      GNU extensions to the C language.
                     84: * Bugs::            How to report bugs (if you want to get them fixed).
1.1       root       85: * Portability::     Goals of GNU CC's portability features.
1.1.1.2   root       86: * Interface::       Function-call interface of GNU CC output.
1.1       root       87: * Passes::          Order of passes, what they do, and what each file is for.
                     88: * RTL::             The intermediate representation that most passes work on.
                     89: * Machine Desc::    How to write machine description instruction patterns.
                     90: * Machine Macros::  How to write the machine description C macros.
                     91: @end menu
                     92: 
1.1.1.2   root       93: @node Copying, Contributors, Top, Top
1.1       root       94: @unnumbered GNU CC GENERAL PUBLIC LICENSE
1.1.1.2   root       95: @center (Clarified 11 Feb 1988)
1.1       root       96: 
                     97:   The license agreements of most software companies keep you at the
                     98: mercy of those companies.  By contrast, our general public license is
                     99: intended to give everyone the right to share GNU CC.  To make sure that
                    100: you get the rights we want you to have, we need to make restrictions
                    101: that forbid anyone to deny you these rights or to ask you to surrender
                    102: the rights.  Hence this license agreement.
                    103: 
1.1.1.2   root      104:   Specifically, we want to make sure that you have the right to give
                    105: away copies of GNU CC, that you receive source code or else can get it
                    106: if you want it, that you can change GNU CC or use pieces of it in new
                    107: free programs, and that you know you can do these things.
                    108: 
                    109:   To make sure that everyone has such rights, we have to forbid you to
                    110: deprive anyone else of these rights.  For example, if you distribute
                    111: copies of GNU CC, you must give the recipients all the rights that you
                    112: have.  You must make sure that they, too, receive or can get the
                    113: source code.  And you must tell them their rights.
                    114: 
                    115:   Also, for our own protection, we must make certain that everyone
                    116: finds out that there is no warranty for GNU CC.  If GNU CC is modified by
                    117: someone else and passed on, we want its recipients to know that what
                    118: they have is not what we distributed, so that any problems introduced
                    119: by others will not reflect on our reputation.
                    120: 
                    121:   Therefore we (Richard Stallman and the Free Software Foundation,
                    122: Inc.) make the following terms which say what you must do to be
                    123: allowed to distribute or change GNU CC.
                    124: 
                    125: @unnumberedsec COPYING POLICIES
                    126: 
                    127: @enumerate
                    128: @item
                    129: You may copy and distribute verbatim copies of GNU CC source code as
                    130: you receive it, in any medium, provided that you conspicuously and
                    131: appropriately publish on each copy a valid copyright notice
                    132: ``Copyright @copyright{} 1988 Free Software Foundation, Inc.'' (or
                    133: with whatever year is appropriate); keep intact the notices on all
                    134: files that refer to this License Agreement and to the absence of any
                    135: warranty; and give any other recipients of the GNU CC program a copy
                    136: of this License Agreement along with the program.  You may charge a
                    137: distribution fee for the physical act of transferring a copy.
                    138: 
                    139: @item
                    140: You may modify your copy or copies of GNU CC or any portion of it,
                    141: and copy and distribute such modifications under the terms of
                    142: Paragraph 1 above, provided that you also do the following:
                    143: 
                    144: @itemize @bullet
                    145: @item
                    146: cause the modified files to carry prominent notices stating
                    147: that you changed the files and the date of any change; and
                    148: 
                    149: @item
                    150: cause the whole of any work that you distribute or publish, that
                    151: in whole or in part contains or is a derivative of GNU CC or any
                    152: part thereof, to be licensed at no charge to all third parties on
                    153: terms identical to those contained in this License Agreement
                    154: (except that you may choose to grant more extensive warranty
                    155: protection to some or all third parties, at your option).
                    156: 
                    157: @item
                    158: You may charge a distribution fee for the physical act of
                    159: transferring a copy, and you may at your option offer warranty
                    160: protection in exchange for a fee.
                    161: @end itemize
                    162: 
                    163: Mere aggregation of another unrelated program with this program (or its
                    164: derivative) on a volume of a storage or distribution medium does not bring
                    165: the other program under the scope of these terms.
                    166: 
                    167: @item
                    168: You may copy and distribute GNU CC (or a portion or derivative of it,
                    169: under Paragraph 2) in object code or executable form under the terms
                    170: of Paragraphs 1 and 2 above provided that you also do one of the
                    171: following:
                    172: 
                    173: @itemize @bullet
                    174: @item
                    175: accompany it with the complete corresponding machine-readable
                    176: source code, which must be distributed under the terms of
                    177: Paragraphs 1 and 2 above; or,
                    178: 
                    179: @item
                    180: accompany it with a written offer, valid for at least three
                    181: years, to give any third party free (except for a nominal
                    182: shipping charge) a complete machine-readable copy of the
                    183: corresponding source code, to be distributed under the terms of
                    184: Paragraphs 1 and 2 above; or,
                    185: 
                    186: @item
                    187: accompany it with the information you received as to where the
                    188: corresponding source code may be obtained.  (This alternative is
                    189: allowed only for noncommercial distribution and only if you
                    190: received the program in object code or executable form alone.)
                    191: @end itemize
                    192: 
                    193: For an executable file, complete source code means all the source code
                    194: for all modules it contains; but, as a special exception, it need not
                    195: include source code for modules which are standard libraries that
                    196: accompany the operating system on which the executable file runs.
                    197: 
                    198: @item
                    199: You may not copy, sublicense, distribute or transfer GNU CC except as
                    200: expressly provided under this License Agreement.  Any attempt
                    201: otherwise to copy, sublicense, distribute or transfer GNU CC is void
                    202: and your rights to use the program under this License agreement shall
                    203: be automatically terminated.  However, parties who have received
                    204: computer software programs from you with this License Agreement will
                    205: not have their licenses terminated so long as such parties remain in
                    206: full compliance.
                    207: 
                    208: @item
                    209: If you wish to incorporate parts of GNU CC into other free programs
                    210: whose distribution conditions are different, write to the Free Software
                    211: Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet worked
                    212: out a simple rule that can be stated here, but we will often permit this.
                    213: We will be guided by the two goals of preserving the free status of all
                    214: derivatives of our free software and of promoting the sharing and reuse of
                    215: software.
                    216: @end enumerate
                    217: 
                    218: Your comments and suggestions about our licensing policies and our
                    219: software are welcome!  Please contact the Free Software Foundation, Inc.,
                    220: 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296.
                    221: 
                    222: @unnumberedsec NO WARRANTY
                    223: 
                    224:   BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
                    225: WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
                    226: WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
                    227: RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT
                    228: WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
                    229: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
                    230: A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
                    231: PERFORMANCE OF GNU CC IS WITH YOU.  SHOULD GNU CC PROVE DEFECTIVE, YOU
                    232: ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
                    233: 
                    234:  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
                    235: STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
                    236: WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO
                    237: YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
                    238: SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
                    239: INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
                    240: BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
                    241: FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN
                    242: IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
                    243: ANY CLAIM BY ANY OTHER PARTY.
                    244: 
                    245: @node Contributors, Options, Copying, Top
                    246: @unnumbered Contributors to GNU CC
                    247: 
                    248: In addition to Richard Stallman, several people have written parts
                    249: of GNU CC.
                    250: 
                    251: @itemize @bullet
                    252: @item
                    253: The idea of using RTL and some of the optimization ideas came from the
                    254: U. of Arizona Portable Optimizer, written by Jack Davidson and
                    255: Christopher Fraser.  See ``Register Allocation and Exhaustive Peephole
                    256: Optimization'', Software Practice and Experience 14 (9), Sept. 1984,
                    257: 857-866.
                    258: 
                    259: @item
                    260: Paul Rubin wrote most of the preprocessor.
                    261: 
                    262: @item
                    263: Leonard Tower wrote parts of the parser, RTL generator, RTL
                    264: definitions, and of the Vax machine description.
                    265: 
                    266: @item
                    267: Ted Lemon wrote parts of the RTL reader and printer.
                    268: 
                    269: @item
                    270: Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
                    271: the support for the SONY NEWS machine.
                    272: 
                    273: @item
                    274: Charles LaBrec contributed the support for the Integrated Solutions
                    275: 68020 system.
                    276: 
                    277: @item
1.1.1.7 ! root      278: Michael Tiemann of MCC wrote most of the description of the National
        !           279: Semiconductor 32000 series cpu.  He also wrote the code for inline
        !           280: function integration and for the SPARC cpu and Motorola 88000 cpu
        !           281: and part of the Sun FPA support.
        !           282: 
        !           283: @item
        !           284: Jan Stein of the Chalmers Computer Society provided support for
        !           285: Genix, as well as part of the 32000 machine description.
        !           286: 
        !           287: @item
        !           288: Randy Smith finished the Sun FPA support.
1.1.1.2   root      289: 
                    290: @item
1.1.1.3   root      291: Robert Brown implemented the support for Encore 32000 systems.
                    292: 
                    293: @item
1.1.1.4   root      294: David Kashtan of SRI adapted GNU CC to the Vomit-Making System.
1.1.1.2   root      295: 
                    296: @item
                    297: Alex Crain provided changes for the 3b1.
                    298: 
                    299: @item
1.1.1.4   root      300: Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for
                    301: the 9000 series 300.
1.1.1.6   root      302: 
                    303: @item
                    304: William Schelter did most of the work on the Intel 80386 support.
1.1.1.2   root      305: @end itemize
                    306: 
                    307: @node Options, Installation, Contributors, Top
                    308: @chapter GNU CC Command Options
                    309: 
                    310: The GNU C compiler uses a command syntax much like the Unix C compiler.
                    311: The @code{gcc} program accepts options and file names as operands.
                    312: Multiple single-letter options may @emph{not} be grouped: @samp{-dr} is
                    313: very different from @samp{-d -r}.
                    314: 
                    315: When you invoke GNU CC, it normally does preprocessing, compilation,
                    316: assembly and linking.  File names which end in @samp{.c} are taken as C
                    317: source to be preprocessed and compiled; compiler output files plus any
                    318: input files with names ending in @samp{.s} are assembled; then the
                    319: resulting object files, plus any other input files, are linked together to
                    320: produce an executable.
                    321: 
                    322: Command options allow you to stop this process at an intermediate stage.
                    323: For example, the @samp{-c} option says not to run the linker.  Then the
                    324: output consists of object files output by the assembler.
                    325: 
                    326: Other command options are passed on to one stage.  Some options control
                    327: the preprocessor and others the compiler itself.  Yet other options
                    328: control the assembler and linker; these are not documented here because the
                    329: GNU assembler and linker are not yet released.
                    330: 
                    331: Here are the options to control the overall compilation process, including
                    332: those that say whether to link, whether to assemble, and so on.
                    333: 
                    334: @table @samp
                    335: @item -o @var{file}
                    336: Place output in file @var{file}.  This applies regardless to whatever
                    337: sort of output is being produced, whether it be an executable file,
                    338: an object file, an assembler file or preprocessed C code.
                    339: 
1.1.1.3   root      340: If @samp{-o} is not specified, the default is to put an executable file
1.1.1.2   root      341: in @file{a.out}, the object file @file{@var{source}.c} in
                    342: @file{@var{source}.o}, an assembler file in @file{@var{source}.s}, and
                    343: preprocessed C on standard output.@refill
                    344: 
                    345: @item -c
                    346: Compile or assemble the source files, but do not link.  Produce object
                    347: files with names made by replacing @samp{.c} or @samp{.s} with
                    348: @samp{.o} at the end of the input file names.  Do nothing at all for
                    349: object files specified as input.
                    350: 
                    351: @item -S
                    352: Compile into assembler code but do not assemble.  The assembler output
                    353: file name is made by replacing @samp{.c} with @samp{.s} at the end of
                    354: the input file name.  Do nothing at all for assembler source files or
                    355: object files specified as input.
                    356: 
                    357: @item -E
                    358: Run only the C preprocessor.  Preprocess all the C source files
                    359: specified and output the results to standard output.
                    360: 
                    361: @item -v
                    362: Compiler driver program prints the commands it executes as it runs
                    363: the preprocessor, compiler proper, assembler and linker.  Some of
                    364: these are directed to print their own version numbers.
                    365: 
                    366: @item -B@var{prefix}
                    367: Compiler driver program tries @var{prefix} as a prefix for each
                    368: program it tries to run.  These programs are @file{cpp}, @file{cc1},
                    369: @file{as} and @file{ld}.
                    370: 
                    371: For each subprogram to be run, the compiler driver first tries the
                    372: @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
                    373: was not specified, the driver tries two standard prefixes, which are
                    374: @file{/usr/lib/gcc-} and @file{/usr/local/lib/gcc-}.  If neither of
                    375: those results in a file name that is found, the unmodified program
                    376: name is searched for using the directories specified in your
                    377: @samp{PATH} environment variable.
                    378: 
                    379: The run-time support file @file{gnulib} is also searched for using
                    380: the @samp{-B} prefix, if needed.  If it is not found there, the two
                    381: standard prefixes above are tried, and that is all.  The file is left
                    382: out of the link if it is not found by those means.  Most of the time,
                    383: on most machines, you can do without it.
                    384: @end table
                    385: 
                    386: These options control the details of C compilation itself.
                    387: 
                    388: @table @samp
                    389: @item -ansi
                    390: Support all ANSI standard C programs.
                    391: 
                    392: This turns off certain features of GNU C that are incompatible with
                    393: ANSI C, such as the @code{asm}, @code{inline} and @code{typeof}
                    394: keywords, and predefined macros such as @code{unix} and @code{vax}
                    395: that identify the type of system you are using.  It also enables the
                    396: undesirable and rarely used ANSI trigraph feature.
                    397: 
                    398: The @samp{-ansi} option does not cause non-ANSI programs to be
                    399: rejected gratuitously.  For that, @samp{-pedantic} is required in
                    400: addition to @samp{-ansi}.
                    401: 
                    402: The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
                    403: option is used.  Some header files may notice this macro and refrain
                    404: from declaring certain functions or defining certain macros that the
                    405: ANSI standard doesn't call for; this is to avoid interfering with
                    406: any programs that might use these names for other things.
                    407: 
                    408: @item -traditional
                    409: Attempt to support some aspects of traditional C compilers.
                    410: Specifically:
                    411: 
                    412: @itemize @bullet
                    413: @item
                    414: All @code{extern} declarations take effect globally even if they
                    415: are written inside of a function definition.  This includes implicit
                    416: declarations of functions.
                    417: 
                    418: @item
                    419: The keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
                    420: and @code{volatile} are not recognized.@refill
                    421: 
                    422: @item
                    423: Comparisons between pointers and integers are always allowed.
                    424: 
                    425: @item
                    426: Integer types @code{unsigned short} and @code{unsigned char} promote
                    427: to @code{unsigned int}.
                    428: 
                    429: @item
1.1.1.5   root      430: Out-of-range floating point literals are not an error.
                    431: 
                    432: @item
1.1.1.2   root      433: In the preprocessor, comments convert to nothing at all, rather than to
                    434: a space.  This allows traditional token concatenation.
                    435: 
                    436: @item
                    437: In the preprocessor, single and double quote characters are ignored
                    438: when scanning macro definitions, so that macro arguments can be replaced
                    439: even within a string or character constant.  Quote characters are also
                    440: ignored when skipping text inside a failing conditional directive.
                    441: @end itemize
                    442: 
                    443: @item -O
                    444: Optimize.  Optimizing compilation takes somewhat more time, and a lot
                    445: more memory for a large function.
                    446: 
                    447: Without @samp{-O}, the compiler's goal is to reduce the cost of
                    448: compilation and to make debugging produce the expected results.
                    449: Statements are independent: if you stop the program with a breakpoint
                    450: between statements, you can then assign a new value to any variable or
                    451: change the program counter to any other statement in the function and
                    452: get exactly the results you would expect from the source code.
                    453: 
                    454: Without @samp{-O}, only variables declared @code{register} are
                    455: allocated in registers.  The resulting compiled code is a little worse
                    456: than produced by PCC without @samp{-O}.
                    457: 
                    458: With @samp{-O}, the compiler tries to reduce code size and execution
                    459: time.
                    460: 
                    461: Some of the @samp{-f} options described below turn specific kinds of
                    462: optimization on or off.
                    463: 
                    464: @item -g
1.1.1.4   root      465: Produce debugging information in the operating system's native
                    466: format (for DBX or SDB).
1.1.1.2   root      467: 
                    468: Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
                    469: @samp{-O}.  The shortcuts taken by optimized code may occasionally
                    470: produce surprising results: some variables you declared may not exist
                    471: at all; flow of control may briefly move where you did not expect it;
                    472: some statements may not be executed because they compute constant
                    473: results or their values were already at hand; some statements may
                    474: execute in different places because they were moved out of loops.
                    475: Nevertheless it proves possible to debug optimized output.  This makes
                    476: it reasonable to use the optimizer for programs that might have bugs.
                    477: 
                    478: @item -gg
                    479: Produce debugging information in GDB's own format.  This requires
                    480: the GNU assembler and linker in order to work.
                    481: 
                    482: @item -w
                    483: Inhibit all warning messages.
                    484: 
                    485: @item -W
                    486: Print extra warning messages for these events:
                    487: 
                    488: @itemize @bullet
                    489: @item
                    490: An automatic variable is used without first being initialized.
                    491: 
                    492: These warnings are possible only in optimizing compilation,
                    493: because they require data flow information that is computed only
                    494: when optimizing.  They occur only for variables that are
                    495: candidates for register allocation.  Therefore, they do not occur
                    496: for a variable that is declared @code{volatile}, or whose address
                    497: is taken, or whose size is other than 1, 2, 4 or 8 bytes.  Also,
                    498: they do not occur for structures, unions or arrays, even when
                    499: they are in registers.
                    500: 
                    501: Note that there may be no warning about a variable that is used
                    502: only to compute a value that itself is never used, because such
                    503: computations may be deleted by the flow analysis pass before the
                    504: warnings are printed.
                    505: 
                    506: These warnings are made optional because GNU CC is not smart
                    507: enough to see all the reasons why the code might be correct
                    508: despite appearing to have an error.  Here is one example of how
                    509: this can happen:
                    510: 
                    511: @example
                    512: @{
                    513:   int x;
                    514:   switch (y)
                    515:     @{
                    516:     case 1: x = 1;
                    517:       break;
                    518:     case 2: x = 4;
                    519:       break;
                    520:     case 3: x = 5;
                    521:     @}
                    522:   foo (x);
                    523: @}
                    524: @end example
                    525: 
                    526: @noindent
                    527: If the value of @code{y} is always 1, 2 or 3, then @code{x} is
                    528: always initialized, but GNU CC doesn't know this.  Here is
                    529: another common case:
                    530: 
                    531: @example
                    532: @{
                    533:   int save_y;
                    534:   if (change_y) save_y = y, y = new_y;
                    535:   @dots{}
                    536:   if (change_y) y = save_y;
                    537: @}
                    538: @end example
                    539: 
                    540: @noindent
1.1.1.4   root      541: This has no bug because @code{save_y} is used only if it is set.
1.1.1.2   root      542: 
                    543: @item
                    544: A nonvolatile automatic variable might be changed by a call to
                    545: @code{longjmp}.  These warnings as well are possible only in
                    546: optimizing compilation.
                    547: 
                    548: The compiler sees only the calls to @code{setjmp}.  It cannot know
                    549: where @code{longjmp} will be called; in fact, a signal handler could
                    550: call it at any point in the code.  As a result, you may get a warning
                    551: even when there is in fact no problem because @code{longjmp} cannot
                    552: in fact be called at the place which would cause a problem.
                    553: 
                    554: @item
                    555: A function can return either with or without a value.  (Falling
                    556: off the end of the function body is considered returning without
                    557: a value.)  For example, this function would inspire such a
                    558: warning:
                    559: 
                    560: @example
                    561: foo (a)
                    562: @{
                    563:   if (a > 0)
                    564:     return a;
                    565: @}
                    566: @end example
                    567: 
                    568: Spurious warnings can occur because GNU CC does not realize that
                    569: certain functions (including @code{abort} and @code{longjmp})
                    570: will never return.
                    571: @end itemize
                    572: 
                    573: In the future, other useful warnings may also be enabled by this
                    574: option.
                    575: 
                    576: @item -Wimplicit
                    577: Warn whenever a function is implicitly declared.
                    578: 
                    579: @item -Wreturn-type
                    580: Warn whenever a function is defined with a return-type that defaults
                    581: to @code{int}.  Also warn about any @code{return} statement with no
                    582: return-value in a function whose return-type is not @code{void}.
                    583: 
                    584: @item -Wcomment
                    585: Warn whenever a comment-start sequence @samp{/*} appears in a comment.
                    586: 
1.1.1.3   root      587: @item -Wall
                    588: All of the above @samp{-W} options combined.
                    589: 
1.1.1.2   root      590: @item -p
                    591: Generate extra code to write profile information suitable for the
                    592: analysis program @code{prof}.
                    593: 
                    594: @item -pg
                    595: Generate extra code to write profile information suitable for the
                    596: analysis program @code{gprof}.
                    597: 
1.1.1.3   root      598: @item -l@var{library}
                    599: Search a standard list of directories for a library named
                    600: @var{library}, which is actually a file named
                    601: @file{lib@var{library}.a}.  The linker uses this file as if it
                    602: had been specified precisely by name.
                    603: 
                    604: The directories searched include several standard system directories
                    605: plus any that you specify with @samp{-L}.
                    606: 
                    607: Normally the files found this way are library files---archive files
                    608: whose members are object files.  The linker handles an archive file by
1.1.1.4   root      609: scanning through it for members which define symbols that have so far
                    610: been referenced but not defined.  But if the file that is found is an
1.1.1.3   root      611: ordinary object file, it is linked in the usual fashion.  The only
1.1.1.4   root      612: difference between using an @samp{-l} option and specifying a file name
                    613: is that @samp{-l} searches several directories.
1.1.1.3   root      614: 
                    615: @item -L@var{dir}
                    616: Add directory @var{dir} to the list of directories to be searched
                    617: for @samp{-l}.
1.1.1.2   root      618: 
                    619: @item -nostdlib
                    620: Don't use the standard system libraries and startup files when
                    621: linking.  Only the files you specify (plus @file{gnulib}) will be
                    622: passed to the linker.
                    623: 
                    624: @item -m@var{machinespec}
                    625: Machine-dependent option specifying something about the type of target
                    626: machine.  These options are defined by the macro
                    627: @code{TARGET_SWITCHES} in the machine description.  The default for
                    628: the options is also defined by that macro, which enables you to change
                    629: the defaults.@refill
                    630: 
                    631: These are the @samp{-m} options defined in the 68000 machine
                    632: description:
                    633: 
                    634: @table @samp
                    635: @item -m68020
                    636: Generate output for a 68020 (rather than a 68000).  This is the
                    637: default if you use the unmodified sources.
                    638: 
                    639: @item -m68000
                    640: Generate output for a 68000 (rather than a 68020).
                    641: 
                    642: @item -m68881
                    643: Generate output containing 68881 instructions for floating point.
                    644: This is the default if you use the unmodified sources.
                    645: 
                    646: @item -msoft-float
                    647: Generate output containing library calls for floating point.
                    648: 
                    649: @item -mshort
                    650: Consider type @code{int} to be 16 bits wide, like @code{short int}.
                    651: 
                    652: @item -mnobitfield
                    653: Do not use the bit-field instructions.  @samp{-m68000} implies
                    654: @samp{-mnobitfield}.
                    655: 
                    656: @item -mbitfield
                    657: Do use the bit-field instructions.  @samp{-m68020} implies
                    658: @samp{-mbitfield}.  This is the default if you use the unmodified
                    659: sources.
                    660: 
                    661: @item -mrtd
                    662: Use a different function-calling convention, in which functions
                    663: that take a fixed number of arguments return with the @code{rtd}
                    664: instruction, which pops their arguments while returning.  This
                    665: saves one instruction in the caller since there is no need to pop
                    666: the arguments there.
                    667: 
                    668: This calling convention is incompatible with the one normally
                    669: used on Unix, so you cannot use it if you need to call libraries
                    670: compiled with the Unix compiler.
                    671: 
                    672: Also, you must provide function prototypes for all functions that
                    673: take variable numbers of arguments (including @code{printf});
                    674: otherwise incorrect code will be generated for calls to those
                    675: functions.
                    676: 
                    677: In addition, seriously incorrect code will result if you call a
                    678: function with too many arguments.  (Normally, extra arguments are
                    679: harmlessly ignored.)
                    680: 
                    681: The @code{rtd} instruction is supported by the 68010 and 68020
                    682: processors, but not by the 68000.
                    683: @end table
                    684: 
                    685: These @samp{-m} options are defined in the Vax machine description:
                    686: 
                    687: @table @samp
                    688: @item -munix
                    689: Do not output certain jump instructions (@code{aobleq} and so on)
                    690: that the Unix assembler for the Vax cannot handle across long
                    691: ranges.
                    692: 
                    693: @item -mgnu
                    694: Do output those jump instructions, on the assumption that you
                    695: will assemble with the GNU assembler.
1.1.1.3   root      696: 
                    697: @item -mg
                    698: Output code for g-format floating point numbers instead of d-format.
1.1.1.2   root      699: @end table
                    700: 
                    701: @item -f@var{flag}
                    702: Specify machine-independent flags.  These are the flags:
                    703: 
                    704: @table @samp
                    705: @item -ffloat-store
                    706: Do not store floating-point variables in registers.  This
                    707: prevents undesirable excess precision on machines such as the
                    708: 68000 where the floating registers (of the 68881) keep more
                    709: precision than a @code{double} is supposed to have.
                    710: 
                    711: For most programs, the excess precision does only good, but a few
                    712: programs rely on the precise definition of IEEE floating point.
                    713: Use @samp{-ffloat-store} for such programs.
                    714: 
                    715: @item -fno-asm
                    716: Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
                    717: keyword.  These words may then be used as identifiers.
                    718: 
                    719: @item -fno-defer-pop
                    720: Always pop the arguments to each function call as soon as that
                    721: function returns.  Normally the compiler (when optimizing) lets
                    722: arguments accumulate on the stack for several function calls and
                    723: pops them all at once.
                    724: 
                    725: @item -fcombine-regs
                    726: Allow the combine pass to combine an instruction that copies one
                    727: register into another.  This might or might not produce better
                    728: code when used in addition to @samp{-O}.  I am interested in
                    729: hearing about the difference this makes.
                    730: 
                    731: @item -fforce-mem
                    732: Force memory operands to be copied into registers before doing
                    733: arithmetic on them.  This may produce better code by making all
                    734: memory references potential common subexpressions.  When they are
                    735: not common subexpressions, instruction combination should
                    736: eliminate the separate register-load.  I am interested in hearing
                    737: about the difference this makes.
                    738: 
                    739: @item -fforce-addr
                    740: Force memory address constants to be copied into registers before
                    741: doing arithmetic on them.  This may produce better code just as
                    742: @samp{-fforce-mem} may.  I am interested in hearing about the
                    743: difference this makes.
                    744: 
                    745: @item -fomit-frame-pointer
                    746: Don't keep the frame pointer in a register for functions that
                    747: don't need one.  This avoids the instructions to save, set up and
                    748: restore frame pointers; it also makes an extra register available
                    749: in many functions.  @strong{It also makes debugging impossible.}
                    750: 
                    751: On some machines, such as the Vax, this flag has no effect,
                    752: because the standard calling sequence automatically handles the
                    753: frame pointer and nothing is saved by pretending it doesn't
                    754: exist.  The machine-description macro
                    755: @code{FRAME_POINTER_REQUIRED} controls whether a target machine
                    756: supports this flag.  @xref{Registers}.@refill
                    757: 
                    758: @item -finline-functions
                    759: Integrate all simple functions into their callers.  The compiler
                    760: heuristically decides which functions are simple enough to be
                    761: worth integrating in this way.
                    762: 
                    763: If all calls to a given function are integrated, and the function
                    764: is declared @code{static}, then the function is normally not
                    765: output as assembler code in its own right.
                    766: 
                    767: @item -fkeep-inline-functions
                    768: Even if all calls to a given function are integrated, and the
                    769: function is declared @code{static}, nevertheless output a
                    770: separate run-time callable version of the function.
                    771: 
                    772: @item -fwritable-strings
                    773: Store string constants in the writable data segment and don't
                    774: uniquize them.  This is for compatibility with old programs which
                    775: assume they can write into string constants.  Writing into string
                    776: constants is a very bad idea; ``constants'' should be constant.
                    777: 
                    778: @item -fno-function-cse
                    779: Do not put function addresses in registers; make each instruction
                    780: that calls a constant function contain the function's address
                    781: explicitly.
                    782: 
                    783: This option results in less efficient code, but some strange
                    784: hacks that alter the assembler output may be confused by the
                    785: optimizations performed when this option is not used.
                    786: 
                    787: @item -fvolatile
                    788: Consider all memory references through pointers to be volatile.
                    789: 
                    790: @item -funsigned-char
                    791: Let the type @code{char} be the unsigned, like @code{unsigned
                    792: char}.
                    793: 
                    794: Each kind of machine has a default for what @code{char} should
                    795: be.  It is either like @code{unsigned char} by default or like
                    796: @code{signed char} by default.  (Actually, at present, the
                    797: default is always signed.)
                    798: 
                    799: The type @code{char} is always a distinct type from either
                    800: @code{signed char} or @code{unsigned char}, even though its
                    801: behavior is always just like one of those two.
                    802: 
                    803: @item -fsigned-char
                    804: Let the type @code{char} be signed, like @code{signed char}.
                    805: 
                    806: @item -ffixed-@var{reg}
                    807: Treat the register named @var{reg} as a fixed register; generated
                    808: code should never refer to it (except perhaps as a stack pointer,
                    809: frame pointer or in some other fixed role).
                    810: 
                    811: @var{reg} must be the name of a register.  The register names
                    812: accepted are machine-specific and are defined in the
                    813: @code{REGISTER_NAMES} macro in the machine description macro
                    814: file.
                    815: 
                    816: @item -fcall-used-@var{reg}
                    817: Treat the register named @var{reg} as an allocatable register
                    818: that is clobbered by function calls.  It may be allocated for
                    819: temporaries or variables that do not live across a call.
                    820: Functions compiled this way will not save and restore the
                    821: register @var{reg}.
                    822: 
                    823: Use of this flag for a register that has a fixed pervasive role
                    824: in the machine's execution model, such as the stack pointer or
                    825: frame pointer, will produce disastrous results.
                    826: 
                    827: @item -fcall-saved-@var{reg}
                    828: Treat the register named @var{reg} as an allocatable register
                    829: saved by functions.  It may be allocated even for temporaries or
                    830: variables that live across a call.  Functions compiled this way
                    831: will save and restore the register @var{reg} if they use it.
                    832: 
                    833: Use of this flag for a register that has a fixed pervasive role
                    834: in the machine's execution model, such as the stack pointer or
                    835: frame pointer, will produce disastrous results.
                    836: 
                    837: A different sort of disaster will result from the use of this
                    838: flag for a register in which function values are may be returned.
                    839: @end table
                    840: 
                    841: @item -d@var{letters}
                    842: Says to make debugging dumps at times specified by @var{letters}.
                    843: Here are the possible letters:
                    844: 
                    845: @table @samp
                    846: @item r
                    847: Dump after RTL generation.
                    848: @item j
                    849: Dump after first jump optimization.
                    850: @item J
                    851: Dump after last jump optimization.
                    852: @item s
                    853: Dump after CSE (including the jump optimization that sometimes
                    854: follows CSE).
                    855: @item L
                    856: Dump after loop optimization.
                    857: @item f
                    858: Dump after flow analysis.
                    859: @item c
                    860: Dump after instruction combination.
                    861: @item l
                    862: Dump after local register allocation.
                    863: @item g
                    864: Dump after global register allocation.
                    865: @item m
                    866: Print statistics on memory usage, at the end of the run.
                    867: @end table
                    868: 
                    869: @item -pedantic
                    870: Issue all the warnings demanded by strict ANSI standard C; reject
                    871: all programs that use forbidden extensions.
                    872: 
                    873: Valid ANSI standard C programs should compile properly with or without
                    874: this option (though a rare few will require @samp{-ansi}).  However,
                    875: without this option, certain GNU extensions and traditional C features
                    876: are supported as well.  With this option, they are rejected.  There is
                    877: no reason to @i{use} this option; it exists only to satisfy pedants.
                    878: @end table
                    879: 
                    880: These options control the C preprocessor, which is run on each C source
                    881: file before actual compilation.  If you use the @samp{-E} option, nothing
                    882: is done except C preprocessing.  Some of these options make sense only
                    883: together with @samp{-E} because they request preprocessor output that is
                    884: not suitable for actual compilation.
                    885: 
                    886: @table @samp
                    887: @item -C
                    888: Tell the preprocessor not to discard comments.  Used with the
                    889: @samp{-E} option.
                    890: 
                    891: @item -I@var{dir}
                    892: Search directory @var{dir} for include files.
                    893: 
1.1.1.3   root      894: @item -I-
                    895: Any directories specified with @samp{-I} options before the @samp{-I-}
                    896: option are searched only for the case of @samp{#include "@var{file}"};
                    897: they are not searched for @samp{#include <@var{file}>}.
                    898: 
                    899: If additional directories are specified with @samp{-I} options after
                    900: the @samp{-I-}, these directories are searched for all @samp{#include}
                    901: directives.  (Ordinarily @emph{all} @samp{-I} directories are used
                    902: this way.)
                    903: 
                    904: In addition, the @samp{-I-} option inhibits the use of the current
                    905: directory as the first search directory for @samp{#include
                    906: "@var{file}"}.  Therefore, the current directory is searched only if
                    907: it is requested explicitly with @samp{-I.}.  Specifying both
                    908: @samp{-I-} and @samp{-I.} allows you to control precisely which
                    909: directories are searched before the current one and which are searched
                    910: after.
                    911: 
                    912: @item -nostdinc
                    913: Do not search the standard system directories for header files.  Only
                    914: the directories you have specified with @samp{-I} options (and the
                    915: current directory, if appropriate) are searched.
                    916: 
                    917: Between @samp{-nostdinc} and @samp{-I-}, you can eliminate all
                    918: directories from the search path except those you specify.
                    919: 
1.1.1.2   root      920: @item -M
                    921: Tell the preprocessor to output a rule suitable for @code{make}
                    922: describing the dependencies of each source file.  For each source
                    923: file, the preprocessor outputs one @code{make}-rule whose target is
                    924: the object file name for that source file and whose dependencies are
                    925: all the files @samp{#include}d in it.  This rule may be a single line
                    926: or may be continued with @samp{\}-newline if it is long.
                    927: 
                    928: @samp{-M} implies @samp{-E}.
                    929: 
                    930: @item -MM
                    931: Like @samp{-M} but the output mentions only the user-header files
                    932: included with @samp{#include "@var{file}"}.  System header files
                    933: included with @samp{#include <@var{file}>} are omitted.
                    934: 
                    935: @samp{-MM} implies @samp{-E}.
                    936: 
                    937: @item -D@var{macro}
                    938: Define macro @var{macro} with the empty string as its definition.
                    939: 
                    940: @item -D@var{macro}=@var{defn}
                    941: Define macro @var{macro} as @var{defn}.
                    942: 
                    943: @item -U@var{macro}
                    944: Undefine macro @var{macro}.
                    945: 
                    946: @item -T
                    947: Support ANSI C trigraphs.  You don't want to know about this
                    948: brain-damage.  The @samp{-ansi} option also has this effect.
                    949: @end table
                    950: 
1.1.1.3   root      951: @node Installation, Trouble, Options, Top
1.1.1.2   root      952: @chapter Installing GNU CC
                    953: 
                    954: Here is the procedure for installing GNU CC on a Unix system.
                    955: @menu
                    956: * VMS Install::   See below for installation on VMS.
                    957: @end menu
                    958: @iftex
                    959: (See below for VMS.)
                    960: @end iftex
                    961: 
                    962: @enumerate
                    963: @item
1.1.1.4   root      964: Edit @file{Makefile}.  If you are using HPUX, or any form of system V,
                    965: you must make a few changes described in comments at the beginning of
                    966: the file.
                    967: 
                    968: @item
                    969: On a Sequent system, go to the Berkeley universe.
1.1.1.2   root      970: 
                    971: @item
                    972: Choose configuration files.
                    973: 
                    974: @itemize @bullet
                    975: @item
                    976: Make a symbolic link named @file{config.h} to the top-level
                    977: config file for the machine you are using (@pxref{Config}).  This
                    978: file is responsible for defining information about the host
                    979: machine.  It includes @file{tm.h}.
                    980: 
1.1.1.7 ! root      981: The file's name should be @file{config-@var{machine}.h}, with these
        !           982: exceptions:
        !           983: 
        !           984: @table @file
        !           985: @item config-vms.h
        !           986: for vaxen running VMS.
        !           987: @item config-vaxv.h
        !           988: for vaxen running system V.
        !           989: @item config-i386v.h
        !           990: for Intel 80386's running system V.
        !           991: @item config-sun4.h
        !           992: for Suns (model 3 or 4) running @emph{operating system} version 4.
        !           993: @item config-hp9k3.h
        !           994: for the HP 9000 series 300.
        !           995: @item config-gnx.h
        !           996: for the ns32000 running Genix
        !           997: @end table
1.1.1.2   root      998: 
                    999: If your system does not support symbolic links, you might want to
                   1000: set up @file{config.h} to contain a @samp{#include} command which
                   1001: refers to the appropriate file.
                   1002: 
                   1003: @item
                   1004: Make a symbolic link named @file{tm.h} to the machine-description
                   1005: macro file for your machine (its name should be
                   1006: @file{tm-@var{machine}.h}).
                   1007: 
1.1.1.7 ! root     1008: If your system is a 68000, don't use the file @file{tm-m68k.h}
        !          1009: directly.  Instead, use one of these files:
        !          1010: 
        !          1011: @table @file
        !          1012: @item tm-sun3.h
        !          1013: for Sun 3 machines.
        !          1014: @item tm-sun2.h
        !          1015: for Sun 2 machines.
        !          1016: @item tm-3b1.h
        !          1017: for AT&T 3b1 (aka 7300 Unix PC).
        !          1018: @item tm-isi68.h
        !          1019: for Integrated Solutions systems.
        !          1020: @item tm-news800.h
        !          1021: for SONY News systems.
        !          1022: @item tm-hp9k320.h
        !          1023: for HPUX systems, if you are using GNU CC with the system's
        !          1024: assembler and linker.
        !          1025: @item tm-hp9k320g.h
        !          1026: for HPUX systems, if you are using the GNU assembler, linker and
        !          1027: other utilities.  Not all of the pieces of GNU software needed
        !          1028: for this mode of operation are as yet in distribution; full
        !          1029: instructions will appear here in the future.@refill
        !          1030: @end table
1.1.1.2   root     1031: 
1.1.1.6   root     1032: For the vax, use @file{tm-vax.h} on BSD Unix, @file{tm-vaxv.h} on
                   1033: system V, or @file{tm-vms.h} on VMS.@refill
1.1.1.4   root     1034: 
1.1.1.7 ! root     1035: For the SPARC (Sun 4), use @file{tm-sparc.h}.
1.1.1.6   root     1036: 
                   1037: For the Motorola 88000, use @file{tm-m88k.h}.  The support for the
                   1038: 88000 has a few unfinished spots because there was no way to run the
                   1039: output.  Bugs are suspected in handling of branch-tables and in
                   1040: the function prologue and epilogue.
                   1041: 
1.1.1.7 ! root     1042: For the 80386, don't use @file{tm-i386.h} directly.  Use
        !          1043: @file{tm-i386v.h} if the target machine is running system V,
        !          1044: @file{tm-seq386.h} for a Sequent 386 system, or @file{tm-compaq.h} for
        !          1045: a Compaq.
1.1.1.4   root     1046: 
1.1.1.2   root     1047: For the 32000, use @file{tm-sequent.h} if you are using a Sequent
1.1.1.7 ! root     1048: machine, or @file{tm-encore.h} for an Encore machine, or
        !          1049: @file{tm-gnx.h} if you are using Genix version 3; otherwise, perhaps
        !          1050: @file{tm-ns32k.h} will work for you.
        !          1051: 
        !          1052: Note that Genix has bugs in @code{alloca} and @code{malloc}; you must
        !          1053: get the compiled versions of these from GNU Emacs and edit GNU CC's
        !          1054: @file{Makefile} to use them.
1.1.1.4   root     1055: 
                   1056: Note that Encore systems are supported only under BSD.
1.1.1.2   root     1057: 
                   1058: @item
                   1059: Make a symbolic link named @file{md} to the machine description
                   1060: pattern file (its name should be @file{@var{machine}.md}).
                   1061: 
                   1062: @item
                   1063: Make a symbolic link named @file{aux-output.c} to the output
                   1064: subroutine file for your machine (its name should be
                   1065: @file{output-@var{machine}.c}).
                   1066: @end itemize
                   1067: 
                   1068: @item
                   1069: Make sure the Bison parser generator is installed.  (This is
1.1.1.7 ! root     1070: unnecessary if the Bison output files @file{c-parse.tab.c} and
        !          1071: @file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y}
1.1.1.4   root     1072: and you do not plan to change the @samp{.y} files.)
1.1.1.2   root     1073: 
                   1074: Note that if you have an old version of Bison you may get an error
                   1075: from the line with the @samp{%expect} directive.  If so, simply remove
1.1.1.7 ! root     1076: that line from @file{c-parse.y} and proceed.
1.1.1.2   root     1077: 
                   1078: @item
                   1079: If you are using a Sun, make sure the environment variable
                   1080: @code{FLOAT_OPTION} is not set.  If this option were set to
                   1081: @code{f68881} when @file{gnulib} is compiled, the resulting code would
                   1082: demand to be linked with a special startup file and will not link
                   1083: properly without special pains.
                   1084: 
                   1085: @item
                   1086: Build the compiler.  Just type @samp{make} in the compiler directory.
                   1087: 
                   1088: @item
                   1089: Move the first-stage object files and executables into a subdirectory
                   1090: with this command:
                   1091: 
                   1092: @example
                   1093: make stage1
                   1094: @end example
                   1095: 
                   1096: The files are moved into a subdirectory named @file{stage1}.
                   1097: Once installation is complete, you may wish to delete these files
                   1098: with @code{rm -r stage1}.
                   1099: 
                   1100: @item
                   1101: Recompile the compiler with itself, with this command:
                   1102: 
                   1103: @example
                   1104: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/"
                   1105: @end example
                   1106: 
                   1107: On a 68000 or 68020 system lacking floating point hardware,
                   1108: unless you have selected a @file{tm.h} file that expects by default
                   1109: that there is no such hardware, do this instead:
                   1110: 
                   1111: @example
                   1112: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/ -msoft-float"
                   1113: @end example
                   1114: 
                   1115: @item
                   1116: If you wish to test the compiler by compiling it with itself one more
                   1117: time, do this:
                   1118: 
                   1119: @example
                   1120: make stage2
1.1.1.6   root     1121: Make CC=stage2/gcc CFLAGS="-g -O -Bstage2/"
1.1.1.2   root     1122: foreach file (*.o)
                   1123: cmp $file stage2/$file
                   1124: end
                   1125: @end example
                   1126: 
                   1127: This will notify you if any of these stage 3 object files differs from
                   1128: those of stage 2.  Any difference, no matter how innocuous, indicates
                   1129: that the stage 2 compiler has compiled GNU CC incorrectly, and is
                   1130: therefore a potentially serious bug which you should investigate and
                   1131: report (@pxref{Bugs}).
                   1132: 
1.1.1.6   root     1133: Aside from the @samp{-B} option, the options should be the same as
                   1134: when you made stage 2.
                   1135: 
1.1.1.2   root     1136: @item
                   1137: Install the compiler driver, the compiler's passes and run-time support.
                   1138: You can use the following command:
                   1139: 
                   1140: @example
                   1141: make install
                   1142: @end example
                   1143: 
                   1144: @noindent
                   1145: This copies the files @file{cc1}, @file{cpp} and @file{gnulib} to
                   1146: files @file{gcc-cc1}, @file{gcc-cpp} and @file{gcc-gnulib} in
                   1147: directory @file{/usr/local/lib}, which is where the compiler driver
                   1148: program looks for them.  It also copies the driver program @file{gcc}
                   1149: into the directory @file{/usr/local}, so that it appears in typical
                   1150: execution search paths.@refill
                   1151: 
                   1152: @strong{Warning: the GNU CPP may not work for @file{ioctl.h},
                   1153: @file{ttychars.h} and other system header files unless the
                   1154: @samp{-traditional} option is used.}  The bug is in the header files:
                   1155: at least on some machines, they rely on behavior that is incompatible
                   1156: with ANSI C.  This behavior consists of substituting for macro
                   1157: argument names when they appear inside of character constants.  The
                   1158: @samp{-traditional} option tells GNU CC to behave the way these
                   1159: headers expect.
                   1160: 
                   1161: Because of this problem, you might prefer to configure GNU CC to use
                   1162: the system's own C preprocessor.  To do so, make the file
                   1163: @file{/usr/local/lib/gcc-cpp} a link to @file{/lib/cpp}.
                   1164: 
                   1165: Alternatively, on Sun systems and 4.3BSD at least, you can correct the
                   1166: include files by running the shell script @file{fixincludes}.  This
1.1.1.5   root     1167: installs modified, corrected copies of the files @file{ioctl.h},
                   1168: @file{ttychars.h} and many others, in a special directory where only
                   1169: GNU CC will normally look for them.
1.1.1.2   root     1170: 
1.1.1.5   root     1171: See the file @file{fixincludes} for a list of all the files we know to
                   1172: require correction.
1.1.1.2   root     1173: @end enumerate
                   1174: 
                   1175: If you cannot install the compiler's passes and run-time support in
                   1176: @file{/usr/local/lib}, you can alternatively use the @samp{-B} option to
                   1177: specify a prefix by which they may be found.  The compiler concatenates
                   1178: the prefix with the names  @file{cpp}, @file{cc1} and @file{gnulib}.
                   1179: Thus, you can put the files in a directory @file{/usr/foo/gcc} and
                   1180: specify @samp{-B/usr/foo/gcc/} when you run GNU CC.
                   1181: 
1.1.1.4   root     1182: Also, you can specify an alternative default directory for these files
                   1183: by setting the Make variable @code{libdir} when you make GNU CC.
                   1184: 
1.1.1.2   root     1185: @node VMS Install,, Installation, Installation
                   1186: @section Installing GNU CC on VMS
                   1187: 
1.1.1.3   root     1188: The VMS version of GNU CC is distributed in an unusual tape format which
                   1189: consists of several tape files.  The first is a command file; the second is
                   1190: an executable program which reads Unix tar format; the third is another
                   1191: command file which uses this program to read the remainder of the tape.
                   1192: 
                   1193: To load the tape, it suffices to mount it @samp{/foreign} and then do
                   1194: @samp{@@mta0:} to execute the command file at the beginning of the tape.
                   1195: 
                   1196: The tape contains executables and object files as well as sources, so no
                   1197: compilation is necessary unless you change the sources.  (This is a good
                   1198: thing, since you probably don't have any other C compiler.)  If you must
                   1199: recompile, here is how:
1.1.1.2   root     1200: 
                   1201: @enumerate
                   1202: @item
                   1203: Copy the file @file{tm-vms.h} to @file{tm.h}, @file{config-vms.h} to
                   1204: @file{config.h}, @file{vax.md} to @file{md.} and @file{output-vax.c}
                   1205: to @file{aux-output.c}.@refill
                   1206: 
                   1207: @item
                   1208: Type @samp{@@make} to do recompile everything.
                   1209: @end enumerate
                   1210: 
1.1.1.3   root     1211: To install the @samp{GCC} command so you can use the compiler easily, in
                   1212: the same manner as you use the VMS C compiler, you must install the VMS CLD
                   1213: file for GNU CC as follows:
                   1214: 
                   1215: @enumerate
                   1216: @item
                   1217: Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE}
                   1218: to point to the directories where the GNU CC executables
                   1219: (@samp{gcc-cpp}, @samp{gcc-cc1}, etc.) and the C include files are
                   1220: kept.  This should be done with the commands:@refill
                   1221: 
                   1222: @example
                   1223: $ assign /super /system disk:[gcc] gnu_cc
                   1224: $ assign /super /system disk:[gcc.include] gnu_cc_include
                   1225: @end example
                   1226: 
                   1227: @noindent
                   1228: with the appropriate disk and directory names.  These commands can be
                   1229: placed in your system startup file so they will be executed whenever
                   1230: the machine is rebooted.
                   1231: 
                   1232: @item
                   1233: Install the @samp{GCC} command with the command line:
                   1234: 
                   1235: @example
                   1236: $ set command /table=sys$library:dcltables gnu_cc:gcc
                   1237: @end example
                   1238: 
                   1239: @noindent
                   1240: Now you can invoke the compiler with a command like @samp{gcc /verbose
                   1241: file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in
                   1242: Unix.
                   1243: @end enumerate
                   1244: 
                   1245: @node Trouble, Incompatibilities, Installation, Top
                   1246: @chapter Trouble in Installation
                   1247: 
                   1248: Here are some of the things that have caused trouble for people installing
                   1249: GNU CC.
                   1250: 
1.1.1.4   root     1251: @itemize @bullet
1.1.1.3   root     1252: @item
                   1253: On certain systems, defining certain environment variables such as
                   1254: @samp{CC} can interfere with the functioning of @code{make}.
1.1.1.4   root     1255: 
                   1256: @item
                   1257: Cross compilation can run into trouble for certain machines because
                   1258: some target machines' assemblers require floating point numbers to be
                   1259: written as @emph{integer} constants in certain contexts.
                   1260: 
                   1261: The compiler writes these integer constants by examining the floating
                   1262: point value as an integer and printing that integer, because this is
                   1263: simple to write and independent of the details of the floating point
                   1264: representation.  But this does not work if the compiler is running on
                   1265: a different machine with an incompatible floating point format, or
                   1266: even a different byte-ordering.
                   1267: 
                   1268: It is possible to fix this by writing machine-independent code which
                   1269: understands the floating point representation of the target machine.
                   1270: I am not interested in doing that much work to compensate for bugs
                   1271: in assemblers.
1.1.1.3   root     1272: @end itemize
                   1273: 
                   1274: @node Incompatibilities, Extensions, Trouble, Top
1.1.1.2   root     1275: @chapter Incompatibilities of GNU CC
                   1276: 
                   1277: There are several noteworthy incompatibilities between GNU C and most
                   1278: existing (non-ANSI) versions of C.
                   1279: 
                   1280: Ultimately our intention is that the @samp{-traditional} option will
                   1281: eliminate most of these incompatibilities by telling GNU C to behave
                   1282: like the other C compilers.
                   1283: 
                   1284: @itemize @bullet
                   1285: @item
                   1286: GNU CC normally makes string constants read-only.  If several
                   1287: identical-looking string constants are used, GNU CC stores only one
                   1288: copy of the string.
                   1289: 
                   1290: One consequence is that you cannot call @code{mktemp} with a string
                   1291: constant argument.  The function @code{mktemp} always alters the
                   1292: string its argument points to.
                   1293: 
                   1294: Another consequence is that @code{sscanf} does not work on some
                   1295: systems when passed a string constant as its format control string.
                   1296: This is because @code{sscanf} incorrectly tries to write into the
                   1297: string constant.
                   1298: 
                   1299: The best solution to these problems is to change the program to use
                   1300: @code{char}-array variables with initialization strings for these
                   1301: purposes instead of string constants.  But if this is not possible,
                   1302: you can use the @samp{-fwritable-strings} flag, which directs GNU CC
                   1303: to handle string constants the same way most C compilers do.
                   1304: 
                   1305: @item
                   1306: GNU CC does not substitute macro arguments when they appear inside of
                   1307: string constants.  For example, the following macro in GNU CC
                   1308: 
                   1309: @example
                   1310: #define foo(a) "a"
                   1311: @end example
                   1312: 
                   1313: @noindent
                   1314: will produce output @samp{"a"} regardless of what the argument @var{a} is.
                   1315: 
                   1316: The @samp{-traditional} option directs GNU CC to handle such cases
                   1317: (among others) in the old-fashioned (non-ANSI) fashion.
                   1318: 
                   1319: @item
                   1320: When you use @code{setjmp} and @code{longjmp}, the only automatic
                   1321: variables guaranteed to remain valid are those declared
                   1322: @code{volatile}.  This is a consequence of automatic register
                   1323: allocation.  Consider this function:
                   1324: 
                   1325: @example
                   1326: jmp_buf j;
                   1327: 
                   1328: foo ()
                   1329: @{
                   1330:   int a, b;
                   1331: 
                   1332:   a = fun1 ();
                   1333:   if (setjmp (j))
                   1334:     return a;
                   1335: 
                   1336:   a = fun2 ();
                   1337:   /* @r{@code{longjmp (j)} may be occur in @code{fun3}.} */
                   1338:   return a + fun3 ();
                   1339: @}
                   1340: @end example
                   1341: 
                   1342: Here @code{a} may or may not be restored to its first value when the
                   1343: @code{longjmp} occurs.  If @code{a} is allocated in a register, then
                   1344: its first value is restored; otherwise, it keeps the last value stored
                   1345: in it.
                   1346: 
                   1347: If you use the @samp{-W} option with the @samp{-O} option, you will
                   1348: get a warning when GNU CC thinks such a problem might be possible.
                   1349: 
                   1350: @item
                   1351: Declarations of external variables and functions within a block apply
                   1352: only to the block containing the declaration.  In other words, they
                   1353: have the same scope as any other declaration in the same place.
                   1354: 
                   1355: In some other C compilers, a @code{extern} declaration affects all the
                   1356: rest of the file even if it happens within a block.
                   1357: 
                   1358: The @samp{-traditional} option directs GNU C to treat all @code{extern}
                   1359: declarations as global, like traditional compilers.
                   1360: 
                   1361: @item
                   1362: In traditional C, you can combine @code{long}, etc., with a typedef name,
                   1363: as shown here:
                   1364: 
                   1365: @example
                   1366: typedef int foo;
                   1367: typedef long foo bar;
                   1368: @end example
                   1369: 
                   1370: In ANSI C, this is not allowed: @code{long} and other type modifiers
                   1371: require an explicit @code{int}.  Because this criterion is expressed
                   1372: by Bison grammar rules rather than C code, the @samp{-traditional}
                   1373: flag cannot alter it.
                   1374: 
                   1375: @item
1.1.1.7 ! root     1376: PCC allows typedef names to be used as function parameters.  The
        !          1377: difficulty described immediately above applies here too.
        !          1378: 
        !          1379: @item
1.1.1.6   root     1380: When compiling functions that return @code{float}, PCC converts it to
                   1381: a double.  GNU CC actually returns a @code{float}.  If you are concerned
                   1382: with PCC compatibility, you should declare your functions to return
                   1383: @code{double}; you might as well say what you mean.
                   1384: 
                   1385: @item
1.1.1.2   root     1386: When compiling functions that return structures or unions, GNU CC
                   1387: output code uses a method different from that used on most versions of
                   1388: Unix.  As a result, code compiled with GNU CC cannot call a
                   1389: structure-returning function compiled with PCC, and vice versa.
                   1390: 
                   1391: The method used by GCC is as follows: a structure or union which is 1,
                   1392: 2, 4 or 8 bytes long is returned like a scalar.  A structure or union
                   1393: with any other size is stored into an address supplied by the caller
                   1394: in a special, fixed register.
                   1395: 
                   1396: PCC usually handles all sizes of structures and unions by returning
                   1397: the address of a block of static storage containing the value.  This
                   1398: method is not used in GCC because it is slower and nonreentrant.
                   1399: 
                   1400: On systems where PCC works this way, you may be able to make GCC-compiled
                   1401: code call such functions that were compiled with PCC by declaring them
                   1402: to return a pointer to the structure or union instead of the structure
                   1403: or union itself.  For example, instead of this:
                   1404: 
                   1405: @example
                   1406: struct foo nextfoo ();
                   1407: @end example
                   1408: 
                   1409: @noindent
                   1410: write this:
                   1411: 
                   1412: @example
                   1413: struct foo *nextfoo ();
                   1414: #define nextfoo *nextfoo
                   1415: @end example
                   1416: 
                   1417: @noindent
1.1.1.4   root     1418: (Note that this assumes you are using the GNU preprocessor and not
                   1419: @samp{-traditional}, so that the ANSI antirecursion rules for macro
                   1420: expansions are effective.)
1.1.1.2   root     1421: @end itemize
                   1422: 
                   1423: @node Extensions, Bugs, Incompatibilities, Top
                   1424: @chapter GNU Extensions to the C Language
                   1425: 
                   1426: GNU C provides several language features not found in ANSI standard C.
                   1427: (The @samp{-pedantic} option directs GNU CC to print a warning message if
                   1428: any of these features is used.)  To test for the availability of these
                   1429: features in conditional compilation, check for a predefined macro
                   1430: @code{__GNUC__}, which is always defined under GNU CC.
                   1431: 
                   1432: @menu
                   1433: * Statement Exprs::     Putting statements and declarations inside expressions.
                   1434: * Naming Types::        Giving a name to the type of some expression.
                   1435: * Typeof::             @code{typeof}: referring to the type of an expression.
                   1436: * Lvalues::            Using @samp{?:}, @samp{,} and casts in lvalues.
                   1437: * Conditionals::       Omitting the middle operand of a @samp{?:} expression.
                   1438: * Zero-Length::                Zero-length arrays.
                   1439: * Variable-Length::    Arrays whose length is computed at run time.
                   1440: * Subscripting::       Any array can be subscripted, even if not an lvalue.
                   1441: * Pointer Arith::      Arithmetic on @code{void}-pointers and function pointers.
                   1442: * Constructors::       Constructor expressions give structures, unions
                   1443:                         or arrays as values.
                   1444: * Dollar Signs::        Dollar sign is allowed in identifiers.
                   1445: * Alignment::           Inquiring about the alignment of a type or variable.
                   1446: * Inline::              Defining inline functions (as fast as macros).
                   1447: * Extended Asm::       Assembler instructions with C expressions as operands.
                   1448:                         (With them you can define ``built-in'' functions.)
                   1449: * Asm Labels::         Specifying the assembler name to use for a C symbol.
                   1450: @end menu
                   1451: 
                   1452: @node Statement Exprs, Naming Types, Extensions, Extensions
                   1453: @section Statements and Declarations inside of Expressions
                   1454: 
                   1455: A compound statement in parentheses may appear inside an expression in GNU
                   1456: C.  This allows you to declare variables within an expression.  For
                   1457: example:
                   1458: 
                   1459: @example
                   1460: (@{ int y = foo (); int z;
                   1461:    if (y > 0) z = y;
                   1462:    else z = - y;
                   1463:    z; @})
                   1464: @end example
                   1465: 
                   1466: @noindent
                   1467: is a valid (though slightly more complex than necessary) expression
                   1468: for the absolute value of @code{foo ()}.
                   1469: 
                   1470: This feature is especially useful in making macro definitions ``safe'' (so
                   1471: that they evaluate each operand exactly once).  For example, the
                   1472: ``maximum'' function is commonly defined as a macro in standard C as
                   1473: follows:
                   1474: 
                   1475: @example
                   1476: #define max(a,b) ((a) > (b) ? (a) : (b))
                   1477: @end example
                   1478: 
                   1479: @noindent
                   1480: But this definition computes either @var{a} or @var{b} twice, with bad
                   1481: results if the operand has side effects.  In GNU C, if you know the
                   1482: type of the operands (here let's assume @code{int}), you can define
                   1483: the macro safely as follows:
                   1484: 
                   1485: @example
                   1486: #define maxint(a,b) \
                   1487:   (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
                   1488: @end example
                   1489: 
                   1490: Embedded statements are not allowed in constant expressions, such as
                   1491: the value of an enumeration constant, the width of a bit field, or
                   1492: the initial value of a static variable.
                   1493: 
                   1494: If you don't know the type of the operand, you can still do this, but you
                   1495: must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
                   1496: Types}).
                   1497: 
                   1498: @node Naming Types, Typeof, Statement Exprs, Extensions
                   1499: @section Naming an Expression's Type
                   1500: 
                   1501: You can give a name to the type of an expression using a @code{typedef}
                   1502: declaration with an initializer.  Here is how to define @var{name} as a
                   1503: type name for the type of @var{exp}:
                   1504: 
                   1505: @example
                   1506: typedef @var{name} = @var{exp};
                   1507: @end example
                   1508: 
                   1509: This is useful in conjunction with the statements-within-expressions
                   1510: feature.  Here is how the two together can be used to define a safe
                   1511: ``maximum'' macro that operates on any arithmetic type:
                   1512: 
                   1513: @example
                   1514: #define max(a,b) \
                   1515:   (@{typedef _ta = (a), _tb = (b);  \
                   1516:     _ta _a = (a); _tb _b = (b);     \
                   1517:     _a > _b ? _a : _b; @})
                   1518: @end example
                   1519: 
                   1520: The reason for using names that start with underscores for the local
                   1521: variables is to avoid conflicts with variable names that occur within the
                   1522: expressions that are substituted for @code{a} and @code{b}.  Eventually we
                   1523: hope to design a new form of declaration syntax that allows you to declare
                   1524: variables whose scopes start only after their initializers; this will be a
                   1525: more reliable way to prevent such conflicts.
                   1526: 
                   1527: @node Typeof, Lvalues, Naming Types, Extensions
                   1528: @section Referring to a Type with @code{typeof}
                   1529: 
                   1530: Another way to refer to the type of an expression is with @code{typeof}.
                   1531: The syntax of using of this keyword looks like @code{sizeof}, but the
                   1532: construct acts semantically like a type name defined with @code{typedef}.
                   1533: 
                   1534: There are two ways of writing the argument to @code{typeof}: with an
                   1535: expression or with a type.  Here is an example with an expression:
                   1536: 
                   1537: @example
                   1538: typeof (x[0](1))
                   1539: @end example
                   1540: 
                   1541: @noindent
                   1542: This assumes that @code{x} is an array of functions; the type described
                   1543: is that of the values of the functions.
                   1544: 
                   1545: Here is an example with a typename as the argument:
                   1546: 
                   1547: @example
                   1548: typeof (int *)
                   1549: @end example
                   1550: 
                   1551: @noindent
                   1552: Here the type described is that of pointers to @code{int}.
                   1553: 
                   1554: A @code{typeof}-construct can be used anywhere a typedef name could be
                   1555: used.  For example, you can use it in a declaration, in a cast, or inside
                   1556: of @code{sizeof} or @code{typeof}.
                   1557: 
                   1558: @itemize @bullet
                   1559: @item
                   1560: This declares @code{y} with the type of what @code{x} points to.
                   1561: 
                   1562: @example
                   1563: typeof (*x) y;
                   1564: @end example
                   1565: 
                   1566: @item
                   1567: This declares @code{y} as an array of such values.
                   1568: 
                   1569: @example
                   1570: typeof (*x) y[4];
                   1571: @end example
                   1572: 
                   1573: @item
                   1574: This declares @code{y} as an array of pointers to characters:
                   1575: 
                   1576: @example
                   1577: typeof (typeof (char *)[4]) y;
                   1578: @end example
                   1579: 
                   1580: @noindent
                   1581: It is equivalent to the following traditional C declaration:
                   1582: 
                   1583: @example
                   1584: char *y[4];
                   1585: @end example
                   1586: 
                   1587: To see the meaning of the declaration using @code{typeof}, and why it
                   1588: might be a useful way to write, let's rewrite it with these macros:
                   1589: 
                   1590: @example
                   1591: #define pointer(T)  typeof(T *)
                   1592: #define array(T, N) typeof(T [N])
                   1593: @end example
                   1594: 
                   1595: @noindent
                   1596: Now the declaration can be rewritten this way:
                   1597: 
                   1598: @example
                   1599: array (pointer (char), 4) y;
                   1600: @end example
                   1601: 
                   1602: @noindent
                   1603: Thus, @samp{array (pointer (char), 4)} is the type of arrays of 4
                   1604: pointers to @code{char}.
                   1605: @end itemize
                   1606: 
                   1607: @node Lvalues, Conditionals, Typeof, Extensions
                   1608: @section Generalized Lvalues
                   1609: 
                   1610: Compound expressions, conditional expressions and casts are allowed as
                   1611: lvalues provided their operands are lvalues.  This means that you can take
                   1612: their addresses or store values into them.
                   1613: 
                   1614: For example, a compound expression can be assigned, provided the last
                   1615: expression in the sequence is an lvalue.  These two expressions are
                   1616: equivalent:
                   1617: 
                   1618: @example
                   1619: (a, b) += 5
                   1620: a, (b += 5)
                   1621: @end example
                   1622: 
                   1623: Similarly, the address of the compound expression can be taken.  These two
                   1624: expressions are equivalent:
                   1625: 
                   1626: @example
                   1627: &(a, b)
                   1628: a, &b
                   1629: @end example
                   1630: 
                   1631: A conditional expression is a valid lvalue if its type is not void and the
                   1632: true and false branches are both valid lvalues.  For example, these two
                   1633: expressions are equivalent:
                   1634: 
                   1635: @example
                   1636: (a ? b : c) = 5
                   1637: (a ? b = 5 : (c = 5))
                   1638: @end example
                   1639: 
                   1640: A cast is a valid lvalue if its operand is valid.  Taking the address of
                   1641: the cast is the same as taking the address without a cast, except for the
                   1642: type of the result.  For example, these two expressions are equivalent (but
                   1643: the second may be valid when the type of @samp{a} does not permit a cast to
                   1644: @samp{int *}).
                   1645: 
                   1646: @example
                   1647: &(int *)a
                   1648: (int **)&a
                   1649: @end example
                   1650: 
                   1651: A simple assignment whose left-hand side is a cast works by converting the
                   1652: right-hand side first to the specified type, then to the type of the inner
                   1653: left-hand side expression.  After this is stored, the value is converter
                   1654: back to the specified type to become the value of the assignment.  Thus, if
                   1655: @samp{a} has type @samp{char *}, the following two expressions are
                   1656: equivalent:
                   1657: 
                   1658: @example
                   1659: (int)a = 5
                   1660: (int)(a = (char *)5)
                   1661: @end example
                   1662: 
                   1663: An assignment-with-arithmetic operation such as @samp{+=} applied to a cast
                   1664: performs the arithmetic using the type resulting from the cast, and then
                   1665: continues as in the previous case.  Therefore, these two expressions are
                   1666: equivalent:
                   1667: 
                   1668: @example
                   1669: (int)a += 5
                   1670: (int)(a = (char *) ((int)a + 5))
                   1671: @end example
                   1672: 
                   1673: @node Conditionals, Zero-Length, Lvalues, Extensions
                   1674: @section Conditional Expressions with Omitted Middle-Operands
                   1675: 
                   1676: The middle operand in a conditional expression may be omitted.  Then
                   1677: if the first operand is nonzero, its value is the value of the conditional
                   1678: expression.
                   1679: 
                   1680: Therefore, the expression
                   1681: 
                   1682: @example
                   1683: x ? : y
                   1684: @end example
                   1685: 
                   1686: @noindent
                   1687: has the value of @code{x} if that is nonzero; otherwise, the value of
                   1688: @code{y}.
                   1689: 
                   1690: This example is perfectly equivalent to
                   1691: 
                   1692: @example
                   1693: x ? x : y
                   1694: @end example
                   1695: 
                   1696: @noindent
                   1697: In this simple case, the ability to omit the middle operand is not
                   1698: especially useful.  When it becomes useful is when the first operand does,
                   1699: or may (if it is a macro argument), contain a side effect.  Then repeating
                   1700: the operand in the middle would perform the side effect twice.  Omitting
                   1701: the middle operand uses the value already computed without the undesirable
                   1702: effects of recomputing it.
                   1703: 
                   1704: @node Zero-Length, Variable-Length, Conditionals, Extensions
                   1705: @section Arrays of Length Zero
                   1706: 
                   1707: Zero-length arrays are allowed in GNU C.  They are very useful as the last
                   1708: element of a structure which is really a header for a variable-length
                   1709: object:
                   1710: 
                   1711: @example
                   1712: struct line @{
                   1713:   int length;
                   1714:   char contents[0];
                   1715: @};
                   1716: 
                   1717: @{
                   1718:   struct line *thisline 
                   1719:     = (struct line *) malloc (sizeof (struct line) + this_length);
1.1.1.6   root     1720:   thisline->length = this_length;
1.1.1.2   root     1721: @}
                   1722: @end example
                   1723: 
                   1724: In standard C, you would have to give @code{contents} a length of 1, which
                   1725: means either you waste space or complicate the argument to @code{malloc}.
                   1726: 
                   1727: @node Variable-Length, Subscripting, Zero-Length, Extensions
                   1728: @section Arrays of Variable Length
                   1729: 
                   1730: Variable-length automatic arrays are allowed in GNU C.  These arrays are
                   1731: declared like any other automatic arrays, but with a length that is not a
                   1732: constant expression.  The storage is allocated at that time and
                   1733: deallocated when the brace-level is exited.  For example:
                   1734: 
                   1735: @example
                   1736: FILE *concat_fopen (char *s1, char *s2, char *mode)
                   1737: @{
                   1738:   char str[strlen (s1) + strlen (s2) + 1];
                   1739:   strcpy (str, s1);
                   1740:   strcat (str, s2);
                   1741:   return fopen (str, mode);
                   1742: @}
                   1743: @end example
                   1744: 
                   1745: You can also define structure types containing variable-length arrays, and
                   1746: use them even for arguments or function values, as shown here:
                   1747: 
                   1748: @example
                   1749: int foo;
                   1750: 
                   1751: struct entry
                   1752: @{
                   1753:   char data[foo];
                   1754: @};
                   1755: 
                   1756: struct entry
                   1757: tester (struct entry arg)
                   1758: @{
                   1759:   struct entry new;
                   1760:   int i;
                   1761:   for (i = 0; i < foo; i++)
                   1762:     new.data[i] = arg.data[i] + 1;
                   1763:   return new;
                   1764: @}
                   1765: @end example
                   1766: 
                   1767: @noindent
                   1768: (Eventually there will be a way to say that the size of the array is
                   1769: another member of the same structure.)
                   1770: 
                   1771: The length of an array is computed on entry to the brace-level where the
                   1772: array is declared and is remembered for the scope of the array in case you
                   1773: access it with @code{sizeof}.
                   1774: 
                   1775: Jumping or breaking out of the scope of the array name will also deallocate
                   1776: the storage.  Jumping into the scope is not allowed; you will get an error
                   1777: message for it.
                   1778: 
                   1779: You can use the function @code{alloca} to get an effect much like
                   1780: variable-length arrays.  The function @code{alloca} is available in
                   1781: many other C implementations (but not in all).  On the other hand,
                   1782: variable-length arrays are more elegant.
                   1783: 
                   1784: There are other differences between these two methods.  Space allocated
                   1785: with @code{alloca} exists until the containing @emph{function} returns.
                   1786: The space for a variable-length array is deallocated as soon as the array
                   1787: name's scope ends.  (If you use both variable-length arrays and
                   1788: @code{alloca} in the same function, deallocation of a variable-length array
                   1789: will also deallocate anything more recently allocated with @code{alloca}.)
                   1790: 
                   1791: @node Subscripting, Pointer Arith, Variable-Length, Extensions
                   1792: @section Non-Lvalue Arrays May Have Subscripts
                   1793: 
                   1794: Subscripting is allowed on arrays that are not lvalues, even though the
                   1795: unary @samp{&} operator is not.  For example, this is valid in GNU C though
                   1796: not valid in other C dialects:
                   1797: 
                   1798: @example
                   1799: struct foo @{int a[4];@};
                   1800: 
                   1801: struct foo f();
                   1802: 
                   1803: bar (int index)
                   1804: @{
                   1805:   return f().a[index];
                   1806: @}
                   1807: @end example
                   1808: 
                   1809: @node Pointer Arith, Initializers, Subscripting, Extensions
                   1810: @section Arithmetic on @code{void}-Pointers and Function Pointers
                   1811: 
                   1812: In GNU C, addition and subtraction operations are supported on pointers to
                   1813: @code{void} and on pointers to functions.  This is done by treating the
                   1814: size of a @code{void} or of a function as 1.
                   1815: 
                   1816: A consequence of this is that @code{sizeof} is also allowed on @code{void}
                   1817: and on function types, and returns 1.
                   1818: 
                   1819: @node Initializers, Constructors, Pointer Arith, Extensions
                   1820: @section Non-Constant Initializers
                   1821: 
                   1822: The elements of an aggregate initializer are not required to be constant
                   1823: expressions in GNU C.  Here is an example of an initializer with run-time
                   1824: varying elements:
                   1825: 
                   1826: @example
                   1827: foo (float f, float g)
                   1828: @{
                   1829:   float beat_freqs[2] = @{ f-g, f+g @};
                   1830:   @dots{}
                   1831: @}
                   1832: @end example
                   1833: 
                   1834: @node Constructors, Dollar Signs, Initializers, Extensions
                   1835: @section Constructor Expressions
                   1836: 
                   1837: GNU C supports constructor expressions.  A constructor looks like a cast
                   1838: containing an initializer.  Its value is an object of the type specified in
                   1839: the cast, containing the elements specified in the initializer.  The type
                   1840: must be a structure, union or array type.
                   1841: 
                   1842: Assume that @code{struct foo} and @code{structure} are declared as shown:
                   1843: 
                   1844: @example
                   1845: struct foo @{int a; char b[2];@} structure;
                   1846: @end example
                   1847: 
                   1848: @noindent
                   1849: Here is an example of constructing a @samp{struct foo} with a constructor:
                   1850: 
                   1851: @example
                   1852: structure = ((struct foo) @{x + y, 'a', 0@});
                   1853: @end example
                   1854: 
                   1855: @noindent
                   1856: This is equivalent to writing the following:
                   1857: 
                   1858: @example
                   1859: @{
                   1860:   struct foo temp = @{x + y, 'a', 0@};
                   1861:   structure = temp;
                   1862: @}
                   1863: @end example
                   1864: 
                   1865: You can also construct an array.  If all the elements of the constructor
                   1866: are (made up of) simple constant expressions, suitable for use in
                   1867: initializers, then the constructor is an lvalue and can be coerced to a
                   1868: pointer to its first element, as shown here:
                   1869: 
                   1870: @example
                   1871: char **foo = (char *[]) @{ "x", "y", "z" @};
                   1872: @end example
                   1873: 
                   1874: Array constructors whose elements are not simple constants are not very
                   1875: useful, because the constructor is not an lvalue.  There are only two valid
                   1876: ways to use it: to subscript it, or initialize an array variable with it.
                   1877: The former is probably slower than a @code{switch} statement, while the
                   1878: latter does the same thing an ordinary C initializer would do.
                   1879: 
                   1880: @example
                   1881: output = ((int[]) @{ 2, x, 28 @}) [input];
                   1882: @end example
                   1883: 
                   1884: @node Dollar Signs, Alignment, Constructors, Extensions
                   1885: @section Dollar Signs in Identifier Names
                   1886: 
                   1887: In GNU C, you may use dollar signs in identifier names.  This is because
                   1888: many traditional C implementations allow such identifiers.
                   1889: 
                   1890: @node Alignment, Inline, Dollar Signs, Extensions
                   1891: @section Inquiring about the Alignment of a Type or Variable
                   1892: 
                   1893: The keyword @code{__alignof} allows you to inquire about how an object
                   1894: is aligned, or the minimum alignment usually required by a type.  Its
                   1895: syntax is just like @code{sizeof}.
                   1896: 
                   1897: For example, if the target machine requires a @code{double} value to be
                   1898: aligned on an 8-byte boundary, then @code{__alignof (double)} is 8.  This
                   1899: is true on many RISC machines.  On more traditional machine designs,
                   1900: @code{__alignof (double)} is 4 or even 2.
                   1901: 
                   1902: Some machines never actually require alignment; they allow reference to any
                   1903: data type even at an odd addresses.  For these machines, @code{__alignof}
                   1904: reports the @emph{recommended} alignment of a type.
                   1905: 
                   1906: When the operand of @code{__alignof} is an lvalue rather than a type, the
                   1907: value is the largest alignment that the lvalue is known to have.  It may
                   1908: have this alignment as a result of its data type, or because it is part of
                   1909: a structure and inherits alignment from that structure. For example, after
                   1910: this declaration:
                   1911: 
                   1912: @example
                   1913: struct foo @{ int x; char y; @} foo1;
                   1914: @end example
                   1915: 
                   1916: @noindent
                   1917: the value of @code{__alignof (foo1.y)} is probably 2 or 4, the same as
                   1918: @code{__alignof (int)}, even though the data type of @code{foo1.y} does not
                   1919: itself demand any alignment.@refill
                   1920: 
                   1921: @node Inline, Extended Asm, Alignment, Extensions
                   1922: @section An Inline Function is As Fast As a Macro
                   1923: 
                   1924: By declaring a function @code{inline}, you can direct GNU CC to integrate
                   1925: that function's code into the code for its callers.  This makes execution
                   1926: faster by eliminating the function-call overhead; in addition, if any of
                   1927: the actual argument values are constant, their known values may permit
                   1928: simplifications at compile time so that not all of the inline function's
                   1929: code needs to be included.
                   1930: 
                   1931: To declare a function inline, use the @code{inline} keyword in its
                   1932: declaration, like this:
                   1933: 
                   1934: @example
                   1935: inline int
                   1936: inc (int *a)
                   1937: @{
                   1938:   (*a)++;
                   1939: @}
                   1940: @end example
                   1941: 
                   1942: You can also make all ``simple enough'' functions inline with the
                   1943: option @samp{-finline-functions}.  Note that certain usages in a
                   1944: function definition can make it unsuitable for inline substitution.
                   1945: 
                   1946: When a function is both inline and @code{static}, if all calls to the
                   1947: function are integrated into the caller, then the function's own assembler
                   1948: code is never referenced.  In this case, GNU CC does not actually output
                   1949: assembler code for the function, unless you specify the option
                   1950: @samp{-fkeep-inline-functions}.  Some calls cannot be integrated for
                   1951: various reasons (in particular, calls that precede the function's
                   1952: definition cannot be integrated, and neither can recursive calls within the
                   1953: definition).  If there is a nonintegrated call, then the function is
                   1954: compiled to assembler code as usual.
                   1955: 
                   1956: When an inline function is not @code{static}, then the compiler must assume
                   1957: that there may be calls from other source files; since a global symbol can
                   1958: be defined only once in any program, the function must not be defined in
                   1959: the other source files, so the calls therein cannot be integrated.
                   1960: Therefore, a non-@code{static} inline function is always compiled on its
                   1961: own in the usual fashion.
                   1962: 
                   1963: @node Extended Asm, Asm Labels, Inline, Extensions
                   1964: @section Assembler Instructions with C Expression Operands
                   1965: 
                   1966: In an assembler instruction using @code{asm}, you can now specify the
                   1967: operands of the instruction using C expressions.  This means no more
                   1968: guessing which registers or memory locations will contain the data you want
                   1969: to use.
                   1970: 
                   1971: You must specify an assembler instruction template much like what appears
                   1972: in a machine description, plus an operand constraint string for each
                   1973: operand.
                   1974: 
                   1975: For example, here is how to use the 68881's @code{fsinx} instruction:
                   1976: 
                   1977: @example
                   1978: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                   1979: @end example
                   1980: 
                   1981: @noindent
                   1982: Here @code{angle} is the C expression for the input operand while
                   1983: @code{result} is that of the output operand.  Each has @samp{"f"} as its
                   1984: operand constraint, saying that a floating-point register is required.  The
                   1985: constraints use the same language used in the machine description
                   1986: (@pxref{Constraints}).
                   1987: 
                   1988: Each operand is described by an operand-constraint string followed by the C
                   1989: expression in parentheses.  A colon separates the assembler template from
                   1990: the first output operand, and another separates the last output operand
                   1991: from the first input, if any.  Commas separate output operands and separate
                   1992: inputs.  The number of operands is limited to the maximum number of
                   1993: operands in any instruction pattern in the machine description.
                   1994: 
1.1.1.5   root     1995: Output operand expressions must be lvalues; the compiler can check this.
                   1996: The input operands need not be lvalues.  The compiler cannot check whether
                   1997: the operands have data types that are reasonable for the instruction being
1.1.1.2   root     1998: executed.
                   1999: 
1.1.1.5   root     2000: If there are no output operands, and there are input operands, then you
                   2001: should write two colons in a row where the output operands would go.
                   2002: 
1.1.1.2   root     2003: The output operands must be write-only; GNU CC will assume that the values
                   2004: in these operands before the instruction are dead and need not be
1.1.1.5   root     2005: generated.  For an operand that is read-write, or in which not all bits are
                   2006: written and the other bits contain useful information, you must logically
                   2007: split its function into two separate operands, one input operand and one
                   2008: write-only output operand.  The connection between them is expressed by
                   2009: constraints which say they need to be in the same location when the
                   2010: instruction executes.  You can use the same C expression for both operands,
                   2011: or different expressions.  For example, here we write the (fictitious)
1.1.1.2   root     2012: @samp{combine} instruction with @code{bar} as its read-only source operand
                   2013: and @code{foo} as its read-write destination:
                   2014: 
                   2015: @example
                   2016: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                   2017: @end example
                   2018: 
                   2019: @noindent
                   2020: The constraint @samp{"0"} for operand 1 says that it must occupy the same
1.1.1.5   root     2021: location as operand 0.
                   2022: 
                   2023: Unless an output operand has the @samp{&} constraint modifier, GNU CC may
                   2024: allocate it in the same register as an unrelated input operand, on the
                   2025: assumption that the inputs are consumed before the outputs are produced.
                   2026: This assumption may be false if the assembler code actually consists of
                   2027: more than one instruction.  In such a case, use @samp{&} for each output
                   2028: operand that may not overlap an input.  @xref{Modifiers}.
1.1.1.2   root     2029: 
                   2030: Usually the most convenient way to use these @code{asm} instructions is to
                   2031: encapsulate them in macros that look like functions.  For example,
                   2032: 
                   2033: @example
                   2034: #define sin(x)       \
                   2035: (@{ double __value, __arg = (x);   \
                   2036:    asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                   2037:    __value; @})
                   2038: @end example
                   2039: 
                   2040: @noindent
                   2041: Here the variable @code{__arg} is used to make sure that the instruction
                   2042: operates on a proper @code{double} value, and to accept only those
                   2043: arguments @code{x} which can convert automatically to a @code{double}.
                   2044: 
                   2045: Another way to make sure the instruction operates on the correct data type
                   2046: is to use a cast in the @code{asm}.  This is different from using a
                   2047: variable @code{__arg} in that it converts more different types.  For
                   2048: example, if the desired type were @code{int}, casting the argument to
                   2049: @code{int} would accept a pointer with no complaint, while assigning the
                   2050: argument to an @code{int} variable named @code{__arg} would warn about
                   2051: using a pointer unless the caller explicitly casts it.
                   2052: 
                   2053: GNU CC assumes for optimization purposes that these instructions have no
                   2054: side effects except to change the output operands.  This does not mean that
                   2055: instructions with a side effect cannot be used, but you must be careful,
                   2056: because the compiler may eliminate them if the output operands aren't used,
                   2057: or move them out of loops, or replace two with one if they constitute a
                   2058: common subexpression.  Also, if your instruction does have a side effect on
                   2059: a variable that otherwise appears not to change, the old value of the
                   2060: variable may be reused later if it happens to be found in a register.
                   2061: 
                   2062: You can prevent an @code{asm} instruction from being deleted, moved or
                   2063: combined by writing the keyword @code{volatile} after the @code{asm}.  For
                   2064: example:
1.1       root     2065: 
1.1.1.2   root     2066: @example
                   2067: #define set_priority(x)  \
                   2068: asm volatile ("set_priority %1":    \
                   2069:               "=m" (*(char *)0): "g" (x))
                   2070: @end example
1.1       root     2071: 
1.1.1.2   root     2072: @noindent
                   2073: Note that we have supplied an output operand which is not actually used in
                   2074: the instruction.  This is because @code{asm} requires at least one output
                   2075: operand.  This requirement exists for internal implementation reasons and
                   2076: we might be able to relax it in the future.
                   2077: 
                   2078: In this case output operand has the additional benefit effect of giving the
                   2079: appearance of writing in memory.  As a result, GNU CC will assume that data
                   2080: previously fetched from memory must be fetched again if needed again later.
                   2081: This may be desirable if you have not employed the @code{volatile} keyword
                   2082: on all the variable declarations that ought to have it.
                   2083: 
                   2084: @node Asm Labels,,Extended Asm, Extensions
                   2085: @section Controlling Names Used in Assembler Code
                   2086: 
                   2087: You can specify the name to be used in the assembler code for a C function
                   2088: or variable by writing the @code{asm} keyword after the declarator as
                   2089: follows:
1.1       root     2090: 
1.1.1.2   root     2091: @example
                   2092: int foo asm ("myfoo") = 2;
                   2093: @end example
1.1       root     2094: 
1.1.1.2   root     2095: @noindent
                   2096: This specifies that the name to be used for the variable @code{foo} in
                   2097: the assembler code should be @samp{myfoo} rather than the usual
                   2098: @samp{_foo}.
                   2099: 
                   2100: On systems where an underscore is normally prepended to the name of a C
                   2101: function or variable, this feature allows you to define names for the
                   2102: linker that do not start with an underscore.
                   2103: 
                   2104: You cannot use @code{asm} in this way in a function @emph{definition}; but
                   2105: you can get the same effect by writing a declaration for the function
                   2106: before its definition and putting @code{asm} there, like this:
1.1       root     2107: 
1.1.1.2   root     2108: @example
                   2109: extern func () asm ("FUNC");
1.1       root     2110: 
1.1.1.2   root     2111: func (x, y)
                   2112:      int x, y;
                   2113: @dots{}
                   2114: @end example
1.1       root     2115: 
1.1.1.2   root     2116: It is up to you to make sure that the assembler names you choose do not
                   2117: conflict with any other assembler symbols.  Also, you must not use a
                   2118: register name; that would produce completely invalid assembler code.  GNU
                   2119: CC does not as yet have the ability to store static variables in registers.
                   2120: Perhaps that will be added.
                   2121: 
                   2122: @node Bugs, Portability, Extensions, Top
                   2123: @chapter Reporting Bugs
                   2124: 
                   2125: Your bug reports play an essential role in making GNU CC reliable.
                   2126: 
                   2127: Reporting a bug may help you by bringing a solution to your problem, or it
                   2128: may not.  But in any case the important function of a bug report is to help
                   2129: the entire community by making the next version of GNU CC work better.  Bug
                   2130: reports are your contribution to the maintenance of GNU CC.
1.1       root     2131: 
1.1.1.2   root     2132: In order for a bug report to serve its purpose, you must include the
                   2133: information that makes for fixing the bug.
1.1       root     2134: 
1.1.1.2   root     2135: @menu
                   2136: * Criteria:  Bug Criteria.   Have you really found a bug?
                   2137: * Reporting: Bug Reporting.  How to report a bug effectively.
                   2138: @end menu
1.1       root     2139: 
1.1.1.2   root     2140: @node Bug Criteria, Bug Reporting, Bugs, Bugs
                   2141: @section Have You Found a Bug?
                   2142: 
                   2143: If you are not sure whether you have found a bug, here are some guidelines:
1.1       root     2144: 
                   2145: @itemize @bullet
                   2146: @item
1.1.1.2   root     2147: If the compiler gets a fatal signal, for any input whatever, that is a
                   2148: compiler bug.  Reliable compilers never crash.
1.1       root     2149: 
                   2150: @item
1.1.1.2   root     2151: If the compiler produces invalid assembly code, for any input whatever
                   2152: (except an @code{asm} statement), that is a compiler bug, unless the
                   2153: compiler reports errors (not just warnings) which would ordinarily
                   2154: prevent the assembler from being run.
1.1       root     2155: 
                   2156: @item
1.1.1.2   root     2157: If the compiler produces valid assembly code that does not correctly
                   2158: execute the input source code, that is a compiler bug.
1.1       root     2159: 
1.1.1.2   root     2160: However, you must double-check to make sure, because you may have run
                   2161: into an incompatibility between GNU C and traditional C
                   2162: (@pxref{Incompatibilities}).  These incompatibilities might be considered
1.1.1.3   root     2163: bugs, but they are inescapable consequences of valuable features.
1.1       root     2164: 
1.1.1.2   root     2165: Or you may have a program whose behavior is undefined, which happened
                   2166: by chance to give the desired results with another C compiler.
1.1       root     2167: 
1.1.1.2   root     2168: For example, in many nonoptimizing compilers, you can write @samp{x;}
                   2169: at the end of a function instead of @samp{return x;}, with the same
                   2170: results.  But the value of the function is undefined if @samp{return}
                   2171: is omitted; it is not a bug when GNU CC produces different results.
1.1       root     2172: 
1.1.1.2   root     2173: Problems often result from expressions with two increment operators,
                   2174: as in @samp{f (*p++, *p++)}.  Your previous compiler might have
                   2175: interpreted that expression the way you intended; GNU CC might
                   2176: interpret it another way; neither compiler is wrong.
1.1       root     2177: 
1.1.1.2   root     2178: After you have localized the error to a single source line, it should
                   2179: be easy to check for these things.  If your program is correct and
                   2180: well defined, you have found a compiler bug.
1.1       root     2181: 
1.1.1.2   root     2182: @item
                   2183: If the compiler produces an error message for valid input, that is a
                   2184: compiler bug.
1.1       root     2185: 
1.1.1.2   root     2186: Note that the following is not valid input, and the error message for
                   2187: it is not a bug:
1.1       root     2188: 
1.1.1.2   root     2189: @example
                   2190: int foo (char);
1.1       root     2191: 
1.1.1.2   root     2192: int
                   2193: foo (x)
                   2194:      char x;
                   2195: @{ @dots{} @}
                   2196: @end example
1.1       root     2197: 
1.1.1.2   root     2198: @noindent
                   2199: The prototype says to pass a @code{char}, while the definition says to
                   2200: pass an @code{int} and treat the value as a @code{char}.  This is what
                   2201: the ANSI standard says, and it makes sense.
1.1       root     2202: 
1.1.1.2   root     2203: @item
                   2204: If the compiler does not produce an error message for invalid input,
                   2205: that is a compiler bug.  However, you should note that your idea of
                   2206: ``invalid input'' might be my idea of ``an extension'' or ``support
                   2207: for traditional practice''.
1.1       root     2208: 
1.1.1.2   root     2209: @item
                   2210: If you are an experienced user of C compilers, your suggestions
                   2211: for improvement of GNU CC are welcome in any case.
                   2212: @end itemize
1.1       root     2213: 
1.1.1.2   root     2214: @node Bug Reporting,, Bug Criteria, Bugs
                   2215: @section How to Report Bugs
1.1       root     2216: 
1.1.1.2   root     2217: Send bug reports for GNU C to one of these addresses:
1.1       root     2218: 
1.1.1.2   root     2219: @example
                   2220: bug-gcc@@prep.ai.mit.edu
                   2221: @{ucbvax|mit-eddie|uunet@}!prep.ai.mit.edu!bug-gcc
                   2222: @end example
1.1       root     2223: 
1.1.1.2   root     2224: As a last resort, snail them to:
1.1       root     2225: 
1.1.1.2   root     2226: @example
                   2227: GNU Compiler Bugs
                   2228: 545 Tech Sq
                   2229: Cambridge, MA 02139
                   2230: @end example
1.1       root     2231: 
1.1.1.2   root     2232: The fundamental principle of reporting bugs usefully is this:
                   2233: @strong{report all the facts}.  If you are not sure whether to mention a
                   2234: fact or leave it out, mention it!
                   2235: 
                   2236: Often people omit facts because they think they know what causes the
                   2237: problem and they conclude that some details don't matter.  Thus, you might
                   2238: assume that the name of the variable you use in an example does not matter.
                   2239: Well, probably it doesn't, but one cannot be sure.  Perhaps the bug is a
                   2240: stray memory reference which happens to fetch from the location where that
                   2241: name is stored in memory; perhaps, if the name were different, the contents
                   2242: of that location would fool the compiler into doing the right thing despite
                   2243: the bug.  Play it safe and give an exact example.
1.1       root     2244: 
1.1.1.2   root     2245: If you want to enable me to fix the bug, you should include all these
                   2246: things:
1.1       root     2247: 
1.1.1.2   root     2248: @itemize @bullet
                   2249: @item
                   2250: The version of GNU CC.  You can get this by running it with the
                   2251: @samp{-v} option.
1.1       root     2252: 
1.1.1.2   root     2253: Without this, I won't know whether there is any point in looking for
                   2254: the bug in the current version of GNU CC.
1.1       root     2255: 
1.1.1.2   root     2256: @item
                   2257: A complete input file that will reproduce the bug.  If the bug is in
                   2258: the C preprocessor, send me a source file and any header files that it
                   2259: requires.  If the bug is in the compiler proper (@file{cc1}), run your
                   2260: source file through the C preprocessor by doing @samp{gcc -E
                   2261: @var{sourcefile} > @var{outfile}}, then include the contents of
                   2262: @var{outfile} in the bug report.  (Any @samp{-I}, @samp{-D} or
                   2263: @samp{-U} options that you used in actual compilation should also be
                   2264: used when doing this.)
1.1       root     2265: 
1.1.1.2   root     2266: A single statement is not enough of an example.  In order to compile
                   2267: it, it must be embedded in a function definition; and the bug might
                   2268: depend on the details of how this is done.
                   2269: 
                   2270: Without a real example I can compile, all I can do about your bug
                   2271: report is wish you luck.  It would be futile to try to guess how to
                   2272: provoke the bug.  For example, bugs in register allocation and
                   2273: reloading frequently depend on every little detail of the function
                   2274: they happen in.
1.1       root     2275: 
                   2276: @item
1.1.1.2   root     2277: The command arguments you gave GNU CC to compile that example and
                   2278: observe the bug.  For example, did you use @samp{-O}?  To guarantee
                   2279: you won't omit something important, list them all.
                   2280: 
                   2281: If I were to try to guess the arguments, I would probably guess wrong
                   2282: and then I would not encounter the bug.
1.1       root     2283: 
                   2284: @item
1.1.1.2   root     2285: The names of the files that you used for @file{tm.h} and @file{md}
                   2286: when you installed the compiler.
1.1       root     2287: 
                   2288: @item
1.1.1.2   root     2289: The type of machine you are using, and the operating system name and
                   2290: version number.
1.1       root     2291: 
                   2292: @item
1.1.1.2   root     2293: A description of what behavior you observe that you believe is
                   2294: incorrect.  For example, ``It gets a fatal signal,'' or, ``There is an
                   2295: incorrect assembler instruction in the output.''
                   2296: 
                   2297: Of course, if the bug is that the compiler gets a fatal signal, then I
                   2298: will certainly notice it.  But if the bug is incorrect output, I might
                   2299: not notice unless it is glaringly wrong.  I won't study all the
                   2300: assembler code from a 50-line C program just on the off chance that it
                   2301: might be wrong.
                   2302: 
                   2303: Even if the problem you experience is a fatal signal, you should still
                   2304: say so explicitly.  Suppose something strange is going on, such as,
                   2305: your copy of the compiler is out of synch, or you have encountered a
                   2306: bug in the C library on your system.  (This has happened!)  Your copy
                   2307: might crash and mine would not.  If you @i{told} me to expect a crash,
                   2308: then when mine fails to crash, I would know that the bug was not
                   2309: happening for me.  If you had not told me to expect a crash, then I
                   2310: would not be able to draw any conclusion from my observations.
                   2311: 
                   2312: In cases where GNU CC generates incorrect code, if you send me a small
                   2313: complete sample program I will find the error myself by running the
                   2314: program under a debugger.  If you send me a large example or a part of
                   2315: a larger program, I cannot do this; you must debug the compiled
                   2316: program and narrow the problem down to one source line.  Tell me which
                   2317: source line it is, and what you believe is incorrect about the code
                   2318: generated for that line.
1.1       root     2319: 
                   2320: @item
1.1.1.2   root     2321: If you send me examples of output from GNU CC, please use @samp{-g}
                   2322: when you make them.  The debugging information includes source line
                   2323: numbers which are essential for correlating the output with the input.
1.1.1.4   root     2324: 
                   2325: @item
                   2326: If you wish to suggest changes to the GNU CC source, send me context
                   2327: diffs.  If you even discuss something in the GNU CC source, refer to
                   2328: it by context, not by line number.
                   2329: 
                   2330: The line numbers in my development sources don't match those in your
                   2331: sources.  They won't tell me anything.
1.1       root     2332: @end itemize
                   2333: 
1.1.1.2   root     2334: Here are some things that are not necessary:
1.1       root     2335: 
1.1.1.2   root     2336: @itemize @bullet
1.1       root     2337: @item
1.1.1.2   root     2338: A description of the envelope of the bug.
1.1       root     2339: 
1.1.1.2   root     2340: Often people who encounter a bug spend a lot of time investigating
                   2341: which changes to the input file will make the bug go away and which
                   2342: changes will not affect it.
1.1       root     2343: 
1.1.1.2   root     2344: This is often time consuming and not very useful, because the way I
                   2345: will find the bug is by running a single example under the debugger
                   2346: with breakpoints, not by pure deduction from a series of examples.
1.1       root     2347: 
1.1.1.2   root     2348: Of course, it can't hurt if you can find a simpler example that
                   2349: triggers the same bug.  Errors in the output will be easier to spot,
                   2350: running under the debugger will take less time, etc.  An easy way
                   2351: to simplify an example is to delete all the function definitions
                   2352: except the one where the bug occurs.  Those earlier in the file
                   2353: may be replaced by external declarations.
                   2354: 
                   2355: However, simplification is not necessary; if you don't want to do
                   2356: this, report the bug anyway.
1.1       root     2357: 
                   2358: @item
1.1.1.2   root     2359: A patch for the bug.
1.1       root     2360: 
1.1.1.2   root     2361: A patch for the bug does help me if it is a good one.  But don't omit
                   2362: the necessary information, such as the test case, because I might see
                   2363: problems with your patch and decide to fix the problem another way.
1.1       root     2364: 
1.1.1.2   root     2365: Sometimes with a program as complicated as GNU CC it is very hard to
                   2366: construct an example that will make the program go through a certain
                   2367: point in the code.  If you don't send me the example, I won't be able
                   2368: to verify that the bug is fixed.
1.1       root     2369: 
                   2370: @item
1.1.1.2   root     2371: A guess about what the bug is or what it depends on.
                   2372: 
                   2373: Such guesses are usually wrong.  Even I can't guess right about such
                   2374: things without using the debugger to find the facts.  They also don't
                   2375: serve a useful purpose.
                   2376: @end itemize
1.1       root     2377: 
1.1.1.2   root     2378: @node Portability, Interface, Bugs, Top
1.1       root     2379: @chapter GNU CC and Portability
                   2380: 
                   2381: The main goal of GNU CC was to make a good, fast compiler for machines in
                   2382: the class that the GNU system aims to run on: 32-bit machines that address
                   2383: 8-bit bytes and have several general registers.  Elegance, theoretical
                   2384: power and simplicity are only secondary.
                   2385: 
                   2386: GNU CC gets most of the information about the target machine from a machine
                   2387: description which gives an algebraic formula for each of the machine's
                   2388: instructions.  This is a very clean way to describe the target.  But when
                   2389: the compiler needs information that is difficult to express in this
                   2390: fashion, I have not hesitated to define an ad-hoc parameter to the machine
                   2391: description.  The purpose of portability is to reduce the total work needed
                   2392: on the compiler; it was not of interest for its own sake.
                   2393: 
                   2394: GNU CC does not contain machine dependent code, but it does contain code
                   2395: that depends on machine parameters such as endianness (whether the most
                   2396: significant byte has the highest or lowest address of the bytes in a word)
                   2397: and the availability of autoincrement addressing.  In the RTL-generation
                   2398: pass, it is often necessary to have multiple strategies for generating code
                   2399: for a particular kind of syntax tree, strategies that are usable for different
                   2400: combinations of parameters.  Often I have not tried to address all possible
                   2401: cases, but only the common ones or only the ones that I have encountered.
                   2402: As a result, a new target may require additional strategies.  You will know
                   2403: if this happens because the compiler will call @code{abort}.  Fortunately,
1.1.1.2   root     2404: the new strategies can be added in a machine-independent fashion, and will
                   2405: affect only the target machines that need them.
                   2406: 
                   2407: @node Interface, Passes, Portability, Top
                   2408: @chapter Interfacing to GNU CC Output
                   2409: 
                   2410: GNU CC is normally configured to use the same function calling convention
                   2411: normally in use on the target system.  This is done with the
                   2412: machine-description macros described (@pxref{Machine Macros}).
                   2413: 
                   2414: However, returning of structure and union values is done differently.
                   2415: As a result, functions compiled with PCC returning such types cannot
                   2416: be called from code compiled with GNU CC, and vice versa.  This usually
                   2417: does not cause trouble because the Unix library routines don't return
                   2418: structures and unions.
                   2419: 
                   2420: Structures and unions that are 1, 2, 4 or 8 bytes long are returned in the
                   2421: same registers used for @code{int} or @code{double} return values.  (GNU CC
                   2422: typically allocates variables of such types in registers also.)  Structures
                   2423: and unions of other sizes are returned by storing them into an address
                   2424: passed by the caller in a register.  This method is faster than the one
                   2425: normally used by PCC and is also reentrant.  The register used for passing
                   2426: the address is specified by the machine-description macro
1.1.1.6   root     2427: @code{STRUCT_VALUE}.
1.1.1.2   root     2428: 
                   2429: GNU CC always passes arguments on the stack.  At some point it will be
                   2430: extended to pass arguments in registers, for machines which use that as
                   2431: the standard calling convention.  This will make it possible to use such
                   2432: a convention on other machines as well.  However, that would render it
                   2433: completely incompatible with PCC.  We will probably do this once we
                   2434: have a complete GNU system so we can compile the libraries with GNU CC.
                   2435: 
                   2436: If you use @code{longjmp}, beware of automatic variables.  ANSI C says that
                   2437: automatic variables that are not declared @code{volatile} have undefined
                   2438: values after a @code{longjmp}.  And this is all GNU CC promises to do,
                   2439: because it is very difficult to restore register variables correctly, and
                   2440: one of GNU CC's features is that it can put variables in registers without
                   2441: your asking it to.
                   2442: 
                   2443: If you want a variable to be unaltered by @code{longjmp}, and you don't
                   2444: want to write @code{volatile} because old C compilers don't accept it,
                   2445: just take the address of the variable.  If a variable's address is ever
                   2446: taken, even if just to compute it and ignore it, then the variable cannot
                   2447: go in a register:
                   2448: 
                   2449: @example
                   2450: @{
                   2451:   int careful;
                   2452:   &careful;
                   2453:   @dots{}
                   2454: @}
                   2455: @end example
1.1       root     2456: 
1.1.1.2   root     2457: Code compiled with GNU CC may call certain library routines.  The routines
                   2458: needed on the Vax and 68000 are in the file @file{gnulib.c}.  You must
                   2459: compile this file with the standard C compiler, not with GNU CC, and then
                   2460: link it with each program you compile with GNU CC.  (In actuality, many
                   2461: programs will not need it.)  The usual function call interface is used
                   2462: for calling the library routines.  Some standard parts of the C library,
                   2463: such as @code{bcopy}, are also called automatically.
                   2464: 
                   2465: @node Passes, RTL, Interface, Top
1.1       root     2466: @chapter Passes and Files of the Compiler
                   2467: 
                   2468: The overall control structure of the compiler is in @file{toplev.c}.  This
                   2469: file is responsible for initialization, decoding arguments, opening and
                   2470: closing files, and sequencing the passes.
                   2471: 
1.1.1.2   root     2472: The parsing pass is invoked only once, to parse the entire input.  The RTL
                   2473: intermediate code for a function is generated as the function is parsed, a
                   2474: statement at a time.  Each statement is read in as a syntax tree and then
                   2475: converted to RTL; then the storage for the tree for the statement is
                   2476: reclaimed.  Storage for types (and the expressions for their sizes),
                   2477: declarations, and a representation of the binding contours and how they nest,
                   2478: remains until the function is finished being compiled; these are all needed
                   2479: to output the debugging information.
                   2480: 
                   2481: Each time the parsing pass reads a complete function definition or
                   2482: top-level declaration, it calls the function
                   2483: @code{rest_of_compilation} or @code{rest_of_decl_compilation} in
                   2484: @file{toplev.c}, which are responsible for all further processing
                   2485: necessary, ending with output of the assembler language.  All other
                   2486: compiler passes run, in sequence, within @code{rest_of_compilation}.
                   2487: When that function returns from compiling a function definition, the
                   2488: storage used for that function definition's compilation is entirely
                   2489: freed, unless it is an inline function (@pxref{Inline}).
1.1       root     2490: 
                   2491: Here is a list of all the passes of the compiler and their source files.
                   2492: Also included is a description of where debugging dumps can be requested
1.1.1.2   root     2493: with @samp{-d} options.
1.1       root     2494: 
                   2495: @itemize @bullet
                   2496: @item
                   2497: Parsing.  This pass reads the entire text of a function definition,
1.1.1.2   root     2498: constructing partial syntax trees.  This and RTL generation are no longer
                   2499: truly separate passes (formerly they were), but it is easier to think
                   2500: of them as separate.
                   2501: 
                   2502: The tree representation does not entirely follow C syntax, because it is
                   2503: intended to support other languages as well.
1.1       root     2504: 
1.1.1.2   root     2505: C data type analysis is also done in this pass, and every tree node
                   2506: that represents an expression has a data type attached.  Variables are
                   2507: represented as declaration nodes.
1.1       root     2508: 
1.1.1.2   root     2509: Constant folding and associative-law simplifications are also done
                   2510: during this pass.
1.1       root     2511: 
1.1.1.7 ! root     2512: The source files for parsing are @file{c-parse.y}, @file{c-decl.c},
        !          2513: @file{c-typeck.c}, @file{c-convert.c}, @file{stor-layout.c},
        !          2514: @file{fold-const.c}, and @file{tree.c}.  The last three files are
        !          2515: intended to be language-independent.  There are also header files
        !          2516: @file{c-parse.h}, @file{c-tree.h}, @file{tree.h} and @file{tree.def}.
        !          2517: The last two define the format of the tree representation.@refill
1.1       root     2518: 
                   2519: @item
1.1.1.2   root     2520: RTL generation.  This is the conversion of syntax tree into RTL code.
                   2521: It is actually done statement-by-statement during parsing, but for
                   2522: most purposes it can be thought of as a separate pass.
1.1       root     2523: 
                   2524: This is where the bulk of target-parameter-dependent code is found,
                   2525: since often it is necessary for strategies to apply only when certain
                   2526: standard kinds of instructions are available.  The purpose of named
                   2527: instruction patterns is to provide this information to the RTL
                   2528: generation pass.
                   2529: 
                   2530: Optimization is done in this pass for @code{if}-conditions that are
                   2531: comparisons, boolean operations or conditional expressions.  Tail
                   2532: recursion is detected at this time also.  Decisions are made about how
                   2533: best to arrange loops and how to output @code{switch} statements.
                   2534: 
1.1.1.2   root     2535: The source files for RTL generation are @file{stmt.c}, @file{expr.c},
1.1       root     2536: @file{explow.c}, @file{expmed.c}, @file{optabs.c} and @file{emit-rtl.c}.
                   2537: Also, the file @file{insn-emit.c}, generated from the machine description
                   2538: by the program @code{genemit}, is used in this pass.  The header files
1.1.1.2   root     2539: @file{expr.h} is used for communication within this pass.@refill
1.1       root     2540: 
1.1.1.2   root     2541: The header files @file{insn-flags.h} and @file{insn-codes.h},
                   2542: generated from the machine description by the programs @code{genflags}
                   2543: and @code{gencodes}, tell this pass which standard names are available
                   2544: for use and which patterns correspond to them.@refill
1.1       root     2545: 
                   2546: Aside from debugging information output, none of the following passes
1.1.1.2   root     2547: refers to the tree structure representation of the function (only
                   2548: part of which is saved).
1.1       root     2549: 
1.1.1.2   root     2550: The decision of whether the function can and should be expanded inline
                   2551: in its subsequent callers is made at the end of rtl generation.  The
                   2552: function must meet certain criteria, currently related to the size of
                   2553: the function and the types and number of parameters it has.  Note that
                   2554: this function may contain loops, recursive calls to itself
                   2555: (tail-recursive functions can be inlined!), gotos, in short, all
                   2556: constructs supported by GNU CC.
                   2557: 
                   2558: The option @samp{-dr} causes a debugging dump of the RTL code after
                   2559: this pass.  This dump file's name is made by appending @samp{.rtl} to
                   2560: the input file name.
1.1       root     2561: 
                   2562: @item
1.1.1.2   root     2563: Jump optimization.  This pass simplifies jumps to the following
                   2564: instruction, jumps across jumps, and jumps to jumps.  It deletes
                   2565: unreferenced labels and unreachable code, except that unreachable code
                   2566: that contains a loop is not recognized as unreachable in this pass.
                   2567: (Such loops are deleted later in the basic block analysis.)
1.1       root     2568: 
                   2569: Jump optimization is performed two or three times.  The first time is
1.1.1.2   root     2570: immediately following RTL generation.  The second time is after CSE,
                   2571: but only if CSE says repeated jump optimization is needed.  The
                   2572: last time is right before the final pass.  That time, cross-jumping
                   2573: and deletion of no-op move instructions are done together with the
                   2574: optimizations described above.
1.1       root     2575: 
                   2576: The source file of this pass is @file{jump.c}.
                   2577: 
1.1.1.2   root     2578: The option @samp{-dj} causes a debugging dump of the RTL code after
                   2579: this pass is run for the first time.  This dump file's name is made by
                   2580: appending @samp{.jump} to the input file name.
1.1       root     2581: 
                   2582: @item
                   2583: Register scan.  This pass finds the first and last use of each
                   2584: register, as a guide for common subexpression elimination.  Its source
                   2585: is in @file{regclass.c}.
                   2586: 
                   2587: @item
                   2588: Common subexpression elimination.  This pass also does constant
                   2589: propagation.  Its source file is @file{cse.c}.  If constant
                   2590: propagation causes conditional jumps to become unconditional or to
1.1.1.2   root     2591: become no-ops, jump optimization is run again when CSE is finished.
1.1       root     2592: 
1.1.1.2   root     2593: The option @samp{-ds} causes a debugging dump of the RTL code after
1.1       root     2594: this pass.  This dump file's name is made by appending @samp{.cse} to
                   2595: the input file name.
                   2596: 
                   2597: @item
                   2598: Loop optimization.  This pass moves constant expressions out of loops.
                   2599: Its source file is @file{loop.c}.
                   2600: 
1.1.1.2   root     2601: The option @samp{-dL} causes a debugging dump of the RTL code after
1.1       root     2602: this pass.  This dump file's name is made by appending @samp{.loop} to
                   2603: the input file name.
                   2604: 
                   2605: @item
                   2606: Stupid register allocation is performed at this point in a
                   2607: nonoptimizing compilation.  It does a little data flow analysis as
                   2608: well.  When stupid register allocation is in use, the next pass
                   2609: executed is the reloading pass; the others in between are skipped.
1.1.1.2   root     2610: The source file is @file{stupid.c}.
1.1       root     2611: 
                   2612: @item
                   2613: Data flow analysis (@file{flow.c}).  This pass divides the program
                   2614: into basic blocks (and in the process deletes unreachable loops); then
                   2615: it computes which pseudo-registers are live at each point in the
                   2616: program, and makes the first instruction that uses a value point at
                   2617: the instruction that computed the value.
                   2618: 
                   2619: This pass also deletes computations whose results are never used, and
                   2620: combines memory references with add or subtract instructions to make
                   2621: autoincrement or autodecrement addressing.
                   2622: 
1.1.1.2   root     2623: The option @samp{-df} causes a debugging dump of the RTL code after
1.1       root     2624: this pass.  This dump file's name is made by appending @samp{.flow} to
                   2625: the input file name.  If stupid register allocation is in use, this
                   2626: dump file reflects the full results of such allocation.
                   2627: 
                   2628: @item
                   2629: Instruction combination (@file{combine.c}).  This pass attempts to
                   2630: combine groups of two or three instructions that are related by data
                   2631: flow into single instructions.  It combines the RTL expressions for
                   2632: the instructions by substitution, simplifies the result using algebra,
                   2633: and then attempts to match the result against the machine description.
                   2634: 
1.1.1.2   root     2635: The option @samp{-dc} causes a debugging dump of the RTL code after
1.1       root     2636: this pass.  This dump file's name is made by appending @samp{.combine}
                   2637: to the input file name.
                   2638: 
                   2639: @item
                   2640: Register class preferencing.  The RTL code is scanned to find out
1.1.1.2   root     2641: which register class is best for each pseudo register.  The source
                   2642: file is @file{regclass.c}.
1.1       root     2643: 
                   2644: @item
                   2645: Local register allocation (@file{local-alloc.c}).  This pass allocates
                   2646: hard registers to pseudo registers that are used only within one basic
1.1.1.2   root     2647: block.  Because the basic block is linear, it can use fast and
                   2648: powerful techniques to do a very good job.
1.1       root     2649: 
1.1.1.2   root     2650: The option @samp{-dl} causes a debugging dump of the RTL code after
1.1       root     2651: this pass.  This dump file's name is made by appending @samp{.lreg} to
                   2652: the input file name.
                   2653: 
                   2654: @item
                   2655: Global register allocation (@file{global-alloc.c}).  This pass
                   2656: allocates hard registers for the remaining pseudo registers (those
                   2657: whose life spans are not contained in one basic block).
                   2658: 
                   2659: @item
1.1.1.2   root     2660: Reloading.  This pass renumbers pseudo registers with the hardware
                   2661: registers numbers they were allocated.  Pseudo registers that did not
                   2662: get hard registers are replaced with stack slots.  Then it finds
                   2663: instructions that are invalid because a value has failed to end up in
                   2664: a register, or has ended up in a register of the wrong kind.  It fixes
                   2665: up these instructions by reloading the problematical values
                   2666: temporarily into registers.  Additional instructions are generated to
                   2667: do the copying.
1.1       root     2668: 
                   2669: Source files are @file{reload.c} and @file{reload1.c}, plus the header
                   2670: @file{reload.h} used for communication between them.
                   2671: 
1.1.1.2   root     2672: The option @samp{-dg} causes a debugging dump of the RTL code after
1.1       root     2673: this pass.  This dump file's name is made by appending @samp{.greg} to
                   2674: the input file name.
                   2675: 
                   2676: @item
1.1.1.2   root     2677: Jump optimization is repeated, this time including cross-jumping
                   2678: and deletion of no-op move instructions.  Machine-specific peephole
                   2679: optimizations are performed at the same time.
                   2680: 
                   2681: The option @samp{-dJ} causes a debugging dump of the RTL code after
                   2682: this pass.  This dump file's name is made by appending @samp{.jump2}
                   2683: to the input file name.
1.1       root     2684: 
                   2685: @item
                   2686: Final.  This pass outputs the assembler code for the function.  It is
1.1.1.2   root     2687: also responsible for identifying spurious test and compare
                   2688: instructions.  The function entry and exit sequences are generated
                   2689: directly as assembler code in this pass; they never exist as RTL.
1.1       root     2690: 
                   2691: The source files are @file{final.c} plus @file{insn-output.c}; the
                   2692: latter is generated automatically from the machine description by the
                   2693: tool @file{genoutput}.  The header file @file{conditions.h} is used
                   2694: for communication between these files.
                   2695: 
                   2696: @item
                   2697: Debugging information output.  This is run after final because it must
                   2698: output the stack slot offsets for pseudo registers that did not get
                   2699: hard registers.  Source files are @file{dbxout.c} for DBX symbol table
                   2700: format and @file{symout.c} for GDB's own symbol table format.
                   2701: @end itemize
                   2702: 
                   2703: Some additional files are used by all or many passes:
                   2704: 
                   2705: @itemize @bullet
                   2706: @item
                   2707: Every pass uses @file{machmode.def}, which defines the machine modes.
                   2708: 
                   2709: @item
                   2710: All the passes that work with RTL use the header files @file{rtl.h}
1.1.1.2   root     2711: and @file{rtl.def}, and subroutines in file @file{rtl.c}.  The tools
                   2712: @code{gen*} also use these files to read and work with the machine
                   2713: description RTL.
1.1       root     2714: 
                   2715: @item
                   2716: Several passes refer to the header file @file{insn-config.h} which
                   2717: contains a few parameters (C macro definitions) generated
                   2718: automatically from the machine description RTL by the tool
                   2719: @code{genconfig}.
                   2720: 
                   2721: @item
                   2722: Several passes use the instruction recognizer, which consists of
                   2723: @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c}
                   2724: and @file{insn-extract.c} that are generated automatically from the
1.1.1.2   root     2725: machine description by the tools @file{genrecog} and
                   2726: @file{genextract}.@refill
1.1       root     2727: 
                   2728: @item
1.1.1.2   root     2729: Several passes use the header files @file{regs.h} which defines the
                   2730: information recorded about pseudo register usage, and @file{basic-block.h}
1.1       root     2731: which defines the information recorded about basic blocks.
                   2732: 
                   2733: @item
                   2734: @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector
                   2735: with a bit for each hard register, and some macros to manipulate it.
                   2736: This type is just @code{int} if the machine has few enough hard registers;
                   2737: otherwise it is an array of @code{int} and some of the macros expand
                   2738: into loops.
                   2739: @end itemize
                   2740: 
                   2741: @node RTL, Machine Desc, Passes, Top
                   2742: @chapter RTL Representation
                   2743: 
                   2744: Most of the work of the compiler is done on an intermediate representation
1.1.1.2   root     2745: called register transfer language.  In this language, the instructions to be
1.1       root     2746: output are described, pretty much one by one, in an algebraic form that
                   2747: describes what the instruction does.
                   2748: 
                   2749: RTL is inspired by Lisp lists.  It has both an internal form, made up of
                   2750: structures that point at other structures, and a textual form that is used
                   2751: in the machine description and in printed debugging dumps.  The textual
                   2752: form uses nested parentheses to indicate the pointers in the internal form.
                   2753: 
                   2754: @menu
                   2755: * RTL Objects::       Expressions vs vectors vs strings vs integers.
                   2756: * Accessors::         Macros to access expression operands or vector elts.
1.1.1.2   root     2757: * Flags::             Other flags in an RTL expression.
1.1       root     2758: * Machine Modes::     Describing the size and format of a datum.
                   2759: * Constants::         Expressions with constant values.
                   2760: * Regs and Memory::   Expressions representing register contents or memory.
                   2761: * Arithmetic::        Expressions representing arithmetic on other expressions.
                   2762: * Comparisons::       Expressions representing comparison of expressions.
                   2763: * Bit Fields::        Expressions representing bit-fields in memory or reg.
                   2764: * Conversions::       Extending, truncating, floating or fixing.
                   2765: * RTL Declarations::  Declaring volatility, constancy, etc.
                   2766: * Side Effects::      Expressions for storing in registers, etc.
                   2767: * Incdec::            Embedded side-effects for autoincrement addressing.
1.1.1.2   root     2768: * Assembler::        Representing @code{asm} with operands.
1.1       root     2769: * Insns::             Expression types for entire insns.
1.1.1.2   root     2770: * Calls::            RTL representation of function call insns.
1.1       root     2771: * Sharing::           Some expressions are unique; others *must* be copied.
                   2772: @end menu
                   2773: 
                   2774: @node RTL Objects, Accessors, RTL, RTL
                   2775: @section RTL Object Types
                   2776: 
                   2777: RTL uses four kinds of objects: expressions, integers, strings and vectors.
1.1.1.2   root     2778: Expressions are the most important ones.  An RTL expression (``RTX'', for
                   2779: short) is a C structure, but it is usually referred to with a pointer; a
                   2780: type that is given the typedef name @code{rtx}.
1.1       root     2781: 
                   2782: An integer is simply an @code{int}, and a string is a @code{char *}.
1.1.1.2   root     2783: Within RTL code, strings appear only inside @samp{symbol_ref} expressions,
                   2784: but they appear in other contexts in the RTL expressions that make up
1.1       root     2785: machine descriptions.  Their written form uses decimal digits.
                   2786: 
                   2787: A string is a sequence of characters.  In core it is represented as a
1.1.1.2   root     2788: @code{char *} in usual C fashion, and it is written in C syntax as well.
1.1       root     2789: However, strings in RTL may never be null.  If you write an empty string in
                   2790: a machine description, it is represented in core as a null pointer rather
                   2791: than as a pointer to a null character.  In certain contexts, these null
                   2792: pointers instead of strings are valid.
                   2793: 
                   2794: A vector contains an arbitrary, specified number of pointers to
                   2795: expressions.  The number of elements in the vector is explicitly present in
                   2796: the vector.  The written form of a vector consists of square brackets
                   2797: (@samp{[@dots{}]}) surrounding the elements, in sequence and with
                   2798: whitespace separating them.  Vectors of length zero are not created; null
                   2799: pointers are used instead.
                   2800: 
1.1.1.2   root     2801: Expressions are classified by @dfn{expression codes} (also called RTX
                   2802: codes).  The expression code is a name defined in @file{rtl.def}, which is
                   2803: also (in upper case) a C enumeration constant.  The possible expression
                   2804: codes and their meanings are machine-independent.  The code of an RTX can
                   2805: be extracted with the macro @code{GET_CODE (@var{x})} and altered with
                   2806: @code{PUT_CODE (@var{x}, @var{newcode})}.
1.1       root     2807: 
                   2808: The expression code determines how many operands the expression contains,
                   2809: and what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
                   2810: by looking at an operand what kind of object it is.  Instead, you must know
                   2811: from its context---from the expression code of the containing expression.
1.1.1.2   root     2812: For example, in an expression of code @samp{subreg}, the first operand is
1.1       root     2813: to be regarded as an expression and the second operand as an integer.  In
1.1.1.2   root     2814: an expression of code @samp{plus}, there are two operands, both of which
                   2815: are to be regarded as expressions.  In a @samp{symbol_ref} expression,
1.1       root     2816: there is one operand, which is to be regarded as a string.
                   2817: 
                   2818: Expressions are written as parentheses containing the name of the
                   2819: expression type, its flags and machine mode if any, and then the operands
                   2820: of the expression (separated by spaces).
                   2821: 
1.1.1.2   root     2822: Expression code names in the @samp{md} file are written in lower case,
                   2823: but when they appear in C code they are written in upper case.  In this
                   2824: manual, they are shown as follows: @samp{const_int}.
                   2825: 
1.1       root     2826: In a few contexts a null pointer is valid where an expression is normally
                   2827: wanted.  The written form of this is @samp{(nil)}.
                   2828: 
1.1.1.2   root     2829: @node Accessors, Flags, RTL Objects, RTL
1.1       root     2830: @section Access to Operands
                   2831: 
                   2832: For each expression type @file{rtl.def} specifies the number of contained
                   2833: objects and their kinds, with four possibilities: @samp{e} for expression
                   2834: (actually a pointer to an expression), @samp{i} for integer, @samp{s} for
                   2835: string, and @samp{E} for vector of expressions.  The sequence of letters
                   2836: for an expression code is called its @dfn{format}.  Thus, the format of
1.1.1.2   root     2837: @samp{subreg} is @samp{ei}.@refill
1.1       root     2838: 
                   2839: Two other format characters are used occasionally: @samp{u} and @samp{0}.
                   2840: @samp{u} is equivalent to @samp{e} except that it is printed differently in
                   2841: debugging dumps, and @samp{0} means a slot whose contents do not fit any
                   2842: normal category.  @samp{0} slots are not printed at all in dumps, and are
1.1.1.2   root     2843: often used in special ways by small parts of the compiler.@refill
1.1       root     2844: 
                   2845: There are macros to get the number of operands and the format of an
                   2846: expression code:
                   2847: 
                   2848: @table @code
                   2849: @item GET_RTX_LENGTH (@var{code})
1.1.1.2   root     2850: Number of operands of an RTX of code @var{code}.
1.1       root     2851: 
                   2852: @item GET_RTX_FORMAT (@var{code})
1.1.1.2   root     2853: The format of an RTX of code @var{code}, as a C string.
1.1       root     2854: @end table
                   2855: 
                   2856: Operands of expressions are accessed using the macros @code{XEXP},
                   2857: @code{XINT} and @code{XSTR}.  Each of these macros takes two arguments: an
1.1.1.2   root     2858: expression-pointer (RTX) and an operand number (counting from zero).
                   2859: Thus,@refill
1.1       root     2860: 
                   2861: @example
1.1.1.2   root     2862: XEXP (@var{x}, 2)
1.1       root     2863: @end example
                   2864: 
                   2865: @noindent
                   2866: accesses operand 2 of expression @var{x}, as an expression.
                   2867: 
                   2868: @example
1.1.1.2   root     2869: XINT (@var{x}, 2)
1.1       root     2870: @end example
                   2871: 
                   2872: @noindent
                   2873: accesses the same operand as an integer.  @code{XSTR}, used in the same
                   2874: fashion, would access it as a string.
                   2875: 
                   2876: Any operand can be accessed as an integer, as an expression or as a string.
                   2877: You must choose the correct method of access for the kind of value actually
                   2878: stored in the operand.  You would do this based on the expression code of
                   2879: the containing expression.  That is also how you would know how many
                   2880: operands there are.
                   2881: 
                   2882: For example, if @var{x} is a @samp{subreg} expression, you know that it has
1.1.1.2   root     2883: two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
                   2884: and @code{XINT (@var{x}, 1)}.  If you did @code{XINT (@var{x}, 0)}, you
                   2885: would get the address of the expression operand but cast as an integer;
                   2886: that might occasionally be useful, but it would be cleaner to write
                   2887: @code{(int) XEXP (@var{x}, 0)}.  @code{XEXP (@var{x}, 1)} would also
                   2888: compile without error, and would return the second, integer operand cast as
                   2889: an expression pointer, which would probably result in a crash when
                   2890: accessed.  Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
                   2891: but this will access memory past the end of the expression with
                   2892: unpredictable results.@refill
1.1       root     2893: 
                   2894: Access to operands which are vectors is more complicated.  You can use the
                   2895: macro @code{XVEC} to get the vector-pointer itself, or the macros
                   2896: @code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
                   2897: vector.
                   2898: 
                   2899: @table @code
                   2900: @item XVEC (@var{exp}, @var{idx})
                   2901: Access the vector-pointer which is operand number @var{idx} in @var{exp}.
                   2902: 
                   2903: @item XVECLEN (@var{exp}, @var{idx})
                   2904: Access the length (number of elements) in the vector which is
                   2905: in operand number @var{idx} in @var{exp}.  This value is an @code{int}.
                   2906: 
1.1.1.2   root     2907: @item XVECEXP (@var{exp}, @var{idx}, @var{eltnum})
1.1       root     2908: Access element number @var{eltnum} in the vector which is
1.1.1.2   root     2909: in operand number @var{idx} in @var{exp}.  This value is an RTX.
1.1       root     2910: 
                   2911: It is up to you to make sure that @var{eltnum} is not negative
                   2912: and is less than @code{XVECLEN (@var{exp}, @var{idx})}.
                   2913: @end table
                   2914: 
                   2915: All the macros defined in this section expand into lvalues and therefore
                   2916: can be used to assign the operands, lengths and vector elements as well as
                   2917: to access them.
                   2918: 
1.1.1.2   root     2919: @node Flags, Machine Modes, Accessors, RTL
                   2920: @section Flags in an RTL Expression
                   2921: 
                   2922: RTL expressions contain several flags (one-bit bit-fields) that are used
                   2923: in certain types of expression.
                   2924: 
                   2925: @table @code
                   2926: @item used
                   2927: This flag is used only momentarily, at the end of RTL generation for a
                   2928: function, to count the number of times an expression appears in insns.
                   2929: Expressions that appear more than once are copied, according to the
                   2930: rules for shared structure (@pxref{Sharing}).
                   2931: 
                   2932: @item volatil
                   2933: This flag is used in @samp{mem} and @samp{reg} expressions and in insns.
                   2934: In RTL dump files, it is printed as @samp{/v}.
                   2935: 
                   2936: In a @samp{mem} expression, it is 1 if the memory reference is volatile.
                   2937: Volatile memory references may not be deleted, reordered or combined.
                   2938: 
                   2939: In a @samp{reg} expression, it is 1 if the value is a user-level variable.
                   2940: 0 indicates an internal compiler temporary.
                   2941: 
                   2942: In an insn, 1 means the insn has been deleted.
                   2943: 
                   2944: @item in_struct
                   2945: This flag is used in @samp{mem} expressions.  It is 1 if the memory
                   2946: datum referred to is all or part of a structure or array; 0 if it is (or
                   2947: might be) a scalar variable.  A reference through a C pointer has 0
                   2948: because the pointer might point to a scalar variable.
                   2949: 
                   2950: This information allows the compiler to determine something about possible
                   2951: cases of aliasing.
                   2952: 
                   2953: In an RTL dump, this flag is represented as @samp{/s}.
                   2954: 
                   2955: @item unchanging
                   2956: This flag is used in @samp{reg} and @samp{mem} expressions.  1 means
                   2957: that the value of the expression never changes (at least within the
                   2958: current function).
                   2959: 
                   2960: In an RTL dump, this flag is represented as @samp{/u}.
1.1.1.6   root     2961: 
                   2962: @item integrated
                   2963: In some kinds of expressions, including insns, this flag means the
                   2964: rtl was produced by procedure integration.
                   2965: 
                   2966: In a @samp{reg} expression, this flag indicates the register
                   2967: containing the value to be returned by the current function.  On
                   2968: machines that pass parameters in registers, the same register number
                   2969: may be used for parameters as well, but this flag is not set on such
                   2970: uses.
1.1.1.2   root     2971: @end table
                   2972: 
                   2973: @node Machine Modes, Constants, Flags, RTL
1.1       root     2974: @section Machine Modes
                   2975: 
                   2976: A machine mode describes a size of data object and the representation used
                   2977: for it.  In the C code, machine modes are represented by an enumeration
1.1.1.2   root     2978: type, @code{enum machine_mode}, defined in @file{machmode.def}.  Each RTL
                   2979: expression has room for a machine mode and so do certain kinds of tree
                   2980: expressions (declarations and types, to be precise).
1.1       root     2981: 
                   2982: In debugging dumps and machine descriptions, the machine mode of an RTL
                   2983: expression is written after the expression code with a colon to separate
                   2984: them.  The letters @samp{mode} which appear at the end of each machine mode
                   2985: name are omitted.  For example, @code{(reg:SI 38)} is a @samp{reg}
                   2986: expression with machine mode @code{SImode}.  If the mode is
                   2987: @code{VOIDmode}, it is not written at all.
                   2988: 
                   2989: Here is a table of machine modes.
                   2990: 
                   2991: @table @code
                   2992: @item QImode
                   2993: ``Quarter-Integer'' mode represents a single byte treated as an integer.
                   2994: 
                   2995: @item HImode
                   2996: ``Half-Integer'' mode represents a two-byte integer.
                   2997: 
                   2998: @item SImode
                   2999: ``Single Integer'' mode represents a four-byte integer.
                   3000: 
                   3001: @item DImode
                   3002: ``Double Integer'' mode represents an eight-byte integer.
                   3003: 
                   3004: @item TImode
                   3005: ``Tetra Integer'' (?) mode represents a sixteen-byte integer.
                   3006: 
                   3007: @item SFmode
                   3008: ``Single Floating'' mode represents a single-precision (four byte) floating
                   3009: point number.
                   3010: 
                   3011: @item DFmode
                   3012: ``Double Floating'' mode represents a double-precision (eight byte) floating
                   3013: point number.
                   3014: 
                   3015: @item TFmode
                   3016: ``Tetra Floating'' mode represents a quadruple-precision (sixteen byte)
                   3017: floating point number.
                   3018: 
                   3019: @item BLKmode
                   3020: ``Block'' mode represents values that are aggregates to which none of
1.1.1.2   root     3021: the other modes apply.  In RTL, only memory references can have this mode,
1.1       root     3022: and only if they appear in string-move or vector instructions.  On machines
                   3023: which have no such instructions, @code{BLKmode} will not appear in RTL.
                   3024: 
                   3025: @item VOIDmode
                   3026: Void mode means the absence of a mode or an unspecified mode.
1.1.1.2   root     3027: For example, RTL expressions of code @samp{const_int} have mode
1.1       root     3028: @code{VOIDmode} because they can be taken to have whatever mode the context
                   3029: requires.  In debugging dumps of RTL, @code{VOIDmode} is expressed by
                   3030: the absence of any mode.
                   3031: 
                   3032: @item EPmode
                   3033: ``Entry Pointer'' mode is intended to be used for function variables in
                   3034: Pascal and other block structured languages.  Such values contain
                   3035: both a function address and a static chain pointer for access to
                   3036: automatic variables of outer levels.  This mode is only partially
                   3037: implemented since C does not use it.
                   3038: 
                   3039: @item CSImode@r{, @dots{}}
                   3040: ``Complex Single Integer'' mode stands for a complex number represented
                   3041: as a pair of @code{SImode} integers.  Any of the integer and floating modes
                   3042: may have @samp{C} prefixed to its name to obtain a complex number mode.
                   3043: For example, there are @code{CQImode}, @code{CSFmode}, and @code{CDFmode}.
                   3044: Since C does not support complex numbers, these machine modes are only
                   3045: partially implemented.
                   3046: 
                   3047: @item BImode
                   3048: This is the machine mode of a bit-field in a structure.  It is used
                   3049: only in the syntax tree, never in RTL, and in the syntax tree it appears
                   3050: only in declaration nodes.  In C, it appears only in @code{FIELD_DECL}
                   3051: nodes for structure fields defined with a bit size.
                   3052: @end table
                   3053: 
                   3054: The machine description defines @code{Pmode} as a C macro which expands
                   3055: into the machine mode used for addresses.  Normally this is @code{SImode}.
                   3056: 
                   3057: The only modes which a machine description @i{must} support are
                   3058: @code{QImode}, @code{SImode}, @code{SFmode} and @code{DFmode}.  The
                   3059: compiler will attempt to use @code{DImode} for two-word structures and
                   3060: unions, but it would not be hard to program it to avoid this.  Likewise,
                   3061: you can arrange for the C type @code{short int} to avoid using
                   3062: @code{HImode}.  In the long term it would be desirable to make the set of
                   3063: available machine modes machine-dependent and eliminate all assumptions
                   3064: about specific machine modes or their uses from the machine-independent
                   3065: code of the compiler.
                   3066: 
                   3067: Here are some C macros that relate to machine modes:
                   3068: 
                   3069: @table @code
                   3070: @item GET_MODE (@var{x})
1.1.1.2   root     3071: Returns the machine mode of the RTX @var{x}.
1.1       root     3072: 
                   3073: @item PUT_MODE (@var{x}, @var{newmode})
1.1.1.2   root     3074: Alters the machine mode of the RTX @var{x} to be @var{newmode}.
1.1       root     3075: 
                   3076: @item GET_MODE_SIZE (@var{m})
                   3077: Returns the size in bytes of a datum of mode @var{m}.
                   3078: 
                   3079: @item GET_MODE_BITSIZE (@var{m})
                   3080: Returns the size in bits of a datum of mode @var{m}.
                   3081: 
                   3082: @item GET_MODE_UNIT_SIZE (@var{m})
                   3083: Returns the size in bits of the subunits of a datum of mode @var{m}.
                   3084: This is the same as @code{GET_MODE_SIZE} except in the case of
1.1.1.2   root     3085: complex modes and @code{EPmode}.  For them, the unit size is the
1.1       root     3086: size of the real or imaginary part, or the size of the function
                   3087: pointer or the context pointer.
                   3088: @end table
                   3089: 
                   3090: @node Constants, Regs and Memory, Machine Modes, RTL
                   3091: @section Constant Expression Types
                   3092: 
                   3093: The simplest RTL expressions are those that represent constant values.
                   3094: 
                   3095: @table @code
                   3096: @item (const_int @var{i})
                   3097: This type of expression represents the integer value @var{i}.  @var{i}
                   3098: is customarily accessed with the macro @code{INTVAL} as in
1.1.1.2   root     3099: @code{INTVAL (@var{exp})}, which is equivalent to @code{XINT (@var{exp}, 0)}.
1.1       root     3100: 
                   3101: There is only one expression object for the integer value zero;
                   3102: it is the value of the variable @code{const0_rtx}.  Likewise, the
                   3103: only expression for integer value one is found in @code{const1_rtx}.
1.1.1.2   root     3104: Any attempt to create an expression of code @samp{const_int} and
1.1       root     3105: value zero or one will return @code{const0_rtx} or @code{const1_rtx}
                   3106: as appropriate.
                   3107: 
                   3108: @item (const_double:@var{m} @var{i0} @var{i1})
                   3109: Represents a floating point constant value of mode @var{m}.  The two
                   3110: integers @var{i0} and @var{i1} together contain the bits of a
                   3111: @code{double} value.  To convert them to a @code{double}, do
                   3112: 
                   3113: @example
1.1.1.2   root     3114: union @{ double d; int i[2];@} u;
1.1       root     3115: u.i[0] = XINT (x, 0);
                   3116: u.i[1] = XINT (x, 1);
                   3117: @end example
                   3118: 
                   3119: @noindent
                   3120: and then refer to @code{u.d}.  The value of the constant is
                   3121: represented as a double in this fashion even if the value represented
                   3122: is single-precision.
                   3123: 
1.1.1.2   root     3124: The global variables @code{dconst0_rtx} and @code{fconst0_rtx} hold
                   3125: @samp{const_double} expressions with value 0, in modes @code{DFmode} and
                   3126: @code{SFmode}, respectively.
1.1       root     3127: 
                   3128: @item (symbol_ref @var{symbol})
                   3129: Represents the value of an assembler label for data.  @var{symbol} is
                   3130: a string that describes the name of the assembler label.  If it starts
                   3131: with a @samp{*}, the label is the rest of @var{symbol} not including
                   3132: the @samp{*}.  Otherwise, the label is @var{symbol}, prefixed with
                   3133: @samp{_}.
                   3134: 
                   3135: @item (label_ref @var{label})
                   3136: Represents the value of an assembler label for code.  It contains one
1.1.1.2   root     3137: operand, an expression, which must be a @samp{code_label} that appears
1.1       root     3138: in the instruction sequence to identify the place where the label
                   3139: should go.
                   3140: 
                   3141: The reason for using a distinct expression type for code label
                   3142: references is so that jump optimization can distinguish them.
                   3143: 
                   3144: @item (const @var{exp})
                   3145: Represents a constant that is the result of an assembly-time
                   3146: arithmetic computation.  The operand, @var{exp}, is an expression that
                   3147: contains only constants (@samp{const_int}, @samp{symbol_ref} and
                   3148: @samp{label_ref} expressions) combined with @samp{plus} and
                   3149: @samp{minus}.  However, not all combinations are valid, since the
                   3150: assembler cannot do arbitrary arithmetic on relocatable symbols.
                   3151: @end table
                   3152: 
                   3153: @node Regs and Memory, Arithmetic, Constants, RTL
                   3154: @section Registers and Memory
                   3155: 
                   3156: Here are the RTL expression types for describing access to machine
                   3157: registers and to main memory.
                   3158: 
                   3159: @table @code
                   3160: @item (reg:@var{m} @var{n})
                   3161: For small values of the integer @var{n} (less than
                   3162: @code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine
                   3163: register number @var{n}: a @dfn{hard register}.  For larger values of
                   3164: @var{n}, it stands for a temporary value or @dfn{pseudo register}.
                   3165: The compiler's strategy is to generate code assuming an unlimited
                   3166: number of such pseudo registers, and later convert them into hard
                   3167: registers or into memory references.
                   3168: 
                   3169: The symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine
                   3170: description, since the number of hard registers on the machine is an
                   3171: invariant characteristic of the machine.  Note, however, that not
                   3172: all of the machine registers must be general registers.  All the
                   3173: machine registers that can be used for storage of data are given
                   3174: hard register numbers, even those that can be used only in certain
                   3175: instructions or can hold only certain types of data.
                   3176: 
1.1.1.2   root     3177: Each pseudo register number used in a function's RTL code is
1.1       root     3178: represented by a unique @samp{reg} expression.
                   3179: 
                   3180: @var{m} is the machine mode of the reference.  It is necessary because
                   3181: machines can generally refer to each register in more than one mode.
                   3182: For example, a register may contain a full word but there may be
                   3183: instructions to refer to it as a half word or as a single byte, as
                   3184: well as instructions to refer to it as a floating point number of
                   3185: various precisions.
                   3186: 
                   3187: Even for a register that the machine can access in only one mode,
                   3188: the mode must always be specified.
                   3189: 
                   3190: A hard register may be accessed in various modes throughout one
                   3191: function, but each pseudo register is given a natural mode
                   3192: and is accessed only in that mode.  When it is necessary to describe
                   3193: an access to a pseudo register using a nonnatural mode, a @samp{subreg}
                   3194: expression is used.
                   3195: 
                   3196: A @samp{reg} expression with a machine mode that specifies more than
                   3197: one word of data may actually stand for several consecutive registers.
                   3198: If in addition the register number specifies a hardware register, then
                   3199: it actually represents several consecutive hardware registers starting
                   3200: with the specified one.
                   3201: 
                   3202: Such multi-word hardware register @samp{reg} expressions may not be live
                   3203: across the boundary of a basic block.  The lifetime analysis pass does not
                   3204: know how to record properly that several consecutive registers are
                   3205: actually live there, and therefore register allocation would be confused.
                   3206: The CSE pass must go out of its way to make sure the situation does
                   3207: not arise.
                   3208: 
                   3209: @item (subreg:@var{m} @var{reg} @var{wordnum})
                   3210: @samp{subreg} expressions are used to refer to a register in a machine
                   3211: mode other than its natural one, or to refer to one register of
                   3212: a multi-word @samp{reg} that actually refers to several registers.
                   3213: 
                   3214: Each pseudo-register has a natural mode.  If it is necessary to
                   3215: operate on it in a different mode---for example, to perform a fullword
                   3216: move instruction on a pseudo-register that contains a single byte---
                   3217: the pseudo-register must be enclosed in a @samp{subreg}.  In such
                   3218: a case, @var{wordnum} is zero.
                   3219: 
                   3220: The other use of @samp{subreg} is to extract the individual registers
                   3221: of a multi-register value.  Machine modes such as @code{DImode} and
                   3222: @code{EPmode} indicate values longer than a word, values which usually
                   3223: require two consecutive registers.  To access one of the registers,
                   3224: use a @samp{subreg} with mode @code{SImode} and a @var{wordnum} that
                   3225: says which register.
                   3226: 
                   3227: The compilation parameter @code{WORDS_BIG_ENDIAN}, if defined, says
                   3228: that word number zero is the most significant part; otherwise, it is
                   3229: the least significant part.
                   3230: 
1.1.1.7 ! root     3231: Between the combiner pass and the reload pass, it is possible to have
        !          3232: a @samp{subreg} which contains a @samp{mem} instead of a @samp{reg} as
        !          3233: its first operand.  The reload pass eliminates these cases by
        !          3234: reloading the @samp{mem} into a suitable register.
        !          3235: 
1.1       root     3236: Note that it is not valid to access a @code{DFmode} value in @code{SFmode}
                   3237: using a @samp{subreg}.  On some machines the most significant part of a
                   3238: @code{DFmode} value does not have the same format as a single-precision
                   3239: floating value.
                   3240: 
                   3241: @item (cc0)
                   3242: This refers to the machine's condition code register.  It has no
                   3243: operands and may not have a machine mode.  It may be validly used in
                   3244: only two contexts: as the destination of an assignment (in test and
                   3245: compare instructions) and in comparison operators comparing against
1.1.1.2   root     3246: zero (@samp{const_int} with value zero; that is to say,
                   3247: @code{const0_rtx}).
1.1       root     3248: 
1.1.1.2   root     3249: There is only one expression object of code @samp{cc0}; it is the
1.1       root     3250: value of the variable @code{cc0_rtx}.  Any attempt to create an
1.1.1.2   root     3251: expression of code @samp{cc0} will return @code{cc0_rtx}.
1.1       root     3252: 
1.1.1.2   root     3253: One special thing about the condition code register is that
                   3254: instructions can set it implicitly.  On many machines, nearly all
                   3255: instructions set the condition code based on the value that they
                   3256: compute or store.  It is not necessary to record these actions
                   3257: explicitly in the RTL because the machine description includes a
                   3258: prescription for recognizing the instructions that do so (by means of
                   3259: the macro @code{NOTICE_UPDATE_CC}).  Only instructions whose sole
                   3260: purpose is to set the condition code, and instructions that use the
                   3261: condition code, need mention @code{(cc0)}.
1.1       root     3262: 
                   3263: @item (pc)
                   3264: This represents the machine's program counter.  It has no operands and
                   3265: may not have a machine mode.  @code{(pc)} may be validly used only in
                   3266: certain specific contexts in jump instructions.
                   3267: 
1.1.1.2   root     3268: There is only one expression object of code @samp{pc}; it is the value
                   3269: of the variable @code{pc_rtx}.  Any attempt to create an expression of
                   3270: code @samp{pc} will return @code{pc_rtx}.
1.1       root     3271: 
1.1.1.2   root     3272: All instructions that do not jump alter the program counter implicitly
                   3273: by incrementing it, but there is no need to mention this in the RTL.
1.1       root     3274: 
                   3275: @item (mem:@var{m} @var{addr})
1.1.1.2   root     3276: This RTX represents a reference to main memory at an address
                   3277: represented by the expression @var{addr}.  @var{m} specifies how large
                   3278: a unit of memory is accessed.
1.1       root     3279: @end table
                   3280: 
                   3281: @node Arithmetic, Comparisons, Regs and Memory, RTL
                   3282: @section RTL Expressions for Arithmetic
                   3283: 
                   3284: @table @code
                   3285: @item (plus:@var{m} @var{x} @var{y})
                   3286: Represents the sum of the values represented by @var{x} and @var{y}
                   3287: carried out in machine mode @var{m}.  This is valid only if
                   3288: @var{x} and @var{y} both are valid for mode @var{m}.
                   3289: 
                   3290: @item (minus:@var{m} @var{x} @var{y})
                   3291: Like @samp{plus} but represents subtraction.
                   3292: 
                   3293: @item (minus @var{x} @var{y})
                   3294: Represents the result of subtracting @var{y} from @var{x}
                   3295: for purposes of comparison.  The absence of a machine mode
                   3296: in the @samp{minus} expression indicates that the result is
                   3297: computed without overflow, as if with infinite precision.
                   3298: 
                   3299: Of course, machines can't really subtract with infinite precision.
                   3300: However, they can pretend to do so when only the sign of the
                   3301: result will be used, which is the case when the result is stored
1.1.1.2   root     3302: in @code{(cc0)}.  And that is the only way this kind of expression
1.1       root     3303: may validly be used: as a value to be stored in the condition codes.
                   3304: 
                   3305: @item (neg:@var{m} @var{x})
                   3306: Represents the negation (subtraction from zero) of the value
                   3307: represented by @var{x}, carried out in mode @var{m}.  @var{x} must be
                   3308: valid for mode @var{m}.
                   3309: 
                   3310: @item (mult:@var{m} @var{x} @var{y})
                   3311: Represents the signed product of the values represented by @var{x} and
                   3312: @var{y} carried out in machine mode @var{m}.  If
                   3313: @var{x} and @var{y} are both valid for mode @var{m}, this is ordinary
1.1.1.2   root     3314: size-preserving multiplication.  Alternatively, both @var{x} and @var{y}
1.1       root     3315: may be valid for a different, narrower mode.  This represents the
                   3316: kind of multiplication that generates a product wider than the operands.
                   3317: Widening multiplication and same-size multiplication are completely
                   3318: distinct and supported by different machine instructions; machines may
1.1.1.2   root     3319: support one but not the other.@refill
1.1       root     3320: 
                   3321: @samp{mult} may be used for floating point division as well.
                   3322: Then @var{m} is a floating point machine mode.
                   3323: 
                   3324: @item (umult:@var{m} @var{x} @var{y})
                   3325: Like @samp{mult} but represents unsigned multiplication.  It may be
                   3326: used in both same-size and widening forms, like @samp{mult}.
1.1.1.2   root     3327: @samp{umult} is used only for fixed-point multiplication.
1.1       root     3328: 
                   3329: @item (div:@var{m} @var{x} @var{y})
                   3330: Represents the quotient in signed division of @var{x} by @var{y},
                   3331: carried out in machine mode @var{m}.  If @var{m} is a floating-point
                   3332: mode, it represents the exact quotient; otherwise, the integerized
                   3333: quotient.  If @var{x} and @var{y} are both valid for mode @var{m},
                   3334: this is ordinary size-preserving division.  Some machines have
                   3335: division instructions in which the operands and quotient widths are
                   3336: not all the same; such instructions are represented by @samp{div}
                   3337: expressions in which the machine modes are not all the same.
                   3338: 
                   3339: @item (udiv:@var{m} @var{x} @var{y})
                   3340: Like @samp{div} but represents unsigned division.
                   3341: 
                   3342: @item (mod:@var{m} @var{x} @var{y})
                   3343: @itemx (umod:@var{m} @var{x} @var{y})
                   3344: Like @samp{div} and @samp{udiv} but represent the remainder instead of
                   3345: the quotient.
                   3346: 
                   3347: @item (not:@var{m} @var{x})
                   3348: Represents the bitwise complement of the value represented by @var{x},
                   3349: carried out in mode @var{m}, which must be a fixed-point machine mode.
                   3350: @var{x} must be valid for mode @var{m}, which must be a fixed-point mode.
                   3351: 
                   3352: @item (and:@var{m} @var{x} @var{y})
                   3353: Represents the bitwise logical-and of the values represented by
                   3354: @var{x} and @var{y}, carried out in machine mode @var{m}.  This is
                   3355: valid only if @var{x} and @var{y} both are valid for mode @var{m},
                   3356: which must be a fixed-point mode.
                   3357: 
                   3358: @item (ior:@var{m} @var{x} @var{y})
                   3359: Represents the bitwise inclusive-or of the values represented by
                   3360: @var{x} and @var{y}, carried out in machine mode @var{m}.  This is
                   3361: valid only if @var{x} and @var{y} both are valid for mode @var{m},
                   3362: which must be a fixed-point mode.
                   3363: 
                   3364: @item (xor:@var{m} @var{x} @var{y})
                   3365: Represents the bitwise exclusive-or of the values represented by
                   3366: @var{x} and @var{y}, carried out in machine mode @var{m}.  This is
                   3367: valid only if @var{x} and @var{y} both are valid for mode @var{m},
                   3368: which must be a fixed-point mode.
                   3369: 
                   3370: @item (lshift:@var{m} @var{x} @var{c})
                   3371: Represents the result of logically shifting @var{x} left by @var{c}
                   3372: places.  @var{x} must be valid for the mode @var{m}, a fixed-point
                   3373: machine mode.  @var{c} must be valid for a fixed-point mode;
                   3374: which mode is determined by the mode called for in the machine
                   3375: description entry for the left-shift instruction.  For example,
                   3376: on the Vax, the mode of @var{c} is @code{QImode} regardless of @var{m}.
                   3377: 
                   3378: On some machines, negative values of @var{c} may be meaningful; this
1.1.1.2   root     3379: is why logical left shift and arithmetic left shift are distinguished.
1.1       root     3380: For example, Vaxes have no right-shift instructions, and right shifts
                   3381: are represented as left-shift instructions whose counts happen
                   3382: to be negative constants or else computed (in a previous instruction)
                   3383: by negation.
                   3384: 
                   3385: @item (ashift:@var{m} @var{x} @var{c})
                   3386: Like @samp{lshift} but for arithmetic left shift.
                   3387: 
                   3388: @item (lshiftrt:@var{m} @var{x} @var{c})
                   3389: @itemx (ashiftrt:@var{m} @var{x} @var{c})
                   3390: Like @samp{lshift} and @samp{ashift} but for right shift.
                   3391: 
                   3392: @item (rotate:@var{m} @var{x} @var{c})
                   3393: @itemx (rotatert:@var{m} @var{x} @var{c})
                   3394: Similar but represent left and right rotate.
                   3395: 
                   3396: @item (abs:@var{m} @var{x})
                   3397: Represents the absolute value of @var{x}, computed in mode @var{m}.
                   3398: @var{x} must be valid for @var{m}.
                   3399: 
                   3400: @item (sqrt:@var{m} @var{x})
                   3401: Represents the square root of @var{x}, computed in mode @var{m}.
                   3402: @var{x} must be valid for @var{m}.  Most often @var{m} will be
                   3403: a floating point mode.
1.1.1.2   root     3404: 
                   3405: @item (ffs:@var{m} @var{x})
                   3406: Represents the one plus the index of the least significant 1-bit in
                   3407: @var{x}, represented as an integer of mode @var{m}.  (The value is
                   3408: zero if @var{x} is zero.)  The mode of @var{x} need not be @var{m};
                   3409: depending on the target machine, various mode combinations may be
                   3410: valid.
1.1       root     3411: @end table
                   3412: 
                   3413: @node Comparisons, Bit Fields, Arithmetic, RTL
                   3414: @section Comparison Operations
                   3415: 
                   3416: Comparison operators test a relation on two operands and are considered to
                   3417: represent the value 1 if the relation holds, or zero if it does not.  The
                   3418: mode of the comparison is determined by the operands; they must both be
                   3419: valid for a common machine mode.  A comparison with both operands constant
                   3420: would be invalid as the machine mode could not be deduced from it, but such
1.1.1.2   root     3421: a comparison should never exist in RTL due to constant folding.
1.1       root     3422: 
                   3423: Inequality comparisons come in two flavors, signed and unsigned.  Thus,
1.1.1.2   root     3424: there are distinct expression codes @samp{gt} and @samp{gtu} for signed and
1.1       root     3425: unsigned greater-than.  These can produce different results for the same
                   3426: pair of integer values: for example, 1 is signed greater-than -1 but not
                   3427: unsigned greater-than, because -1 when regarded as unsigned is actually
1.1.1.2   root     3428: @code{0xffffffff} which is greater than 1.
1.1       root     3429: 
                   3430: The signed comparisons are also used for floating point values.  Floating
                   3431: point comparisons are distinguished by the machine modes of the operands.
                   3432: 
                   3433: The comparison operators may be used to compare the condition codes
1.1.1.2   root     3434: @code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}.  Such a
                   3435: construct actually refers to the result of the preceding instruction in
                   3436: which the condition codes were set.  The above example stands for 1 if the
                   3437: condition codes were set to say ``zero'' or ``equal'', 0 otherwise.
                   3438: Although the same comparison operators are used for this as may be used in
                   3439: other contexts on actual data, no confusion can result since the machine
                   3440: description would never allow both kinds of uses in the same context.
1.1       root     3441: 
                   3442: @table @code
                   3443: @item (eq @var{x} @var{y})
                   3444: 1 if the values represented by @var{x} and @var{y} are equal,
                   3445: otherwise 0.
                   3446: 
                   3447: @item (ne @var{x} @var{y})
                   3448: 1 if the values represented by @var{x} and @var{y} are not equal,
                   3449: otherwise 0.
                   3450: 
                   3451: @item (gt @var{x} @var{y})
                   3452: 1 if the @var{x} is greater than @var{y}.  If they are fixed-point,
                   3453: the comparison is done in a signed sense.
                   3454: 
                   3455: @item (gtu @var{x} @var{y})
                   3456: Like @samp{gt} but does unsigned comparison, on fixed-point numbers only.
                   3457: 
                   3458: @item (lt @var{x} @var{y})
                   3459: @item (ltu @var{x} @var{y})
                   3460: Like @samp{gt} and @samp{gtu} but test for ``less than''.
                   3461: 
                   3462: @item (ge @var{x} @var{y})
                   3463: @item (geu @var{x} @var{y})
                   3464: Like @samp{gt} and @samp{gtu} but test for ``greater than or equal''.
                   3465: 
                   3466: @item (le @var{x} @var{y})
                   3467: @item (leu @var{x} @var{y})
                   3468: Like @samp{gt} and @samp{gtu} but test for ``less than or equal''.
                   3469: 
                   3470: @item (if_then_else @var{cond} @var{then} @var{else})
                   3471: This is not a comparison operation but is listed here because it is
                   3472: always used in conjunction with a comparison operation.  To be
                   3473: precise, @var{cond} is a comparison expression.  This expression
                   3474: represents a choice, according to @var{cond}, between the value
                   3475: represented by @var{then} and the one represented by @var{else}.
                   3476: 
                   3477: On most machines, @samp{if_then_else} expressions are valid only
                   3478: to express conditional jumps.
                   3479: @end table
                   3480: 
                   3481: @node Bit Fields, Conversions, Comparisons, RTL
                   3482: @section Bit-fields
                   3483: 
                   3484: Special expression codes exist to represent bit-field instructions.
1.1.1.2   root     3485: These types of expressions are lvalues in RTL; they may appear
1.1       root     3486: on the left side of a assignment, indicating insertion of a value
                   3487: into the specified bit field.
                   3488: 
                   3489: @table @code
                   3490: @item (sign_extract:SI @var{loc} @var{size} @var{pos})
                   3491: This represents a reference to a sign-extended bit-field contained or
                   3492: starting in @var{loc} (a memory or register reference).  The bit field
                   3493: is @var{size} bits wide and starts at bit @var{pos}.  The compilation
1.1.1.2   root     3494: option @code{BITS_BIG_ENDIAN} says which end of the memory unit
1.1       root     3495: @var{pos} counts from.
                   3496: 
                   3497: Which machine modes are valid for @var{loc} depends on the machine,
                   3498: but typically @var{loc} should be a single byte when in memory
                   3499: or a full word in a register.
                   3500: 
1.1.1.2   root     3501: @item (zero_extract:SI @var{loc} @var{size} @var{pos})
1.1       root     3502: Like @samp{sign_extract} but refers to an unsigned or zero-extended
                   3503: bit field.  The same sequence of bits are extracted, but they
                   3504: are filled to an entire word with zeros instead of by sign-extension.
                   3505: @end table
                   3506: 
                   3507: @node Conversions, RTL Declarations, Bit Fields, RTL
                   3508: @section Conversions
                   3509: 
                   3510: All conversions between machine modes must be represented by
                   3511: explicit conversion operations.  For example, an expression
1.1.1.2   root     3512: which is the sum of a byte and a full word cannot be written as
1.1       root     3513: @code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @samp{plus}
                   3514: operation requires two operands of the same machine mode.
                   3515: Therefore, the byte-sized operand is enclosed in a conversion
                   3516: operation, as in
                   3517: 
                   3518: @example
                   3519: (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
                   3520: @end example
                   3521: 
                   3522: The conversion operation is not a mere placeholder, because there
                   3523: may be more than one way of converting from a given starting mode
                   3524: to the desired final mode.  The conversion operation code says how
                   3525: to do it.
                   3526: 
                   3527: @table @code
                   3528: @item (sign_extend:@var{m} @var{x})
                   3529: Represents the result of sign-extending the value @var{x}
                   3530: to machine mode @var{m}.  @var{m} must be a fixed-point mode
                   3531: and @var{x} a fixed-point value of a mode narrower than @var{m}.
                   3532: 
                   3533: @item (zero_extend:@var{m} @var{x})
                   3534: Represents the result of zero-extending the value @var{x}
                   3535: to machine mode @var{m}.  @var{m} must be a fixed-point mode
                   3536: and @var{x} a fixed-point value of a mode narrower than @var{m}.
                   3537: 
                   3538: @item (float_extend:@var{m} @var{x})
                   3539: Represents the result of extending the value @var{x}
                   3540: to machine mode @var{m}.  @var{m} must be a floating point mode
                   3541: and @var{x} a floating point value of a mode narrower than @var{m}.
                   3542: 
                   3543: @item (truncate:@var{m} @var{x})
                   3544: Represents the result of truncating the value @var{x}
                   3545: to machine mode @var{m}.  @var{m} must be a fixed-point mode
                   3546: and @var{x} a fixed-point value of a mode wider than @var{m}.
                   3547: 
                   3548: @item (float_truncate:@var{m} @var{x})
                   3549: Represents the result of truncating the value @var{x}
                   3550: to machine mode @var{m}.  @var{m} must be a floating point mode
                   3551: and @var{x} a floating point value of a mode wider than @var{m}.
                   3552: 
                   3553: @item (float:@var{m} @var{x})
1.1.1.2   root     3554: Represents the result of converting fixed point value @var{x},
                   3555: regarded as signed, to floating point mode @var{m}.
                   3556: 
                   3557: @item (unsigned_float:@var{m} @var{x})
                   3558: Represents the result of converting fixed point value @var{x},
                   3559: regarded as unsigned, to floating point mode @var{m}.
1.1       root     3560: 
                   3561: @item (fix:@var{m} @var{x})
1.1.1.2   root     3562: When @var{m} is a fixed point mode, represents the result of
                   3563: converting floating point value @var{x} to mode @var{m}, regarded as
                   3564: signed.  How rounding is done is not specified, so this operation may
                   3565: be used validly in compiling C code only for integer-valued operands.
                   3566: 
                   3567: @item (unsigned_fix:@var{m} @var{x})
                   3568: Represents the result of converting floating point value @var{x} to
                   3569: fixed point mode @var{m}, regarded as unsigned.  How rounding is done
                   3570: is not specified.
1.1       root     3571: 
1.1.1.2   root     3572: @item (fix:@var{m} @var{x})
                   3573: When @var{m} is a floating point mode, represents the result of
                   3574: converting floating point value @var{x} (valid for mode @var{m}) to an
                   3575: integer, still represented in floating point mode @var{m}, by rounding
                   3576: towards zero.
1.1       root     3577: @end table
                   3578: 
                   3579: @node RTL Declarations, Side Effects, Conversions, RTL
                   3580: @section Declarations
                   3581: 
                   3582: Declaration expression codes do not represent arithmetic operations
                   3583: but rather state assertions about their operands.
                   3584: 
                   3585: @table @code
                   3586: @item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0))
                   3587: This expression code is used in only one context: operand 0 of a
                   3588: @samp{set} expression.  In addition, the operand of this expression
                   3589: must be a @samp{subreg} expression.
                   3590: 
                   3591: The presence of @samp{strict_low_part} says that the part of the
1.1.1.2   root     3592: register which is meaningful in mode @var{n}, but is not part of
                   3593: mode @var{m}, is not to be altered.  Normally, an assignment to such
1.1       root     3594: a subreg is allowed to have undefined effects on the rest of the
                   3595: register when @var{m} is less than a word.
                   3596: @end table
                   3597: 
                   3598: @node Side Effects, Incdec, RTL Declarations, RTL
                   3599: @section Side Effect Expressions
                   3600: 
                   3601: The expression codes described so far represent values, not actions.
                   3602: But machine instructions never produce values; they are meaningful
                   3603: only for their side effects on the state of the machine.  Special
                   3604: expression codes are used to represent side effects.
                   3605: 
                   3606: The body of an instruction is always one of these side effect codes;
                   3607: the codes described above, which represent values, appear only as
                   3608: the operands of these.
                   3609: 
                   3610: @table @code
                   3611: @item (set @var{lval} @var{x})
                   3612: Represents the action of storing the value of @var{x} into the place
                   3613: represented by @var{lval}.  @var{lval} must be an expression
                   3614: representing a place that can be stored in: @samp{reg} (or
                   3615: @samp{subreg} or @samp{strict_low_part}), @samp{mem}, @samp{pc} or
1.1.1.2   root     3616: @samp{cc0}.@refill
1.1       root     3617: 
                   3618: If @var{lval} is a @samp{reg}, @samp{subreg} or @samp{mem}, it has a
1.1.1.2   root     3619: machine mode; then @var{x} must be valid for that mode.@refill
1.1       root     3620: 
                   3621: If @var{lval} is a @samp{reg} whose machine mode is less than the full
                   3622: width of the register, then it means that the part of the register
                   3623: specified by the machine mode is given the specified value and the
                   3624: rest of the register receives an undefined value.  Likewise, if
                   3625: @var{lval} is a @samp{subreg} whose machine mode is narrower than
                   3626: @code{SImode}, the rest of the register can be changed in an undefined way.
                   3627: 
                   3628: If @var{lval} is a @samp{strict_low_part} of a @samp{subreg}, then the
                   3629: part of the register specified by the machine mode of the
                   3630: @samp{subreg} is given the value @var{x} and the rest of the register
1.1.1.2   root     3631: is not changed.@refill
1.1       root     3632: 
                   3633: If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may
1.1.1.2   root     3634: have any mode.  This represents a ``test'' or ``compare'' instruction.@refill
1.1       root     3635: 
                   3636: If @var{lval} is @code{(pc)}, we have a jump instruction, and the
                   3637: possibilities for @var{x} are very limited.  It may be a
                   3638: @samp{label_ref} expression (unconditional jump).  It may be an
                   3639: @samp{if_then_else} (conditional jump), in which case either the
                   3640: second or the third operand must be @code{(pc)} (for the case which
                   3641: does not jump) and the other of the two must be a @samp{label_ref}
                   3642: (for the case which does jump).  @var{x} may also be a @samp{mem} or
                   3643: @code{(plus:SI (pc) @var{y})}, where @var{y} may be a @samp{reg} or a
                   3644: @samp{mem}; these unusual patterns are used to represent jumps through
1.1.1.2   root     3645: branch tables.@refill
1.1       root     3646: 
                   3647: @item (return)
1.1.1.2   root     3648: Represents a return from the current function, on machines where this
                   3649: can be done with one instruction, such as Vaxes.  On machines where a
                   3650: multi-instruction ``epilogue'' must be executed in order to return
                   3651: from the function, returning is done by jumping to a label which
                   3652: precedes the epilogue, and the @samp{return} expression code is never
                   3653: used.
1.1       root     3654: 
                   3655: @item (call @var{function} @var{nargs})
                   3656: Represents a function call.  @var{function} is a @samp{mem} expression
                   3657: whose address is the address of the function to be called.  @var{nargs}
                   3658: is an expression representing the number of words of argument.
                   3659: 
                   3660: Each machine has a standard machine mode which @var{function} must
1.1.1.2   root     3661: have.  The machine description defines macro @code{FUNCTION_MODE} to
1.1       root     3662: expand into the requisite mode name.  The purpose of this mode is to
                   3663: specify what kind of addressing is allowed, on machines where the
                   3664: allowed kinds of addressing depend on the machine mode being
                   3665: addressed.
                   3666: 
                   3667: @item (clobber @var{x})
                   3668: Represents the storing or possible storing of an unpredictable,
                   3669: undescribed value into @var{x}, which must be a @samp{reg} or
                   3670: @samp{mem} expression.
                   3671: 
                   3672: One place this is used is in string instructions that store standard
                   3673: values into particular hard registers.  It may not be worth the
1.1.1.2   root     3674: trouble to describe the values that are stored, but it is essential to
                   3675: inform the compiler that the registers will be altered, lest it
1.1       root     3676: attempt to keep data in them across the string instruction.
                   3677: 
                   3678: @var{x} may also be null---a null C pointer, no expression at all.
                   3679: Such a @code{(clobber (null))} expression means that all memory
                   3680: locations must be presumed clobbered.
                   3681: 
                   3682: Note that the machine description classifies certain hard registers as
                   3683: ``call-clobbered''.  All function call instructions are assumed by
                   3684: default to clobber these registers, so there is no need to use
                   3685: @samp{clobber} expressions to indicate this fact.  Also, each function
                   3686: call is assumed to have the potential to alter any memory location.
                   3687: 
                   3688: @item (use @var{x})
1.1.1.2   root     3689: Represents the use of the value of @var{x}.  It indicates that the
                   3690: value in @var{x} at this point in the program is needed, even though
                   3691: it may not be apparent why this is so.  Therefore, the compiler will
                   3692: not attempt to delete instructions whose only effect is to store a
                   3693: value in @var{x}.  @var{x} must be a @samp{reg} expression.
1.1       root     3694: 
                   3695: @item (parallel [@var{x0} @var{x1} @dots{}])
                   3696: Represents several side effects performed in parallel.  The square
                   3697: brackets stand for a vector; the operand of @samp{parallel} is a
                   3698: vector of expressions.  @var{x0}, @var{x1} and so on are individual
                   3699: side effects---expressions of code @samp{set}, @samp{call},
1.1.1.2   root     3700: @samp{return}, @samp{clobber} or @samp{use}.@refill
1.1       root     3701: 
1.1.1.2   root     3702: ``In parallel'' means that first all the values used in the individual
                   3703: side-effects are computed, and second all the actual side-effects are
                   3704: performed.  For example,
1.1       root     3705: 
                   3706: @example
                   3707: (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
                   3708:            (set (mem:SI (reg:SI 1)) (reg:SI 1))])
                   3709: @end example
                   3710: 
                   3711: @noindent
                   3712: says unambiguously that the values of hard register 1 and the memory
                   3713: location addressed by it are interchanged.  In both places where
                   3714: @code{(reg:SI 1)} appears as a memory address it refers to the value
1.1.1.2   root     3715: in register 1 @emph{before} the execution of the instruction.
                   3716: 
                   3717: @item (sequence [@var{insns} @dots{}])
                   3718: Represents a sequence of insns.  Each of the @var{insns} that appears
                   3719: in the vector is suitable for appearing in the chain of insns, so it
                   3720: must be an @samp{insn}, @samp{jump_insn}, @samp{call_insn},
                   3721: @samp{code_label}, @samp{barrier} or @samp{note}.
                   3722: 
                   3723: A @samp{sequence} RTX never appears in an actual insn.  It represents
                   3724: the sequence of insns that result from a @samp{define_expand}
                   3725: @emph{before} those insns are passed to @code{emit_insn} to insert
                   3726: them in the chain of insns.  When actually inserted, the individual
                   3727: sub-insns are separated out and the @samp{sequence} is forgotten.
1.1       root     3728: @end table
                   3729: 
1.1.1.2   root     3730: Three expression codes appear in place of a side effect, as the body of an
                   3731: insn, though strictly speaking they do not describe side effects as such:
1.1       root     3732: 
                   3733: @table @code
                   3734: @item (asm_input @var{s})
                   3735: Represents literal assembler code as described by the string @var{s}.
                   3736: 
                   3737: @item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}])
1.1.1.2   root     3738: Represents a table of jump addresses.  The vector elements @var{lr0},
                   3739: etc., are @samp{label_ref} expressions.  The mode @var{m} specifies
                   3740: how much space is given to each address; normally @var{m} would be
1.1       root     3741: @code{Pmode}.
                   3742: 
                   3743: @item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}])
                   3744: Represents a table of jump addresses expressed as offsets from
1.1.1.2   root     3745: @var{base}.  The vector elements @var{lr0}, etc., are @samp{label_ref}
                   3746: expressions and so is @var{base}.  The mode @var{m} specifies how much
                   3747: space is given to each address-difference.@refill
1.1       root     3748: @end table
                   3749: 
1.1.1.2   root     3750: @node Incdec, Assembler, Side Effects, RTL
1.1       root     3751: @section Embedded Side-Effects on Addresses
                   3752: 
                   3753: Four special side-effect expression codes appear as memory addresses.
                   3754: 
                   3755: @table @code
                   3756: @item (pre_dec:@var{m} @var{x})
                   3757: Represents the side effect of decrementing @var{x} by a standard
                   3758: amount and represents also the value that @var{x} has after being
                   3759: decremented.  @var{x} must be a @samp{reg} or @samp{mem}, but most
                   3760: machines allow only a @samp{reg}.  @var{m} must be the machine mode
1.1.1.2   root     3761: for pointers on the machine in use.  The amount @var{x} is decremented
1.1       root     3762: by is the length in bytes of the machine mode of the containing memory
                   3763: reference of which this expression serves as the address.  Here is an
1.1.1.2   root     3764: example of its use:@refill
1.1       root     3765: 
                   3766: @example
                   3767: (mem:DF (pre_dec:SI (reg:SI 39)))
                   3768: @end example
                   3769: 
                   3770: @noindent
                   3771: This says to decrement pseudo register 39 by the length of a @code{DFmode}
                   3772: value and use the result to address a @code{DFmode} value.
                   3773: 
                   3774: @item (pre_inc:@var{m} @var{x})
                   3775: Similar, but specifies incrementing @var{x} instead of decrementing it.
                   3776: 
                   3777: @item (post_dec:@var{m} @var{x})
                   3778: Represents the same side effect as @samp{pre_decrement} but a different
                   3779: value.  The value represented here is the value @var{x} has @i{before}
                   3780: being decremented.
                   3781: 
                   3782: @item (post_inc:@var{m} @var{x})
                   3783: Similar, but specifies incrementing @var{x} instead of decrementing it.
                   3784: @end table
                   3785: 
                   3786: These embedded side effect expressions must be used with care.  Instruction
                   3787: patterns may not use them.  Until the @samp{flow} pass of the compiler,
                   3788: they may occur only to represent pushes onto the stack.  The @samp{flow}
                   3789: pass finds cases where registers are incremented or decremented in one
                   3790: instruction and used as an address shortly before or after; these cases are
                   3791: then transformed to use pre- or post-increment or -decrement.
                   3792: 
                   3793: Explicit popping of the stack could be represented with these embedded
                   3794: side effect operators, but that would not be safe; the instruction
                   3795: combination pass could move the popping past pushes, thus changing
                   3796: the meaning of the code.
                   3797: 
                   3798: An instruction that can be represented with an embedded side effect
                   3799: could also be represented using @samp{parallel} containing an additional
                   3800: @samp{set} to describe how the address register is altered.  This is not
                   3801: done because machines that allow these operations at all typically
                   3802: allow them wherever a memory address is called for.  Describing them as
                   3803: additional parallel stores would require doubling the number of entries
                   3804: in the machine description.
                   3805: 
1.1.1.2   root     3806: @node Assembler, Insns, IncDec, RTL
                   3807: @section Assembler Instructions as Expressions
                   3808: 
                   3809: The RTX code @samp{asm_operands} represents a value produced by a
                   3810: user-specified assembler instruction.  It is used to represent
                   3811: an @code{asm} statement with arguments.  An @code{asm} statement with
                   3812: a single output operand, like this:
                   3813: 
                   3814: @example
                   3815: asm ("foo %1,%2,%0" : "a" (outputvar) : "g" (x + y), "di" (*z));
                   3816: @end example
                   3817: 
                   3818: @noindent
                   3819: is represented using a single @samp{asm_operands} RTX which represents
                   3820: the value that is stored in @code{outputvar}:
                   3821: 
                   3822: @example
                   3823: (set @var{rtx-for-outputvar}
                   3824:      (asm_operands "foo %1,%2,%0" "a" 0
                   3825:                    [@var{rtx-for-addition-result} @var{rtx-for-*z}]
                   3826:                    [(asm_input:@var{m1} "g")
                   3827:                     (asm_input:@var{m2} "di")]))
                   3828: @end example
                   3829: 
                   3830: @noindent
                   3831: Here the operands of the @samp{asm_operands} RTX are the assembler
                   3832: template string, the output-operand's constraint, the index-number of the
                   3833: output operand among the output operands specified, a vector of input
                   3834: operand RTX's, and a vector of input-operand modes and constraints.  The
                   3835: mode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of
                   3836: @code{*z}.
                   3837: 
                   3838: When an @code{asm} statement has multiple output values, its insn has
                   3839: several such @samp{set} RTX's inside of a @samp{parallel}.  Each @samp{set}
                   3840: contains a @samp{asm_operands}; all of these share the same assembler
                   3841: template and vectors, but each contains the constraint for the respective
                   3842: output operand.  They are also distinguished by the output-operand index
                   3843: number, which is 0, 1, @dots{} for successive output operands.
                   3844: 
                   3845: @node Insns, Calls, Assembler, RTL
1.1       root     3846: @section Insns
                   3847: 
                   3848: The RTL representation of the code for a function is a doubly-linked
                   3849: chain of objects called @dfn{insns}.  Insns are expressions with
                   3850: special codes that are used for no other purpose.  Some insns are
                   3851: actual instructions; others represent dispatch tables for @code{switch}
                   3852: statements; others represent labels to jump to or various sorts of
1.1.1.2   root     3853: declarative information.
1.1       root     3854: 
1.1.1.2   root     3855: In addition to its own specific data, each insn must have a unique id-number
1.1       root     3856: that distinguishes it from all other insns in the current function, and
                   3857: chain pointers to the preceding and following insns.  These three fields
                   3858: occupy the same position in every insn, independent of the expression code
                   3859: of the insn.  They could be accessed with @code{XEXP} and @code{XINT},
                   3860: but instead three special macros are always used:
                   3861: 
                   3862: @table @code
                   3863: @item INSN_UID (@var{i})
                   3864: Accesses the unique id of insn @var{i}.
                   3865: 
                   3866: @item PREV_INSN (@var{i})
                   3867: Accesses the chain pointer to the insn preceding @var{i}.
                   3868: If @var{i} is the first insn, this is a null pointer.
                   3869: 
                   3870: @item NEXT_INSN (@var{i})
                   3871: Accesses the chain pointer to the insn following @var{i}.
                   3872: If @var{i} is the last insn, this is a null pointer.
                   3873: @end table
                   3874: 
                   3875: The @code{NEXT_INSN} and @code{PREV_INSN} pointers must always
                   3876: correspond: if @var{i} is not the first insn,
                   3877: 
                   3878: @example
                   3879: NEXT_INSN (PREV_INSN (@var{insn})) == @var{insn}
                   3880: @end example
                   3881: 
                   3882: @noindent
                   3883: is always true.
                   3884: 
                   3885: Every insn has one of the following six expression codes:
                   3886: 
1.1.1.2   root     3887: @table @samp
1.1       root     3888: @item insn
                   3889: The expression code @samp{insn} is used for instructions that do not jump
                   3890: and do not do function calls.  Insns with code @samp{insn} have four
                   3891: additional fields beyond the three mandatory ones listed above.
                   3892: These four are described in a table below.
                   3893: 
                   3894: @item jump_insn
                   3895: The expression code @samp{jump_insn} is used for instructions that may jump
                   3896: (or, more generally, may contain @samp{label_ref} expressions).
                   3897: @samp{jump_insn} insns have the same extra fields as @samp{insn} insns,
                   3898: accessed in the same way.
                   3899: 
                   3900: @item call_insn
                   3901: The expression code @samp{call_insn} is used for instructions that may do
                   3902: function calls.  It is important to distinguish these instructions because
                   3903: they imply that certain registers and memory locations may be altered
                   3904: unpredictably.
                   3905: 
                   3906: @samp{call_insn} insns have the same extra fields as @samp{insn} insns,
                   3907: accessed in the same way.
                   3908: 
                   3909: @item code_label
                   3910: A @samp{code_label} insn represents a label that a jump insn can jump to.
                   3911: It contains one special field of data in addition to the three standard ones.
                   3912: It is used to hold the @dfn{label number}, a number that identifies this
                   3913: label uniquely among all the labels in the compilation (not just in the
                   3914: current function).  Ultimately, the label is represented in the assembler
                   3915: output as an assembler label @samp{L@var{n}} where @var{n} is the label number.
                   3916: 
                   3917: @item barrier
                   3918: Barriers are placed in the instruction stream after unconditional
                   3919: jump instructions to indicate that the jumps are unconditional.
                   3920: They contain no information beyond the three standard fields.
                   3921: 
                   3922: @item note
                   3923: @samp{note} insns are used to represent additional debugging and
1.1.1.2   root     3924: declarative information.  They contain two nonstandard fields, an
1.1       root     3925: integer which is accessed with the macro @code{NOTE_LINE_NUMBER} and a
                   3926: string accessed with @code{NOTE_SOURCE_FILE}.
                   3927: 
                   3928: If @code{NOTE_LINE_NUMBER} is positive, the note represents the
                   3929: position of a source line and @code{NOTE_SOURCE_FILE} is the source file name
                   3930: that the line came from.  These notes control generation of line
                   3931: number data in the assembler output.
                   3932: 
                   3933: Otherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a
                   3934: code with one of the following values (and @code{NOTE_SOURCE_FILE}
                   3935: must contain a null pointer):
                   3936: 
                   3937: @table @code
                   3938: @item NOTE_INSN_DELETED
                   3939: Such a note is completely ignorable.  Some passes of the compiler
                   3940: delete insns by altering them into notes of this kind.
                   3941: 
                   3942: @item NOTE_INSN_BLOCK_BEG
                   3943: @itemx NOTE_INSN_BLOCK_END
                   3944: These types of notes indicate the position of the beginning and end
                   3945: of a level of scoping of variable names.  They control the output
                   3946: of debugging information.
                   3947: 
                   3948: @item NOTE_INSN_LOOP_BEG
                   3949: @itemx NOTE_INSN_LOOP_END
                   3950: These types of notes indicate the position of the beginning and end
                   3951: of a @code{while} or @code{for} loop.  They enable the loop optimizer
                   3952: to find loops quickly.
                   3953: @end table
                   3954: @end table
                   3955: 
                   3956: Here is a table of the extra fields of @samp{insn}, @samp{jump_insn}
                   3957: and @samp{call_insn} insns:
                   3958: 
                   3959: @table @code
                   3960: @item PATTERN (@var{i})
                   3961: An expression for the side effect performed by this insn.
                   3962: 
                   3963: @item REG_NOTES (@var{i})
                   3964: A list (chain of @samp{expr_list} expressions) giving information
                   3965: about the usage of registers in this insn.  This list is set up by the
1.1.1.2   root     3966: flow analysis pass; it is a null pointer until then.
1.1       root     3967: 
                   3968: @item LOG_LINKS (@var{i})
                   3969: A list (chain of @samp{insn_list} expressions) of previous ``related''
                   3970: insns: insns which store into registers values that are used for the
                   3971: first time in this insn.  (An additional constraint is that neither a
                   3972: jump nor a label may come between the related insns).  This list is
1.1.1.2   root     3973: set up by the flow analysis pass; it is a null pointer until then.
1.1       root     3974: 
                   3975: @item INSN_CODE (@var{i})
                   3976: An integer that says which pattern in the machine description matches
                   3977: this insn, or -1 if the matching has not yet been attempted.
                   3978: 
                   3979: Such matching is never attempted and this field is not used on an insn
                   3980: whose pattern consists of a single @samp{use}, @samp{clobber},
                   3981: @samp{asm}, @samp{addr_vec} or @samp{addr_diff_vec} expression.
                   3982: @end table
                   3983: 
                   3984: The @code{LOG_LINKS} field of an insn is a chain of @samp{insn_list}
                   3985: expressions.  Each of these has two operands: the first is an insn,
                   3986: and the second is another @samp{insn_list} expression (the next one in
                   3987: the chain).  The last @samp{insn_list} in the chain has a null pointer
                   3988: as second operand.  The significant thing about the chain is which
1.1.1.2   root     3989: insns appear in it (as first operands of @samp{insn_list}
1.1       root     3990: expressions).  Their order is not significant.
                   3991: 
                   3992: The @code{REG_NOTES} field of an insn is a similar chain but of
1.1.1.2   root     3993: @samp{expr_list} expressions instead of @samp{insn_list}.  There are four
                   3994: kinds of register notes, which are distinguished by the machine mode of the
                   3995: @samp{expr_list}, which a register note is really understood as being an
                   3996: @code{enum reg_note}.  The first operand @var{op} of the @samp{expr_list}
                   3997: is data whose meaning depends on the kind of note.  Here are the four
                   3998: kinds:
1.1       root     3999: 
                   4000: @table @code
                   4001: @item REG_DEAD
1.1.1.2   root     4002: The register @var{op} dies in this insn; that is to say, altering the
                   4003: value immediately after this insn would not affect the future behavior
                   4004: of the program.
1.1       root     4005: 
                   4006: @item REG_INC
1.1.1.2   root     4007: The register @var{op} is incremented (or decremented; at this level
1.1       root     4008: there is no distinction) by an embedded side effect inside this insn.
1.1.1.2   root     4009: This means it appears in a @code{POST_INC}, @code{PRE_INC},
                   4010: @code{POST_DEC} or @code{PRE_DEC} RTX.
1.1       root     4011: 
1.1.1.2   root     4012: @item REG_EQUIV
                   4013: The register that is set by this insn will be equal to @var{op} at run
                   4014: time, and could validly be replaced in all its occurrences by
                   4015: @var{op}.  (``Validly'' here refers to the data flow of the program;
                   4016: simple replacement may make some insns invalid.)
                   4017: 
                   4018: The value which the insn explicitly copies into the register may look
                   4019: different from @var{op}, but they will be equal at run time.
                   4020: 
                   4021: For example, when a constant is loaded into a register that is never
                   4022: assigned any other value, this kind of note is used.
                   4023: 
                   4024: When a parameter is copied into a pseudo-register at entry to a function,
                   4025: a note of this kind records that the register is equivalent to the stack
                   4026: slot where the parameter was passed.  Although in this case the register
                   4027: may be set by other insns, it is still valid to replace the register
                   4028: by the stack slot throughout the function.
                   4029: 
                   4030: @item REG_EQUAL
                   4031: The register that is set by this insn will be equal to @var{op} at run
                   4032: time at the end of this insn (but not necessarily elsewhere in the
                   4033: function).
                   4034: 
                   4035: The RTX @var{op} is typically an arithmetic expression.  For example,
                   4036: when a sequence of insns such as a library call is used to perform an
                   4037: arithmetic operation, this kind of note is attached to the insn that
                   4038: produces or copies the final value.  It tells the CSE pass how to
                   4039: think of that value.
                   4040: 
                   4041: @item REG_RETVAL
                   4042: This insn copies the value of a library call, and @var{op} is the
                   4043: first insn that was generated to set up the arguments for the library
                   4044: call.
                   4045: 
                   4046: Flow analysis uses this note to delete all of a library call whose
                   4047: result is dead.
1.1       root     4048: 
                   4049: @item REG_WAS_0
1.1.1.2   root     4050: The register @var{op} contained zero before this insn.  You can rely
1.1       root     4051: on this note if it is present; its absence implies nothing.
                   4052: @end table
                   4053: 
                   4054: (The only difference between the expression codes @samp{insn_list} and
                   4055: @samp{expr_list} is that the first operand of an @samp{insn_list} is
                   4056: assumed to be an insn and is printed in debugging dumps as the insn's
                   4057: unique id; the first operand of an @samp{expr_list} is printed in the
                   4058: ordinary way as an expression.)
                   4059: 
1.1.1.2   root     4060: @node Calls, Sharing, Insns, RTL
                   4061: @section RTL Representation of Function-Call Insns
                   4062: 
                   4063: Insns that call subroutines have the RTL expression code @samp{call_insn}.
                   4064: These insns must satisfy special rules, and their bodies must use a special
                   4065: RTL expression code, @samp{call}.
                   4066: 
                   4067: A @samp{call} expression has two operands, as follows:
                   4068: 
                   4069: @example
                   4070: (call @var{nbytes} (mem:@var{fm} @var{addr}))
                   4071: @end example
                   4072: 
                   4073: @noindent
                   4074: Here @var{nbytes} is an operand that represents the number of bytes of
                   4075: argument data being passed to the subroutine, @var{fm} is a machine mode
                   4076: (which must equal as the definition of the @code{FUNCTION_MODE} macro in
                   4077: the machine description) and @var{addr} represents the address of the
                   4078: subroutine.
                   4079: 
                   4080: For a subroutine that returns no value, the @samp{call} RTX as shown above
                   4081: is the entire body of the insn.
                   4082: 
                   4083: For a subroutine that returns a value whose mode is not @code{BLKmode},
                   4084: the value is returned in a hard register.  If this register's number is
                   4085: @var{r}, then the body of the call insn looks like this:
                   4086: 
                   4087: @example
                   4088: (set (reg:@var{m} @var{r})
                   4089:      (call @var{nbytes} (mem:@var{fm} @var{addr})))
                   4090: @end example
                   4091: 
                   4092: @noindent
                   4093: This RTL expression makes it clear (to the optimizer passes) that the
                   4094: appropriate register receives a useful value in this insn.
                   4095: 
                   4096: Immediately after RTL generation, if the value of the subroutine is
                   4097: actually used, this call insn is always followed closely by an insn which
1.1.1.3   root     4098: refers to the register @var{r}.  This remains true through all the
                   4099: optimizer passes until cross jumping occurs.
                   4100: 
                   4101: The following insn has one of two forms.  Either it copies the value into a
                   4102: pseudo-register, like this:
1.1.1.2   root     4103: 
                   4104: @example
                   4105: (set (reg:@var{m} @var{p}) (reg:@var{m} @var{r}))
                   4106: @end example
                   4107: 
                   4108: @noindent
                   4109: or (in the case where the calling function will simply return whatever
                   4110: value the call produced, and no operation is needed to do this):
                   4111: 
                   4112: @example
                   4113: (use (reg:@var{m} @var{r}))
                   4114: @end example
                   4115: 
                   4116: @noindent
1.1.1.3   root     4117: Between the call insn and this following insn there may intervene only a
1.1.1.2   root     4118: stack-adjustment insn (and perhaps some @samp{note} insns).
                   4119: 
                   4120: When a subroutine returns a @code{BLKmode} value, it is handled by
                   4121: passing to the subroutine the address of a place to store the value.
                   4122: So the call insn itself does not ``return'' any value, and it has the
                   4123: same RTL form as a call that returns nothing.
                   4124: 
                   4125: @node Sharing,, Calls, RTL
1.1       root     4126: @section Structure Sharing Assumptions
                   4127: 
                   4128: The compiler assumes that certain kinds of RTL expressions are unique;
                   4129: there do not exist two distinct objects representing the same value.
                   4130: In other cases, it makes an opposite assumption: that no RTL expression
                   4131: object of a certain kind appears in more than one place in the
                   4132: containing structure.
                   4133: 
                   4134: These assumptions refer to a single function; except for the RTL
                   4135: objects that describe global variables and external functions,
                   4136: no RTL objects are common to two functions.
                   4137: 
                   4138: @itemize @bullet
                   4139: @item
                   4140: Each pseudo-register has only a single @samp{reg} object to represent it,
                   4141: and therefore only a single machine mode.
                   4142: 
                   4143: @item
                   4144: For any symbolic label, there is only one @samp{symbol_ref} object
                   4145: referring to it.
                   4146: 
                   4147: @item
                   4148: There is only one @samp{const_int} expression with value zero,
                   4149: and only one with value one.
                   4150: 
                   4151: @item
                   4152: There is only one @samp{pc} expression.
                   4153: 
                   4154: @item
                   4155: There is only one @samp{cc0} expression.
                   4156: 
                   4157: @item
                   4158: There is only one @samp{const_double} expression with mode
                   4159: @code{SFmode} and value zero, and only one with mode @code{DFmode} and
                   4160: value zero.
                   4161: 
                   4162: @item
1.1.1.2   root     4163: No @samp{label_ref} appears in more than one place in the RTL
                   4164: structure; in other words, it is safe to do a tree-walk of all the
                   4165: insns in the function and assume that each time a @samp{label_ref} is
                   4166: seen it is distinct from all others that are seen.
1.1       root     4167: 
                   4168: @item
1.1.1.2   root     4169: Only one @samp{mem} object is normally created for each static
                   4170: variable or stack slot, so these objects are frequently shared in all
                   4171: the places they appear.  However, separate but equal objects for these
                   4172: variables are occasionally made.
                   4173: 
                   4174: @item
                   4175: No RTL object appears in more than one place in the RTL structure
                   4176: except as described above.  Many passes of the compiler rely on this
                   4177: by assuming that they can modify RTL objects in place without unwanted
                   4178: side-effects on other insns.
                   4179: 
                   4180: @item
                   4181: During initial RTL generation, shared structure is freely introduced.
                   4182: After all the RTL for a function has been generated, all shared
                   4183: structure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c},
                   4184: after which the above rules are guaranteed to be followed.
                   4185: 
                   4186: @item
                   4187: During the combiner pass, shared structure with an insn can exist
                   4188: temporarily.  However, the shared structure is copied before the
                   4189: combiner is finished with the insn.  This is done by
                   4190: @code{copy_substitutions} in @samp{combine.c}.
1.1       root     4191: @end itemize
                   4192: 
                   4193: @node Machine Desc, Machine Macros, RTL, Top
                   4194: @chapter Machine Descriptions
                   4195: 
                   4196: A machine description has two parts: a file of instruction patterns
                   4197: (@file{.md} file) and a C header file of macro definitions.
                   4198: 
                   4199: The @file{.md} file for a target machine contains a pattern for each
                   4200: instruction that the target machine supports (or at least each instruction
                   4201: that is worth telling the compiler about).  It may also contain comments.
                   4202: A semicolon causes the rest of the line to be a comment, unless the semicolon
                   4203: is inside a quoted string.
                   4204: 
                   4205: See the next chapter for information on the C header file.
                   4206: 
                   4207: @menu
                   4208: * Patterns::            How to write instruction patterns.
1.1.1.2   root     4209: * Example::             An explained example of a @samp{define_insn} pattern.
                   4210: * RTL Template::        The RTL template defines what insns match a pattern.
                   4211: * Output Template::     The output template says how to make assembler code
                   4212:                           from such an insn.
                   4213: * Output Statement::    For more generality, write C code to output 
                   4214:                           the assembler code.
1.1       root     4215: * Constraints::         When not all operands are general operands.
                   4216: * Standard Names::      Names mark patterns to use for code generation.
1.1.1.2   root     4217: * Pattern Ordering::    When the order of patterns makes a difference.
1.1       root     4218: * Dependent Patterns::  Having one pattern may make you need another.
1.1.1.2   root     4219: * Jump Patterns::       Special considerations for patterns for jump insns.
                   4220: * Peephole Definitions::Defining machine-specific peephole optimizations.
                   4221: * Expander Definitions::Generating a sequence of several RTL insns
                   4222:                          for a standard operation.
1.1       root     4223: @end menu
                   4224: 
                   4225: @node Patterns, Example, Machine Desc, Machine Desc
1.1.1.2   root     4226: @section Everything about Instruction Patterns
1.1       root     4227: 
                   4228: Each instruction pattern contains an incomplete RTL expression, with pieces
                   4229: to be filled in later, operand constraints that restrict how the pieces can
                   4230: be filled in, and an output pattern or C code to generate the assembler
                   4231: output, all wrapped up in a @samp{define_insn} expression.
                   4232: 
1.1.1.2   root     4233: A @samp{define_insn} is an RTL expression containing four operands:
1.1       root     4234: 
                   4235: @enumerate
                   4236: @item
                   4237: An optional name.  The presence of a name indicate that this instruction
                   4238: pattern can perform a certain standard job for the RTL-generation
                   4239: pass of the compiler.  This pass knows certain names and will use
                   4240: the instruction patterns with those names, if the names are defined
                   4241: in the machine description.
                   4242: 
                   4243: The absence of a name is indicated by writing an empty string
                   4244: where the name should go.  Nameless instruction patterns are never
                   4245: used for generating RTL code, but they may permit several simpler insns
                   4246: to be combined later on.
                   4247: 
                   4248: Names that are not thus known and used in RTL-generation have no
                   4249: effect; they are equivalent to no name at all.
                   4250: 
                   4251: @item
1.1.1.2   root     4252: The @dfn{RTL template} (@pxref{RTL Template}) is a vector of
                   4253: incomplete RTL expressions which show what the instruction should look
                   4254: like.  It is incomplete because it may contain @samp{match_operand}
                   4255: and @samp{match_dup} expressions that stand for operands of the
1.1       root     4256: instruction.
                   4257: 
                   4258: If the vector has only one element, that element is what the
                   4259: instruction should look like.  If the vector has multiple elements,
                   4260: then the instruction looks like a @samp{parallel} expression
                   4261: containing that many elements as described.
                   4262: 
                   4263: @item
                   4264: A condition.  This is a string which contains a C expression that is
                   4265: the final test to decide whether an insn body matches this pattern.
                   4266: 
                   4267: For a named pattern, the condition (if present) may not depend on
                   4268: the data in the insn being matched, but only the target-machine-type
                   4269: flags.  The compiler needs to test these conditions during
                   4270: initialization in order to learn exactly which named instructions are
                   4271: available in a particular run.
                   4272: 
                   4273: For nameless patterns, the condition is applied only when matching an
                   4274: individual insn, and only after the insn has matched the pattern's
                   4275: recognition template.  The insn's operands may be found in the vector
                   4276: @code{operands}.
                   4277: 
                   4278: @item
1.1.1.2   root     4279: The @dfn{output template}: a string that says how to output matching
                   4280: insns as assembler code.  @samp{%} in this string specifies where
                   4281: to substitute the value of an operand.  @xref{Output Template}.
                   4282: 
                   4283: When simple substitution isn't general enough, you can specify a piece
                   4284: of C code to compute the output.  @xref{Output Statement}.
                   4285: @end enumerate
                   4286: 
                   4287: @node Example, RTL Template, Patterns, Machine Desc
                   4288: @section Example of @samp{define_insn}
                   4289: 
                   4290: Here is an actual example of an instruction pattern, for the 68000/68020.
                   4291: 
                   4292: @example
                   4293: (define_insn "tstsi"
                   4294:   [(set (cc0)
                   4295:         (match_operand:SI 0 "general_operand" "rm"))]
                   4296:   ""
                   4297:   "*
                   4298: @{ if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
                   4299:     return \"tstl %0\";
                   4300:   return \"cmpl #0,%0\"; @}")
                   4301: @end example
1.1       root     4302: 
1.1.1.2   root     4303: This is an instruction that sets the condition codes based on the value of
                   4304: a general operand.  It has no condition, so any insn whose RTL description
                   4305: has the form shown may be handled according to this pattern.  The name
                   4306: @samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL generation
                   4307: pass that, when it is necessary to test such a value, an insn to do so
                   4308: can be constructed using this pattern.
1.1       root     4309: 
1.1.1.2   root     4310: The output control string is a piece of C code which chooses which
                   4311: output template to return based on the kind of operand and the specific
                   4312: type of CPU for which code is being generated.
1.1       root     4313: 
1.1.1.2   root     4314: @samp{"rm"} is an operand constraint.  Its meaning is explained below.
1.1       root     4315: 
1.1.1.2   root     4316: @node RTL Template, Output Template, Example, Machine Desc
                   4317: @section RTL Template for Generating and Recognizing Insns
1.1       root     4318: 
1.1.1.2   root     4319: The RTL template is used to define which insns match the particular pattern
                   4320: and how to find their operands.  For named patterns, the RTL template also
                   4321: says how to construct an insn from specified operands.
                   4322: 
                   4323: Construction involves substituting specified operands into a copy of the
                   4324: template.  Matching involves determining the values that serve as the
                   4325: operands in the insn being matched.  Both of these activities are
                   4326: controlled by special expression types that direct matching and
                   4327: substitution of the operands.
1.1       root     4328: 
                   4329: @table @code
                   4330: @item (match_operand:@var{m} @var{n} @var{testfn} @var{constraint})
                   4331: This expression is a placeholder for operand number @var{n} of
                   4332: the insn.  When constructing an insn, operand number @var{n}
                   4333: will be substituted at this point.  When matching an insn, whatever
                   4334: appears at this position in the insn will be taken as operand
                   4335: number @var{n}; but it must satisfy @var{testfn} or this instruction
                   4336: pattern will not match at all.
                   4337: 
                   4338: Operand numbers must be chosen consecutively counting from zero in
                   4339: each instruction pattern.  There may be only one @samp{match_operand}
1.1.1.7 ! root     4340: expression in the pattern for each operand number.  Usually operands
        !          4341: are numbered in the order of appearance in @samp{match_operand}
        !          4342: expressions.
1.1       root     4343: 
                   4344: @var{testfn} is a string that is the name of a C function that accepts
                   4345: two arguments, a machine mode and an expression.  During matching,
                   4346: the function will be called with @var{m} as the mode argument
                   4347: and the putative operand as the other argument.  If it returns zero,
                   4348: this instruction pattern fails to match.  @var{testfn} may be
                   4349: an empty string; then it means no test is to be done on the operand.
                   4350: 
                   4351: Most often, @var{testfn} is @code{"general_operand"}.  It checks
                   4352: that the putative operand is either a constant, a register or a
                   4353: memory reference, and that it is valid for mode @var{m}.
                   4354: 
1.1.1.2   root     4355: For an operand that must be a register, @var{testfn} should be
                   4356: @code{"register_operand"}.  This prevents GNU CC from creating insns
                   4357: that have memory references in these operands, insns which would only
                   4358: have to be taken apart in the reload pass.
                   4359: 
                   4360: For an operand that must be a constant, either @var{testfn} should be
                   4361: @code{"immediate_operand"}, or the instruction pattern's extra condition
                   4362: should check for constants, or both.
                   4363: 
                   4364: @var{constraint} is explained later (@pxref{Constraints}).
1.1       root     4365: 
                   4366: @item (match_dup @var{n})
                   4367: This expression is also a placeholder for operand number @var{n}.
                   4368: It is used when the operand needs to appear more than once in the
                   4369: insn.
                   4370: 
                   4371: In construction, @samp{match_dup} behaves exactly like
1.1.1.2   root     4372: @samp{match_operand}: the operand is substituted into the insn being
1.1       root     4373: constructed.  But in matching, @samp{match_dup} behaves differently.
                   4374: It assumes that operand number @var{n} has already been determined by
1.1.1.2   root     4375: a @samp{match_operand} appearing earlier in the recognition template,
1.1       root     4376: and it matches only an identical-looking expression.
                   4377: 
                   4378: @item (address (match_operand:@var{m} @var{n} "address_operand" ""))
                   4379: This complex of expressions is a placeholder for an operand number
                   4380: @var{n} in a ``load address'' instruction: an operand which specifies
                   4381: a memory location in the usual way, but for which the actual operand
                   4382: value used is the address of the location, not the contents of the
                   4383: location.
                   4384: 
                   4385: @samp{address} expressions never appear in RTL code, only in machine
                   4386: descriptions.  And they are used only in machine descriptions that do
                   4387: not use the operand constraint feature.  When operand constraints are
                   4388: in use, the letter @samp{p} in the constraint serves this purpose.
                   4389: 
                   4390: @var{m} is the machine mode of the @emph{memory location being
                   4391: addressed}, not the machine mode of the address itself.  That mode is
                   4392: always the same on a given target machine (it is @code{Pmode}, which
                   4393: normally is @code{SImode}), so there is no point in mentioning it;
                   4394: thus, no machine mode is written in the @samp{address} expression.  If
                   4395: some day support is added for machines in which addresses of different
                   4396: kinds of objects appear differently or are used differently (such as
                   4397: the PDP-10), different formats would perhaps need different machine
                   4398: modes and these modes might be written in the @samp{address}
                   4399: expression.
                   4400: @end table
                   4401: 
1.1.1.2   root     4402: @node Output Template, Output Statement, RTL Template, Machine Desc
                   4403: @section Output Templates and Operand Substitution
1.1       root     4404: 
1.1.1.2   root     4405: The @dfn{output template} is a string which specifies how to output
                   4406: the assembler code for an instruction pattern.  Most of the template
                   4407: is a fixed string which is output literally.  The character @samp{%}
                   4408: is used to specify where to substitute an operand; it can also be
                   4409: used to identify places different variants of the assembler require
                   4410: different syntax.
                   4411: 
                   4412: In the simplest case, a @samp{%} followed by a digit @var{n} says to output
                   4413: operand @var{n} at that point in the string.
                   4414: 
                   4415: @samp{%} followed by a letter and a digit says to output an operand in an
                   4416: alternate fashion.  Four letters have standard, built-in meanings described
                   4417: below.  The machine description macro @code{PRINT_OPERAND} can define
                   4418: additional letters with nonstandard meanings.
                   4419: 
                   4420: @samp{%c@var{digit}} can be used to substitute an operand that is a
                   4421: constant value without the syntax that normally indicates an immediate
                   4422: operand.
                   4423: 
                   4424: @samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of
                   4425: the constant is negated before printing.
                   4426: 
                   4427: @samp{%a@var{digit}} can be used to substitute an operand as if it were a
                   4428: memory reference, with the actual operand treated as the address.  This may
                   4429: be useful when outputting a ``load address'' instruction, because often the
                   4430: assembler syntax for such an instruction requires you to write the operand
                   4431: as if it were a memory reference.
                   4432: 
                   4433: @samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump
                   4434: instruction.
                   4435: 
                   4436: @samp{%} followed by a punctuation character specifies a substitution that
                   4437: does not use an operand.  Only one case is standard: @samp{%%} outputs a
                   4438: @samp{%} into the assembler code.  Other nonstandard cases can be
                   4439: defined in the @code{PRINT_OPERAND} macro.
                   4440: 
                   4441: The template may generate multiple assembler instructions.  Write the text
                   4442: for the instructions, with @samp{\;} between them.
                   4443: 
                   4444: When the RTL contains two operand which are required by constraint to match
                   4445: each other, the output template must refer only to the lower-numbered operand.
                   4446: Matching operands are not always identical, and the rest of the compiler
                   4447: arranges to put the proper RTL expression for printing into the lower-numbered
                   4448: operand.
                   4449: 
                   4450: One use of nonstandard letters or punctuation following @samp{%} is to
                   4451: distinguish between different assembler languages for the same machine; for
                   4452: example, Motorola syntax versus MIT syntax for the 68000.  Motorola syntax
                   4453: requires periods in most opcode names, while MIT syntax does not.  For
                   4454: example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola
                   4455: syntax.  The same file of patterns is used for both kinds of output syntax,
                   4456: but the character sequence @samp{%.} is used in each place where Motorola
                   4457: syntax wants a period.  The @code{PRINT_OPERAND} macro for Motorola syntax
                   4458: defines the sequence to output a period; the macro for MIT syntax defines
                   4459: it to do nothing.
                   4460: 
                   4461: @node Output Statement, Constraints, Output Template, Machine Desc
                   4462: @section C Statements for Generating Assembler Output
                   4463: 
                   4464: Often a single fixed template string cannot produce correct and efficient
                   4465: assembler code for all the cases that are recognized by a single
                   4466: instruction pattern.  For example, the opcodes may depend on the kinds of
                   4467: operands; or some unfortunate combinations of operands may require extra
                   4468: machine instructions.
                   4469: 
                   4470: If the output control string starts with a @samp{*}, then it is not an
                   4471: output template but rather a piece of C program that should compute a
                   4472: template.  It should execute a @code{return} statement to return the
                   4473: template-string you want.  Most such templates use C string literals, which
                   4474: require doublequote characters to delimit them.  To include these
                   4475: doublequote characters in the string, prefix each one with @samp{\}.
                   4476: 
                   4477: The operands may be found in the array @code{operands}, whose C data type
                   4478: is @code{rtx []}.
                   4479: 
                   4480: It is possible to output an assembler instruction and then go on to output
                   4481: or compute more of them, using the subroutine @code{output_asm_insn}.  This
                   4482: receives two arguments: a template-string and a vector of operands.  The
                   4483: vector may be @code{operands}, or it may be another array of @code{rtx}
                   4484: that you declare locally and initialize yourself.
                   4485: 
                   4486: When an insn pattern has multiple alternatives in its constraints, often
                   4487: the appearance of the assembler code determined mostly by which alternative
                   4488: was matched.  When this is so, the C code can test the variable
                   4489: @code{which_alternative}, which is the ordinal number of the alternative
                   4490: that was actually satisfied (0 for the first, 1 for the second alternative,
                   4491: etc.).
                   4492: 
                   4493: For example, suppose there are two opcodes for storing zero, @samp{clrreg}
                   4494: for registers and @samp{clrmem} for memory locations.  Here is how
                   4495: a pattern could use @code{which_alternative} to choose between them:
1.1       root     4496: 
                   4497: @example
1.1.1.2   root     4498: (define_insn ""
                   4499:   [(set (match_operand:SI 0 "general_operand" "r,m")
                   4500:         (const_int 0))]
1.1       root     4501:   ""
                   4502:   "*
1.1.1.2   root     4503:   return (which_alternative == 0
                   4504:           ? \"clrreg %0\" : \"clrmem %0\");
                   4505:   ")
1.1       root     4506: @end example
                   4507: 
1.1.1.2   root     4508: @node Constraints, Standard Names, Output Statement, Machine Desc
1.1       root     4509: @section Operand Constraints
                   4510: 
                   4511: Each @samp{match_operand} in an instruction pattern can specify a
                   4512: constraint for the type of operands allowed.  Constraints can say whether
                   4513: an operand may be in a register, and which kinds of register; whether the
                   4514: operand can be a memory reference, and which kinds of address; whether the
                   4515: operand may be an immediate constant, and which possible values it may
                   4516: have.  Constraints can also require two operands to match.
                   4517: 
                   4518: @menu
                   4519: * Simple Constraints::  Basic use of constraints.
1.1.1.2   root     4520: * Multi-Alternative::   When an insn has two alternative constraint-patterns.
1.1       root     4521: * Class Preferences::   Constraints guide which hard register to put things in.
                   4522: * Modifiers::           More precise control over effects of constraints.
                   4523: * No Constraints::      Describing a clean machine without constraints.
                   4524: @end menu
                   4525: 
                   4526: @node Simple Constraints, Multi-Alternative, Constraints, Constraints
                   4527: @subsection Simple Constraints
                   4528: 
                   4529: The simplest kind of constraint is a string full of letters, each of
                   4530: which describes one kind of operand that is permitted.  Here are
                   4531: the letters that are allowed:
                   4532: 
1.1.1.2   root     4533: @table @asis
                   4534: @item @samp{m}
1.1       root     4535: A memory operand is allowed, with any kind of address that the machine
                   4536: supports in general.
                   4537: 
1.1.1.2   root     4538: @item @samp{o}
                   4539: A memory operand is allowed, but only if the address is
                   4540: @dfn{offsetable}.  This means that adding a small integer (actually,
                   4541: the width in bytes of the operand, as determined by its machine mode)
                   4542: may be added to the address and the result is also a valid memory
                   4543: address.
                   4544: 
                   4545: For example, an address which is constant is offsetable; so is an
                   4546: address that is the sum of a register and a constant (as long as a
                   4547: slightly larger constant is also within the range of address-offsets
                   4548: supported by the machine); but an autoincrement or autodecrement
                   4549: address is not offsetable.  More complicated indirect/indexed
                   4550: addresses may or may not be offsetable depending on the other
                   4551: addressing modes that the machine supports.
                   4552: 
                   4553: Note that in an output operand which can be matched by another
                   4554: operand, the constraint letter @samp{o} is valid only when accompanied
                   4555: by both @samp{<} (if the target machine has predecrement addressing)
                   4556: and @samp{>} (if the target machine has preincrement addressing).
1.1       root     4557: 
1.1.1.2   root     4558: @item @samp{<}
1.1       root     4559: A memory operand with autodecrement addressing (either predecrement or
                   4560: postdecrement) is allowed.
                   4561: 
1.1.1.2   root     4562: @item @samp{>}
1.1       root     4563: A memory operand with autoincrement addressing (either preincrement or
                   4564: postincrement) is allowed.
                   4565: 
1.1.1.2   root     4566: @item @samp{r}
                   4567: A register operand is allowed provided that it is in a general
                   4568: register.
1.1       root     4569: 
1.1.1.2   root     4570: @item @samp{d}, @samp{a}, @samp{f}, @dots{}
1.1       root     4571: Other letters can be defined in machine-dependent fashion to stand for
                   4572: particular classes of registers.  @samp{d}, @samp{a} and @samp{f} are
1.1.1.2   root     4573: defined on the 68000/68020 to stand for data, address and floating
                   4574: point registers.
1.1       root     4575: 
1.1.1.2   root     4576: @item @samp{i}
1.1       root     4577: An immediate integer operand (one with constant value) is allowed.
1.1.1.2   root     4578: This includes symbolic constants whose values will be known only at
                   4579: assembly time.
1.1       root     4580: 
1.1.1.2   root     4581: @item @samp{n}
                   4582: An immediate integer operand with a known numeric value is allowed.
                   4583: Many systems cannot support assembly-time constants for operands less
                   4584: than a word wide.  Constraints for these operands should use @samp{n}
                   4585: rather than @samp{i}.
                   4586: 
                   4587: @item @samp{I}, @samp{J}, @samp{K}, @dots{}
                   4588: Other letters in the range @samp{I} through @samp{M} may be defined in
                   4589: a machine-dependent fashion to permit immediate integer operands with
                   4590: explicit integer values in specified ranges.  For example, on the
                   4591: 68000, @samp{I} is defined to stand for the range of values 1 to 8.
                   4592: This is the range permitted as a shift count in the shift
                   4593: instructions.
1.1       root     4594: 
1.1.1.2   root     4595: @item @samp{F}
1.1       root     4596: An immediate floating operand (expression code @samp{const_double}) is
                   4597: allowed.
                   4598: 
1.1.1.2   root     4599: @item @samp{G}, @samp{H}
1.1       root     4600: @samp{G} and @samp{H} may be defined in a machine-dependent fashion to
                   4601: permit immediate floating operands in particular ranges of values.
                   4602: 
1.1.1.2   root     4603: @item @samp{s}
1.1       root     4604: An immediate integer operand whose value is not an explicit integer is
1.1.1.2   root     4605: allowed.
                   4606: 
                   4607: This might appear strange; if an insn allows a constant operand with a
                   4608: value not known at compile time, it certainly must allow any known
1.1       root     4609: value.  So why use @samp{s} instead of @samp{i}?  Sometimes it allows
1.1.1.2   root     4610: better code to be generated.
                   4611: 
                   4612: For example, on the 68000 in a fullword instruction it is possible to
                   4613: use an immediate operand; but if the immediate value is between -32
                   4614: and 31, better code results from loading the value into a register and
                   4615: using the register.  This is because the load into the register can be
                   4616: done with a @samp{moveq} instruction.  We arrange for this to happen
                   4617: by defining the letter @samp{K} to mean ``any integer outside the
                   4618: range -32 to 31'', and then specifying @samp{Ks} in the operand
1.1       root     4619: constraints.
                   4620: 
1.1.1.2   root     4621: @item @samp{g}
1.1       root     4622: Any register, memory or immediate integer operand is allowed, except for
                   4623: registers that are not general registers.
                   4624: 
1.1.1.2   root     4625: @item @samp{@var{n}} (a digit)
                   4626: An operand that matches operand number @var{n} is allowed.
1.1       root     4627: If a digit is used together with letters, the digit should come last.
                   4628: 
1.1.1.2   root     4629: This is called a @dfn{matching constraint} and what it really means is
                   4630: that the assembler has only a single operand that fills two roles
                   4631: considered separate in the RTL insn.  For example, an add insn has two
                   4632: input operands and one output operand in the RTL, but on most machines
                   4633: an add instruction really has only two operands, one of them an
                   4634: input-output operand.
                   4635: 
                   4636: Matching constraints work only in circumstances like that add insn.
                   4637: More precisely, the matching constraint must appear in an input-only
                   4638: operand and the operand that it matches must be an output-only operand
                   4639: with a lower number.
                   4640: 
                   4641: For operands to match in a particular case usually means that they
                   4642: are identical-looking RTL expressions.  But in a few special cases
                   4643: specific kinds of dissimilarity are allowed.  For example, @code{*x}
                   4644: as an input operand will match @code{*x++} as an output operand.
                   4645: For proper results in such cases, the output template should always
                   4646: use the output-operand's number when printing the operand.
                   4647: 
                   4648: @item @samp{p}
1.1       root     4649: An operand that is a valid memory address is allowed.  This is
                   4650: for ``load address'' and ``push address'' instructions.
                   4651: 
                   4652: If @samp{p} is used in the constraint, the test-function in the
                   4653: @samp{match_operand} must be @code{address_operand}.
                   4654: @end table
                   4655: 
                   4656: In order to have valid assembler code, each operand must satisfy
                   4657: its constraint.  But a failure to do so does not prevent the pattern
                   4658: from applying to an insn.  Instead, it directs the compiler to modify
1.1.1.2   root     4659: the code so that the constraint will be satisfied.  Usually this is
1.1       root     4660: done by copying an operand into a register.
                   4661: 
                   4662: Contrast, therefore, the two instruction patterns that follow:
                   4663: 
                   4664: @example
                   4665: (define_insn ""
                   4666:   [(set (match_operand:SI 0 "general_operand" "r")
                   4667:         (plus:SI (match_dup 0)
                   4668:                  (match_operand:SI 1 "general_operand" "r")))]
                   4669:   ""
                   4670:   "@dots{}")
                   4671: @end example
                   4672: 
                   4673: @noindent
                   4674: which has two operands, one of which must appear in two places, and
                   4675: 
                   4676: @example
                   4677: (define_insn ""
                   4678:   [(set (match_operand:SI 0 "general_operand" "r")
                   4679:         (plus:SI (match_operand:SI 1 "general_operand" "0")
                   4680:                  (match_operand:SI 2 "general_operand" "r")))]
                   4681:   ""
                   4682:   "@dots{}")
                   4683: @end example
                   4684: 
                   4685: @noindent
                   4686: which has three operands, two of which are required by a constraint to be
                   4687: identical.  If we are considering an insn of the form
                   4688: 
                   4689: @example
                   4690: (insn @var{n} @var{prev} @var{next}
                   4691:   (set (reg:SI 3)
                   4692:        (plus:SI (reg:SI 6) (reg:SI 109)))
                   4693:   @dots{})
                   4694: @end example
                   4695: 
                   4696: @noindent
                   4697: the first pattern would not apply at all, because this insn does not
                   4698: contain two identical subexpressions in the right place.  The pattern would
                   4699: say, ``That does not look like an add instruction; try other patterns.''
                   4700: The second pattern would say, ``Yes, that's an add instruction, but there
                   4701: is something wrong with it.''  It would direct the reload pass of the
                   4702: compiler to generate additional insns to make the constraint true.  The
                   4703: results might look like this:
                   4704: 
                   4705: @example
                   4706: (insn @var{n2} @var{prev} @var{n}
                   4707:   (set (reg:SI 3) (reg:SI 6))
                   4708:   @dots{})
                   4709: 
                   4710: (insn @var{n} @var{n2} @var{next}
                   4711:   (set (reg:SI 3)
                   4712:        (plus:SI (reg:SI 3) (reg:SI 109)))
                   4713:   @dots{})
                   4714: @end example
                   4715: 
                   4716: Because insns that don't fit the constraints are fixed up by loading
                   4717: operands into registers, every instruction pattern's constraints must
                   4718: permit the case where all the operands are in registers.  It need not
                   4719: permit all classes of registers; the compiler knows how to copy registers
                   4720: into other registers of the proper class in order to make an instruction
                   4721: valid.  But if no registers are permitted, the compiler will be stymied: it
                   4722: does not know how to save a register in memory in order to make an
                   4723: instruction valid.  Instruction patterns that reject registers can be
                   4724: made valid by attaching a condition-expression that refuses to match
                   4725: an insn at all if the crucial operand is a register.
                   4726: 
                   4727: @node Multi-Alternative, Class Preferences, Simple Constraints, Constraints
                   4728: @subsection Multiple Alternative Constraints
                   4729: 
                   4730: Sometimes a single instruction has multiple alternative sets of possible
                   4731: operands.  For example, on the 68000, a logical-or instruction can combine
                   4732: register or an immediate value into memory, or it can combine any kind of
                   4733: operand into a register; but it cannot combine one memory location into
                   4734: another.
                   4735: 
                   4736: These constraints are represented as multiple alternatives.  An alternative
                   4737: can be described by a series of letters for each operand.  The overall
                   4738: constraint for an operand is made from the letters for this operand
                   4739: from the first alternative, a comma, the letters for this operand from
                   4740: the second alternative, a comma, and so on until the last alternative.
                   4741: Here is how it is done for fullword logical-or on the 68000:
                   4742: 
                   4743: @example
                   4744: (define_insn "iorsi3"
                   4745:   [(set (match_operand:SI 0 "general_operand" "=%m,d")
1.1.1.2   root     4746:         (ior:SI (match_operand:SI 1 "general_operand" "0,0")
                   4747:                 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1.1       root     4748:   @dots{})
                   4749: @end example
                   4750: 
                   4751: The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
                   4752: operand 1 (meaning it must match operand 0), and @samp{dKs} for operand 2.
                   4753: The second alternative has @samp{d} (data register) for operand 0, @samp{0}
                   4754: for operand 1, and @samp{dmKs} for operand 2.  The @samp{=} and @samp{%} in
                   4755: the constraint for operand 0 are not part of any alternative; their meaning
                   4756: is explained in the next section.
                   4757: 
                   4758: If all the operands fit any one alternative, the instruction is valid.
                   4759: Otherwise, for each alternative, the compiler counts how many instructions
                   4760: must be added to copy the operands so that that alternative applies.
                   4761: The alternative requiring the least copying is chosen.  If two alternatives
                   4762: need the same amount of copying, the one that comes first is chosen.
                   4763: These choices can be altered with the @samp{?} and @samp{!} characters:
                   4764: 
                   4765: @table @samp
                   4766: @item ?
                   4767: Disparage slightly the alternative that the @samp{?} appears in,
                   4768: as a choice when no alternative applies exactly.  The compiler regards
                   4769: this alternative as one unit more costly for each @samp{?} that appears
                   4770: in it.
                   4771: 
                   4772: @item !
                   4773: Disparage severely the alternative that the @samp{!} appears in.
                   4774: When operands must be copied into registers, the compiler will
                   4775: never choose this alternative as the one to strive for.
                   4776: @end table
                   4777: 
1.1.1.2   root     4778: When an insn pattern has multiple alternatives in its constraints,
                   4779: often the appearance of the assembler code determined mostly by which
                   4780: alternative was matched.  When this is so, the C code for writing the
                   4781: assembler code can use the variable @code{which_alternative}, which is
                   4782: the ordinal number of the alternative that was actually satisfied
                   4783: (0 for the first, 1 for the second alternative, etc.).  For example:
                   4784: 
                   4785: @example
                   4786: (define_insn ""
                   4787:   [(set (match_operand:SI 0 "general_operand" "r,m")
                   4788:         (const_int 0))]
                   4789:   ""
                   4790:   "*
                   4791:   return (which_alternative == 0
                   4792:           ? \"clrreg %0\" : \"clrmem %0\");
                   4793:   ")
                   4794: @end example
                   4795: 
1.1       root     4796: @node Class Preferences, Modifiers, Multi-Alternative, Constraints
                   4797: @subsection Register Class Preferences
                   4798: 
                   4799: The operand constraints have another function: they enable the compiler
                   4800: to decide which kind of hardware register a pseudo register is best
                   4801: allocated to.  The compiler examines the constraints that apply to the
                   4802: insns that use the pseudo register, looking for the machine-dependent
                   4803: letters such as @samp{d} and @samp{a} that specify classes of registers.
                   4804: The pseudo register is put in whichever class gets the most ``votes''.
                   4805: The constraint letters @samp{g} and @samp{r} also vote: they vote in
                   4806: favor of a general register.  The machine description says which registers
                   4807: are considered general.
                   4808: 
                   4809: Of course, on some machines all registers are equivalent, and no register
                   4810: classes are defined.  Then none of this complexity is relevant.
                   4811: 
                   4812: @node Modifiers, No Constraints, Class Preferences, Constraints
                   4813: @subsection Constraint Modifier Characters
                   4814: 
                   4815: @table @samp
                   4816: @item =
1.1.1.2   root     4817: Means that this operand is write-only for this instruction: the previous
                   4818: value is discarded and replaced by output data.
1.1       root     4819: 
                   4820: @item +
                   4821: Means that this operand is both read and written by the instruction.
                   4822: 
                   4823: When the compiler fixes up the operands to satisfy the constraints,
                   4824: it needs to know which operands are inputs to the instruction and
                   4825: which are outputs from it.  @samp{=} identifies an output; @samp{+}
                   4826: identifies an operand that is both input and output; all other operands
                   4827: are assumed to be input only.
                   4828: 
1.1.1.2   root     4829: @item &
                   4830: Means (in a particular alternative) that this operand is written
                   4831: before the instruction is finished using the input operands.
                   4832: Therefore, this operand may not lie in a register that is used as an
                   4833: input operand or as part of any memory address.
                   4834: 
                   4835: @samp{&} applies only to the alternative in which it is written.  In
                   4836: constraints with multiple alternatives, sometimes one alternative
                   4837: requires @samp{&} while others do not.  See, for example, the
                   4838: @samp{movdf} insn of the 68000.
                   4839: 
                   4840: @samp{&} does not obviate the need to write @samp{=}.
                   4841: 
1.1       root     4842: @item %
1.1.1.2   root     4843: Declares the instruction to be commutative for this operand and the
                   4844: following operand.  This means that the compiler may interchange the
                   4845: two operands if that is the cheapest way to make all operands fit the
                   4846: constraints.  This is often used in patterns for addition instructions
                   4847: that really have only two operands: the result must go in one of the
                   4848: arguments.  Here for example, is how the 68000 halfword-add
                   4849: instruction is defined:
                   4850: 
                   4851: @example
                   4852: (define_insn "addhi3"
                   4853:   [(set (match_operand:HI 0 "general_operand" "=m,r")
                   4854:      (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                   4855:               (match_operand:HI 2 "general_operand" "di,g")))]
                   4856:   @dots{})
                   4857: @end example
                   4858: 
                   4859: Note that in previous versions of GNU CC the @samp{%} constraint
                   4860: modifier always applied to operands 1 and 2 regardless of which
                   4861: operand it was written in.  The usual custom was to write it in
                   4862: operand 0.  Now it must be in operand 1 if the operands to be
                   4863: exchanged are 1 and 2.
1.1       root     4864: 
                   4865: @item #
1.1.1.2   root     4866: Says that all following characters, up to the next comma, are to be
                   4867: ignored as a constraint.  They are significant only for choosing
                   4868: register preferences.
1.1       root     4869: 
                   4870: @item *
                   4871: Says that the following character should be ignored when choosing
1.1.1.2   root     4872: register preferences.  @samp{*} has no effect on the meaning of the
                   4873: constraint as a constraint.
                   4874: 
                   4875: Here is an example: the 68000 has an instruction to sign-extend a
                   4876: halfword in a data register, and can also sign-extend a value by
                   4877: copying it into an address register.  While either kind of register is
                   4878: acceptable, the constraints on an address-register destination are
                   4879: less strict, so it is best if register allocation makes an address
                   4880: register its goal.  Therefore, @samp{*} is used so that the @samp{d}
                   4881: constraint letter (for data register) is ignored when computing
                   4882: register preferences.
                   4883: 
                   4884: @example
                   4885: (define_insn "extendhisi2"
                   4886:   [(set (match_operand:SI 0 "general_operand" "=*d,a")
                   4887:         (sign_extend:SI
                   4888:          (match_operand:HI 1 "general_operand" "0,g")))]
                   4889:   @dots{})
                   4890: @end example
1.1       root     4891: @end table
                   4892: 
                   4893: @node No Constraints,, Modifiers, Constraints
                   4894: @subsection Not Using Constraints
                   4895: 
                   4896: Some machines are so clean that operand constraints are not required.  For
                   4897: example, on the Vax, an operand valid in one context is valid in any other
1.1.1.2   root     4898: context.  On such a machine, every operand constraint would be @samp{g},
1.1       root     4899: excepting only operands of ``load address'' instructions which are
                   4900: written as if they referred to a memory location's contents but actual
1.1.1.2   root     4901: refer to its address.  They would have constraint @samp{p}.
1.1       root     4902: 
1.1.1.2   root     4903: For such machines, instead of writing @samp{g} and @samp{p} for all
1.1       root     4904: the constraints, you can choose to write a description with empty constraints.
                   4905: Then you write @samp{""} for the constraint in every @samp{match_operand}.
                   4906: Address operands are identified by writing an @samp{address} expression
                   4907: around the @samp{match_operand}, not by their constraints.
                   4908: 
                   4909: When the machine description has just empty constraints, certain parts
                   4910: of compilation are skipped, making the compiler faster.
                   4911: 
1.1.1.2   root     4912: @node Standard Names, Pattern Ordering, Constraints, Machine Desc
                   4913: @section Standard Names for Patterns Used in Generation
1.1       root     4914: 
                   4915: Here is a table of the instruction names that are meaningful in the RTL
                   4916: generation pass of the compiler.  Giving one of these names to an
                   4917: instruction pattern tells the RTL generation pass that it can use the
                   4918: pattern in to accomplish a certain task.
                   4919: 
1.1.1.2   root     4920: @table @asis
                   4921: @item @samp{mov@var{m}}
1.1       root     4922: Here @var{m} is a two-letter machine mode name, in lower case.  This
                   4923: instruction pattern moves data with that machine mode from operand 1 to
                   4924: operand 0.  For example, @samp{movsi} moves full-word data.
                   4925: 
                   4926: If operand 0 is a @samp{subreg} with mode @var{m} of a register whose
                   4927: natural mode is wider than @var{m}, the effect of this instruction is
                   4928: to store the specified value in the part of the register that corresponds
                   4929: to mode @var{m}.  The effect on the rest of the register is undefined.
                   4930: 
1.1.1.3   root     4931: This class of patterns is special in several ways.  First of all, each
                   4932: of these names @emph{must} be defined, because there is no other way
                   4933: to copy a datum from one place to another.
                   4934: 
                   4935: Second, these patterns are not used solely in the RTL generation pass.
                   4936: Even the reload pass can generate move insns to copy values from stack
                   4937: slots into temporary registers.  When it does so, one of the operands
                   4938: is a hard register and the other is an operand that can have a reload.
                   4939: 
                   4940: Therefore, when given such a pair of operands, the pattern must
                   4941: generate RTL which needs no temporary registers---no registers other
                   4942: than the operands.  For example, if you support the pattern with a
                   4943: @code{define_expand}, then in such a case you mustn't call
                   4944: @code{force_reg} or any other such function which might generate new
                   4945: pseudo registers.
                   4946: 
                   4947: This requirement exists even for subword modes on a RISC machine where
                   4948: fetching those modes from memory normally requires several insns and
                   4949: some temporary registers.  Look in @file{spur.md} to see how the
                   4950: requirement is satisfied.
                   4951: 
                   4952: The variety of operands that have reloads depends on the rest of the
                   4953: machine description, but typically on a RISC machine these can only be
                   4954: pseudo registers that did not get hard registers, while on other
                   4955: machines explicit memory references will get optional reloads.
                   4956: 
1.1.1.7 ! root     4957: In addition, the constraints must allow any hard register to be moved
        !          4958: to any other hard register (provided that @code{HARD_REGNO_MODE_OK}
        !          4959: permits mode @var{m} in each of the registers).
        !          4960: 
1.1.1.2   root     4961: @item @samp{movstrict@var{m}}
1.1       root     4962: Like @samp{mov@var{m}} except that if operand 0 is a @samp{subreg}
                   4963: with mode @var{m} of a register whose natural mode is wider,
                   4964: the @samp{movstrict@var{m}} instruction is guaranteed not to alter
                   4965: any of the register except the part which belongs to mode @var{m}.
                   4966: 
1.1.1.2   root     4967: @item @samp{add@var{m}3}
1.1       root     4968: Add operand 2 and operand 1, storing the result in operand 0.  All operands
                   4969: must have mode @var{m}.  This can be used even on two-address machines, by
                   4970: means of constraints requiring operands 1 and 0 to be the same location.
                   4971: 
1.1.1.2   root     4972: @item @samp{sub@var{m}3}, @samp{mul@var{m}3}, @samp{umul@var{m}3}, @samp{div@var{m}3}, @samp{udiv@var{m}3}, @samp{mod@var{m}3}, @samp{umod@var{m}3}, @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
1.1       root     4973: Similar, for other arithmetic operations.
                   4974: 
1.1.1.2   root     4975: @item @samp{andcb@var{m}3}
1.1       root     4976: Bitwise logical-and operand 1 with the complement of operand 2
                   4977: and store the result in operand 0.
                   4978: 
1.1.1.2   root     4979: @item @samp{mulhisi3}
1.1       root     4980: Multiply operands 1 and 2, which have mode @code{HImode}, and store
                   4981: a @code{SImode} product in operand 0.
                   4982: 
1.1.1.2   root     4983: @item @samp{mulqihi3}, @samp{mulsidi3}
1.1       root     4984: Similar widening-multiplication instructions of other widths.
                   4985: 
1.1.1.2   root     4986: @item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
1.1       root     4987: Similar widening-multiplication instructions that do unsigned
                   4988: multiplication.
                   4989: 
1.1.1.2   root     4990: @item @samp{divmod@var{m}4}
1.1       root     4991: Signed division that produces both a quotient and a remainder.
                   4992: Operand 1 is divided by operand 2 to produce a quotient stored
                   4993: in operand 0 and a remainder stored in operand 3.
                   4994: 
1.1.1.2   root     4995: @item @samp{udivmod@var{m}4}
1.1       root     4996: Similar, but does unsigned division.
                   4997: 
1.1.1.2   root     4998: @item @samp{divmod@var{m}@var{n}4}
1.1       root     4999: Like @samp{divmod@var{m}4} except that only the dividend has mode
                   5000: @var{m}; the divisor, quotient and remainder have mode @var{n}.
                   5001: For example, the Vax has a @samp{divmoddisi4} instruction
                   5002: (but it is omitted from the machine description, because it
                   5003: is so slow that it is faster to compute remainders by the
                   5004: circumlocution that the compiler will use if this instruction is
                   5005: not available).
                   5006: 
1.1.1.2   root     5007: @item @samp{ashl@var{m}3}
1.1       root     5008: Arithmetic-shift operand 1 left by a number of bits specified by
                   5009: operand 2, and store the result in operand 0.  Operand 2 has
                   5010: mode @code{SImode}, not mode @var{m}.
                   5011: 
1.1.1.2   root     5012: @item @samp{ashr@var{m}3}, @samp{lshl@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
1.1       root     5013: Other shift and rotate instructions.
                   5014: 
1.1.1.2   root     5015: Logical and arithmetic left shift are the same.  Machines that do not
                   5016: allow negative shift counts often have only one instruction for
                   5017: shifting left.  On such machines, you should define a pattern named
                   5018: @samp{ashl@var{m}3} and leave @samp{lshl@var{m}3} undefined.
                   5019: 
                   5020: @item @samp{neg@var{m}2}
1.1       root     5021: Negate operand 1 and store the result in operand 0.
                   5022: 
1.1.1.2   root     5023: @item @samp{abs@var{m}2}
1.1       root     5024: Store the absolute value of operand 1 into operand 0.
                   5025: 
1.1.1.2   root     5026: @item @samp{sqrt@var{m}2}
1.1       root     5027: Store the square root of operand 1 into operand 0.
                   5028: 
1.1.1.2   root     5029: @item @samp{ffs@var{m}2}
                   5030: Store into operand 0 one plus the index of the least significant 1-bit
                   5031: of operand 1.  If operand 1 is zero, store zero.  @var{m} is the mode
                   5032: of operand 0; operand 1's mode is specified by the instruction
                   5033: pattern, and the compiler will convert the operand to that mode before
                   5034: generating the instruction.
                   5035: 
                   5036: @item @samp{one_cmpl@var{m}2}
1.1       root     5037: Store the bitwise-complement of operand 1 into operand 0.
                   5038: 
1.1.1.2   root     5039: @item @samp{cmp@var{m}}
1.1       root     5040: Compare operand 0 and operand 1, and set the condition codes.
1.1.1.2   root     5041: The RTL pattern should look like this:
1.1       root     5042: 
1.1.1.2   root     5043: @example
                   5044: (set (cc0) (minus (match_operand:@var{m} 0 @dots{})
                   5045:                   (match_operand:@var{m} 1 @dots{})))
                   5046: @end example
                   5047: 
                   5048: Each such definition in the machine description, for integer mode
                   5049: @var{m}, must have a corresponding @samp{tst@var{m}} pattern, because
                   5050: optimization can simplify the compare into a test when operand 1 is
                   5051: zero.
                   5052: 
                   5053: @item @samp{tst@var{m}}
1.1       root     5054: Compare operand 0 against zero, and set the condition codes.
1.1.1.2   root     5055: The RTL pattern should look like this:
1.1       root     5056: 
1.1.1.2   root     5057: @example
                   5058: (set (cc0) (match_operand:@var{m} 0 @dots{}))
                   5059: @end example
                   5060: 
                   5061: @item @samp{movstr@var{m}}
1.1       root     5062: Block move instruction.  The addresses of the destination and source
                   5063: strings are the first two operands, and both are in mode @code{Pmode}.
                   5064: The number of bytes to move is the third operand, in mode @var{m}.
                   5065: 
1.1.1.2   root     5066: @item @samp{cmpstr@var{m}}
1.1       root     5067: Block compare instruction, with operands like @samp{movstr@var{m}}
                   5068: except that the two memory blocks are compared byte by byte
                   5069: in lexicographic order.  The effect of the instruction is to set
                   5070: the condition codes.
                   5071: 
1.1.1.2   root     5072: @item @samp{float@var{m}@var{n}2}
1.1       root     5073: Convert operand 1 (valid for fixed point mode @var{m}) to floating
                   5074: point mode @var{n} and store in operand 0 (which has mode @var{n}).
                   5075: 
1.1.1.2   root     5076: @item @samp{fix@var{m}@var{n}2}
                   5077: Convert operand 1 (valid for floating point mode @var{m}) to fixed
                   5078: point mode @var{n} as a signed number and store in operand 0 (which
                   5079: has mode @var{n}).  This instruction's result is defined only when
                   5080: the value of operand 1 is an integer.
                   5081: 
                   5082: @item @samp{fixuns@var{m}@var{n}2}
                   5083: Convert operand 1 (valid for floating point mode @var{m}) to fixed
                   5084: point mode @var{n} as an unsigned number and store in operand 0 (which
                   5085: has mode @var{n}).  This instruction's result is defined only when the
                   5086: value of operand 1 is an integer.
                   5087: 
                   5088: @item @samp{ftrunc@var{m}2}
                   5089: Convert operand 1 (valid for floating point mode @var{m}) to an
                   5090: integer value, still represented in floating point mode @var{m}, and
                   5091: store it in operand 0 (valid for floating point mode @var{m}).
                   5092: 
                   5093: @item @samp{fix_trunc@var{m}@var{n}2}
                   5094: Like @samp{fix@var{m}@var{n}2} but works for any floating point value
                   5095: of mode @var{m} by converting the value to an integer.
                   5096: 
                   5097: @item @samp{fixuns_trunc@var{m}@var{n}2}
                   5098: Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
                   5099: value of mode @var{m} by converting the value to an integer.
                   5100: 
                   5101: @item @samp{trunc@var{m}@var{n}}
1.1       root     5102: Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
                   5103: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   5104: point or both floating point.
                   5105: 
1.1.1.2   root     5106: @item @samp{extend@var{m}@var{n}}
1.1       root     5107: Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
                   5108: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   5109: point or both floating point.
                   5110: 
1.1.1.2   root     5111: @item @samp{zero_extend@var{m}@var{n}}
1.1       root     5112: Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
                   5113: store in operand 0 (which has mode @var{n}).  Both modes must be fixed
                   5114: point.
                   5115: 
1.1.1.2   root     5116: @item @samp{extv}
1.1       root     5117: Extract a bit-field from operand 1 (a register or memory operand),
                   5118: where operand 2 specifies the width in bits and operand 3 the starting
                   5119: bit, and store it in operand 0.  Operand 0 must have @code{Simode}.
                   5120: Operand 1 may have mode @code{QImode} or @code{SImode}; often
                   5121: @code{SImode} is allowed only for registers.  Operands 2 and 3 must be
                   5122: valid for @code{SImode}.
                   5123: 
                   5124: The RTL generation pass generates this instruction only with constants
                   5125: for operands 2 and 3.
                   5126: 
                   5127: The bit-field value is sign-extended to a full word integer
                   5128: before it is stored in operand 0.
                   5129: 
1.1.1.2   root     5130: @item @samp{extzv}
1.1       root     5131: Like @samp{extv} except that the bit-field value is zero-extended.
                   5132: 
1.1.1.2   root     5133: @item @samp{insv}
1.1       root     5134: Store operand 3 (which must be valid for @code{SImode}) into a
                   5135: bit-field in operand 0, where operand 1 specifies the width in bits
                   5136: and operand 2 the starting bit.  Operand 0 may have mode @code{QImode}
                   5137: or @code{SImode}; often @code{SImode} is allowed only for registers.
                   5138: Operands 1 and 2 must be valid for @code{SImode}.
                   5139: 
                   5140: The RTL generation pass generates this instruction only with constants
                   5141: for operands 1 and 2.
                   5142: 
1.1.1.2   root     5143: @item @samp{s@var{cond}}
                   5144: Store zero or nonzero in the operand according to the condition codes.
                   5145: Value stored is nonzero iff the condition @var{cond} is true.
                   5146: @var{cond} is the name of a comparison operation expression code, such
1.1       root     5147: as @samp{eq}, @samp{lt} or @samp{leu}.
                   5148: 
1.1.1.2   root     5149: You specify the mode that the operand must have when you write the
                   5150: @code{match_operand} expression.  The compiler automatically sees
                   5151: which mode you have used and supplies an operand of that mode.
                   5152: 
                   5153: The value stored for a true condition must have 1 as its low bit.
                   5154: Otherwise the instruction is not suitable and must be omitted from the
                   5155: machine description.  You must tell the compiler exactly which value
                   5156: is stored by defining the macro @code{STORE_FLAG_VALUE}.
                   5157: 
                   5158: @item @samp{b@var{cond}}
1.1       root     5159: Conditional branch instruction.  Operand 0 is a @samp{label_ref}
                   5160: that refers to the label to jump to.  Jump if the condition codes
                   5161: meet condition @var{cond}.
                   5162: 
1.1.1.2   root     5163: @item @samp{call}
1.1.1.7 ! root     5164: Subroutine call instruction returning no value.  Operand 0 is the
        !          5165: function to call; operand 1 is the number of bytes of arguments pushed
        !          5166: (in mode @code{SImode}, except it is normally a @samp{const_int});
        !          5167: operand 2 is the number of registers used as operands.
        !          5168: 
        !          5169: On most machines, operand 2 is not actually stored into the RTL pattern.
        !          5170: 
        !          5171: Operand 0 should be a @samp{mem} RTX whose address is the address of
        !          5172: the function.
        !          5173: 
        !          5174: @item @samp{call_value}
        !          5175: Subroutine call instruction returning a value.  Operand 0 is the hard
        !          5176: register in which the value is returned.  There are three more
        !          5177: operands, the same as the three operands of the @samp{call}
        !          5178: instruction (but with numbers increased by one).
        !          5179: 
        !          5180: Subroutines that return @code{BLKmode} objects use the @samp{call}
        !          5181: insn.
1.1       root     5182: 
1.1.1.2   root     5183: @item @samp{return}
1.1       root     5184: Subroutine return instruction.  This instruction pattern name should be
                   5185: defined only if a single instruction can do all the work of returning
                   5186: from a function.
                   5187: 
1.1.1.3   root     5188: @item @samp{casesi}
                   5189: Instruction to jump through a dispatch table, including bounds checking.
                   5190: This instruction takes five operands:
                   5191: 
                   5192: @enumerate
                   5193: @item
                   5194: The index to dispatch on, which has mode @code{SImode}.
                   5195: 
                   5196: @item
                   5197: The lower bound for indices in the table, an integer constant.
                   5198: 
                   5199: @item
                   5200: The upper bound for indices in the table, an integer constant.
                   5201: 
                   5202: @item
                   5203: A label to jump to if the index has a value outside the bounds.
                   5204: (If the machine-description macro @code{CASE_DROPS_THROUGH} is defined,
                   5205: then an out-of-bounds index drops through to the code following
                   5206: the jump table instead of jumping to this label.  In that case,
                   5207: this label is not actually used by the @samp{casesi} instruction,
                   5208: but it is always provided as an operand.)
                   5209: 
                   5210: @item
                   5211: A label that precedes the table itself.
                   5212: @end enumerate
                   5213: 
                   5214: The table is a @samp{addr_vec} or @samp{addr_diff_vec} inside of a
                   5215: @samp{jump_insn}.  The number of elements in the table is one plus the
                   5216: difference between the upper bound and the lower bound.
                   5217: 
1.1.1.2   root     5218: @item @samp{tablejump}
1.1.1.3   root     5219: Instruction to jump to a variable address.  This is a low-level
                   5220: capability which can be used to implement a dispatch table when there
                   5221: is no @samp{casesi} pattern.
                   5222: 
                   5223: This pattern requires two operands: the address or offset, and a label
                   5224: which should immediately precede the jump table.  If the macro
                   5225: @code{CASE_VECTOR_PC_RELATIVE} is defined then the first operand is an
                   5226: absolute address to jump to; otherwise, it is an offset which counts
                   5227: from the address of the table.
                   5228: 
                   5229: The @samp{tablejump} insn is always the last insn before the jump
                   5230: table it uses.  Its assembler code normally has no need to use the
                   5231: second operand, but you should incorporate it in the RTL pattern so
                   5232: that the jump optimizer will not delete the table as unreachable code.
1.1       root     5233: @end table
                   5234: 
1.1.1.2   root     5235: @node Pattern Ordering, Dependent Patterns, Standard Names, Machine Desc
                   5236: @section When the Order of Patterns Matters
                   5237: 
                   5238: Sometimes an insn can match more than one instruction pattern.  Then the
                   5239: pattern that appears first in the machine description is the one used.
                   5240: Therefore, more specific patterns (patterns that will match fewer things)
                   5241: and faster instructions (those that will produce better code when they
                   5242: do match) should usually go first in the description.
                   5243: 
                   5244: In some cases the effect of ordering the patterns can be used to hide
                   5245: a pattern when it is not valid.  For example, the 68000 has an
                   5246: instruction for converting a fullword to floating point and another
                   5247: for converting a byte to floating point.  An instruction converting
                   5248: an integer to floating point could match either one.  We put the
                   5249: pattern to convert the fullword first to make sure that one will
                   5250: be used rather than the other.  (Otherwise a large integer might
                   5251: be generated as a single-byte immediate quantity, which would not work.)
                   5252: Instead of using this pattern ordering it would be possible to make the
                   5253: pattern for convert-a-byte smart enough to deal properly with any
                   5254: constant value.
                   5255: 
                   5256: @node Dependent Patterns, Jump Patterns, Pattern Ordering, Machine Desc
                   5257: @section Interdependence of Patterns
1.1       root     5258: 
                   5259: Every machine description must have a named pattern for each of the
                   5260: conditional branch names @samp{b@var{cond}}.  The recognition template
                   5261: must always have the form
                   5262: 
                   5263: @example
                   5264: (set (pc)
                   5265:      (if_then_else (@var{cond} (cc0) (const_int 0))
                   5266:                    (label_ref (match_operand 0 "" ""))
                   5267:                    (pc)))
                   5268: @end example
                   5269: 
                   5270: @noindent
                   5271: In addition, every machine description must have an anonymous pattern
                   5272: for each of the possible reverse-conditional branches.  These patterns
                   5273: look like
                   5274: 
                   5275: @example
                   5276: (set (pc)
                   5277:      (if_then_else (@var{cond} (cc0) (const_int 0))
                   5278:                    (pc)
                   5279:                    (label_ref (match_operand 0 "" ""))))
                   5280: @end example
                   5281: 
                   5282: @noindent
                   5283: They are necessary because jump optimization can turn direct-conditional
                   5284: branches into reverse-conditional branches.
                   5285: 
                   5286: The compiler does more with RTL than just create it from patterns
                   5287: and recognize the patterns: it can perform arithmetic expression codes
                   5288: when constant values for their operands can be determined.  As a result,
                   5289: sometimes having one pattern can require other patterns.  For example, the
                   5290: Vax has no `and' instruction, but it has `and not' instructions.  Here
                   5291: is the definition of one of them:
                   5292: 
                   5293: @example
                   5294: (define_insn "andcbsi2"
                   5295:   [(set (match_operand:SI 0 "general_operand" "")
                   5296:         (and:SI (match_dup 0)
                   5297:                 (not:SI (match_operand:SI
                   5298:                           1 "general_operand" ""))))]
                   5299:   ""
                   5300:   "bicl2 %1,%0")
                   5301: @end example
                   5302: 
                   5303: @noindent
                   5304: If operand 1 is an explicit integer constant, an instruction constructed
1.1.1.2   root     5305: using that pattern can be simplified into an `and' like this:
1.1       root     5306: 
                   5307: @example
                   5308: (set (reg:SI 41)
                   5309:      (and:SI (reg:SI 41)
                   5310:              (const_int 0xffff7fff)))
                   5311: @end example
                   5312: 
                   5313: @noindent
                   5314: (where the integer constant is the one's complement of what
                   5315: appeared in the original instruction).
                   5316: 
                   5317: To avoid a fatal error, the compiler must have a pattern that recognizes
                   5318: such an instruction.  Here is what is used:
                   5319: 
                   5320: @example
                   5321: (define_insn ""
                   5322:   [(set (match_operand:SI 0 "general_operand" "")
                   5323:         (and:SI (match_dup 0)
                   5324:                 (match_operand:SI 1 "general_operand" "")))]
                   5325:   "GET_CODE (operands[1]) == CONST_INT"
                   5326:   "*
1.1.1.2   root     5327: @{ operands[1]
1.1       root     5328:     = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1]));
                   5329:   return \"bicl2 %1,%0\";
1.1.1.2   root     5330: @}")
1.1       root     5331: @end example
                   5332: 
                   5333: @noindent
                   5334: Whereas a pattern to match a general `and' instruction is impossible to
                   5335: support on the Vax, this pattern is possible because it matches only a
                   5336: constant second argument: a special case that can be output as an `and not'
                   5337: instruction.
                   5338: 
1.1.1.2   root     5339: A ``compare'' instruction whose RTL looks like this:
                   5340: 
                   5341: @example
                   5342: (set (cc0) (minus @var{operand} (const_int 0)))
                   5343: @end example
                   5344: 
                   5345: @noindent
                   5346: may be simplified by optimization into a ``test'' like this:
                   5347: 
                   5348: @example
                   5349: (set (cc0) @var{operand})
                   5350: @end example
                   5351: 
                   5352: @noindent
                   5353: So in the machine description, each ``compare'' pattern for an integer
                   5354: mode must have a corresponding ``test'' pattern that will match the
                   5355: result of such simplification.
                   5356: 
                   5357: In some cases machines support instructions identical except for the
                   5358: machine mode of one or more operands.  For example, there may be
                   5359: ``sign-extend halfword'' and ``sign-extend byte'' instructions whose
                   5360: patterns are
                   5361: 
                   5362: @example
                   5363: (set (match_operand:SI 0 @dots{})
                   5364:      (extend:SI (match_operand:HI 1 @dots{})))
                   5365: 
                   5366: (set (match_operand:SI 0 @dots{})
                   5367:      (extend:SI (match_operand:QI 1 @dots{})))
                   5368: @end example
                   5369: 
                   5370: @noindent
                   5371: Constant integers do not specify a machine mode, so an instruction to
                   5372: extend a constant value could match either pattern.  The pattern it
                   5373: actually will match is the one that appears first in the file.  For correct
                   5374: results, this must be the one for the widest possible mode (@code{HImode},
                   5375: here).  If the pattern matches the @code{QImode} instruction, the results
                   5376: will be incorrect if the constant value does not actually fit that mode.
                   5377: 
                   5378: Such instructions to extend constants are rarely generated because they are
                   5379: optimized away, but they do occasionally happen in nonoptimized
                   5380: compilations.
                   5381: 
                   5382: @node Jump Patterns, Peephole Definitions, Dependent Patterns, Machine Desc
                   5383: @section Defining Jump Instruction Patterns
                   5384: 
                   5385: GNU CC assumes that the machine has a condition code.  A comparison insn
                   5386: sets the condition code, recording the results of both signed and unsigned
                   5387: comparison of the given operands.  A separate branch insn tests the
                   5388: condition code and branches or not according its value.  The branch insns
                   5389: come in distinct signed and unsigned flavors.  Many common machines, such
                   5390: as the Vax, the 68000 and the 32000, work this way.
                   5391: 
                   5392: Some machines have distinct signed and unsigned compare instructions, and
                   5393: only one set of conditional branch instructions.  The easiest way to handle
                   5394: these machines is to treat them just like the others until the final stage
                   5395: where assembly code is written.  At this time, when outputting code for the
                   5396: compare instruction, peek ahead at the following branch using
                   5397: @code{NEXT_INSN (insn)}.  (The variable @code{insn} refers to the insn
                   5398: being output, in the output-writing code in an instruction pattern.)  If
                   5399: the RTL says that is an unsigned branch, output an unsigned compare;
                   5400: otherwise output a signed compare.  When the branch itself is output, you
                   5401: can treat signed and unsigned branches identically.
                   5402: 
                   5403: The reason you can do this is that GNU CC always generates a pair of
                   5404: consecutive RTL insns, one to set the condition code and one to test it,
                   5405: and keeps the pair inviolate until the end.
                   5406: 
                   5407: To go with this technique, you must define the machine-description macro
                   5408: @code{NOTICE_UPDATE_CC} to do @code{CC_STATUS_INIT}; in other words, no
                   5409: compare instruction is superfluous.
                   5410: 
                   5411: Some machines have compare-and-branch instructions and no condition code.
                   5412: A similar technique works for them.  When it is time to ``output'' a
                   5413: compare instruction, record its operands in two static variables.  When
                   5414: outputting the branch-on-condition-code instruction that follows, actually
                   5415: output a compare-and-branch instruction that uses the remembered operands.
                   5416: 
                   5417: It also works to define patterns for compare-and-branch instructions.
                   5418: In optimizing compilation, the pair of compare and branch instructions
                   5419: will be combined accoprding to these patterns.  But this does not happen
                   5420: if optimization is not requested.  So you must use one of the solutions
                   5421: above in addition to any special patterns you define.
                   5422: 
                   5423: @node Peephole Definitions, Expander Definitions, Jump Patterns, Machine Desc
                   5424: @section Defining Machine-Specific Peephole Optimizers
                   5425: 
                   5426: In addition to instruction patterns the @file{md} file may contain
                   5427: definitions of machine-specific peephole optimizations.
                   5428: 
                   5429: The combiner does not notice certain peephole optimizations when the data
                   5430: flow in the program does not suggest that it should try them.  For example,
                   5431: sometimes two consecutive insns related in purpose can be combined even
                   5432: though the second one does not appear to use a register computed in the
                   5433: first one.  A machine-specific peephole optimizer can detect such
                   5434: opportunities.
                   5435: 
                   5436: A definition looks like this:
                   5437: 
                   5438: @example
                   5439: (define_peephole
                   5440:   [@var{insn-pattern-1}
                   5441:    @var{insn-pattern-2}
                   5442:    @dots{}]
                   5443:   "@var{condition}"
                   5444:   "@var{template}")
                   5445: @end example
                   5446: 
                   5447: In this skeleton, @var{insn-pattern-1} and so on are patterns to match
                   5448: consecutive instructions.  The optimization applies to a sequence of
                   5449: instructions when @var{insn-pattern-1} matches the first one,
                   5450: @var{insn-pattern-2} matches the next, and so on.@refill
                   5451: 
                   5452: @var{insn-pattern-1} and so on look @emph{almost} like the second operand
                   5453: of @code{define_insn}.  There is one important difference: this pattern is
                   5454: an RTX, not a vector.  If the @code{define_insn} pattern would be a vector
                   5455: of one element, the @var{insn-pattern} should be just that element, no
                   5456: vector.  If the @code{define_insn} pattern would have multiple elements
                   5457: then the @var{insn-pattern} must place the vector inside an explicit
                   5458: @code{parallel} RTX.@refill
                   5459: 
                   5460: The operands of the instructions are matched with @code{match_operands} and
                   5461: @code{match_dup}, as usual).  What is not usual is that the operand numbers
                   5462: apply to all the instruction patterns in the definition.  So, you can check
                   5463: for identical operands in two instructions by using @code{match_operand}
                   5464: in one instruction and @code{match_dup} in the other.
                   5465: 
                   5466: The operand constraints used in @code{match_operand} patterns do not have
                   5467: any direct effect on the applicability of the optimization, but they will
                   5468: be validated afterward, so write constraints that are sure to fit whenever
                   5469: the optimization is applied.  It is safe to use @code{"g"} for each
                   5470: operand.
                   5471: 
                   5472: Once a sequence of instructions matches the patterns, the @var{condition}
                   5473: is checked.  This is a C expression which makes the final decision whether
                   5474: to perform the optimization (do so if the expression is nonzero).  If
                   5475: @var{condition} is omitted (in other words, the string is empty) then the
                   5476: optimization is applied to every sequence of instructions that matches the
                   5477: patterns.
                   5478: 
                   5479: The defined peephole optimizations are applied after register allocation is
                   5480: complete.  Therefore, the optimizer can check which operands have ended up
                   5481: in which kinds of registers, just by looking at the operands.
                   5482: 
                   5483: The way to refer to the operands in @var{condition} is to write
                   5484: @code{operands[@var{i}]} for operand number @var{i} (as matched by
                   5485: @code{(match_operand @var{i} @dots{})}).  Use the variable @code{insn} to
                   5486: refer to the last of the insns being matched; use @code{PREV_INSN} to find
                   5487: the preceding insns (but be careful to skip over any @samp{note} insns that
                   5488: intervene).@refill
                   5489: 
                   5490: When optimizing computations with intermediate results, you can use
                   5491: @var{condition} to match only when the intermediate results are not used
                   5492: elsewhere.  Use the C expression @code{dead_or_set_p (@var{insn},
                   5493: @var{op})}, where @var{insn} is the insn in which you expect the value to
                   5494: be used for the last time (from the value of @code{insn}, together with use
                   5495: of @code{PREV_INSN}), and @var{op} is the intermediate value (from
                   5496: @code{operands[@var{i}]}).@refill
                   5497: 
                   5498: Applying the optimization means replacing the sequence of instructions with
                   5499: one new instruction.  The @var{template} controls ultimate output of
                   5500: assembler code for this combined instruction.  It works exactly like the
                   5501: template of a @code{define_insn}.  Operand numbers in this template are the
                   5502: same ones used in matching the original sequence of instructions.
                   5503: 
                   5504: The result of a defined peephole optimizer does not need to match any of
                   5505: the instruction patterns, and it does not have an opportunity to match
                   5506: them.  The peephole optimizer definition itself serves as the instruction
                   5507: pattern to control how the instruction is output.
                   5508: 
                   5509: Defined peephole optimizers are run in the last jump optimization pass, so
                   5510: the instructions they produce are never combined or rearranged
                   5511: automatically in any way.
                   5512: 
                   5513: Here is an example, taken from the 68000 machine description:
                   5514: 
                   5515: @example
                   5516: (define_peephole
                   5517:   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
                   5518:    (set (match_operand:DF 0 "register_operand" "f")
                   5519:         (match_operand:DF 1 "register_operand" "ad"))]
                   5520:   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
                   5521:   "*
                   5522: @{
                   5523:   rtx xoperands[2];
                   5524:   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
                   5525: #ifdef MOTOROLA
                   5526:   output_asm_insn (\"move.l %1,(sp)\", xoperands);
                   5527:   output_asm_insn (\"move.l %1,-(sp)\", operands);
                   5528:   return \"fmove.d (sp)+,%0\";
                   5529: #else
                   5530:   output_asm_insn (\"movel %1,sp@@\", xoperands);
                   5531:   output_asm_insn (\"movel %1,sp@@-\", operands);
                   5532:   return \"fmoved sp@@+,%0\";
                   5533: #endif
                   5534: @}
                   5535: ")
                   5536: @end example
                   5537: 
                   5538: The effect of this optimization is to change
                   5539: 
                   5540: @example
                   5541: jbsr _foobar
                   5542: addql #4,sp
                   5543: movel d1,sp@@-
                   5544: movel d0,sp@@-
                   5545: fmoved sp@@+,fp0
                   5546: @end example
                   5547: 
                   5548: @noindent
                   5549: into
                   5550: 
                   5551: @example
                   5552: jbsr _foobar
                   5553: movel d1,sp@@
                   5554: movel d0,sp@@-
                   5555: fmoved sp@@+,fp0
                   5556: @end example
                   5557: 
                   5558: @node Expander Definitions,, Peephole Definitions, Machine Desc
                   5559: @section Defining RTL Sequences for Code Generation
                   5560: 
                   5561: On some target machines, some standard pattern names for RTL generation
                   5562: cannot be handled with single insn, but a sequence of RTL insns can
                   5563: represent them.  For these target machines, you can write a
                   5564: @samp{define_expand} to specify how to generate the sequence of RTL.
                   5565: 
                   5566: A @samp{define_expand} is an RTL expression that looks almost like a
                   5567: @samp{define_insn}; but, unlike the latter, a @samp{define_expand} is used
                   5568: only for RTL generation and it can produce more than one RTL insn.
                   5569: 
                   5570: A @samp{define_expand} RTX has four operands:
                   5571: 
                   5572: @itemize @bullet
                   5573: @item
                   5574: The name.  Each @samp{define_expand} must have a name, since the only
                   5575: use for it is to refer to it by name.
                   5576: 
                   5577: @item
                   5578: The RTL template.  This is just like the RTL template for a
                   5579: @samp{define_peephole} in that it is a vector of RTL expressions
                   5580: each being one insn.
                   5581: 
                   5582: @item
                   5583: The condition, a string containing a C expression.  This expression is
                   5584: used to express how the availability of this pattern depends on
                   5585: subclasses of target machine, selected by command-line options when
                   5586: GNU CC is run.  This is just like the condition of a
                   5587: @samp{define_insn} that has a standard name.
                   5588: 
                   5589: @item
                   5590: The preparation statements, a string containing zero or more C
                   5591: statements which are to be executed before RTL code is generated from
                   5592: the RTL template.
                   5593: 
                   5594: Usually these statements prepare temporary registers for use as
                   5595: internal operands in the RTL template, but they can also generate RTL
                   5596: insns directly by calling routines such as @samp{emit_insn}, etc.
                   5597: Any such insns precede the ones that come from the RTL template.
                   5598: @end itemize
                   5599: 
                   5600: The RTL template, in addition to controlling generation of RTL insns,
                   5601: also describes the operands that need to be specified when this pattern
                   5602: is used.  In particular, it gives a predicate for each operand.
                   5603: 
                   5604: A true operand, which need to be specified in order to generate RTL from
                   5605: the pattern, should be described with a @samp{match_operand} in its first
                   5606: occurrence in the RTL template.  This enters information on the operand's
                   5607: predicate into the tables that record such things.  GNU CC uses the
                   5608: information to preload the operand into a register if that is required for
                   5609: valid RTL code.  If the operand is referred to more than once, subsequent
                   5610: references should use @samp{match_dup}.
                   5611: 
                   5612: The RTL template may also refer to internal ``operands'' which are
                   5613: temporary registers or labels used only within the sequence made by the
                   5614: @samp{define_expand}.  Internal operands are substituted into the RTL
                   5615: template with @samp{match_dup}, never with @samp{match_operand}.  The
                   5616: values of the internal operands are not passed in as arguments by the
                   5617: compiler when it requests use of this pattern.  Instead, they are computed
                   5618: within the pattern, in the preparation statements.  These statements
                   5619: compute the values and store them into the appropriate elements of
                   5620: @code{operands} so that @samp{match_dup} can find them.
                   5621: 
                   5622: There are two special macros defined for use in the preparation statements:
                   5623: @code{DONE} and @code{FAIL}.  Use them with a following semicolon,
                   5624: as a statement.
                   5625: 
                   5626: @table @code
                   5627: @item DONE
                   5628: Use the @code{DONE} macro to end RTL generation for the pattern.  The
                   5629: only RTL insns resulting from the pattern on this occasion will be
                   5630: those already emitted by explicit calls to @code{emit_insn} within the
                   5631: preparation statements; the RTL template will not be generated.
                   5632: 
                   5633: @item FAIL
                   5634: Make the pattern fail on this occasion.  When a pattern fails, it means
                   5635: that the pattern was not truly available.  The calling routines in the
                   5636: compiler will try other strategies for code generation using other patterns.
                   5637: 
                   5638: Failure is currently supported only for binary operations (addition,
                   5639: multiplication, shifting, etc.).
                   5640: 
                   5641: Do not emit any insns explicitly with @code{emit_insn} before failing.
                   5642: @end table
                   5643: 
                   5644: Here is an example, the definition of left-shift for the SPUR chip:
                   5645: 
                   5646: @example
                   5647: (define_expand "ashlsi3"
                   5648:   [(set (match_operand:SI 0 "register_operand" "")
                   5649:         (ashift:SI
                   5650:           (match_operand:SI 1 "register_operand" "")
                   5651:           (match_operand:SI 2 "nonmemory_operand" "")))]
                   5652:   ""
                   5653:   "
                   5654: @{
                   5655:   if (GET_CODE (operands[2]) != CONST_INT
                   5656:       || (unsigned) INTVAL (operands[2]) > 3)
                   5657:     FAIL;
                   5658: @}")
                   5659: @end example
                   5660: 
                   5661: @noindent
                   5662: This example uses @samp{define_expand} so that it can generate an RTL insn
                   5663: for shifting when the shift-count is in the supported range of 0 to 3 but
                   5664: fail in other cases where machine insns aren't available.  When it fails,
                   5665: the compiler tries another strategy using different patterns (such as, a
                   5666: library call).
                   5667: 
                   5668: If the compiler were able to handle nontrivial condition-strings in
                   5669: patterns with names, then there would be possible to use a
                   5670: @samp{define_insn} in that case.  Here is another case (zero-extension on
                   5671: the 68000) which makes more use of the power of @samp{define_expand}:
                   5672: 
                   5673: @example
                   5674: (define_expand "zero_extendhisi2"
                   5675:   [(set (match_operand:SI 0 "general_operand" "")
                   5676:         (const_int 0))
                   5677:    (set (strict_low_part 
                   5678:           (subreg:HI
                   5679:             (match_operand:SI 0 "general_operand" "")
                   5680:             0))
                   5681:         (match_operand:HI 1 "general_operand" ""))]
                   5682:   ""
                   5683:   "operands[1] = make_safe_from (operands[1], operands[0]);")
                   5684: @end example
                   5685: 
                   5686: @noindent
                   5687: Here two RTL insns are generated, one to clear the entire output operand
                   5688: and the other to copy the input operand into its low half.  This sequence
                   5689: is incorrect if the input operand refers to [the old value of] the output
                   5690: operand, so the preparation statement makes sure this isn't so.  The
                   5691: function @code{make_safe_from} copies the @code{operands[1]} into a
                   5692: temporary register if it refers to @code{operands[0]}.  It does this
                   5693: by emitting another RTL insn.
                   5694: 
                   5695: Finally, a third example shows the use of an internal operand.
                   5696: Zero-extension on the SPUR chip is done by @samp{and}-ing the result
                   5697: against a halfword mask.  But this mask cannot be represented by a
                   5698: @samp{const_int} because the constant value is too large to be legitimate
                   5699: on this machine.  So it must be copied into a register with
                   5700: @code{force_reg} and then the register used in the @samp{and}.
                   5701: 
                   5702: @example
                   5703: (define_expand "zero_extendhisi2"
                   5704:   [(set (match_operand:SI 0 "register_operand" "")
                   5705:         (and:SI (subreg:SI
                   5706:                   (match_operand:HI 1 "register_operand" "")
                   5707:                   0)
                   5708:                 (match_dup 2)))]
                   5709:   ""
                   5710:   "operands[2]
                   5711:      = force_reg (SImode, gen_rtx (CONST_INT,
                   5712:                                    VOIDmode, 65535)); ")
                   5713: @end example
                   5714: 
                   5715: @node Machine Macros, Config, Machine Desc, Top
1.1       root     5716: @chapter Machine Description Macros
                   5717: 
                   5718: The other half of the machine description is a C header file conventionally
                   5719: given the name @file{tm-@var{machine}.h}.  The file @file{tm.h} should be a
                   5720: link to it.  The header file @file{config.h} includes @file{tm.h} and most
                   5721: compiler source files include @file{config.h}.
                   5722: 
                   5723: @menu
1.1.1.2   root     5724: * Run-time Target::     Defining -m options like -m68000 and -m68020.
1.1       root     5725: * Storage Layout::      Defining sizes and alignments of data types.
                   5726: * Registers::           Naming and describing the hardware registers.
                   5727: * Register Classes::    Defining the classes of hardware registers.
                   5728: * Stack Layout::        Defining which way the stack grows and by how much.
1.1.1.2   root     5729: * Library Names::       Specifying names of subroutines to call automatically.
1.1       root     5730: * Addressing Modes::    Defining addressing modes valid for memory operands.
                   5731: * Condition Code::      Defining how insns update the condition code.
                   5732: * Assembler Format::    Defining how to write insns and pseudo-ops to output.
                   5733: * Misc::                Everything else.
                   5734: @end menu
                   5735: 
                   5736: @node Run-time Target, Storage Layout, Machine Macros, Machine Macros
                   5737: @section Run-time Target Specification
                   5738: 
                   5739: @table @code
                   5740: @item CPP_PREDEFINES
1.1.1.7 ! root     5741: Define this to be a string constant containing @samp{-D} options to
        !          5742: define the predefined macros that identify this machine and system.
        !          5743: These macros will be predefined unless the @samp{-ansi} option is
        !          5744: specified.
1.1       root     5745: 
                   5746: For example, on the Sun, one can use the value
                   5747: 
                   5748: @example
1.1.1.2   root     5749: "-Dmc68000 -Dsun -Dunix"
1.1       root     5750: @end example
                   5751: 
1.1.1.7 ! root     5752: @item CPP_SPEC
        !          5753: A C string constant that tells the GNU CC driver program options to
        !          5754: pass to CPP.  It can also specify how to translate options you
        !          5755: give to GNU CC into options for GNU CC to pass to the CPP.
        !          5756: 
        !          5757: Do not define this macro if it does not need to do anything.
        !          5758: 
        !          5759: @item CC1_SPEC
        !          5760: A C string constant that tells the GNU CC driver program options to
        !          5761: pass to CC1.  It can also specify how to translate options you
        !          5762: give to GNU CC into options for GNU CC to pass to the CC1.
        !          5763: 
        !          5764: Do not define this macro if it does not need to do anything.
        !          5765: 
1.1       root     5766: @item extern int target_flags;
                   5767: This declaration should be present.
                   5768: 
                   5769: @item TARGET_@dots{}
                   5770: This series of macros is to allow compiler command arguments to
                   5771: enable or disable the use of optional features of the target machine.
                   5772: For example, one machine description serves both the 68000 and
                   5773: the 68020; a command argument tells the compiler whether it should
                   5774: use 68020-only instructions or not.  This command argument works
                   5775: by means of a macro @code{TARGET_68020} that tests a bit in
                   5776: @code{target_flags}.
                   5777: 
                   5778: Define a macro @code{TARGET_@var{featurename}} for each such option.
                   5779: Its definition should test a bit in @code{target_flags}; for example:
                   5780: 
                   5781: @example
                   5782: #define TARGET_68020 (target_flags & 1)
                   5783: @end example
                   5784: 
                   5785: One place where these macros are used is in the condition-expressions
                   5786: of instruction patterns.  Note how @code{TARGET_68020} appears
1.1.1.2   root     5787: frequently in the 68000 machine description file, @file{m68k.md}.
1.1       root     5788: Another place they are used is in the definitions of the other
                   5789: macros in the @file{tm-@var{machine}.h} file.
                   5790: 
                   5791: @item TARGET_SWITCHES
1.1.1.2   root     5792: This macro defines names of command options to set and clear
1.1       root     5793: bits in @code{target_flags}.  Its definition is an initializer
1.1.1.2   root     5794: with a subgrouping for each command option.
1.1       root     5795: 
1.1.1.2   root     5796: Each subgrouping contains a string constant, that defines the option
1.1       root     5797: name, and a number, which contains the bits to set in
                   5798: @code{target_flags}.  A negative number says to clear bits instead;
1.1.1.2   root     5799: the negative of the number is which bits to clear.  The actual option
1.1       root     5800: name is made by appending @samp{-m} to the specified name.
                   5801: 
                   5802: One of the subgroupings should have a null string.  The number in
                   5803: this grouping is the default value for @code{target_flags}.  Any
1.1.1.2   root     5804: target options act starting with that value.
1.1       root     5805: 
                   5806: Here is an example which defines @samp{-m68000} and @samp{-m68020}
                   5807: with opposite meanings, and picks the latter as the default:
                   5808: 
                   5809: @example
                   5810: #define TARGET_SWITCHES \
                   5811:   @{ @{ "68020", 1@},      \
                   5812:     @{ "68000", -1@},     \
                   5813:     @{ "", 1@}@}
                   5814: @end example
                   5815: 
1.1.1.7 ! root     5816: @item OVERRIDE_OPTIONS
        !          5817: Sometimes certain combinations of command options do not make sense on
        !          5818: a particular target machine.  You can define a macro
        !          5819: @code{OVERRIDE_OPTIONS} to take account of this.  This macro, if
        !          5820: defined, is executed once just after all the command options have been
        !          5821: parsed.
        !          5822: @end table
1.1.1.2   root     5823: 
1.1       root     5824: @node Storage Layout, Registers, Run-time Target, Machine Macros
                   5825: @section Storage Layout
                   5826: 
1.1.1.2   root     5827: Note that the definitions of the macros in this table which are sizes or
                   5828: alignments measured in bits do not need to be constant.  They can be C
                   5829: expressions that refer to static variables, such as the @code{target_flags}.
                   5830: @xref{Run-time Target}.
                   5831: 
1.1       root     5832: @table @code
                   5833: @item BITS_BIG_ENDIAN
                   5834: Define this macro if the most significant bit in a byte has the lowest
                   5835: number.  This means that bit-field instructions count from the most
                   5836: significant bit.  If the machine has no bit-field instructions, this
                   5837: macro is irrelevant.
                   5838: 
                   5839: @item BYTES_BIG_ENDIAN
                   5840: Define this macro if the most significant byte in a word has the
                   5841: lowest number.
                   5842: 
                   5843: @item WORDS_BIG_ENDIAN
1.1.1.2   root     5844: Define this macro if, in a multiword object, the most significant
1.1       root     5845: word has the lowest number.
                   5846: 
                   5847: @item BITS_PER_UNIT
                   5848: Number of bits in an addressable storage unit (byte); normally 8.
                   5849: 
                   5850: @item BITS_PER_WORD
                   5851: Number of bits in a word; normally 32.
                   5852: 
                   5853: @item UNITS_PER_WORD
                   5854: Number of storage units in a word; normally 4.
                   5855: 
                   5856: @item POINTER_SIZE
                   5857: Width of a pointer, in bits.
                   5858: 
1.1.1.7 ! root     5859: @item POINTER_BOUNDARY
        !          5860: Alignment required for pointers stored in memory, in bits.
        !          5861: 
1.1       root     5862: @item PARM_BOUNDARY
1.1.1.2   root     5863: Alignment required for function parameters on the stack, in bits.
                   5864: 
                   5865: @item STACK_BOUNDARY
                   5866: Define this macro if you wish to preserve a certain alignment for
                   5867: the stack pointer at all times.  The definition is a C expression
                   5868: for the desired alignment (measured in bits).
1.1       root     5869: 
                   5870: @item FUNCTION_BOUNDARY
                   5871: Alignment required for a function entry point, in bits.
                   5872: 
                   5873: @item BIGGEST_ALIGNMENT
1.1.1.2   root     5874: Biggest alignment that any data type can require on this machine, in bits.
                   5875: 
1.1.1.7 ! root     5876: @item EMPTY_FIELD_BOUNDARY
1.1.1.2   root     5877: Alignment in bits to be given to a structure bit field that follows an
                   5878: empty field such as @code{int : 0;}.
                   5879: 
                   5880: @item STRUCTURE_SIZE_BOUNDARY
                   5881: Number of bits which any structure or union's size must be a multiple of.
                   5882: Each structure or union's size is rounded up to a multiple of this.
                   5883: 
                   5884: If you do not define this macro, the default is the same as
                   5885: @code{BITS_PER_UNIT}.
1.1       root     5886: 
                   5887: @item STRICT_ALIGNMENT
                   5888: Define this if instructions will fail to work if given data not
                   5889: on the nominal alignment.  If instructions will merely go slower
                   5890: in that case, do not define this macro.
1.1.1.4   root     5891: 
1.1.1.6   root     5892: @item PCC_BITFIELD_TYPE_MATTERS
                   5893: Define this if you wish to imitate a certain bizarre behavior pattern
                   5894: of some instances of PCC: a bit field whose declared type is
                   5895: @code{int} has the same effect on the size and alignment of a
                   5896: structure as an actual @code{int} would have.
                   5897: 
                   5898: Just what effect that is in GNU CC depends on other parameters, but on
                   5899: most machines it would force the structure's alignment and size to a
                   5900: multiple of 32 or @code{BIGGEST_ALIGNMENT} bits.
                   5901: 
1.1.1.4   root     5902: @item CHECK_FLOAT_VALUE (@var{mode}, @var{value})
                   5903: A C statement to validate the value @var{value} (or type
                   5904: @code{double}) for mode @var{mode}.  This means that you check whether
                   5905: @var{value} fits within the possible range of values for mode
                   5906: @var{mode} on this target machine.  The mode @var{mode} is always
                   5907: @code{SFmode} or @code{DFmode}.
                   5908: 
                   5909: If @var{value} is not valid, you should call @code{error} to print an
                   5910: error message and then assign some valid value to @var{value}.
                   5911: Allowing an invalid value to go through the compiler can produce
                   5912: incorrect assembler code which may even cause Unix assemblers to
                   5913: crash.
                   5914: 
                   5915: This macro need not be defined if there is no work for it to do.
1.1       root     5916: @end table
                   5917: 
                   5918: @node Registers, Register Classes, Storage Layout, Machine Macros
                   5919: @section Register Usage
                   5920: 
                   5921: @table @code
                   5922: @item FIRST_PSEUDO_REGISTER
                   5923: Number of hardware registers known to the compiler.  They receive
                   5924: numbers 0 through @code{FIRST_PSEUDO_REGISTER-1}; thus, the first
1.1.1.2   root     5925: pseudo register's number really is assigned the number
1.1       root     5926: @code{FIRST_PSEUDO_REGISTER}.
                   5927: 
                   5928: @item FIXED_REGISTERS
                   5929: An initializer that says which registers are used for fixed purposes
                   5930: all throughout the compiled code and are therefore not available for
1.1.1.2   root     5931: general allocation.  These would include the stack pointer, the frame
1.1.1.7 ! root     5932: pointer (except on machines where that can be used as a general
        !          5933: register when no frame pointer is needed), the program counter on
        !          5934: machines where that is considered one of the addressable registers,
        !          5935: and any other numbered register with a standard use.
1.1       root     5936: 
                   5937: This information is expressed as a sequence of numbers, separated by
                   5938: commas and surrounded by braces.  The @var{n}th number is 1 if
1.1.1.2   root     5939: register @var{n} is fixed, 0 otherwise.
                   5940: 
                   5941: The table initialized from this macro, and the table initialized by
                   5942: the following one, may be overridden at run time either automatically,
                   5943: by the actions of the macro @code{CONDITIONAL_REGISTER_USAGE}, or by
                   5944: the user with the command options @samp{-ffixed-@var{reg}},
                   5945: @samp{-fcall-used-@var{reg}} and @samp{-fcall-saved-@var{reg}}.
1.1       root     5946: 
                   5947: @item CALL_USED_REGISTERS
                   5948: Like @code{FIXED_REGISTERS} but has 1 for each register that is
                   5949: clobbered (in general) by function calls as well as for fixed
                   5950: registers.  This macro therefore identifies the registers that are not
                   5951: available for general allocation of values that must live across
                   5952: function calls.
                   5953: 
1.1.1.2   root     5954: If a register has 0 in @code{CALL_USED_REGISTERS}, the compiler
1.1       root     5955: automatically saves it on function entry and restores it on function
                   5956: exit, if the register is used within the function.
                   5957: 
1.1.1.2   root     5958: @item CONDITIONAL_REGISTER_USAGE
                   5959: Zero or more C statements that may conditionally modify two variables
                   5960: @code{fixed_regs} and @code{call_used_regs} (both of type @code{char
                   5961: []}) after they have been initialized from the two preceding macros.
                   5962: 
                   5963: This is necessary in case the fixed or call-clobbered registers depend
                   5964: on target flags.
                   5965: 
                   5966: You need not define this macro if it has no work to do.
                   5967: 
1.1.1.7 ! root     5968: If the usage of an entire class of registers depends on the target
        !          5969: flags, you may indicate this to gcc by using this macro to modify
        !          5970: @code{fixed_regs} and @code{call_used_regs} to 1 for each of the
        !          5971: registers in the classes which should not be used by gcc.  Also define
        !          5972: the macro @code{REG_CLASS_FROM_LETTER} to return @code{NO_REGS} if it
        !          5973: is called with a letter for a class that shouldn't be used.
        !          5974: 
        !          5975: (However, if this class is not included in @code{GENERAL_REGS} and all
        !          5976: of the insn patterns whose constraints permit this class are
        !          5977: controlled by target switches, then GCC will automatically avoid using
        !          5978: these registers when the target switches are opposed to them.)
        !          5979: 
1.1.1.4   root     5980: @item OVERLAPPING_REGNO_P (@var{regno})
                   5981: If defined, this is a C expression whose value is @var{regno} is
                   5982: nonzero if hard register number @var{regno} is an overlapping
                   5983: register.  This means a hard register which overlaps a hard register
                   5984: with a different number.  (Such overlap is undesirable, but
                   5985: occasionally it allows a machine to be supported which otherwise could
                   5986: not be.)  This macro must return nonzero for @emph{all} the registers
                   5987: which overlap each other.  GNU CC can use an overlapping register only
                   5988: in certain limited ways.  It can be used for allocation within a basic
                   5989: block, and may be spilled for reloading; that is all.
                   5990: 
                   5991: If this macro is not defined, it means that none of the hard registers
                   5992: overlap each other.  This is the usual situation.
                   5993: 
                   5994: @item INSN_CLOBBERS_REGNO_P (@var{insn}, @var{regno})
                   5995: If defined, this is a C expression whose value should be nonzero if
                   5996: the insn @var{insn} has the effect of mysteriously clobbering the
                   5997: contents of hard register number @var{regno}.  By ``mysterious'' we
                   5998: mean that the insn's RTL expression doesn't describe such an effect.
                   5999: 
                   6000: If this macro is not defined, it means that no insn clobbers registers
                   6001: mysteriously.  This is the usual situation; all else being equal,
                   6002: it is best for the RTL expression to show all the activity.
                   6003: 
                   6004: @item PRESERVE_DEATH_INFO_REGNO_P (@var{regno})
                   6005: If defined, this is a C expression whose value is nonzero if accurate
                   6006: @code{REG_DEAD} notes are needed for hard register number @var{regno}
                   6007: at the time of outputting the assembler code.  When this is so, a few
                   6008: optimizations that take place after register allocation and could
                   6009: invalidate the death notes are not done when this register is
                   6010: involved.
                   6011: 
                   6012: You would arrange to preserve death info for a register when some
                   6013: of the code in the machine description which is executed to write
                   6014: the assembler code looks at the the death notes.  This is
                   6015: necessary only when the actual hardware feature which GNU CC
                   6016: thinks of as a register is not actually a register of the usual sort.
                   6017: (It might, for example, be a hardware stack.)
                   6018: 
                   6019: If this macro is not defined, it means that no death notes need to be
                   6020: preserved.  This is the usual situation.
                   6021: 
1.1       root     6022: @item HARD_REGNO_REGS (@var{regno}, @var{mode})
                   6023: A C expression for the number of consecutive hard registers, starting
                   6024: at register number @var{regno}, required to hold a value of mode
                   6025: @var{mode}.
                   6026: 
                   6027: On a machine where all registers are exactly one word, a suitable
                   6028: definition of this macro is
                   6029: 
                   6030: @example
                   6031: #define HARD_REGNO_NREGS(REGNO, MODE)            \
                   6032:    ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
                   6033:     / UNITS_PER_WORD))
                   6034: @end example
                   6035: 
                   6036: @item HARD_REGNO_MODE_OK (@var{regno}, @var{mode})
                   6037: A C expression that is nonzero if it is permissible to store a value
                   6038: of mode @var{mode} in hard register number @var{regno} (or in several
                   6039: registers starting with that one).  For a machine where all registers
                   6040: are equivalent, a suitable definition is
                   6041: 
                   6042: @example
                   6043: #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
                   6044: @end example
                   6045: 
                   6046: It is not necessary for this macro to check for fixed register numbers
                   6047: because the allocation mechanism considers them to be always occupied.
                   6048: 
1.1.1.2   root     6049: Many machines have special registers for floating point arithmetic.
                   6050: Often people assume that floating point machine modes are allowed only
                   6051: in floating point registers.  This is not true.  Any registers that
                   6052: can hold integers can safely @emph{hold} a floating point machine
                   6053: mode, whether or not floating arithmetic can be done on it in those
                   6054: registers.
                   6055: 
                   6056: The true significance of special floating registers is rather than
                   6057: non-floating-point machine modes @emph{may not} go in those registers.
                   6058: This is true if the floating registers normalize any value stored in
                   6059: them, because storing a non-floating value there would garble it.  If
                   6060: the floating registers do not automatically normalize, if you can
                   6061: store any bit pattern in one and retrieve it unchanged without a trap,
                   6062: then any machine mode may go in a floating register and this macro
                   6063: should say so.
                   6064: 
                   6065: Sometimes there are floating registers that are especially slow to
                   6066: access, so that it is better to store a value in a stack frame than in
                   6067: such a register if floating point arithmetic is not being done.  As long
                   6068: as the floating registers are not in class @code{GENERAL_REGS}, they
                   6069: will not be used unless some insn's constraint asks for one.
                   6070: 
                   6071: It is obligatory to support floating point `move' instructions into
                   6072: and out of general registers, because unions and structures (which
                   6073: have modes @samp{SImode} or @samp{DImode}) can be in those registers
                   6074: and they may have floating point members.
                   6075: 
1.1       root     6076: @item MODES_TIEABLE_P (@var{mode1}, @var{mode2})
                   6077: A C expression that is nonzero if it is desirable to choose register
                   6078: allocation so as to avoid move instructions between a value of mode
                   6079: @var{mode1} and a value of mode @var{mode2}.
                   6080: 
                   6081: If @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode1})} and
                   6082: @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are ever different
                   6083: for any @var{r}, then @code{MODES_TIEABLE_P (@var{mode1},
                   6084: @var{mode2})} must be zero.
                   6085: 
                   6086: @item PC_REGNUM
                   6087: If the program counter has a register number, define this as that
                   6088: register number.  Otherwise, do not define it.
                   6089: 
                   6090: @item STACK_POINTER_REGNUM
                   6091: The register number of the stack pointer register, which must also be
                   6092: a fixed register according to @code{FIXED_REGISTERS}.  On many
                   6093: machines, the hardware determines which register this is.
                   6094: 
                   6095: @item FRAME_POINTER_REGNUM
                   6096: The register number of the frame pointer register, which is used to
1.1.1.2   root     6097: access automatic variables in the stack frame.  On some machines, the
1.1       root     6098: hardware determines which register this is.  On other machines, you
                   6099: can choose any register you wish for this purpose.
                   6100: 
1.1.1.2   root     6101: @item FRAME_POINTER_REQUIRED
                   6102: A C expression which is nonzero if a function must have and use a
                   6103: frame pointer.  This expression is evaluated in the reload pass, in
                   6104: the function @code{reload}, and it can in principle examine the
                   6105: current function and decide according to the facts, but on most
                   6106: machines the constant 0 or the constant 1 suffices.  Use 0 when the
                   6107: machine allows code to be generated with no frame pointer, and doing
                   6108: so saves some time or space.  Use 1 when there is no possible
                   6109: advantage to avoiding a frame pointer.
                   6110: 
                   6111: In certain cases, the compiler does not know how to do without a frame
                   6112: pointer.  The compiler recognizes those cases and automatically gives
                   6113: the function a frame pointer regardless of what
                   6114: @code{FRAME_POINTER_REQUIRED} says.  You don't need to worry about
                   6115: them.@refill
                   6116: 
                   6117: In a function that does not require a frame pointer, the frame pointer
1.1.1.4   root     6118: register can be allocated for ordinary usage, unless you mark it as a
                   6119: fixed register.  See @code{FIXED_REGISTERS} for more information.
1.1.1.2   root     6120: 
1.1       root     6121: @item ARG_POINTER_REGNUM
                   6122: The register number of the arg pointer register, which is used to
                   6123: access the function's argument list.  On some machines, this is the
                   6124: same as the frame pointer register.  On some machines, the hardware
                   6125: determines which register this is.  On other machines, you can choose
1.1.1.4   root     6126: any register you wish for this purpose.  If this is not the same
                   6127: register as the frame pointer register, then you must mark it as a
1.1       root     6128: fixed register according to @code{FIXED_REGISTERS}.
                   6129: 
                   6130: @item STATIC_CHAIN_REGNUM
                   6131: The register number used for passing a function's static chain
                   6132: pointer.  This is needed for languages such as Pascal and Algol where
                   6133: functions defined within other functions can access the local
                   6134: variables of the outer functions; it is not currently used because C
1.1.1.7 ! root     6135: does not provide this feature, but you must define the macro.
1.1       root     6136: 
                   6137: The static chain register need not be a fixed register.
                   6138: 
                   6139: @item STRUCT_VALUE_REGNUM
1.1.1.2   root     6140: When a function's value's mode is @code{BLKmode}, the value is not
                   6141: returned according to @code{FUNCTION_VALUE}.  Instead, the caller
                   6142: passes the address of a block of memory in which the value should be
1.1.1.6   root     6143: stored.
                   6144: 
                   6145: If this value is passed in a register, then @code{STRUCT_VALUE_REGNUM}
                   6146: should be the number of that register.
                   6147: 
                   6148: @item STRUCT_VALUE
                   6149: If the structure value address is not passed in a register, define
                   6150: @code{STRUCT_VALUE} as an expression returning an RTX for the place
                   6151: where the address is passed.  If it returns a @samp{mem} RTX, the
                   6152: address is passed as an ``invisible'' first argument.
                   6153: 
                   6154: @item STRUCT_VALUE_INCOMING_REGNUM
                   6155: On some architectures the place where the structure value address
                   6156: is found by the called function is not the same place that the
                   6157: caller put it.  This can be due to register windows, or it could
                   6158: be because the function prologue moves it to a different place.
                   6159: 
                   6160: If the incoming location of the structure value address is in a
                   6161: register, define this macro as the register number.
                   6162: 
                   6163: @item STRUCT_VALUE_INCOMING
                   6164: If the incoming location is not a register, define
                   6165: @code{STRUCT_VALUE_INCOMING} as an expression for an RTX for where the
                   6166: called function should find the value.  If it should find the value on
                   6167: the stack, define this to create a @samp{mem} which refers to the
                   6168: frame pointer.  If the value is a @samp{mem}, the compiler assumes it
                   6169: is for an invisible first argument, and leaves space for it when
                   6170: finding the first real argument.
1.1.1.5   root     6171: 
                   6172: @item REG_ALLOC_ORDER
                   6173: If defined, an initializer for a vector of integers, containing the
                   6174: numbers of hard registers in the order in which the GNU CC should
                   6175: prefer to use them (from most preferred to least).
                   6176: 
                   6177: If this macro is not defined, registers are used lowest numbered first
                   6178: (all else being equal).
                   6179: 
                   6180: One use of this macro is on the 360, where the highest numbered
                   6181: registers must always be saved and the save-multiple-registers
                   6182: instruction supports only sequences of consecutive registers.  This
                   6183: macro is defined to cause the highest numbered allocatable registers
                   6184: to be used first.
1.1       root     6185: @end table
                   6186: 
                   6187: @node Register Classes, Stack Layout, Registers, Machine Macros
                   6188: @section Register Classes
                   6189: 
                   6190: On many machines, the numbered registers are not all equivalent.
                   6191: For example, certain registers may not be allowed for indexed addressing;
                   6192: certain registers may not be allowed in some instructions.  These machine
                   6193: restrictions are described to the compiler using @dfn{register classes}.
                   6194: 
                   6195: You define a number of register classes, giving each one a name and saying
                   6196: which of the registers belong to it.  Then you can specify register classes
                   6197: that are allowed as operands to particular instruction patterns.
                   6198: 
                   6199: In general, each register will belong to several classes.  In fact, one
                   6200: class must be named @code{ALL_REGS} and contain all the registers.  Another
                   6201: class must be named @code{NO_REGS} and contain no registers.  Often the
                   6202: union of two classes will be another class; however, this is not required.
                   6203: 
                   6204: One of the classes must be named @code{GENERAL_REGS}.  There is nothing
                   6205: terribly special about the name, but the operand constraint letters
                   6206: @samp{r} and @samp{g} specify this class.  If @code{GENERAL_REGS} is
                   6207: the same as @code{ALL_REGS}, just define it as a macro which expands
                   6208: to @code{ALL_REGS}.
                   6209: 
                   6210: The way classes other than @code{GENERAL_REGS} are specified in operand
                   6211: constraints is through machine-dependent operand constraint letters.
                   6212: You can define such letters to correspond to various classes, then use
                   6213: them in operand constraints.
                   6214: 
1.1.1.2   root     6215: You should define a class for the union of two classes whenever some
                   6216: instruction allows both classes.  For example, if an instruction allows
                   6217: either a floating-point (coprocessor) register or a general register for a
                   6218: certain operand, you should define a class @code{FLOAT_OR_GENERAL_REGS}
                   6219: which includes both of them.  Otherwise you will get suboptimal code.
                   6220: 
1.1       root     6221: You must also specify certain redundant information about the register
                   6222: classes: for each class, which classes contain it and which ones are
                   6223: contained in it; for each pair of classes, the largest class contained
                   6224: in their union.
                   6225: 
                   6226: @table @code
                   6227: @item enum reg_class
                   6228: An enumeral type that must be defined with all the register class names
                   6229: as enumeral values.  @code{NO_REGS} must be first.  @code{ALL_REGS}
                   6230: must be the last register class, followed by one more enumeral value,
                   6231: @code{LIM_REG_CLASSES}, which is not a register class but rather
                   6232: tells how many classes there are.
                   6233: 
                   6234: Each register class has a number, which is the value of casting
                   6235: the class name to type @code{int}.  The number serves as an index
                   6236: in many of the tables described below.
                   6237: 
1.1.1.7 ! root     6238: @item N_REG_CLASSES
        !          6239: The number of distinct register classes, defined as follows:
        !          6240: 
        !          6241: @example
        !          6242: #define N_REG_CLASSES (int) LIM_REG_CLASSES
        !          6243: @end example
        !          6244: 
1.1       root     6245: @item REG_CLASS_NAMES
                   6246: An initializer containing the names of the register classes as C string
                   6247: constants.  These names are used in writing some of the debugging dumps.
                   6248: 
                   6249: @item REG_CLASS_CONTENTS
                   6250: An initializer containing the contents of the register classes, as integers
                   6251: which are bit masks.  The @var{n}th integer specifies the contents of class
                   6252: @var{n}.  The way the integer @var{mask} is interpreted is that
                   6253: register @var{r} is in the class if @code{@var{mask} & (1 << @var{r})} is 1.
                   6254: 
                   6255: When the machine has more than 32 registers, an integer does not suffice.
                   6256: Then the integers are replaced by sub-initializers, braced groupings containing
                   6257: several integers.  Each sub-initializer must be suitable as an initializer
                   6258: for the type @code{HARD_REG_SET} which is defined in @file{hard-reg-set.h}.
                   6259: 
                   6260: @item REGNO_REG_CLASS (@var{regno})
                   6261: A C expression whose value is a register class containing hard register
                   6262: @var{regno}.  In general there is more that one such class; choose a class
                   6263: which is @dfn{minimal}, meaning that no smaller class also contains the
                   6264: register.
                   6265: 
1.1.1.7 ! root     6266: @item BASE_REG_CLASS
        !          6267: A macro whose definition is the name of the class to which a valid
        !          6268: base register must belong.  A base register is one used in an address
        !          6269: which is the register value plus a displacement.
        !          6270: 
1.1       root     6271: @item INDEX_REG_CLASS
1.1.1.7 ! root     6272: A macro whose definition is the name of the class to which a valid
        !          6273: index register must belong.  An index register is one used in an
        !          6274: address where its value is either multiplied by a scale factor or
        !          6275: added to another register (as well as added to a displacement).
1.1       root     6276: 
                   6277: @item REG_CLASS_FROM_LETTER (@var{char})
                   6278: A C expression which defines the machine-dependent operand constraint
1.1.1.7 ! root     6279: letters for register classes.  If @var{char} is such a letter, the
        !          6280: value should be the register class corresponding to it.  Otherwise,
        !          6281: the value should be @code{NO_REGS}.
1.1       root     6282: 
1.1.1.2   root     6283: @item REGNO_OK_FOR_BASE_P (@var{num})
                   6284: A C expression which is nonzero if register number @var{num} is
                   6285: suitable for use as a base register in operand addresses.  It may be
                   6286: either a suitable hard register or a pseudo register that has been
                   6287: allocated such a hard register.
                   6288: 
                   6289: @item REGNO_OK_FOR_INDEX_P (@var{num})
                   6290: A C expression which is nonzero if register number @var{num} is
                   6291: suitable for use as an index register in operand addresses.  It may be
                   6292: either a suitable hard register or a pseudo register that has been
                   6293: allocated such a hard register.
                   6294: 
                   6295: The difference between an index register and a base register is that
                   6296: the index register may be scaled.  If an address involves the sum of
                   6297: two registers, neither one of them scaled, then either one may be
                   6298: labeled the ``base'' and the other the ``index''; but whichever
                   6299: labeling is used must fit the machine's constraints of which registers
                   6300: may serve in each capacity.  The compiler will try both labelings,
1.1.1.7 ! root     6301: looking for one that is valid, and will reload one or both registers
        !          6302: only if neither labeling works.
1.1       root     6303: 
                   6304: @item PREFERRED_RELOAD_CLASS (@var{x}, @var{class})
                   6305: A C expression that places additional restrictions on the register class
                   6306: to use when it is necessary to copy value @var{x} into a register in class
                   6307: @var{class}.  The value is a register class; perhaps @var{class}, or perhaps
                   6308: another, smaller class.  @var{class} is always safe as a value.  In fact,
                   6309: the definition
                   6310: 
                   6311: @example
                   6312: #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
                   6313: @end example
                   6314: 
                   6315: @noindent
                   6316: is always safe.  However, sometimes returning a more restrictive class
                   6317: makes better code.  For example, on the 68000, when @var{x} is an
                   6318: integer constant that is in range for a @samp{moveq} instruction,
                   6319: the value of this macro is always @code{DATA_REGS} as long as
                   6320: @var{class} includes the data registers.  Requiring a data register
                   6321: guarantees that a @samp{moveq} will be used.
1.1.1.2   root     6322: 
1.1.1.6   root     6323: If @var{x} is a @samp{const_double}, by returning @code{NO_REGS}
                   6324: you can force @var{x} into a memory constant.  This is useful on
                   6325: certain machines where immediate floating values cannot be loaded into
                   6326: certain kinds of registers.
                   6327: 
1.1.1.2   root     6328: @item CLASS_MAX_NREGS (@var{class}, @var{mode})
                   6329: A C expression for the maximum number of consecutive registers
                   6330: of class @var{class} needed to hold a value of mode @var{mode}.
                   6331: 
                   6332: This is closely related to the macro @code{HARD_REGNO_NREGS}.
                   6333: In fact, the value of the macro @code{CLASS_MAX_NREGS (@var{class}, @var{mode})}
                   6334: should be the maximum value of @code{HARD_REGNO_NREGS (@var{regno}, @var{mode})}
                   6335: for all @var{regno} values in the class @var{class}.
                   6336: 
                   6337: This macro helps control the handling of multiple-word values
                   6338: in the reload pass.
1.1       root     6339: @end table
                   6340: 
1.1.1.2   root     6341: Two other special macros describe which constants fit which constraint
                   6342: letters.
1.1       root     6343: 
                   6344: @table @code
                   6345: @item CONST_OK_FOR_LETTER_P (@var{value}, @var{c})
                   6346: A C expression that defines the machine-dependent operand constraint letters
                   6347: that specify particular ranges of integer values.  If @var{c} is one
                   6348: of those letters, the expression should check that @var{value}, an integer,
                   6349: is in the appropriate range and return 1 if so, 0 otherwise.  If @var{c} is
                   6350: not one of those letters, the value should be 0 regardless of @var{value}.
                   6351: 
                   6352: @item CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c})
                   6353: A C expression that defines the machine-dependent operand constraint
                   6354: letters that specify particular ranges of floating values.  If @var{c} is
1.1.1.2   root     6355: one of those letters, the expression should check that @var{value}, an RTX
1.1       root     6356: of code @samp{const_double}, is in the appropriate range and return 1 if
                   6357: so, 0 otherwise.  If @var{c} is not one of those letters, the value should
                   6358: be 0 regardless of @var{value}.
                   6359: @end table
                   6360: 
1.1.1.2   root     6361: @node Stack Layout, Library Names, Register Classes, Machine Macros
1.1       root     6362: @section Describing Stack Layout
                   6363: 
                   6364: @table @code
                   6365: @item STACK_GROWS_DOWNWARD
                   6366: Define this macro if pushing a word onto the stack moves the stack
1.1.1.2   root     6367: pointer to a smaller address.
                   6368: 
                   6369: When we say, ``define this macro if @dots{},'' it means that the
                   6370: compiler checks this macro only with @code{#ifdef} so the precise
                   6371: definition used does not matter.
1.1       root     6372: 
                   6373: @item FRAME_GROWS_DOWNWARD
                   6374: Define this macro if the addresses of local variable slots are at negative
                   6375: offsets from the frame pointer.
                   6376: 
                   6377: @item STARTING_FRAME_OFFSET
                   6378: Offset from the frame pointer to the first local variable slot to be allocated.
                   6379: 
                   6380: If @code{FRAME_GROWS_DOWNWARD}, the next slot's offset is found by
                   6381: subtracting the length of the first slot from @code{STARTING_FRAME_OFFSET}.
                   6382: Otherwise, it is found by adding the length of the first slot to
                   6383: the value @code{STARTING_FRAME_OFFSET}.
                   6384: 
                   6385: @item PUSH_ROUNDING (@var{npushed})
                   6386: A C expression that is the number of bytes actually pushed onto the
                   6387: stack when an instruction attempts to push @var{npushed} bytes.
                   6388: 
1.1.1.2   root     6389: If the target machine does not have a push instruction, do not define
                   6390: this macro.  That directs GNU CC to use an alternate strategy: to
                   6391: allocate the entire argument block and then store the arguments into
                   6392: it.
                   6393: 
1.1       root     6394: On some machines, the definition
                   6395: 
                   6396: @example
                   6397: #define PUSH_ROUNDING(BYTES) (BYTES)
                   6398: @end example
                   6399: 
                   6400: @noindent
                   6401: will suffice.  But on other machines, instructions that appear
                   6402: to push one byte actually push two bytes in an attempt to maintain
                   6403: alignment.  Then the definition should be
                   6404: 
                   6405: @example
                   6406: #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
                   6407: @end example
                   6408: 
                   6409: @item FIRST_PARM_OFFSET
                   6410: Offset from the argument pointer register to the first argument's address.
                   6411: 
1.1.1.2   root     6412: @item RETURN_POPS_ARGS (@var{funtype})
                   6413: A C expression that should be 1 if a function pops its own arguments
                   6414: on returning, or 0 if the function pops no arguments and the caller
                   6415: must therefore pop them all after the function returns.
                   6416: 
                   6417: @var{funtype} is a C variable whose value is a tree node that
                   6418: describes the function in question.  Normally it is a node of type
                   6419: @code{FUNCTION_TYPE} that describes the data type of the function.
                   6420: From this it is possible to obtain the data types of the value and
                   6421: arguments (if known).
                   6422: 
                   6423: When a call to a library function is being considered, @var{funtype}
                   6424: will contain an identifier node for the library function.  Thus, if
                   6425: you need to distinguish among various library functions, you can do so
                   6426: by their names.  Note that ``library function'' in this context means
                   6427: a function used to perform arithmetic, whose name is known specially
                   6428: in the compiler and was not mentioned in the C code being compiled.
                   6429: 
                   6430: On the Vax, all functions always pop their arguments, so the
                   6431: definition of this macro is 1.  On the 68000, using the standard
                   6432: calling convention, no functions pop their arguments, so the value of
                   6433: the macro is always 0 in this case.  But an alternative calling
                   6434: convention is available in which functions that take a fixed number of
                   6435: arguments pop them but other functions (such as @code{printf}) pop
                   6436: nothing (the caller pops all).  When this convention is in use,
                   6437: @var{funtype} is examined to determine whether a function takes a
                   6438: fixed number of arguments.
                   6439: 
                   6440: @item FUNCTION_VALUE (@var{valtype}, @var{func})
                   6441: A C expression to create an RTX representing the place where a
                   6442: function returns a value of data type @var{valtype}.  @var{valtype} is
                   6443: a tree node representing a data type.  Write @code{TYPE_MODE
                   6444: (@var{valtype})} to get the machine mode used to represent that type.
                   6445: On many machines, only the mode is relevant.  (Actually, on most
                   6446: machines, scalar values are returned in the same place regardless of
                   6447: mode).@refill
                   6448: 
                   6449: If the precise function being called is known, @var{func} is a tree
                   6450: node (@code{FUNCTION_DECL}) for it; otherwise, @var{func} is a null
                   6451: pointer.  This makes it possible to use a different value-returning
                   6452: convention for specific functions when all their calls are
                   6453: known.@refill
                   6454: 
                   6455: @item FUNCTION_OUTGOING_VALUE (@var{valtype}, @var{func})
                   6456: Define this macro if the target machine has ``register windows''
                   6457: so that the register in which a function returns its value is not
                   6458: the same as the one in which the caller sees the value.
                   6459: 
                   6460: For such machines, @code{FUNCTION_VALUE} computes the register in
                   6461: which the caller will see the value, and
                   6462: @code{FUNCTION_OUTGOING_VALUE} should be defined in a similar fashion
                   6463: to tell the function where to put the value.@refill
                   6464: 
                   6465: If @code{FUNCTION_OUTGOING_VALUE} is not defined,
                   6466: @code{FUNCTION_VALUE} serves both purposes.@refill
                   6467: 
                   6468: @item LIBCALL_VALUE (@var{mode})
                   6469: A C expression to create an RTX representing the place where a library
                   6470: function returns a value of mode @var{mode}.  If the precise function
                   6471: being called is known, @var{func} is a tree node
                   6472: (@code{FUNCTION_DECL}) for it; otherwise, @var{func} is a null
                   6473: pointer.  This makes it possible to use a different value-returning
                   6474: convention for specific functions when all their calls are
                   6475: known.@refill
                   6476: 
                   6477: Note that ``library function'' in this context means a compiler
                   6478: support routine, used to perform arithmetic, whose name is known
                   6479: specially by the compiler and was not mentioned in the C code being
                   6480: compiled.
                   6481: 
                   6482: @item FUNCTION_VALUE_REGNO_P (@var{regno})
                   6483: A C expression that is nonzero if @var{regno} is the number of a hard
1.1.1.6   root     6484: register in which the values of called function may come back.
1.1.1.2   root     6485: 
                   6486: A register whose use for returning values is limited to serving as the
                   6487: second of a pair (for a value of type @code{double}, say) need not be
                   6488: recognized by this macro.  So for most machines, this definition
                   6489: suffices:
                   6490: 
                   6491: @example
                   6492: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
                   6493: @end example
                   6494: 
1.1.1.6   root     6495: If the machine has register windows, so that the caller and the called
                   6496: function use different registers for the return value, this macro
                   6497: should recognize only the caller's register numbers.
                   6498: 
1.1.1.2   root     6499: @item FUNCTION_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
                   6500: A C expression that controls whether a function argument is passed
                   6501: in a register, and which register.
                   6502: 
                   6503: The arguments are @var{cum}, which summarizes all the previous
                   6504: arguments; @var{mode}, the machine mode of the argument; @var{type},
                   6505: the data type of the argument as a tree node or 0 if that is not known
                   6506: (which happens for C support library functions); and @var{named},
                   6507: which is 1 for an ordinary argument and 0 for nameless arguments that
                   6508: correspond to @samp{...} in the called function's prototype.
                   6509: 
                   6510: The value of the expression should either be a @samp{reg} RTX for the
                   6511: hard register in which to pass the argument, or zero to pass the
                   6512: argument on the stack.
                   6513: 
                   6514: For the Vax and 68000, where normally all arguments are pushed, zero
                   6515: suffices as a definition.
                   6516: 
                   6517: @item FUNCTION_INCOMING_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
                   6518: Define this macro if the target machine has ``register windows'', so
                   6519: that the register in which a function sees an arguments is not
                   6520: necessarily the same as the one in which the caller passed the
                   6521: argument.
                   6522: 
                   6523: For such machines, @code{FUNCTION_ARG} computes the register in which
                   6524: the caller passes the value, and @code{FUNCTION_INCOMING_ARG} should
                   6525: be defined in a similar fashion to tell the function being called
                   6526: where the arguments will arrive.
                   6527: 
                   6528: If @code{FUNCTION_INCOMING_ARG} is not defined, @code{FUNCTION_ARG}
                   6529: serves both purposes.@refill
                   6530: 
                   6531: @item FUNCTION_ARG_PARTIAL_NREGS (@var{cum}, @var{mode}, @var{type}, @var{named})
                   6532: A C expression for the number of words, at the beginning of an
                   6533: argument, must be put in registers.  The value must be zero for
                   6534: arguments that are passed entirely in registers or that are entirely
                   6535: pushed on the stack.
                   6536: 
                   6537: On some machines, certain arguments must be passed partially in
                   6538: registers and partially in memory.  On these machines, typically the
                   6539: first @var{n} words of arguments are passed in registers, and the rest
                   6540: on the stack.  If a multi-word argument (a @code{double} or a
                   6541: structure) crosses that boundary, its first few words must be passed
                   6542: in registers and the rest must be pushed.  This macro tells the
                   6543: compiler when this occurs, and how many of the words should go in
                   6544: registers.
                   6545: 
                   6546: @code{FUNCTION_ARG} for these arguments should return the first
                   6547: register to be used by the caller for this argument; likewise
                   6548: @code{FUNCTION_INCOMING_ARG}, for the called function.
                   6549: 
                   6550: @item CUMULATIVE_ARGS
                   6551: A C type for declaring a variable that is used as the first argument
                   6552: of @code{FUNCTION_ARG} and other related values.  For some target
                   6553: machines, the type @code{int} suffices and can hold the number of
                   6554: bytes of argument so far.
                   6555: 
1.1.1.7 ! root     6556: @item INIT_CUMULATIVE_ARGS (@var{cum}, @var{fntype})
1.1.1.2   root     6557: A C statement (sans semicolon) for initializing the variable @var{cum}
                   6558: for the state at the beginning of the argument list.  The variable has
1.1.1.7 ! root     6559: type @code{CUMULATIVE_ARGS}.  The value of @var{fntype} is the tree node
        !          6560: for the data type of the function which will receive the args, or 0
        !          6561: if the args are to a compiler support library function.
1.1.1.2   root     6562: 
                   6563: @item FUNCTION_ARG_ADVANCE (@var{cum}, @var{mode}, @var{type}, @var{named})
                   6564: Update the summarizer variable @var{cum} to advance past an argument
                   6565: in the argument list.  The values @var{mode}, @var{type} and
                   6566: @var{named} describe that argument.  Once this is done, the variable
                   6567: @var{cum} is suitable for analyzing the @emph{following} argument
                   6568: with @code{FUNCTION_ARG}, etc.@refill
                   6569: 
                   6570: @item FUNCTION_ARG_REGNO_P (@var{regno})
                   6571: A C expression that is nonzero if @var{regno} is the number of a hard
                   6572: register in which function arguments are sometimes passed.  This does
                   6573: @emph{not} include implicit arguments such as the static chain and
                   6574: the structure-value address.  On many machines, no registers can be
                   6575: used for this purpose since all function arguments are pushed on the
                   6576: stack.
1.1       root     6577: 
1.1.1.6   root     6578: @item FUNCTION_ARG_PADDING (@var{mode}, @var{size})
                   6579: If defined, a C expression which determines whether, and in which direction,
                   6580: to pad out an argument with extra space.  The value should be of type
                   6581: @code{enum direction}: either @code{upward} to pad above the argument,
                   6582: @code{downward} to pad below, or @code{none} to inhibit padding.
                   6583: 
                   6584: The argument @var{size} is an RTX which describes the size of the
                   6585: argument, in bytes.  It should be used only if @var{mode} is
                   6586: @code{BLKmode}.  Otherwise, @var{size} is 0.
                   6587: 
                   6588: This macro does not control the @emph{amount} of padding; that is
                   6589: always just enough to reach the next multiple of @code{PARM_BOUNDARY}.
                   6590: 
                   6591: This macro has a default definition which is right for most systems.
                   6592: For little-endian machines, the default is to pad upward.  For
                   6593: big-endian machines, the default is to pad downward for an argument of
                   6594: constant size shorter than an @code{int}, and upward otherwise.
                   6595: 
1.1       root     6596: @item FUNCTION_PROLOGUE (@var{file}, @var{size})
                   6597: A C compound statement that outputs the assembler code for entry to a
                   6598: function.  The prologue is responsible for setting up the stack frame,
                   6599: initializing the frame pointer register, saving registers that must be
1.1.1.2   root     6600: saved, and allocating @var{size} additional bytes of storage for the
                   6601: local variables.  @var{size} is an integer.  @var{file} is a stdio
                   6602: stream to which the assembler code should be output.
1.1       root     6603: 
                   6604: The label for the beginning of the function need not be output by this
                   6605: macro.  That has already been done when the macro is run.
                   6606: 
                   6607: To determine which registers to save, the macro can refer to the array
1.1.1.2   root     6608: @code{regs_ever_live}: element @var{r} is nonzero if hard register
                   6609: @var{r} is used anywhere within the function.  This implies the
                   6610: function prologue should save register @var{r}, but not if it is one
                   6611: of the call-used registers.
                   6612: 
                   6613: On machines where functions may or may not have frame-pointers, the
                   6614: function entry code must vary accordingly; it must set up the frame
                   6615: pointer if one is wanted, and not otherwise.  To determine whether a
                   6616: frame pointer is in wanted, the macro can refer to the variable
                   6617: @code{frame_pointer_needed}.  The variable's value will be 1 at run
                   6618: time in a function that needs a frame pointer.
                   6619: 
                   6620: @item FUNCTION_PROFILER (@var{file}, @var{labelno})
                   6621: A C statement or compound statement to output to @var{file} some
                   6622: assembler code to call the profiling subroutine @code{mcount}.
                   6623: Before calling, the assembler code must load the address of a
                   6624: counter variable into a register where @code{mcount} expects to
                   6625: find the address.  The name of this variable is @samp{LP} followed
                   6626: by the number @var{labelno}, so you would generate the name using
                   6627: @samp{LP%d} in a @code{fprintf}.
                   6628: 
                   6629: The details of how the address should be passed to @code{mcount} are
                   6630: determined by your operating system environment, not by GNU CC.  To
                   6631: figure them out, compile a small program for profiling using the
                   6632: system's installed C compiler and look at the assembler code that
                   6633: results.
                   6634: 
                   6635: @item EXIT_IGNORES_STACK
                   6636: Define this macro as a C expression that is nonzero if the return
                   6637: instruction or the function epilogue ignores the value of the stack
                   6638: pointer; in other words, if it is safe to delete an instruction to
                   6639: adjust the stack pointer before a return from the function.
                   6640: 
                   6641: Note that this macro's value is relevant only for for which frame
                   6642: pointers are maintained.  It is never possible to delete a final stack
                   6643: adjustment in a function that has no frame pointer, and the compiler
                   6644: knows this regardless of @code{EXIT_IGNORES_STACK}.
1.1       root     6645: 
                   6646: @item FUNCTION_EPILOGUE (@var{file}, @var{size})
                   6647: A C compound statement that outputs the assembler code for exit from a
                   6648: function.  The epilogue is responsible for restoring the saved
                   6649: registers and stack pointer to their values when the function was
                   6650: called, and returning control to the caller.  This macro takes the
                   6651: same arguments as the macro @code{FUNCTION_PROLOGUE}, and the
                   6652: registers to restore are determined from @code{regs_ever_live} and
                   6653: @code{CALL_USED_REGISTERS} in the same way.
                   6654: 
1.1.1.2   root     6655: On some machines, there is a single instruction that does all the work
                   6656: of returning from the function.  On these machines, give that
                   6657: instruction the name @samp{return} and do not define the macro
                   6658: @code{FUNCTION_EPILOGUE} at all.
                   6659: 
                   6660: On machines where functions may or may not have frame-pointers, the
                   6661: function exit code must vary accordingly.  Sometimes the code for
                   6662: these two cases is completely different.  To determine whether a frame
                   6663: pointer is in wanted, the macro can refer to the variable
                   6664: @code{frame_pointer_needed}.  The variable's value will be 1 at run
                   6665: time in a function that needs a frame pointer.
                   6666: 
                   6667: On some machines, some functions pop their arguments on exit while
                   6668: others leave that for the caller to do.  For example, the 68020 when
                   6669: given @samp{-mrtd} pops arguments in functions that take a fixed
                   6670: number of arguments.
                   6671: 
                   6672: Your definition of the macro @code{RETURN_POPS_ARGS} decides which
                   6673: functions pop their own arguments.  @code{FUNCTION_EPILOGUE} needs to
                   6674: know what was decided.  The variable @code{current_function_pops_args}
                   6675: is nonzero if the function should pop its own arguments.  If so, use
                   6676: the variable @code{current_function_args_size} as the number of bytes
                   6677: to pop.
                   6678: 
                   6679: @item FIX_FRAME_POINTER_ADDRESS (@var{addr}, @var{depth})
                   6680: A C compound statement to alter a memory address that uses the frame
                   6681: pointer register so that it uses the stack pointer register instead.
                   6682: This must be done in the instructions that load parameter values into
                   6683: registers, when the reload pass determines that a frame pointer is not
                   6684: necessary for the function.  @var{addr} will be a C variable name, and
                   6685: the updated address should be stored in that variable.  @var{depth}
                   6686: will be the current depth of stack temporaries (number of bytes of
                   6687: arguments currently pushed).  The change in offset between a
                   6688: frame-pointer-relative address and a stack-pointer-relative address
                   6689: must include @var{depth}.
                   6690: 
                   6691: Even if your machine description specifies there will always be a
                   6692: frame pointer in the frame pointer register, you must still define
                   6693: @code{FIX_FRAME_POINTER_ADDRESS}, but the definition will never be
                   6694: executed at run time, so it may be empty.
                   6695: @end table
                   6696: 
                   6697: @node Library Names, Addressing Modes, Stack Layout, Machine Macros
                   6698: @section Library Subroutine Names
                   6699: 
                   6700: @table @code
                   6701: @item UDIVSI3_LIBCALL
                   6702: A C string constant giving the name of the function to call for
                   6703: division of a full-word by a full-word.  If you do not define this
                   6704: macro, the default name is used, which is @code{_udivsi3}, a function
                   6705: defined in @file{gnulib}.
                   6706: 
                   6707: @item UMODSI3_LIBCALL
                   6708: A C string constant giving the name of the function to call for the
                   6709: remainder in division of a full-word by a full-word.  If you do not
                   6710: define this macro, the default name is used, which is @code{_umodsi3},
                   6711: a function defined in @file{gnulib}.
                   6712: 
                   6713: @item TARGET_MEM_FUNCTIONS
                   6714: Define this macro if GNU CC should generate calls to the System V
                   6715: (and ANSI C) library functions @code{memcpy} and @code{memset}
                   6716: rather than the BSD functions @code{bcopy} and @code{bzero}.
1.1       root     6717: @end table
                   6718: 
1.1.1.2   root     6719: @node Addressing Modes, Misc, Library Names, Machine Macros
1.1       root     6720: @section Addressing Modes
                   6721: 
                   6722: @table @code
                   6723: @item HAVE_POST_INCREMENT
                   6724: Define this macro if the machine supports post-increment addressing.
                   6725: 
                   6726: @item HAVE_PRE_INCREMENT
                   6727: @itemx HAVE_POST_DECREMENT
                   6728: @itemx HAVE_PRE_DECREMENT
                   6729: Similar for other kinds of addressing.
                   6730: 
                   6731: @item CONSTANT_ADDRESS_P (@var{x})
1.1.1.2   root     6732: A C expression that is 1 if the RTX @var{x} is a constant whose value
1.1       root     6733: is an integer.  This includes integers whose values are not explicitly
1.1.1.2   root     6734: known, such as @samp{symbol_ref} and @samp{label_ref} expressions and
                   6735: @samp{const} arithmetic expressions.
                   6736: 
                   6737: On most machines, this can be defined as @code{CONSTANT_P (@var{x})},
                   6738: but a few machines are more restrictive in which constant addresses
                   6739: are supported.
1.1       root     6740: 
                   6741: @item MAX_REGS_PER_ADDRESS
                   6742: A number, the maximum number of registers that can appear in a valid
                   6743: memory address.
                   6744: 
                   6745: @item GO_IF_LEGITIMATE_ADDRESS (@var{mode}, @var{x}, @var{label})
                   6746: A C compound statement with a conditional @code{goto @var{label};}
1.1.1.2   root     6747: executed if @var{x} (an RTX) is a legitimate memory address on the
                   6748: target machine for a memory operand of mode @var{mode}.
1.1       root     6749: 
                   6750: It usually pays to define several simpler macros to serve as
1.1.1.2   root     6751: subroutines for this one.  Otherwise it may be too complicated to
                   6752: understand.
                   6753: 
                   6754: This macro must exist in two variants: a strict variant and a
                   6755: non-strict one.  The strict variant is used in the reload pass.  It
                   6756: must be defined so that any pseudo-register that has not been
                   6757: allocated a hard register is considered a memory reference.  In
                   6758: contexts where some kind of register is required, a pseudo-register
                   6759: with no hard register must be rejected.
                   6760: 
                   6761: The non-strict variant is used in other passes.  It must be defined to
                   6762: accept all pseudo-registers in every context where some kind of
                   6763: register is required.
                   6764: 
                   6765: Compiler source files that want to use the strict variant of this
                   6766: macro define the macro @code{REG_OK_STRICT}.  You should use an
                   6767: @code{#ifdef REG_OK_STRICT} conditional to define the strict variant
                   6768: in that case and the non-strict variant otherwise.
                   6769: 
                   6770: Typically among the subroutines used to define
                   6771: @code{GO_IF_LEGITIMATE_ADDRESS} are subroutines to check for
                   6772: acceptable registers for various purposes (one for base registers, one
                   6773: for index registers, and so on).  Then only these subroutine macros
                   6774: need have two variants; the higher levels of macros may be the same
                   6775: whether strict or not.@refill
1.1       root     6776: 
1.1.1.7 ! root     6777: @item REG_OK_FOR_BASE_P (@var{x})
        !          6778: A C expression that is nonzero if @var{x} (asumed to be a @code{reg}
        !          6779: RTX) is valid for use as a base register.  For hard registers, it
        !          6780: should always accept those which the hardware permits and reject the
        !          6781: others.  Whether the macro accepts or rejects pseudo registers must be
        !          6782: controlled by @code{REG_OK_STRICT} as described above.  This usually
        !          6783: requires two variant definitions, of which @code{REG_OK_STRICT}
        !          6784: controls the one actually used.
        !          6785: 
        !          6786: @item REG_OK_FOR_INDEX_P (@var{x})
        !          6787: A C expression that is nonzero if @var{x} (asumed to be a @code{reg}
        !          6788: RTX) is valid for use as an index register.
        !          6789: 
        !          6790: The difference between an index register and a base register is that
        !          6791: the index register may be scaled.  If an address involves the sum of
        !          6792: two registers, neither one of them scaled, then either one may be
        !          6793: labeled the ``base'' and the other the ``index''; but whichever
        !          6794: labeling is used must fit the machine's constraints of which registers
        !          6795: may serve in each capacity.  The compiler will try both labelings,
        !          6796: looking for one that is valid, and will reload one or both registers
        !          6797: only if neither labeling works.
        !          6798: 
1.1       root     6799: @item LEGITIMIZE_ADDRESS (@var{x}, @var{oldx}, @var{mode}, @var{win})
                   6800: A C compound statement that attempts to replace @var{x} with a valid
1.1.1.2   root     6801: memory address for an operand of mode @var{mode}.  @var{win} will be a
                   6802: C statement label elsewhere in the code; the macro definition may use
1.1       root     6803: 
                   6804: @example
                   6805: GO_IF_LEGITIMATE_ADDRESS (@var{mode}, @var{x}, @var{win});
                   6806: @end example
                   6807: 
                   6808: @noindent
                   6809: to avoid further processing if the address has become legitimate.
                   6810: 
                   6811: @var{x} will always be the result of a call to @code{break_out_memory_refs},
                   6812: and @var{oldx} will be the operand that was given to that function to produce
                   6813: @var{x}.
                   6814: 
1.1.1.2   root     6815: The code generated by this macro should not alter the substructure of
                   6816: @var{x}.  If it transforms @var{x} into a more legitimate form, it
                   6817: should assign @var{x} (which will always be a C variable) a new value.
                   6818: 
                   6819: It is not necessary for this macro to come up with a legitimate
                   6820: address.  The compiler has standard ways of doing so in all cases.  In
                   6821: fact, it is safe for this macro to do nothing.  But often a
                   6822: machine-dependent strategy can generate better code.
                   6823: 
                   6824: @item GO_IF_MODE_DEPENDENT_ADDRESS (@var{addr}, @var{label})
                   6825: A C statement or compound statement with a conditional @code{goto
                   6826: @var{label};} executed if memory address @var{x} (an RTX) can have
                   6827: different meanings depending on the machine mode of the memory
                   6828: reference it is used for.
                   6829: 
                   6830: Autoincrement and autodecrement addresses typically have mode-dependent
                   6831: effects because the amount of the increment or decrement is the size
                   6832: of the operand being addressed.  Some machines have other mode-dependent
                   6833: addresses.  Many RISC machines have no mode-dependent addresses.
                   6834: 
                   6835: You may assume that @var{addr} is a valid address for the machine.
                   6836: 
                   6837: @item LEGITIMATE_CONSTANT_P (@var{x})
                   6838: A C expression that is nonzero if @var{x} is a legitimate constant for
                   6839: an immediate operand on the target machine.  You can assume that
                   6840: either @var{x} is a @samp{const_double} or it satisfies
                   6841: @code{CONSTANT_P}, so you need not check these things.  In fact,
                   6842: @samp{1} is a suitable definition for this macro on machines where any
                   6843: @samp{const_double} is valid and anything @code{CONSTANT_P} is valid.@refill
1.1       root     6844: @end table
                   6845: 
                   6846: @node Misc, Condition Code, Addressing Modes, Machine Macros
                   6847: @section Miscellaneous Parameters
                   6848: 
                   6849: @table @code
                   6850: @item CASE_VECTOR_MODE
1.1.1.2   root     6851: An alias for a machine mode name.  This is the machine mode that
                   6852: elements of a jump-table should have.
1.1       root     6853: 
                   6854: @item CASE_VECTOR_PC_RELATIVE
                   6855: Define this macro if jump-tables should contain relative addresses.
                   6856: 
1.1.1.2   root     6857: @item CASE_DROPS_THROUGH
                   6858: Define this if control falls through a @code{case} insn when the index
                   6859: value is out of range.  This means the specified default-label is
                   6860: actually ignored by the @code{case} insn proper.
                   6861: 
1.1       root     6862: @item IMPLICIT_FIX_EXPR
                   6863: An alias for a tree code that should be used by default for conversion
1.1.1.2   root     6864: of floating point values to fixed point.  Normally,
                   6865: @code{FIX_ROUND_EXPR} is used.@refill
                   6866: 
                   6867: @item FIXUNS_TRUNC_LIKE_FIX_TRUNC
                   6868: Define this macro if the same instructions that convert a floating
                   6869: point number to a signed fixed point number also convert validly to an
                   6870: unsigned one.
1.1       root     6871: 
                   6872: @item EASY_DIV_EXPR
1.1.1.2   root     6873: An alias for a tree code that is the easiest kind of division to
                   6874: compile code for in the general case.  It may be
                   6875: @code{TRUNC_DIV_EXPR}, @code{FLOOR_DIV_EXPR}, @code{CEIL_DIV_EXPR} or
                   6876: @code{ROUND_DIV_EXPR}.  These four division operators differ in how
                   6877: they round the result to an integer.  @code{EASY_DIV_EXPR} is used
                   6878: when it is permissible to use any of those kinds of division and the
                   6879: choice should be made on the basis of efficiency.@refill
                   6880: 
                   6881: @item DEFAULT_SIGNED_CHAR
                   6882: An expression whose value is 1 or 0, according to whether the type
                   6883: @code{char} should be signed or unsigned by default.  The user can
                   6884: always override this default with the options @samp{-fsigned-char}
                   6885: and @samp{-funsigned-char}.
                   6886: 
                   6887: @item SCCS_DIRECTIVE
                   6888: Define this if the preprocessor should ignore @code{#sccs} directives
1.1.1.4   root     6889: and print no error message.
                   6890: 
                   6891: @item IDENT_DIRECTIVE
                   6892: Define this if the preprocessor should ignore @code{#ident} directives
                   6893: and print no error message.
1.1       root     6894: 
                   6895: @item MOVE_MAX
                   6896: The maximum number of bytes that a single instruction can move quickly
                   6897: from memory to memory.
                   6898: 
1.1.1.2   root     6899: @item INT_TYPE_SIZE
                   6900: A C expression for the size in bits of the type @code{int} on the
                   6901: target machine.
                   6902: 
                   6903: @item SLOW_BYTE_ACCESS
                   6904: Define this macro as a C expression which is nonzero if accessing less
                   6905: than a word of memory (i.e. a @code{char} or a @code{short}) is slow
                   6906: (requires more than one instruction).
                   6907: 
1.1       root     6908: @item SLOW_ZERO_EXTEND
1.1.1.2   root     6909: Define this macro if zero-extension (of a @code{char} or @code{short}
                   6910: to an @code{int}) can be done faster if the destination is a register
                   6911: that is known to be zero.
                   6912: 
                   6913: If you define this macro, you must have instruction patterns that
                   6914: recognize RTL structures like this:
                   6915: 
                   6916: @example
                   6917: (set (strict-low-part (subreg:QI (reg:SI @dots{}) 0)) @dots{})
                   6918: @end example
                   6919: 
                   6920: @noindent
                   6921: and likewise for @code{HImode}.
1.1       root     6922: 
                   6923: @item SHIFT_COUNT_TRUNCATED
                   6924: Define this macro if shift instructions ignore all but the lowest few
                   6925: bits of the shift count.  It implies that a sign-extend or zero-extend
                   6926: instruction for the shift count can be omitted.
                   6927: 
1.1.1.2   root     6928: @item TRULY_NOOP_TRUNCATION (@var{outprec}, @var{inprec})
1.1       root     6929: A C expression which is nonzero if on this machine it is safe to
1.1.1.2   root     6930: ``convert'' an integer of @var{inprec} bits to one of @var{outprec}
                   6931: bits (where @var{outprec} is smaller than @var{inprec}) by merely
                   6932: operating on it as if it had only @var{outprec} bits.
1.1       root     6933: 
                   6934: On many machines, this expression can be 1.
                   6935: 
1.1.1.2   root     6936: @item NO_FUNCTION_CSE
                   6937: Define this macro if it is as good or better to call a constant
                   6938: function address than to call an address kept in a register.
                   6939: 
1.1.1.6   root     6940: @item PROMOTE_PROTOTYPES
                   6941: Define this macro if an argument declared as @code{char} or
                   6942: @code{short} in a prototype should actually be passed as an
                   6943: @code{int}.  In addition to avoiding errors in certain cases of
                   6944: mismatch, it also makes for better code on certain machines.
                   6945: 
1.1.1.2   root     6946: @item STORE_FLAG_VALUE
                   6947: A C expression for the value stored by a store-flag instruction
                   6948: (@code{s@var{cond}}) when the condition is true.  This is usually 1 or
                   6949: -1; it is required to be an odd number.
                   6950: 
                   6951: Do not define @code{STORE_FLAG_VALUE} if the machine has no store-flag
                   6952: instructions.
                   6953: 
1.1       root     6954: @item Pmode
1.1.1.2   root     6955: An alias for the machine mode for pointers.  Normally the definition
                   6956: can be
1.1       root     6957: 
                   6958: @example
                   6959: #define Pmode SImode
                   6960: @end example
                   6961: 
                   6962: @item FUNCTION_MODE
1.1.1.2   root     6963: An alias for the machine mode used for memory references to functions
                   6964: being called, in @samp{call} RTL expressions.  On most machines this
                   6965: should be @code{QImode}.
1.1       root     6966: 
1.1.1.7 ! root     6967: @item CONST_COSTS (@var{x}, @var{code})
1.1.1.2   root     6968: A part of a C @code{switch} statement that describes the relative
                   6969: costs of constant RTL expressions.  It must contain @code{case} labels
                   6970: for expression codes @samp{const_int}, @samp{const}, @samp{symbol_ref}, @samp{label_ref}
                   6971: and @samp{const_double}.  Each case must ultimately reach a
                   6972: @code{return} statement to return the relative cost of the use of that
1.1       root     6973: kind of constant value in an expression.  The cost may depend on the
                   6974: precise value of the constant, which is available for examination in
                   6975: @var{x}.
                   6976: 
1.1.1.2   root     6977: @var{code} is the expression code---redundant, since it can be
                   6978: obtained with @code{GET_CODE (@var{x})}.
                   6979: 
                   6980: @item DOLLARS_IN_IDENTIFIERS
1.1.1.4   root     6981: Define this to be nonzero if the character @samp{$} should be allowed
                   6982: by default in identifier names.
1.1       root     6983: @end table
                   6984: 
                   6985: @node Condition Code, Assembler Format, Misc, Machine Macros
                   6986: @section Condition Code Information
                   6987: 
                   6988: The file @file{conditions.h} defines a variable @code{cc_status} to
                   6989: describe how the condition code was computed (in case the interpretation of
                   6990: the condition code depends on the instruction that it was set by).  This
                   6991: variable contains the RTL expressions on which the condition code is
                   6992: currently based, and several standard flags.
                   6993: 
                   6994: Sometimes additional machine-specific flags must be defined in the machine
                   6995: description header file.  It can also add additional machine-specific
                   6996: information by defining @code{CC_STATUS_MDEP}.
                   6997: 
                   6998: @table @code
                   6999: @item CC_STATUS_MDEP
1.1.1.2   root     7000: C code for a data type which is used for declaring the @code{mdep}
                   7001: component of @code{cc_status}.  It defaults to @code{int}.
1.1       root     7002: 
                   7003: @item CC_STATUS_MDEP_INIT
1.1.1.2   root     7004: A C expression for the initial value of the @code{mdep} field.  It
                   7005: defaults to 0.
1.1       root     7006: 
                   7007: @item NOTICE_UPDATE_CC (@var{exp})
                   7008: A C compound statement to set the components of @code{cc_status}
1.1.1.2   root     7009: appropriately for an insn whose body is @var{exp}.  It is this macro's
                   7010: responsibility to recognize insns that set the condition code as a
                   7011: byproduct of other activity as well as those that explicitly set
                   7012: @code{(cc0)}.
                   7013: 
                   7014: If there are insn that do not set the condition code but do alter
                   7015: other machine registers, this macro must check to see whether they
                   7016: invalidate the expressions that the condition code is recorded as
                   7017: reflecting.  For example, on the 68000, insns that store in address
                   7018: registers do not set the condition code, which means that usually
                   7019: @code{NOTICE_UPDATE_CC} can leave @code{cc_status} unaltered for such
                   7020: insns.  But suppose that the previous insn set the condition code
                   7021: based on location @samp{a4@@(102)} and the current insn stores a new
                   7022: value in @samp{a4}.  Although the condition code is not changed by
                   7023: this, it will no longer be true that it reflects the contents of
                   7024: @samp{a4@@(102)}.  Therefore, @code{NOTICE_UPDATE_CC} must alter
1.1       root     7025: @code{cc_status} in this case to say that nothing is known about the
                   7026: condition code value.
                   7027: @end table
                   7028: 
                   7029: @node Assembler Format,, Condition Code, Machine Macros
                   7030: @section Output of Assembler Code
                   7031: 
                   7032: @table @code
1.1.1.2   root     7033: @item ASM_SPEC
                   7034: A C string constant that tells the GNU CC driver program options to
                   7035: pass to the assembler.  It can also specify how to translate options
                   7036: you give to GNU CC into options for GNU CC to pass to the assembler.
                   7037: See the file @file{tm-sun3.h} for an example of this.
                   7038: 
                   7039: Do not define this macro if it does not need to do anything.
                   7040: 
                   7041: @item LINK_SPEC
                   7042: A C string constant that tells the GNU CC driver program options to
                   7043: pass to the linker.  It can also specify how to translate options you
                   7044: give to GNU CC into options for GNU CC to pass to the linker.
                   7045: 
                   7046: Do not define this macro if it does not need to do anything.
                   7047: 
1.1.1.7 ! root     7048: @item LIB_SPEC
        !          7049: Another C string constant used much like @code{LINK_SPEC}.  The difference
        !          7050: between the two is that @code{LIBS_SPEC} is used at the end of the
        !          7051: command given to the linker.
        !          7052: 
        !          7053: If this macro is not defined, a default is provided that
        !          7054: loads the standard C library from the usual place.  See @file{gcc.c}.
        !          7055: 
        !          7056: @item STARTFILE_SPEC
        !          7057: Another C string constant used much like @code{LINK_SPEC}.  The
        !          7058: difference between the two is that @code{STARTFILE_SPEC} is used at
        !          7059: the very beginning of the command given to the linker.
        !          7060: 
        !          7061: If this macro is not defined, a default is provided that loads the
        !          7062: standard C startup file from the usual place.  See @file{gcc.c}.
        !          7063: 
1.1.1.4   root     7064: @item ASM_FILE_START (@var{stream})
                   7065: A C expression which outputs to the stdio stream @var{stream}
                   7066: some appropriate text to go at the start of an assembler file.
                   7067: 
                   7068: Normally this macro is defined to output a line containing
                   7069: @samp{#NO_APP}, which is a comment that has no effect on most
                   7070: assemblers but tells the GNU assembler that it can save time by not
                   7071: checking for certain assembler constructs.
                   7072: 
                   7073: On systems that use SDB, it is necessary to output certain commands;
                   7074: see @file{tm-attasm.h}.
1.1.1.2   root     7075: 
                   7076: @item ASM_APP_ON
                   7077: A C string constant for text to be output before each @code{asm}
                   7078: statement or group of consecutive ones.  Normally this is
                   7079: @code{"#APP"}, which is a comment that has no effect on most
                   7080: assemblers but tells the GNU assembler that it must check the lines
                   7081: that follow for all valid assembler constructs.
                   7082: 
                   7083: @item ASM_APP_OFF
                   7084: A C string constant for text to be output after each @code{asm}
                   7085: statement or group of consecutive ones.  Normally this is
                   7086: @code{"#NO_APP"}, which tells the GNU assembler to resume making the
                   7087: time-saving assumptions that are valid for ordinary compiler output.
                   7088: 
1.1       root     7089: @item TEXT_SECTION_ASM_OP
                   7090: A C string constant for the assembler operation that should precede
                   7091: instructions and read-only data.  Normally @code{".text"} is right.
                   7092: 
                   7093: @item DATA_SECTION_ASM_OP
1.1.1.2   root     7094: A C string constant for the assembler operation to identify the
                   7095: following data as writable initialized data.  Normally @code{".data"}
                   7096: is right.
1.1       root     7097: 
                   7098: @item REGISTER_NAMES
1.1.1.2   root     7099: A C initializer containing the assembler's names for the machine
                   7100: registers, each one as a C string constant.  This is what translates
                   7101: register numbers in the compiler into assembler language.
1.1       root     7102: 
                   7103: @item DBX_REGISTER_NUMBER (@var{regno})
1.1.1.2   root     7104: A C expression that returns the DBX register number for the compiler
                   7105: register number @var{regno}.  In simple cases, the value of this
                   7106: expression may be @var{regno} itself.  But sometimes there are some
                   7107: registers that the compiler knows about and DBX does not, or vice
                   7108: versa.  In such cases, some register may need to have one number in
                   7109: the compiler and another for DBX.
                   7110: 
1.1.1.4   root     7111: @item DBX_DEBUGGING_INFO
                   7112: Define this macro if GNU CC should produce debugging output for DBX
                   7113: in response to the @samp{-g} option.
                   7114: 
                   7115: @item SDB_DEBUGGING_INFO
                   7116: Define this macro if GNU CC should produce debugging output for SDB
                   7117: in response to the @samp{-g} option.
                   7118: 
1.1.1.6   root     7119: @item PUT_SDB_@var{op}
                   7120: Define these macros to override the assembler syntax for the special
                   7121: SDB assembler directives.  See @file{sdbout.c} for a list of these
                   7122: macros and their arguments.  If the standard syntax is used, you need
                   7123: not define them yourself.
                   7124: 
                   7125: @item SDB_GENERATE_FAKE
                   7126: Define this macro to override the usual method of constructing a dummy
                   7127: name for anonymous structure and union types.  See @file{sdbout.c} for
                   7128: more infomation.
                   7129: 
1.1.1.2   root     7130: @item DBX_NO_XREFS
                   7131: Define this macro if DBX on your system does not support the construct
                   7132: @samp{xs@var{tagname}}.  On some systems, this construct is used to
                   7133: describe a forward reference to a structure named @var{tagname}.
                   7134: On other systems, this construct is not supported at all.
                   7135: 
                   7136: @item DBX_CONTIN_LENGTH
                   7137: A symbol name in DBX-format debugging information is normally
                   7138: continued (split into two separate @code{.stabs} directives) when it
                   7139: exceeds a certain length (by default, 80 characters).  On some
                   7140: operating systems, DBX requires this splitting; on others, splitting
                   7141: must not be done.  You can inhibit splitting by defining this macro
                   7142: with the value zero.  You can override the default splitting-length by
                   7143: defining this macro as an expression for the length you desire.
                   7144: 
                   7145: @item DBX_CONTIN_CHAR
                   7146: Normally continuation is indicated by adding a @samp{\} character to
                   7147: the end of a @code{.stabs} string when a continuation follows.  To use
                   7148: a different character instead, define this macro as a character
                   7149: constant for the character you want to use.  Do not define this macro
                   7150: if backslash is correct for your system.
                   7151: 
1.1.1.4   root     7152: @item ASM_OUTPUT_LABEL (@var{stream}, @var{name})
1.1.1.2   root     7153: A C statement (sans semicolon) to output to the stdio stream
1.1.1.4   root     7154: @var{stream} the assembler definition of a label named @var{name}.  Use
                   7155: the expression @code{assemble_name (@var{stream}, @var{name})} to output
1.1.1.2   root     7156: the name itself; before and after that, output the additional
                   7157: assembler syntax for defining the name, and a newline.
                   7158: 
1.1.1.7 ! root     7159: @item ASM_DECLARE_FUNCTION_NAME (@var{stream}, @var{name}, @var{decl})
1.1.1.2   root     7160: A C statement (sans semicolon) to output to the stdio stream
1.1.1.7 ! root     7161: @var{stream} any text necessary for declaring the name @var{name} of a
        !          7162: function which is being defined.  This macro is responsible for
        !          7163: outputting the label definition (perhaps using
        !          7164: @code{ASM_OUTPUT_LABEL}).  The argument @var{decl} is the
        !          7165: @code{FUNCTION_DECL} tree node representing the function.
1.1.1.2   root     7166: 
                   7167: If this macro is not defined, then the function name is defined in the
                   7168: usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}).
                   7169: 
1.1.1.4   root     7170: @item ASM_GLOBALIZE_LABEL (@var{stream}, @var{name})
1.1.1.2   root     7171: A C statement (sans semicolon) to output to the stdio stream
1.1.1.4   root     7172: @var{stream} some commands that will make the label @var{name} global;
1.1.1.2   root     7173: that is, available for reference from other files.  Use the expression
1.1.1.4   root     7174: @code{assemble_name (@var{stream}, @var{name})} to output the name
1.1.1.2   root     7175: itself; before and after that, output the additional assembler syntax
                   7176: for making that name global, and a newline.
                   7177: 
1.1.1.7 ! root     7178: @item ASM_OUTPUT_EXTERNAL (@var{stream}, @var{name}, @var{decl})
1.1.1.2   root     7179: A C statement (sans semicolon) to output to the stdio stream
1.1.1.4   root     7180: @var{stream} any text necessary for declaring the name of an external
1.1.1.7 ! root     7181: symbol named @var{name} which is referenced in this compilation but
        !          7182: not defined.  The value of @var{decl} is the tree node for the
        !          7183: declaration.
1.1.1.2   root     7184: 
                   7185: This macro need not be defined if it does not need to output anything.
                   7186: The GNU assembler and most Unix assemblers don't require anything.
                   7187: 
1.1.1.4   root     7188: @item ASM_OUTPUT_LABELREF (@var{stream}, @var{name})
                   7189: A C statement to output to the stdio stream @var{stream} a reference in
1.1.1.2   root     7190: assembler syntax to a label named @var{name}.  The character @samp{_}
                   7191: should be added to the front of the name, if that is customary on your
                   7192: operating system, as it is in most Berkeley Unix systems.  This macro
                   7193: is used in @code{assemble_name}.
                   7194: 
1.1.1.7 ! root     7195: @item ASM_GENERATE_INTERNAL_LABEL (@var{string}, @var{prefix}, @var{num})
        !          7196: A C statement to store into the string @var{string} a label whose
        !          7197: name is made from the string @var{prefix} and the number @var{num}.
        !          7198: 
        !          7199: This string, when output subsequently by @code{ASM_OUTPUT_LABELREF},
        !          7200: should produce the same output that @code{ASM_OUTPUT_INTERNAL_LABEL}
        !          7201: would produce with the same @var{prefix} and @var{num}.
        !          7202: 
1.1.1.4   root     7203: @item ASM_OUTPUT_INTERNAL_LABEL (@var{stream}, @var{prefix}, @var{num})
                   7204: A C statement to output to the stdio stream @var{stream} a label whose
1.1.1.2   root     7205: name is made from the string @var{prefix} and the number @var{num}.
                   7206: These labels are used for internal purposes, and there is no reason
                   7207: for them to appear in the symbol table of the object file.  On many
                   7208: systems, the letter @samp{L} at the beginning of a label has this
                   7209: effect.  The usual definition of this macro is as follows:
                   7210: 
                   7211: @example
1.1.1.4   root     7212: fprintf (@var{stream}, "L%s%d:\n", @var{prefix}, @var{num})
1.1.1.2   root     7213: @end example
                   7214: 
1.1.1.4   root     7215: @item ASM_OUTPUT_CASE_LABEL (@var{stream}, @var{prefix}, @var{num}, @var{table})
1.1.1.2   root     7216: Define this if the label before a jump-table needs to be output
                   7217: specially.  The first three arguments are the same as for
                   7218: @code{ASM_OUTPUT_INTERNAL_LABEL}; the fourth argument is the
                   7219: jump-table which follows (a @samp{jump_insn} containing an
                   7220: @samp{addr_vec} or @samp{addr_diff_vec}).
                   7221: 
                   7222: This feature is used on system V to output a @code{swbeg} statement
                   7223: for the table.
                   7224: 
                   7225: If this macro is not defined, these labels are output with
                   7226: @code{ASM_OUTPUT_INTERNAL_LABEL}.
                   7227: 
1.1.1.4   root     7228: @item ASM_OUTPUT_CASE_END (@var{stream}, @var{num}, @var{table})
                   7229: Define this if something special must be output at the end of a jump-table.
                   7230: The definition should be a C statement to be executed after the assembler
                   7231: code for the table is written.  It should write the appropriate code to
                   7232: stdio stream @var{stream}.  The argument @var{table} is the jump-table
                   7233: insn, and @var{num} is the label-number of the preceding label.
                   7234: 
                   7235: If this macro is not defined, nothing special is output at the end of
                   7236: the jump-table.
                   7237: 
1.1.1.2   root     7238: @item ASM_FORMAT_PRIVATE_NAME (@var{outvar}, @var{name}, @var{number})
                   7239: A C expression to assign to @var{outvar} (which is a variable of type
                   7240: @code{char *}) a newly allocated string made from the string
                   7241: @var{name} and the number @var{number}, with some suitable punctuation
                   7242: added.  Use @code{alloca} to get space for the string.
                   7243: 
                   7244: This string will be used as the argument to @code{ASM_OUTPUT_LABELREF}
                   7245: to produce an assembler label for an internal static variable whose
                   7246: name is @var{name}.  Therefore, the string must be such as to result
                   7247: in valid assembler code.  The argument @var{number} is different each
                   7248: time this macro is executed; it prevents conflicts between
                   7249: similarly-named internal static variables in different scopes.
                   7250: 
                   7251: Ideally this string should not be a valid C identifier, to prevent any
                   7252: conflict with the user's own symbols.  Most assemblers allow periods
                   7253: or percent signs in assembler symbols; putting at least one of these
                   7254: between the name and the number will suffice.
                   7255: 
1.1.1.4   root     7256: @item ASM_OUTPUT_ADDR_DIFF_ELT (@var{stream}, @var{value}, @var{rel})
1.1.1.2   root     7257: This macro should be provided on machines where the addresses
                   7258: in a dispatch table are relative to the table's own address.
                   7259: 
                   7260: The definition should be a C statement to output to the stdio stream
1.1.1.4   root     7261: @var{stream} an assembler pseudo-instruction to generate a difference
1.1.1.2   root     7262: between two labels.  @var{value} and @var{rel} are the numbers of two
                   7263: internal labels.  The definitions of these labels are output using
                   7264: @code{ASM_OUTPUT_INTERNAL_LABEL}, and they must be printed in the same
                   7265: way here.  For example,
                   7266: 
                   7267: @example
1.1.1.4   root     7268: fprintf (@var{stream}, "\t.word L%d-L%d\n",
1.1.1.2   root     7269:          @var{value}, @var{rel})
                   7270: @end example
                   7271: 
1.1.1.4   root     7272: @item ASM_OUTPUT_ADDR_VEC_ELT (@var{stream}, @var{value})
1.1.1.2   root     7273: This macro should be provided on machines where the addresses
                   7274: in a dispatch table are absolute.
                   7275: 
                   7276: The definition should be a C statement to output to the stdio stream
1.1.1.4   root     7277: @var{stream} an assembler pseudo-instruction to generate a reference to
1.1.1.2   root     7278: a label.  @var{value} is the number of an internal label whose
                   7279: definition is output using @code{ASM_OUTPUT_INTERNAL_LABEL}.
                   7280: For example,
                   7281: 
                   7282: @example
1.1.1.4   root     7283: fprintf (@var{stream}, "\t.word L%d\n", @var{value})
1.1.1.2   root     7284: @end example
1.1       root     7285: 
1.1.1.4   root     7286: @item ASM_OUTPUT_DOUBLE (@var{stream}, @var{value})
                   7287: A C statement to output to the stdio stream @var{stream} an assembler
1.1       root     7288: instruction to assemble a @code{double} constant whose value is
1.1.1.2   root     7289: @var{value}.  @var{value} will be a C expression of type
                   7290: @code{double}.
1.1       root     7291: 
1.1.1.4   root     7292: @item ASM_OUTPUT_FLOAT (@var{stream}, @var{value})
                   7293: A C statement to output to the stdio stream @var{stream} an assembler
1.1.1.2   root     7294: instruction to assemble a @code{float} constant whose value is
                   7295: @var{value}.  @var{value} will be a C expression of type @code{float}.
                   7296: 
1.1.1.4   root     7297: @item ASM_OUTPUT_INT (@var{stream}, @var{exp})
                   7298: @itemx ASM_OUTPUT_SHORT (@var{stream}, @var{exp})
                   7299: @itemx ASM_OUTPUT_CHAR (@var{stream}, @var{exp})
                   7300: A C statement to output to the stdio stream @var{stream} an assembler
1.1.1.2   root     7301: instruction to assemble a @code{int}, @code{short} or @code{char}
                   7302: constant whose value is @var{value}.  The argument @var{exp} will be
                   7303: an RTL expression which represents a constant value.  Use
                   7304: @samp{output_addr_const (@var{exp})} to output this value as an
                   7305: assembler expression.@refill
                   7306: 
1.1.1.4   root     7307: @item ASM_OUTPUT_BYTE (@var{stream}, @var{value})
                   7308: A C statement to output to the stdio stream @var{stream} an assembler
1.1.1.2   root     7309: instruction to assemble a single byte containing the number @var{value}.
                   7310: 
1.1.1.4   root     7311: @item ASM_OUTPUT_ASCII (@var{stream}, @var{ptr}, @var{len})
                   7312: A C statement to output to the stdio stream @var{stream} an assembler
1.1.1.2   root     7313: instruction to assemble a string constant containing the @var{len}
                   7314: bytes at @var{ptr}.  @var{ptr} will be a C expression of type
                   7315: @code{char *} and @var{len} a C expression of type @code{int}.
                   7316: 
                   7317: If the assembler has a @code{.ascii} pseudo-op as found in the
                   7318: Berkeley Unix assembler, do not define the macro
                   7319: @code{ASM_OUTPUT_ASCII}.
1.1       root     7320: 
1.1.1.4   root     7321: @item ASM_OUTPUT_SKIP (@var{stream}, @var{nbytes})
                   7322: A C statement to output to the stdio stream @var{stream} an assembler
1.1       root     7323: instruction to advance the location counter by @var{nbytes} bytes.
                   7324: @var{nbytes} will be a C expression of type @code{int}.
                   7325: 
1.1.1.4   root     7326: @item ASM_OUTPUT_ALIGN (@var{stream}, @var{power})
                   7327: A C statement to output to the stdio stream @var{stream} an assembler
1.1       root     7328: instruction to advance the location counter to a multiple of 2 to the
                   7329: @var{power} bytes.  @var{power} will be a C expression of type @code{int}.
                   7330: 
1.1.1.4   root     7331: @item ASM_OUTPUT_COMMON (@var{stream}, @var{name}, @var{size})
1.1.1.2   root     7332: A C statement (sans semicolon) to output to the stdio stream
1.1.1.4   root     7333: @var{stream} the assembler definition of a common-label named @var{name}
1.1.1.2   root     7334: whose size is @var{size} bytes.  Use the expression
1.1.1.4   root     7335: @code{assemble_name (@var{stream}, @var{name})} to output the name
1.1.1.2   root     7336: itself; before and after that, output the additional assembler syntax
                   7337: for defining the name, and a newline.
                   7338: 
                   7339: This macro controls how the assembler definitions of uninitialized
                   7340: global variables are output.
                   7341: 
1.1.1.4   root     7342: @item ASM_OUTPUT_LOCAL (@var{stream}, @var{name}, @var{size})
1.1.1.2   root     7343: A C statement (sans semicolon) to output to the stdio stream
1.1.1.4   root     7344: @var{stream} the assembler definition of a local-common-label named
1.1.1.2   root     7345: @var{name} whose size is @var{size} bytes.  Use the expression
1.1.1.4   root     7346: @code{assemble_name (@var{stream}, @var{name})} to output the name
1.1.1.2   root     7347: itself; before and after that, output the additional assembler syntax
                   7348: for defining the name, and a newline.
                   7349: 
                   7350: This macro controls how the assembler definitions of uninitialized
                   7351: static variables are output.
1.1       root     7352: 
1.1.1.4   root     7353: @item ASM_OUTPUT_SOURCE_LINE (@var{stream}, @var{line})
                   7354: A C statment to output DBX or SDB debugging information before code
                   7355: for line number @var{line} of the current source file to the
                   7356: stdio stream @var{stream}.
                   7357: 
                   7358: This macro need not be defined if the standard form of debugging
                   7359: information for the debugger in use is appropriate.
                   7360: 
1.1       root     7361: @item TARGET_BELL
1.1.1.2   root     7362: A C constant expression for the integer value for escape sequence
                   7363: @samp{\a}.
1.1       root     7364: 
                   7365: @item TARGET_BS
                   7366: @itemx TARGET_TAB
                   7367: @itemx TARGET_NEWLINE
                   7368: C constant expressions for the integer values for escape sequences
                   7369: @samp{\b}, @samp{\t} and @samp{\n}.
                   7370: 
                   7371: @item TARGET_VT
                   7372: @itemx TARGET_FF
                   7373: @itemx TARGET_CR
                   7374: C constant expressions for the integer values for escape sequences
                   7375: @samp{\v}, @samp{\f} and @samp{\r}.
                   7376: 
1.1.1.4   root     7377: @item ASM_OUTPUT_OPCODE (@var{stream}, @var{ptr})
1.1.1.2   root     7378: Define this macro if you are using an unusual assembler that
                   7379: requires different names for the machine instructions.
                   7380: 
                   7381: The definition is a C statement or statements which output an
1.1.1.4   root     7382: assembler instruction opcode to the stdio stream @var{stream}.  The
1.1.1.2   root     7383: macro-operand @var{ptr} is a variable of type @code{char *} which
                   7384: points to the opcode name in its ``internal'' form---the form that is
                   7385: written in the machine description.  The definition should output the
1.1.1.4   root     7386: opcode name to @var{stream}, performing any translation you desire, and
1.1.1.2   root     7387: increment the variable @var{ptr} to point at the end of the opcode
                   7388: so that it will not be output twice.
                   7389: 
                   7390: In fact, your macro definition may process less than the entire opcode
                   7391: name, or more than the opcode name; but if you want to process text
                   7392: that includes @samp{%}-sequences to substitute operands, you must take
                   7393: care of the substitution yourself.  Just be sure to increment
                   7394: @var{ptr} over whatever text should not be output normally.
                   7395: 
                   7396: If the macro definition does nothing, the instruction is output
                   7397: in the usual way.
                   7398: 
1.1.1.4   root     7399: @item FINAL_PRESCAN_INSN (@var{insn}, @var{opvec}, @var{noperands})
                   7400: If defined, a C statement to be executed just prior to the output of
                   7401: assembler code for @var{insn}, to modify the extracted operands so
                   7402: they will be output differently.
                   7403: 
                   7404: Here the argument @var{opvec} is the vector containing the operands
                   7405: extracted from @var{insn}, and @var{noperands} is the number of
                   7406: elements of the vector which contain meaningful data for this insn.
                   7407: The contents of this vector are what will be used to convert the insn
                   7408: template into assembler code, so you can change the assembler output
                   7409: by changing the contents of the vector.
                   7410: 
                   7411: This macro is useful when various assembler syntaxes share a single
                   7412: file of instruction patterns; by defining this macro differently, you
                   7413: can cause a large class of instructions to be output differently (such
                   7414: as with rearranged operands).  Naturally, variations in assembler
                   7415: syntax affecting individual insn patterns ought to be handled by
                   7416: writing conditional output routines in those patterns.
                   7417: 
                   7418: If this macro is not defined, it is equivalent to a null statement.
                   7419: 
                   7420: @item PRINT_OPERAND (@var{stream}, @var{x}, @var{code})
                   7421: A C compound statement to output to stdio stream @var{stream} the
1.1.1.2   root     7422: assembler syntax for an instruction operand @var{x}.  @var{x} is an
                   7423: RTL expression.
                   7424: 
                   7425: @var{code} is a value that can be used to specify one of several ways
                   7426: of printing the operand.  It is used when identical operands must be
                   7427: printed differently depending on the context.  @var{code} comes from
                   7428: the @samp{%} specification that was used to request printing of the
                   7429: operand.  If the specification was just @samp{%@var{digit}} then
                   7430: @var{code} is 0; if the specification was @samp{%@var{ltr}
                   7431: @var{digit}} then @var{code} is the ASCII code for @var{ltr}.
                   7432: 
                   7433: If @var{x} is a register, this macro should print the register's name.
                   7434: The names can be found in an array @code{reg_names} whose type is
                   7435: @code{char *[]}.  @code{reg_names} is initialized from
                   7436: @code{REGISTER_NAMES}.
                   7437: 
                   7438: When the machine description has a specification @samp{%@var{punct}}
                   7439: (a @samp{%} followed by a punctuation character), this macro is called
                   7440: with a null pointer for @var{x} and the punctuation character for
                   7441: @var{code}.
1.1       root     7442: 
1.1.1.4   root     7443: @item PRINT_OPERAND_ADDRESS (@var{stream}, @var{x})
                   7444: A C compound statement to output to stdio stream @var{stream} the
1.1.1.2   root     7445: assembler syntax for an instruction operand that is a memory reference
                   7446: whose address is @var{x}.  @var{x} is an RTL expression.
                   7447: 
                   7448: @item ASM_OPEN_PAREN
                   7449: @itemx ASM_CLOSE_PAREN
                   7450: These macros are defined as C string constant, describing the syntax
                   7451: in the assembler for grouping arithmetic expressions.  The following
                   7452: definitions are correct for most assemblers:
                   7453: 
                   7454: @example
                   7455: #define ASM_OPEN_PAREN "("
                   7456: #define ASM_CLOSE_PAREN ")"
                   7457: @end example
                   7458: @end table
                   7459: 
                   7460: @node Config,, Machine Macros, Top
                   7461: @chapter The Configuration File
                   7462: 
                   7463: The configuration file @file{config-@var{machine}.h} contains macro
                   7464: definitions that describe the machine and system on which the compiler is
                   7465: running.  Most of the values in it are actually the same on all machines
                   7466: that GNU CC runs on, so most all configuration files are identical.  But
                   7467: there are some macros that vary:
                   7468: 
                   7469: @table @code
                   7470: @item FAILURE_EXIT_CODE
                   7471: A C expression for the status code to be returned when the compiler
                   7472: exits after serious errors.
                   7473: 
                   7474: @item SUCCESS_EXIT_CODE
                   7475: A C expression for the status code to be returned when the compiler
                   7476: exits without serious errors.
1.1       root     7477: @end table
                   7478: 
                   7479: @contents
                   7480: @bye

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.