Annotation of gcc/internals-1, revision 1.1.1.1

1.1       root        1: Info file internals, produced by texinfo-format-buffer   -*-Text-*-
                      2: from file internals.texinfo
                      3: 
                      4: 
                      5: This file documents the internals of the GNU compiler.
                      6: 
                      7: Copyright (C) 1987 Richard M. Stallman.
                      8: 
                      9: Permission is granted to make and distribute verbatim copies of
                     10: this manual provided the copyright notice and this permission notice
                     11: are preserved on all copies.
                     12: 
                     13: Permission is granted to copy and distribute modified versions of this
                     14: manual under the conditions for verbatim copying, provided also that the
                     15: section entitled "GNU CC General Public License" is included exactly as
                     16: in the original, and provided that the entire resulting derived work is
                     17: distributed under the terms of a permission notice identical to this one.
                     18: 
                     19: Permission is granted to copy and distribute translations of this manual
                     20: into another language, under the above conditions for modified versions,
                     21: except that the section entitled "GNU CC General Public License" may be
                     22: included in a translation approved by the author instead of in the original
                     23: English.
                     24: 
                     25: 
                     26: 
                     27: 
                     28: 
                     29: File: internals  Node: Top, Up: (DIR), Next: Switches
                     30: 
                     31: Introduction
                     32: ************
                     33: 
                     34: This manual documents how to install and port the GNU C compiler.
                     35: 
                     36: * Menu:
                     37: 
                     38: * Copying::         GNU CC General Public License says
                     39:                      how you can copy and share GNU CC.
                     40: * Switches::        Command switches supported by `gcc'.
                     41: * Installation::    How to configure, compile and install GNU CC.
                     42: * Portability::     Goals of GNU CC's portability features.
                     43: * Passes::          Order of passes, what they do, and what each file is for.
                     44: * RTL::             The intermediate representation that most passes work on.
                     45: * Machine Desc::    How to write machine description instruction patterns.
                     46: * Machine Macros::  How to write the machine description C macros.
                     47: 
                     48: 
                     49: File: internals  Node: Copying, Prev: Top, Up: Top, Next: Switches
                     50: 
                     51: GNU CC GENERAL PUBLIC LICENSE
                     52: *****************************
                     53: 
                     54:   The license agreements of most software companies keep you at the
                     55: mercy of those companies.  By contrast, our general public license is
                     56: intended to give everyone the right to share GNU CC.  To make sure that
                     57: you get the rights we want you to have, we need to make restrictions
                     58: that forbid anyone to deny you these rights or to ask you to surrender
                     59: the rights.  Hence this license agreement.
                     60: 
                     61:   Specifically, we want to make sure that you have the right to give
                     62: away copies of GNU CC, that you receive source code or else can get it
                     63: if you want it, that you can change GNU CC or use pieces of it in new
                     64: free programs, and that you know you can do these things.
                     65: 
                     66:   To make sure that everyone has such rights, we have to forbid you to
                     67: deprive anyone else of these rights.  For example, if you distribute
                     68: copies of GNU CC, you must give the recipients all the rights that you
                     69: have.  You must make sure that they, too, receive or can get the
                     70: source code.  And you must tell them their rights.
                     71: 
                     72:   Also, for our own protection, we must make certain that everyone
                     73: finds out that there is no warranty for GNU CC.  If GNU CC is modified by
                     74: someone else and passed on, we want its recipients to know that what
                     75: they have is not what we distributed, so that any problems introduced
                     76: by others will not reflect on our reputation.
                     77: 
                     78:   Therefore we (Richard Stallman and the Free Software Fundation,
                     79: Inc.) make the following terms which say what you must do to be
                     80: allowed to distribute or change GNU CC.
                     81: 
                     82: 
                     83: COPYING POLICIES
                     84: ================
                     85: 
                     86:   1. You may copy and distribute verbatim copies of GNU CC source code as
                     87:      you receive it, in any medium, provided that you conspicuously and
                     88:      appropriately publish on each copy a valid copyright notice
                     89:      "Copyright (C) 1987 Free Software Foundation, Inc."  (or
                     90:      with the year updated if that is appropriate); keep intact the notices
                     91:      on all files that refer to this License Agreement and to the absence
                     92:      of any warranty; and give any other recipients of the GNU CC program a
                     93:      copy of this License Agreement along with the program.  You may charge
                     94:      a distribution fee for the physical act of transferring a copy.
                     95:      
                     96:   2. You may modify your copy or copies of GNU CC or any portion of it,
                     97:      and copy and distribute such modifications under the terms of
                     98:      Paragraph 1 above, provided that you also do the following:
                     99:      
                    100:         * cause the modified files to carry prominent notices stating
                    101:           that you changed the files and the date of any change; and
                    102:           
                    103:         * cause the whole of any work that you distribute or publish,
                    104:           that in whole or in part contains or is a derivative of GNU CC or
                    105:           any part thereof, to be licensed at no charge to all third
                    106:           parties on terms identical to those contained in this License
                    107:           Agreement (except that you may choose to grant more extensive
                    108:           warranty protection to some or all third parties, at your
                    109:           option).
                    110:           
                    111:         * You may charge a distribution fee for the physical act of
                    112:           transferring a copy, and you may at your option offer warranty
                    113:           protection in exchange for a fee.
                    114:      
                    115:   3. You may copy and distribute GNU CC or any portion of it in
                    116:      compiled, executable or object code form under the terms of Paragraphs
                    117:      1 and 2 above provided that you do the following:
                    118:      
                    119:         * cause each such copy to be accompanied by the
                    120:           corresponding machine-readable source code, which must
                    121:           be distributed under the terms of Paragraphs 1 and 2 above; or,
                    122:           
                    123:         * cause each such copy to be accompanied by a
                    124:           written offer, with no time limit, to give any third party
                    125:           free (except for a nominal shipping charge) a machine readable
                    126:           copy of the corresponding source code, to be distributed
                    127:           under the terms of Paragraphs 1 and 2 above; or,
                    128:           
                    129:         * in the case of a recipient of GNU CC in compiled, executable
                    130:           or object code form (without the corresponding source code) you
                    131:           shall cause copies you distribute to be accompanied by a copy
                    132:           of the written offer of source code which you received along
                    133:           with the copy you received.
                    134:      
                    135:   4. You may not copy, sublicense, distribute or transfer GNU CC
                    136:      except as expressly provided under this License Agreement.  Any attempt
                    137:      otherwise to copy, sublicense, distribute or transfer GNU CC is void and
                    138:      your rights to use the program under this License agreement shall be
                    139:      automatically terminated.  However, parties who have received computer
                    140:      software programs from you with this License Agreement will not have
                    141:      their licenses terminated so long as such parties remain in full compliance.
                    142:      
                    143:   5. If you wish to incorporate parts of GNU CC into other free programs
                    144:      whose distribution conditions are different, write to the Free Software
                    145:      Foundation at 1000 Mass Ave, Cambridge, MA 02138.  We have not yet worked
                    146:      out a simple rule that can be stated here, but we will often permit this.
                    147:      We will be guided by the two goals of preserving the free status of all
                    148:      derivatives our free software and of promoting the sharing and reuse of
                    149:      software.
                    150: 
                    151: Your comments and suggestions about our licensing policies and our
                    152: software are welcome!  Please contact the Free Software Foundation, Inc.,
                    153: 1000 Mass Ave, Cambridge, MA 02138, or call (617) 876-3296.
                    154: 
                    155: 
                    156: NO WARRANTY
                    157: ===========
                    158: 
                    159:   BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
                    160: WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
                    161: WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
                    162: RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT
                    163: WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
                    164: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
                    165: A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
                    166: PERFORMANCE OF GNU CC IS WITH YOU.  SHOULD GNU CC PROVE DEFECTIVE, YOU
                    167: ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
                    168: 
                    169:  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
                    170: STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
                    171: WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO
                    172: YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
                    173: SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
                    174: INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
                    175: BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
                    176: FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN
                    177: IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
                    178: ANY CLAIM BY ANY OTHER PARTY.
                    179: 
                    180: 
                    181: File: internals  Node: Switches, Prev: Copying, Up: Top, Next: Installation
                    182: 
                    183: GNU CC Switches
                    184: ***************
                    185: 
                    186: `-O'     
                    187:      Do optimize.
                    188:      
                    189: `-g'     
                    190:      Produce debugging information in DBX format.
                    191:      
                    192: `-c'     
                    193:      Compile but do not link the object files.
                    194:      
                    195: `-o FILE'     
                    196:      Place linker output in file FILE.
                    197:      
                    198: `-S'     
                    199:      Compile into assembler code but do not assemble.
                    200:      
                    201: `-mMACHINESPEC'     
                    202:      Machine-dependent switch specifying something about the type
                    203:      of target machine.  For example, using the 68000 machine description,
                    204:      `-m68000' specifies do not use the 68020 instructions,
                    205:      and `-msoft-float' specifies do not use the 68881 floating point
                    206:      instructions.
                    207:      
                    208: `-dLETTERS'     
                    209:      Says to make debugging dumps at times specified by LETTERS.
                    210:      Here are the possible letters:
                    211:      
                    212:      `t'     
                    213:           Dump syntax-tree.
                    214:      `r'     
                    215:           Dump after RTL generation.
                    216:      `j'     
                    217:           Dump after first jump optimization.
                    218:      `s'     
                    219:           Dump after CSE.
                    220:      `L'     
                    221:           Dump after loop optimization.
                    222:      `f'     
                    223:           Dump after flow analysis.
                    224:      `c'     
                    225:           Dump after instruction combination.
                    226:      `l'     
                    227:           Dump after local register allocation.
                    228:      `g'     
                    229:           Dump after global register allocation.
                    230:      
                    231: `-pedantic'     
                    232:      Attempt to support strict ANSI standard C.  Valid ANSI standard C
                    233:      programs should compile properly with or without this switch.
                    234:      However, without this switch, certain useful or traditional constructs
                    235:      banned by the standard are supported.  With this switch, they are
                    236:      rejected.  There is no reason to use this switch; it exists only
                    237:      to satisfy pedants.
                    238:      
                    239: `E'     
                    240:      Preprocess the input files and output the results to standard output.
                    241:      
                    242: `C'     
                    243:      Tell the preprocessor not to discard comments.  Used with the `-E'
                    244:      switch.
                    245:      
                    246: `IDIR'     
                    247:      Search directory DIR for include files.
                    248:      
                    249: `DMACRO'     
                    250:      Define macro MACRO with the empty string as its definition.
                    251:      
                    252: `DMACRO=DEFN'     
                    253:      Define macro MACRO as DEFN.
                    254:      
                    255: `UMACRO'     
                    256:      Undefine macro MACRO.
                    257:      
                    258: `w'     
                    259:      Inhibit warning messages.
                    260:      
                    261: `v'     
                    262:      Compiler driver program prints the commands it executes as it runs
                    263:      the preprocessor, compiler proper, assembler and linker.
                    264:      
                    265: `BPREFIX'     
                    266:      Compiler driver program tries PREFIX as a prefix for each program
                    267:      it tries to run.  These programs are `cpp', `cc1',
                    268:      `as' and `ld'.
                    269:      
                    270:      For each subprogram to be run, the compiler driver first tries the
                    271:      `-B' prefix, if any.  If that name is not found, or if `-B'
                    272:      was not specified, the driver tries two standard prefixes, which are
                    273:      `/usr/lib/gcc-' and `/usr/local/lib/gcc-'.  If neither of
                    274:      those results in a file name that is found, the unmodified program
                    275:      name is searched for using the `PATH' environment variable.
                    276: 
                    277: 
                    278: File: internals  Node: Installation, Prev: Switches, Up: Top, Next: Portability
                    279: 
                    280: Installing GNU CC
                    281: *****************
                    282: 
                    283:   1. Choose configuration files.
                    284:      
                    285:         * Make a symbolic link from file `config.h' to the top-level
                    286:           config file for the machine you are using.  Its name should be
                    287:           `config-MACHINE.h'.  This file is responsible for
                    288:           defining information about the host machine.  It includes
                    289:           `tm.h'.
                    290:           
                    291:         * Make a symbolic link from `tm.h' to the machine-description
                    292:           macro file for your machine (its name should be
                    293:           `tm-MACHINE.h').
                    294:           
                    295:         * Make a symbolic link from `md' to the
                    296:           machine description pattern file (its name should be
                    297:           `MACHINE.md').
                    298:           
                    299:         * Make a symbolic link from
                    300:           `aux-output.c' to the output-subroutine file for your machine
                    301:           (its name should be `MACHINE-output.c').
                    302:      
                    303:   2. Make sure the Bison parser generator is installed.
                    304:      
                    305:   3. Build the compiler.  Just type `make' in the compiler directory.
                    306:      
                    307:   4. Delete `*.o' in the compiler directory.  The executables from
                    308:      the previous step remain for the next step.
                    309:      
                    310:   5. Remake the compiler with
                    311:      
                    312:           make CC=./gcc CFLAGS="-g -O -I."
                    313:      
                    314:   6. Install the compiler's passes.  Copy the file `cc1' just made
                    315:      to `/usr/local/lib/gcc-cc1'.
                    316:      
                    317:      Make the file `/usr/local/lib/gcc-cpp' either a link to `/lib/cpp'
                    318:      or a copy of the file `cpp' generated by `make'.
                    319:      
                    320:      *Warning: the GNU CPP may not work for @file{ioctl.h}.* This
                    321:      cannot be fixed in the GNU CPP because the bug is in `ioctl.h':
                    322:      at least on some machines, it relies on behavior that is incompatible
                    323:      with ANSI C.  This behavior consists of substituting for macro
                    324:      argument names when they appear inside of character constants.
                    325:      
                    326:   7. Install the compiler driver.  This is the file `gcc' generated
                    327:      by `make'.
                    328: 
                    329: 
                    330: File: internals  Node: Portability, Prev: Installation, Up: Top, Next: Passes
                    331: 
                    332: GNU CC and Portability
                    333: **********************
                    334: 
                    335: The main goal of GNU CC was to make a good, fast compiler for machines in
                    336: the class that the GNU system aims to run on: 32-bit machines that address
                    337: 8-bit bytes and have several general registers.  Elegance, theoretical
                    338: power and simplicity are only secondary.
                    339: 
                    340: GNU CC gets most of the information about the target machine from a machine
                    341: description which gives an algebraic formula for each of the machine's
                    342: instructions.  This is a very clean way to describe the target.  But when
                    343: the compiler needs information that is difficult to express in this
                    344: fashion, I have not hesitated to define an ad-hoc parameter to the machine
                    345: description.  The purpose of portability is to reduce the total work needed
                    346: on the compiler; it was not of interest for its own sake.
                    347: 
                    348: GNU CC does not contain machine dependent code, but it does contain code
                    349: that depends on machine parameters such as endianness (whether the most
                    350: significant byte has the highest or lowest address of the bytes in a word)
                    351: and the availability of autoincrement addressing.  In the RTL-generation
                    352: pass, it is often necessary to have multiple strategies for generating code
                    353: for a particular kind of syntax tree, strategies that are usable for different
                    354: combinations of parameters.  Often I have not tried to address all possible
                    355: cases, but only the common ones or only the ones that I have encountered.
                    356: As a result, a new target may require additional strategies.  You will know
                    357: if this happens because the compiler will call `abort'.  Fortunately,
                    358: the new strategies can be added to all versions of the compiler, and will
                    359: be relevant only for target machines that need them.
                    360: 
                    361: 
                    362: File: internals  Node: Passes, Prev: Portability, Up: Top, Next: RTL
                    363: 
                    364: Passes and Files of the Compiler
                    365: ********************************
                    366: 
                    367: The overall control structure of the compiler is in `toplev.c'.  This
                    368: file is responsible for initialization, decoding arguments, opening and
                    369: closing files, and sequencing the passes.
                    370: 
                    371: The parsing pass is invoked only once, to parse the entire input.  Each
                    372: time a complete function definition or top-level data definition is read,
                    373: the parsing pass calls the function `rest_of_compilation' in
                    374: `toplev.c', which is responsible for all further processing necessary,
                    375: ending with output of the assembler language.  All other compiler passes
                    376: run, in sequence, within `rest_of_compilation'.  After
                    377: `rest_of_compilation' returns from compiling a function definition,
                    378: the storage used for its compilation is entirely freed.
                    379: 
                    380: Here is a list of all the passes of the compiler and their source files.
                    381: Also included is a description of where debugging dumps can be requested
                    382: with `-d' switches.
                    383: 
                    384:    * Parsing.  This pass reads the entire text of a function definition,
                    385:      constructing a syntax tree.  The tree representation does not entirely
                    386:      follow C syntax, because it is intended to support other languages as well.
                    387:      
                    388:      C data type analysis is also done in this pass, and every tree node that
                    389:      represents an expression has a data type attached.  Variables are represented
                    390:      as declaration nodes.
                    391:      
                    392:      Constant folding and associative-law simplifications are also done during
                    393:      this pass.
                    394:      
                    395:      The source files of the parsing pass are `parse.y', `decl.c',
                    396:      `typecheck.c', `stor-layout.c', `fold-const.c', and
                    397:      `tree.c'.  The last three are intended to be language-independent.
                    398:      There are also header files `parse.h', `c-tree.h',
                    399:      `tree.h' and `tree.def'.  The last two define the format of
                    400:      the tree representation.
                    401:      
                    402:    * RTL generation.  This pass converts the tree structure for one
                    403:      function into RTL code.  
                    404:      
                    405:      This is where the bulk of target-parameter-dependent code is found,
                    406:      since often it is necessary for strategies to apply only when certain
                    407:      standard kinds of instructions are available.  The purpose of named
                    408:      instruction patterns is to provide this information to the RTL
                    409:      generation pass.
                    410:      
                    411:      Optimization is done in this pass for `if'-conditions that are
                    412:      comparisons, boolean operations or conditional expressions.  Tail
                    413:      recursion is detected at this time also.  Decisions are made about how
                    414:      best to arrange loops and how to output `switch' statements.
                    415:      
                    416:      The files of the RTL generation pass are `stmt.c', `expr.c',
                    417:      `explow.c', `expmed.c', `optabs.c' and `emit-rtl.c'.
                    418:      Also, the file `insn-emit.c', generated from the machine description
                    419:      by the program `genemit', is used in this pass.  The header files
                    420:      `expr.h' is used for communication within this pass.
                    421:      
                    422:      The header files `insn-flags.h' and `insn-codes.h', generated from
                    423:      the machine description by the programs `genflags' and `gencodes',
                    424:      tell this pass which standard names are available for use and which patterns
                    425:      correspond to them.
                    426:      
                    427:      Aside from debugging information output, none of the following passes
                    428:      refers to the tree structure representation of the function.
                    429:      
                    430:      The switch `-dr' causes a debugging dump of the RTL code after this
                    431:      pass.  This dump file's name is made by appending `.rtl' to the
                    432:      input file name.
                    433:      
                    434:    * Jump optimization.  This pass simplifies jumps to the following instruction,
                    435:      jumps across jumps, and jumps to jumps.  It deletes unreferenced labels
                    436:      and unreachable code, except that unreachable code that contains a loop
                    437:      is not recognized as unreachable in this pass.  (Such loops are deleted
                    438:      later in the basic block analysis.)
                    439:      
                    440:      Jump optimization is performed two or three times.  The first time is
                    441:      immediately following RTL generation.
                    442:      
                    443:      The source file of this pass is `jump.c'.
                    444:      
                    445:      The switch `-dj' causes a debugging dump of the RTL code after this
                    446:      pass is run for the first time.  This dump file's name is made by appending
                    447:      `.jump' to the input file name.
                    448:      
                    449:    * Register scan.  This pass finds the first and last use of each
                    450:      register, as a guide for common subexpression elimination.  Its source
                    451:      is in `regclass.c'.
                    452:      
                    453:    * Common subexpression elimination.  This pass also does constant
                    454:      propagation.  Its source file is `cse.c'.  If constant
                    455:      propagation causes conditional jumps to become unconditional or to
                    456:      become no-ops, jump optimization is run again when cse is finished.
                    457:      
                    458:      The switch `-ds' causes a debugging dump of the RTL code after
                    459:      this pass.  This dump file's name is made by appending `.cse' to
                    460:      the input file name.
                    461:      
                    462:    * Loop optimization.  This pass moves constant expressions out of loops.
                    463:      Its source file is `loop.c'.
                    464:      
                    465:      The switch `-dL' causes a debugging dump of the RTL code after
                    466:      this pass.  This dump file's name is made by appending `.loop' to
                    467:      the input file name.
                    468:      
                    469:    * Stupid register allocation is performed at this point in a
                    470:      nonoptimizing compilation.  It does a little data flow analysis as
                    471:      well.  When stupid register allocation is in use, the next pass
                    472:      executed is the reloading pass; the others in between are skipped.
                    473:      The source file is `stupid.c', with header file `stupid.h'
                    474:      used for communication with the RTL generation pass.
                    475:      
                    476:    * Data flow analysis (`flow.c').  This pass divides the program
                    477:      into basic blocks (and in the process deletes unreachable loops); then
                    478:      it computes which pseudo-registers are live at each point in the
                    479:      program, and makes the first instruction that uses a value point at
                    480:      the instruction that computed the value.
                    481:      
                    482:      This pass also deletes computations whose results are never used, and
                    483:      combines memory references with add or subtract instructions to make
                    484:      autoincrement or autodecrement addressing.
                    485:      
                    486:      The switch `-df' causes a debugging dump of the RTL code after
                    487:      this pass.  This dump file's name is made by appending `.flow' to
                    488:      the input file name.  If stupid register allocation is in use, this
                    489:      dump file reflects the full results of such allocation.
                    490:      
                    491:    * Instruction combination (`combine.c').  This pass attempts to
                    492:      combine groups of two or three instructions that are related by data
                    493:      flow into single instructions.  It combines the RTL expressions for
                    494:      the instructions by substitution, simplifies the result using algebra,
                    495:      and then attempts to match the result against the machine description.
                    496:      
                    497:      The switch `-dc' causes a debugging dump of the RTL code after
                    498:      this pass.  This dump file's name is made by appending `.combine'
                    499:      to the input file name.
                    500:      
                    501:    * Register class preferencing.  The RTL code is scanned to find out
                    502:      which register class is best for each pseudo register.  The source file
                    503:      is `regclass.c'.
                    504:      
                    505:    * Local register allocation (`local-alloc.c').  This pass allocates
                    506:      hard registers to pseudo registers that are used only within one basic
                    507:      block.  Because the basic block is linear, it can use fast and powerful
                    508:      techniques to do a very good job.
                    509:      
                    510:      The switch `-dl' causes a debugging dump of the RTL code after
                    511:      this pass.  This dump file's name is made by appending `.lreg' to
                    512:      the input file name.
                    513:      
                    514:    * Global register allocation (`global-alloc.c').  This pass
                    515:      allocates hard registers for the remaining pseudo registers (those
                    516:      whose life spans are not contained in one basic block).
                    517:      
                    518:    * Reloading.  This pass finds instructions that are invalid because a
                    519:      value has failed to end up in a register, or has ended up in a
                    520:      register of the wrong kind.  It fixes up these instructions by
                    521:      reloading the problematical values into registers temporarily.
                    522:      Additional instructions are generated to do the copying.
                    523:      
                    524:      Source files are `reload.c' and `reload1.c', plus the header
                    525:      `reload.h' used for communication between them.
                    526:      
                    527:      The switch `-dg' causes a debugging dump of the RTL code after
                    528:      this pass.  This dump file's name is made by appending `.greg' to
                    529:      the input file name.
                    530:      
                    531:    * Jump optimization is repeated, this time including cross-jumping.
                    532:      
                    533:    * Final.  This pass outputs the assembler code for the function.  It is
                    534:      also responsible for identifying no-op move instructions and spurious
                    535:      test and compare instructions.  The function entry and exit sequences
                    536:      are generated directly as assembler code in this pass; they never
                    537:      exist as RTL.  Pseudo registers that did not get hard registers are
                    538:      given stack slots in this pass.
                    539:      
                    540:      The source files are `final.c' plus `insn-output.c'; the
                    541:      latter is generated automatically from the machine description by the
                    542:      tool `genoutput'.  The header file `conditions.h' is used
                    543:      for communication between these files.
                    544:      
                    545:    * Debugging information output.  This is run after final because it must
                    546:      output the stack slot offsets for pseudo registers that did not get
                    547:      hard registers.  Source files are `dbxout.c' for DBX symbol table
                    548:      format and `symout.c' for GDB's own symbol table format.
                    549: 
                    550: Some additional files are used by all or many passes:
                    551: 
                    552:    * Every pass uses `machmode.def', which defines the machine modes.
                    553:      
                    554:    * All the passes that work with RTL use the header files `rtl.h'
                    555:      and `rtl.def', and subroutines in file `rtl.c'.  The
                    556:      tools `gen*' also use these files to read and work with the
                    557:      machine description RTL.
                    558:      
                    559:    * Several passes refer to the header file `insn-config.h' which
                    560:      contains a few parameters (C macro definitions) generated
                    561:      automatically from the machine description RTL by the tool
                    562:      `genconfig'.
                    563:      
                    564:    * Several passes use the instruction recognizer, which consists of
                    565:      `recog.c' and `recog.h', plus the files `insn-recog.c'
                    566:      and `insn-extract.c' that are generated automatically from the
                    567:      machine description by the tools `genrecog' and `genextract'.
                    568:      
                    569:    * Several passes use the header file `regs.h' which defines the
                    570:      information recorded about pseudo register usage, `basic-block.h'
                    571:      which defines the information recorded about basic blocks.
                    572:      
                    573:    * `hard-reg-set.h' defines the type `HARD_REG_SET', a bit-vector
                    574:      with a bit for each hard register, and some macros to manipulate it.
                    575:      This type is just `int' if the machine has few enough hard registers;
                    576:      otherwise it is an array of `int' and some of the macros expand
                    577:      into loops.
                    578: 
                    579: 
                    580: File: internals  Node: RTL, Prev: Passes, Up: Top, Next: Machine Desc
                    581: 
                    582: RTL Representation
                    583: ******************
                    584: 
                    585: Most of the work of the compiler is done on an intermediate representation
                    586: called register tranfer language.  In this language, the instructions to be
                    587: output are described, pretty much one by one, in an algebraic form that
                    588: describes what the instruction does.
                    589: 
                    590: RTL is inspired by Lisp lists.  It has both an internal form, made up of
                    591: structures that point at other structures, and a textual form that is used
                    592: in the machine description and in printed debugging dumps.  The textual
                    593: form uses nested parentheses to indicate the pointers in the internal form.
                    594: 
                    595: * Menu:
                    596: 
                    597: * RTL Objects::       Expressions vs vectors vs strings vs integers.
                    598: * Accessors::         Macros to access expression operands or vector elts.
                    599: * Machine Modes::     Describing the size and format of a datum.
                    600: * Constants::         Expressions with constant values.
                    601: * Regs and Memory::   Expressions representing register contents or memory.
                    602: * Arithmetic::        Expressions representing arithmetic on other expressions.
                    603: * Comparisons::       Expressions representing comparison of expressions.
                    604: * Bit Fields::        Expressions representing bit-fields in memory or reg.
                    605: * Conversions::       Extending, truncating, floating or fixing.
                    606: * RTL Declarations::  Declaring volatility, constancy, etc.
                    607: * Side Effects::      Expressions for storing in registers, etc.
                    608: * Incdec::            Embedded side-effects for autoincrement addressing.
                    609: * Insns::             Expression types for entire insns.
                    610: * Sharing::           Some expressions are unique; others *must* be copied.
                    611: 
                    612: 
                    613: File: internals  Node: RTL Objects, Prev: RTL, Up: RTL, Next: Accessors
                    614: 
                    615: RTL Object Types
                    616: ================
                    617: 
                    618: RTL uses four kinds of objects: expressions, integers, strings and vectors.
                    619: Expressions are the most important ones.  An RTL expression is a C
                    620: structure, but it is usually referred to with a pointer; a type that is
                    621: given the typedef name `rtx'.
                    622: 
                    623: An integer is simply an `int', and a string is a `char *'.
                    624: Within rtl code, strings appear only inside `symbol_ref' expressions,
                    625: but they appear in other contexts in the rtl expressions that make up
                    626: machine descriptions.  Their written form uses decimal digits.
                    627: 
                    628: A string is a sequence of characters.  In core it is represented as a
                    629: `char *' in usual C fashion, and they are written in C syntax as well.
                    630: However, strings in RTL may never be null.  If you write an empty string in
                    631: a machine description, it is represented in core as a null pointer rather
                    632: than as a pointer to a null character.  In certain contexts, these null
                    633: pointers instead of strings are valid.
                    634: 
                    635: A vector contains an arbitrary, specified number of pointers to
                    636: expressions.  The number of elements in the vector is explicitly present in
                    637: the vector.  The written form of a vector consists of square brackets
                    638: (`[...]') surrounding the elements, in sequence and with
                    639: whitespace separating them.  Vectors of length zero are not created; null
                    640: pointers are used instead.
                    641: 
                    642: Expressions are classified by "expression code".  The expression code
                    643: is a name defined in `rtl.def', which is also (in upper case) a C
                    644: enumeration constant.  The possible expression codes and their meanings are
                    645: machine-independent.  The code of an rtx can be extracted with the macro
                    646: `GET_CODE (X)' and altered with `PUT_CODE (X,
                    647: NEWCODE)'.
                    648: 
                    649: The expression code determines how many operands the expression contains,
                    650: and what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
                    651: by looking at an operand what kind of object it is.  Instead, you must know
                    652: from its context---from the expression code of the containing expression.
                    653: For example, in an expression of code `subreg', the first operand is
                    654: to be regarded as an expression and the second operand as an integer.  In
                    655: an expression of code `plus', there are two operands, both of which
                    656: are to be regarded as expressions.  In a `symbol_ref' expression,
                    657: there is one operand, which is to be regarded as a string.
                    658: 
                    659: Expressions are written as parentheses containing the name of the
                    660: expression type, its flags and machine mode if any, and then the operands
                    661: of the expression (separated by spaces).
                    662: 
                    663: In a few contexts a null pointer is valid where an expression is normally
                    664: wanted.  The written form of this is `(nil)'.
                    665: 
                    666: 
                    667: File: internals  Node: Accessors, Prev: RTL Objects, Up: RTL, Next: Machine Modes
                    668: 
                    669: Access to Operands
                    670: ==================
                    671: 
                    672: For each expression type `rtl.def' specifies the number of contained
                    673: objects and their kinds, with four possibilities: `e' for expression
                    674: (actually a pointer to an expression), `i' for integer, `s' for
                    675: string, and `E' for vector of expressions.  The sequence of letters
                    676: for an expression code is called its "format".  Thus, the format of
                    677: `subreg' is `ei'.
                    678: 
                    679: Two other format characters are used occasionally: `u' and `0'.
                    680: `u' is equivalent to `e' except that it is printed differently in
                    681: debugging dumps, and `0' means a slot whose contents do not fit any
                    682: normal category.  `0' slots are not printed at all in dumps, and are
                    683: often used in special ways by small parts of the compiler.
                    684: 
                    685: There are macros to get the number of operands and the format of an
                    686: expression code:
                    687: 
                    688: `GET_RTX_LENGTH (CODE)'     
                    689:      Number of operands of an rtx of code CODE.
                    690:      
                    691: `GET_RTX_FORMAT (CODE)'     
                    692:      The format of an rtx of code CODE, as a C string.
                    693: 
                    694: Operands of expressions are accessed using the macros `XEXP',
                    695: `XINT' and `XSTR'.  Each of these macros takes two arguments: an
                    696: expression-pointer (rtx) and an operand number (counting from zero).  Thus,
                    697: 
                    698:      XEXP (x, 2)
                    699: 
                    700: accesses operand 2 of expression X, as an expression.
                    701: 
                    702:      XINT (x, 2)
                    703: 
                    704: accesses the same operand as an integer.  `XSTR', used in the same
                    705: fashion, would access it as a string.
                    706: 
                    707: Any operand can be accessed as an integer, as an expression or as a string.
                    708: You must choose the correct method of access for the kind of value actually
                    709: stored in the operand.  You would do this based on the expression code of
                    710: the containing expression.  That is also how you would know how many
                    711: operands there are.
                    712: 
                    713: For example, if X is a `subreg' expression, you know that it has
                    714: two operands which can be correctly accessed as `XEXP (x, 0)' and
                    715: `XINT (x, 1)'.  If you did `XINT (x, 0)', you would get the
                    716: address of the expression operand but cast as an integer; that might
                    717: occasionally be useful, but it would be cleaner to write `(int) XEXP
                    718: (x, 0)'.  `XEXP (x, 1)' would also compile without error, and would
                    719: return the second, integer operand cast as an expression pointer, which
                    720: would probably result in a crash when accessed.  Nothing stops you from
                    721: writing `XEXP (x, 28)' either, but this will access memory past the
                    722: end of the expression with unpredictable results.
                    723: 
                    724: Access to operands which are vectors is more complicated.  You can use the
                    725: macro `XVEC' to get the vector-pointer itself, or the macros
                    726: `XVECEXP' and `XVECLEN' to access the elements and length of a
                    727: vector.
                    728: 
                    729: `XVEC (EXP, IDX)'     
                    730:      Access the vector-pointer which is operand number IDX in EXP.
                    731:      
                    732: `XVECLEN (EXP, IDX)'     
                    733:      Access the length (number of elements) in the vector which is
                    734:      in operand number IDX in EXP.  This value is an `int'.
                    735:      
                    736: `XVECLEN (EXP, IDX, ELTNUM)'     
                    737:      Access element number ELTNUM in the vector which is
                    738:      in operand number IDX in EXP.  This value is an `rtx'.
                    739:      
                    740:      It is up to you to make sure that ELTNUM is not negative
                    741:      and is less than `XVECLEN (EXP, IDX)'.
                    742: 
                    743: All the macros defined in this section expand into lvalues and therefore
                    744: can be used to assign the operands, lengths and vector elements as well as
                    745: to access them.
                    746: 
                    747: 
                    748: File: internals  Node: Machine Modes, Prev: Accessors, Up: RTL, Next: Constants
                    749: 
                    750: Machine Modes
                    751: =============
                    752: 
                    753: A machine mode describes a size of data object and the representation used
                    754: for it.  In the C code, machine modes are represented by an enumeration
                    755: type, `enum machine_mode'.  Each rtl expression has room for a machine
                    756: mode and so do certain kinds of tree expressions (declarations and types,
                    757: to be precise).
                    758: 
                    759: In debugging dumps and machine descriptions, the machine mode of an RTL
                    760: expression is written after the expression code with a colon to separate
                    761: them.  The letters `mode' which appear at the end of each machine mode
                    762: name are omitted.  For example, `(reg:SI 38)' is a `reg'
                    763: expression with machine mode `SImode'.  If the mode is
                    764: `VOIDmode', it is not written at all.
                    765: 
                    766: Here is a table of machine modes.
                    767: 
                    768: `QImode'     
                    769:      "Quarter-Integer" mode represents a single byte treated as an integer.
                    770:      
                    771: `HImode'     
                    772:      "Half-Integer" mode represents a two-byte integer.
                    773:      
                    774: `SImode'     
                    775:      "Single Integer" mode represents a four-byte integer.
                    776:      
                    777: `DImode'     
                    778:      "Double Integer" mode represents an eight-byte integer.
                    779:      
                    780: `TImode'     
                    781:      "Tetra Integer" (?) mode represents a sixteen-byte integer.
                    782:      
                    783: `SFmode'     
                    784:      "Single Floating" mode represents a single-precision (four byte) floating
                    785:      point number.
                    786:      
                    787: `DFmode'     
                    788:      "Double Floating" mode represents a double-precision (eight byte) floating
                    789:      point number.
                    790:      
                    791: `TFmode'     
                    792:      "Tetra Floating" mode represents a quadruple-precision (sixteen byte)
                    793:      floating point number.
                    794:      
                    795: `BLKmode'     
                    796:      "Block" mode represents values that are aggregates to which none of
                    797:      the other modes apply.  In rtl, only memory references can have this mode,
                    798:      and only if they appear in string-move or vector instructions.  On machines
                    799:      which have no such instructions, `BLKmode' will not appear in RTL.
                    800:      
                    801: `VOIDmode'     
                    802:      Void mode means the absence of a mode or an unspecified mode.
                    803:      For example, RTL expresslons of code `const_int' have mode
                    804:      `VOIDmode' because they can be taken to have whatever mode the context
                    805:      requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
                    806:      the absence of any mode.
                    807:      
                    808: `EPmode'     
                    809:      "Entry Pointer" mode is intended to be used for function variables in
                    810:      Pascal and other block structured languages.  Such values contain
                    811:      both a function address and a static chain pointer for access to
                    812:      automatic variables of outer levels.  This mode is only partially
                    813:      implemented since C does not use it.
                    814:      
                    815: `CSImode, ...'     
                    816:      "Complex Single Integer" mode stands for a complex number represented
                    817:      as a pair of `SImode' integers.  Any of the integer and floating modes
                    818:      may have `C' prefixed to its name to obtain a complex number mode.
                    819:      For example, there are `CQImode', `CSFmode', and `CDFmode'.
                    820:      Since C does not support complex numbers, these machine modes are only
                    821:      partially implemented.
                    822:      
                    823: `BImode'     
                    824:      This is the machine mode of a bit-field in a structure.  It is used
                    825:      only in the syntax tree, never in RTL, and in the syntax tree it appears
                    826:      only in declaration nodes.  In C, it appears only in `FIELD_DECL'
                    827:      nodes for structure fields defined with a bit size.
                    828: 
                    829: The machine description defines `Pmode' as a C macro which expands
                    830: into the machine mode used for addresses.  Normally this is `SImode'.
                    831: 
                    832: The only modes which a machine description must support are
                    833: `QImode', `SImode', `SFmode' and `DFmode'.  The
                    834: compiler will attempt to use `DImode' for two-word structures and
                    835: unions, but it would not be hard to program it to avoid this.  Likewise,
                    836: you can arrange for the C type `short int' to avoid using
                    837: `HImode'.  In the long term it would be desirable to make the set of
                    838: available machine modes machine-dependent and eliminate all assumptions
                    839: about specific machine modes or their uses from the machine-independent
                    840: code of the compiler.
                    841: 
                    842: Here are some C macros that relate to machine modes:
                    843: 
                    844: `GET_MODE (X)'     
                    845:      Returns the machine mode of the rtx X.
                    846:      
                    847: `PUT_MODE (X, NEWMODE)'     
                    848:      Alters the machine mode of the rtx X to be NEWMODE.
                    849:      
                    850: `GET_MODE_SIZE (M)'     
                    851:      Returns the size in bytes of a datum of mode M.
                    852:      
                    853: `GET_MODE_BITSIZE (M)'     
                    854:      Returns the size in bits of a datum of mode M.
                    855:      
                    856: `GET_MODE_UNIT_SIZE (M)'     
                    857:      Returns the size in bits of the subunits of a datum of mode M.
                    858:      This is the same as `GET_MODE_SIZE' except in the case of
                    859:      complex modes and `EPmode'.  For them, the unit size ithe
                    860:      size of the real or imaginary part, or the size of the function
                    861:      pointer or the context pointer.
                    862: 
                    863: 
                    864: File: internals  Node: Constants, Prev: Machine Modes, Up: RTL, Next: Regs and Memory
                    865: 
                    866: Constant Expression Types
                    867: =========================
                    868: 
                    869: The simplest RTL expressions are those that represent constant values.
                    870: 
                    871: `(const_int I)'     
                    872:      This type of expression represents the integer value I.  I
                    873:      is customarily accessed with the macro `INTVAL' as in
                    874:      `INTVAL (exp)', which is equivalent to `XINT (exp, 0)'.
                    875:      
                    876:      There is only one expression object for the integer value zero;
                    877:      it is the value of the variable `const0_rtx'.  Likewise, the
                    878:      only expression for integer value one is found in `const1_rtx'.
                    879:      Any attempt to create an expression of code `const_int' and
                    880:      value zero or one will return `const0_rtx' or `const1_rtx'
                    881:      as appropriate.
                    882:      
                    883: `(const_double:M I0 I1)'     
                    884:      Represents a floating point constant value of mode M.  The two
                    885:      integers I0 and I1 together contain the bits of a
                    886:      `double' value.  To convert them to a `double', do
                    887:      
                    888:           union { double d; int i[2];} u;
                    889:           u.i[0] = XINT (x, 0);
                    890:           u.i[1] = XINT (x, 1);
                    891:      
                    892:      and then refer to `u.d'.  The value of the constant is
                    893:      represented as a double in this fashion even if the value represented
                    894:      is single-precision.
                    895:      
                    896:      `dconst0_rtx' and `fconst0_rtx' are `CONST_DOUBLE'
                    897:      expressions with value 0 and modes `DFmode' and `SFmode'.
                    898:      
                    899: `(symbol_ref SYMBOL)'     
                    900:      Represents the value of an assembler label for data.  SYMBOL is
                    901:      a string that describes the name of the assembler label.  If it starts
                    902:      with a `*', the label is the rest of SYMBOL not including
                    903:      the `*'.  Otherwise, the label is SYMBOL, prefixed with
                    904:      `_'.
                    905:      
                    906: `(label_ref LABEL)'     
                    907:      Represents the value of an assembler label for code.  It contains one
                    908:      operand, an expression, which must be a `code_label' that appears
                    909:      in the instruction sequence to identify the place where the label
                    910:      should go.
                    911:      
                    912:      The reason for using a distinct expression type for code label
                    913:      references is so that jump optimization can distinguish them.
                    914:      
                    915: `(const EXP)'     
                    916:      Represents a constant that is the result of an assembly-time
                    917:      arithmetic computation.  The operand, EXP, is an expression that
                    918:      contains only constants (`const_int', `symbol_ref' and
                    919:      `label_ref' expressions) combined with `plus' and
                    920:      `minus'.  However, not all combinations are valid, since the
                    921:      assembler cannot do arbitrary arithmetic on relocatable symbols.
                    922: 
                    923: 
                    924: File: internals  Node: Regs and Memory, Prev: Constants, Up: RTL, Next: Arithmetic
                    925: 
                    926: Registers and Memory
                    927: ====================
                    928: 
                    929: Here are the RTL expression types for describing access to machine
                    930: registers and to main memory.
                    931: 
                    932: `(reg:M N)'     
                    933:      For small values of the integer N (less than
                    934:      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
                    935:      register number N: a "hard register".  For larger values of
                    936:      N, it stands for a temporary value or "pseudo register".
                    937:      The compiler's strategy is to generate code assuming an unlimited
                    938:      number of such pseudo registers, and later convert them into hard
                    939:      registers or into memory references.
                    940:      
                    941:      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
                    942:      description, since the number of hard registers on the machine is an
                    943:      invariant characteristic of the machine.  Note, however, that not
                    944:      all of the machine registers must be general registers.  All the
                    945:      machine registers that can be used for storage of data are given
                    946:      hard register numbers, even those that can be used only in certain
                    947:      instructions or can hold only certain types of data.
                    948:      
                    949:      Each pseudo register number used in a function's rtl code is
                    950:      represented by a unique `reg' expression.
                    951:      
                    952:      M is the machine mode of the reference.  It is necessary because
                    953:      machines can generally refer to each register in more than one mode.
                    954:      For example, a register may contain a full word but there may be
                    955:      instructions to refer to it as a half word or as a single byte, as
                    956:      well as instructions to refer to it as a floating point number of
                    957:      various precisions.
                    958:      
                    959:      Even for a register that the machine can access in only one mode,
                    960:      the mode must always be specified.
                    961:      
                    962:      A hard register may be accessed in various modes throughout one
                    963:      function, but each pseudo register is given a natural mode
                    964:      and is accessed only in that mode.  When it is necessary to describe
                    965:      an access to a pseudo register using a nonnatural mode, a `subreg'
                    966:      expression is used.
                    967:      
                    968:      A `reg' expression with a machine mode that specifies more than
                    969:      one word of data may actually stand for several consecutive registers.
                    970:      If in addition the register number specifies a hardware register, then
                    971:      it actually represents several consecutive hardware registers starting
                    972:      with the specified one.
                    973:      
                    974:      Such multi-word hardware register `reg' expressions may not be live
                    975:      across the boundary of a basic block.  The lifetime analysis pass does not
                    976:      know how to record properly that several consecutive registers are
                    977:      actually live there, and therefore register allocation would be confused.
                    978:      The CSE pass must go out of its way to make sure the situation does
                    979:      not arise.
                    980:      
                    981: `(subreg:M REG WORDNUM)'     
                    982:      `subreg' expressions are used to refer to a register in a machine
                    983:      mode other than its natural one, or to refer to one register of
                    984:      a multi-word `reg' that actually refers to several registers.
                    985:      
                    986:      Each pseudo-register has a natural mode.  If it is necessary to
                    987:      operate on it in a different mode---for example, to perform a fullword
                    988:      move instruction on a pseudo-register that contains a single byte---
                    989:      the pseudo-register must be enclosed in a `subreg'.  In such
                    990:      a case, WORDNUM is zero.
                    991:      
                    992:      The other use of `subreg' is to extract the individual registers
                    993:      of a multi-register value.  Machine modes such as `DImode' and
                    994:      `EPmode' indicate values longer than a word, values which usually
                    995:      require two consecutive registers.  To access one of the registers,
                    996:      use a `subreg' with mode `SImode' and a WORDNUM that
                    997:      says which register.
                    998:      
                    999:      The compilation parameter `WORDS_BIG_ENDIAN', if defined, says
                   1000:      that word number zero is the most significant part; otherwise, it is
                   1001:      the least significant part.
                   1002:      
                   1003:      Note that it is not valid to access a `DFmode' value in `SFmode'
                   1004:      using a `subreg'.  On some machines the most significant part of a
                   1005:      `DFmode' value does not have the same format as a single-precision
                   1006:      floating value.
                   1007:      
                   1008: `(cc0)'     
                   1009:      This refers to the machine's condition code register.  It has no
                   1010:      operands and may not have a machine mode.  It may be validly used in
                   1011:      only two contexts: as the destination of an assignment (in test and
                   1012:      compare instructions) and in comparison operators comparing against
                   1013:      zero (`const_int' with value zero; that is to say,
                   1014:      `const0_rtx'.
                   1015:      
                   1016:      There is only one expression object of code `cc0'; it is the
                   1017:      value of the variable `cc0_rtx'.  Any attempt to create an
                   1018:      expression of code `cc0' will return `cc0_rtx'.
                   1019:      
                   1020:      One special thing about the condition code register is that instructions
                   1021:      can set it implicitly.  On many machines, nearly all instructions set
                   1022:      the condition code based on the value that they compute or store.
                   1023:      It is not necessary to record these actions explicitly in the RTL
                   1024:      because the machine description includes a prescription for recognizing
                   1025:      the instructions that do so (by means of the macro `NOTICE_UPDATE_CC').
                   1026:      Only instructions whose sole purpose is to set the condition code,
                   1027:      and instructions that use the condition code, need mention `(cc0)'.
                   1028:      
                   1029: `(pc)'     
                   1030:      This represents the machine's program counter.  It has no operands and
                   1031:      may not have a machine mode.  `(pc)' may be validly used only in
                   1032:      certain specific contexts in jump instructions.
                   1033:      
                   1034:      There is only one expression object of code `pc'; it is the value of
                   1035:      the variable `pc_rtx'.  Any attempt to create an expression of code
                   1036:      `pc' will return `pc_rtx'.
                   1037:      
                   1038:      All instructions that do not jump alter the program counter implicitly,
                   1039:      but there is no need to mention this in the RTL.
                   1040:      
                   1041: `(mem:M ADDR)'     
                   1042:      This rtx represents a reference to main memory at an address
                   1043:      represented by the expression ADDR.  M specifies how
                   1044:      large a unit of memory is accessed.
                   1045: 
                   1046: 
                   1047: File: internals  Node: Arithmetic, Prev: Regs and Memory, Up: RTL, Next: Comparisons
                   1048: 
                   1049: RTL Expressions for Arithmetic
                   1050: ==============================
                   1051: 
                   1052: `(plus:M X Y)'     
                   1053:      Represents the sum of the values represented by X and Y
                   1054:      carried out in machine mode M.  This is valid only if
                   1055:      X and Y both are valid for mode M.
                   1056:      
                   1057: `(minus:M X Y)'     
                   1058:      Like `plus' but represents subtraction.
                   1059:      
                   1060: `(minus X Y)'     
                   1061:      Represents the result of subtracting Y from X
                   1062:      for purposes of comparison.  The absence of a machine mode
                   1063:      in the `minus' expression indicates that the result is
                   1064:      computed without overflow, as if with infinite precision.
                   1065:      
                   1066:      Of course, machines can't really subtract with infinite precision.
                   1067:      However, they can pretend to do so when only the sign of the
                   1068:      result will be used, which is the case when the result is stored
                   1069:      in `(cc0)'.  And that is the only was this kind of expression
                   1070:      may validly be used: as a value to be stored in the condition codes.
                   1071:      
                   1072: `(neg:M X)'     
                   1073:      Represents the negation (subtraction from zero) of the value
                   1074:      represented by X, carried out in mode M.  X must be
                   1075:      valid for mode M.
                   1076:      
                   1077: `(mult:M X Y)'     
                   1078:      Represents the signed product of the values represented by X and
                   1079:      Y carried out in machine mode M.  If
                   1080:      X and Y are both valid for mode M, this is ordinary
                   1081:      size-preserving multiplication.  Alteratively, both X and Y
                   1082:      may be valid for a different, narrower mode.  This represents the
                   1083:      kind of multiplication that generates a product wider than the operands.
                   1084:      Widening multiplication and same-size multiplication are completely
                   1085:      distinct and supported by different machine instructions; machines may
                   1086:      support one but not the other.
                   1087:      
                   1088:      `mult' may be used for floating point division as well.
                   1089:      Then M is a floating point machine mode.
                   1090:      
                   1091: `(umult:M X Y)'     
                   1092:      Like `mult' but represents unsigned multiplication.  It may be
                   1093:      used in both same-size and widening forms, like `mult'.
                   1094:      `umult' is used only for fixed-point division.
                   1095:      
                   1096: `(div:M X Y)'     
                   1097:      Represents the quotient in signed division of X by Y,
                   1098:      carried out in machine mode M.  If M is a floating-point
                   1099:      mode, it represents the exact quotient; otherwise, the integerized
                   1100:      quotient.  If X and Y are both valid for mode M,
                   1101:      this is ordinary size-preserving division.  Some machines have
                   1102:      division instructions in which the operands and quotient widths are
                   1103:      not all the same; such instructions are represented by `div'
                   1104:      expressions in which the machine modes are not all the same.
                   1105:      
                   1106: `(udiv:M X Y)'     
                   1107:      Like `div' but represents unsigned division.
                   1108:      
                   1109: `(mod:M X Y)'     
                   1110: `(umod:M X Y)'     
                   1111:      Like `div' and `udiv' but represent the remainder instead of
                   1112:      the quotient.
                   1113:      
                   1114: `(not:M X)'     
                   1115:      Represents the bitwise complement of the value represented by X,
                   1116:      carried out in mode M, which must be a fixed-point machine mode.
                   1117:      X must be valid for mode M, which must be a fixed-point mode.
                   1118:      
                   1119: `(and:M X Y)'     
                   1120:      Represents the bitwise logical-and of the values represented by
                   1121:      X and Y, carried out in machine mode M.  This is
                   1122:      valid only if X and Y both are valid for mode M,
                   1123:      which must be a fixed-point mode.
                   1124:      
                   1125: `(ior:M X Y)'     
                   1126:      Represents the bitwise inclusive-or of the values represented by
                   1127:      X and Y, carried out in machine mode M.  This is
                   1128:      valid only if X and Y both are valid for mode M,
                   1129:      which must be a fixed-point mode.
                   1130:      
                   1131: `(xor:M X Y)'     
                   1132:      Represents the bitwise exclusive-or of the values represented by
                   1133:      X and Y, carried out in machine mode M.  This is
                   1134:      valid only if X and Y both are valid for mode M,
                   1135:      which must be a fixed-point mode.
                   1136:      
                   1137: `(lshift:M X C)'     
                   1138:      Represents the result of logically shifting X left by C
                   1139:      places.  X must be valid for the mode M, a fixed-point
                   1140:      machine mode.  C must be valid for a fixed-point mode;
                   1141:      which mode is determined by the mode called for in the machine
                   1142:      description entry for the left-shift instruction.  For example,
                   1143:      on the Vax, the mode of C is `QImode' regardless of M.
                   1144:      
                   1145:      On some machines, negative values of C may be meaningful; this
                   1146:      is why logical left shift an arithmetic left shift are distinguished.
                   1147:      For example, Vaxes have no right-shift instructions, and right shifts
                   1148:      are represented as left-shift instructions whose counts happen
                   1149:      to be negative constants or else computed (in a previous instruction)
                   1150:      by negation.
                   1151:      
                   1152: `(ashift:M X C)'     
                   1153:      Like `lshift' but for arithmetic left shift.
                   1154:      
                   1155: `(lshiftrt:M X C)'     
                   1156: `(ashiftrt:M X C)'     
                   1157:      Like `lshift' and `ashift' but for right shift.
                   1158:      
                   1159: `(rotate:M X C)'     
                   1160: `(rotatert:M X C)'     
                   1161:      Similar but represent left and right rotate.
                   1162:      
                   1163: `(abs:M X)'     
                   1164:      Represents the absolute value of X, computed in mode M.
                   1165:      X must be valid for M.
                   1166:      
                   1167: `(sqrt:M X)'     
                   1168:      Represents the square root of X, computed in mode M.
                   1169:      X must be valid for M.  Most often M will be
                   1170:      a floating point mode.
                   1171: 
                   1172: 

unix.superglobalmegacorp.com

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