home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1244 / gccinfo.zoo / gccinfo / gcc.info-7 < prev    next >
Encoding:
GNU Info File  |  1992-02-16  |  48.7 KB  |  1,212 lines

  1. This is Info file gcc.info, produced by Makeinfo-1.43 from the input
  2. file gcc.texi.
  3.  
  4.    This file documents the use and the internals of the GNU compiler.
  5.  
  6.    Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
  7.  
  8.    Permission is granted to make and distribute verbatim copies of
  9. this manual provided the copyright notice and this permission notice
  10. are preserved on all copies.
  11.  
  12.    Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the section entitled "GNU General Public License" is included
  15. exactly as in the original, and provided that the entire resulting
  16. derived work is distributed under the terms of a permission notice
  17. identical to this one.
  18.  
  19.    Permission is granted to copy and distribute translations of this
  20. manual into another language, under the above conditions for modified
  21. versions, except that the section entitled "GNU General Public
  22. License" and this permission notice may be included in translations
  23. approved by the Free Software Foundation instead of in the original
  24. English.
  25.  
  26. 
  27. File: gcc.info,  Node: Accessors,  Next: Flags,  Prev: RTL Objects,  Up: RTL
  28.  
  29. Access to Operands
  30. ==================
  31.  
  32.    For each expression type `rtl.def' specifies the number of contained
  33. objects and their kinds, with four possibilities: `e' for expression
  34. (actually a pointer to an expression), `i' for integer, `s' for
  35. string, and `E' for vector of expressions.  The sequence of letters
  36. for an expression code is called its "format".  Thus, the format of
  37. `subreg' is `ei'.
  38.  
  39.    A few other format characters are used occasionally:
  40.  
  41. `u'
  42.      `u' is equivalent to `e' except that it is printed differently in
  43.      debugging dumps.  It is used for pointers to insns.
  44.  
  45. `n'
  46.      `n' is equivalent to `i' except that it is printed differently in
  47.      debugging dumps.  It is used for the line number or code number
  48.      of a `note' insn.
  49.  
  50. `S'
  51.      `S' indicates a string which is optional.  In the RTL objects in
  52.      core, `S' is equivalent to `s', but when the object is read, from
  53.      an `md' file, the string value of this operand may be omitted. 
  54.      An omitted string is taken to be the null string.
  55.  
  56. `V'
  57.      `V' indicates a vector which is optional.  In the RTL objects in
  58.      core, `V' is equivalent to `E', but when the object is read from
  59.      an `md' file, the vector value of this operand may be omitted. 
  60.      An omitted vector is effectively the same as a vector of no
  61.      elements.
  62.  
  63. `0'
  64.      `0' means a slot whose contents do not fit any normal category. 
  65.      `0' slots are not printed at all in dumps, and are often used in
  66.      special ways by small parts of the compiler.
  67.  
  68.    There are macros to get the number of operands, the format, and the
  69. class of an expression code:
  70.  
  71. `GET_RTX_LENGTH (CODE)'
  72.      Number of operands of an RTX of code CODE.
  73.  
  74. `GET_RTX_FORMAT (CODE)'
  75.      The format of an RTX of code CODE, as a C string.
  76.  
  77. `GET_RTX_CLASS (CODE)'
  78.      A single character representing the type of RTX operation that
  79.      code CODE performs.
  80.  
  81.      The following classes are defined:
  82.  
  83.     `o'
  84.           An RTX code that represents an actual object, such as `reg'
  85.           or `mem'.  `subreg' is not in this class.
  86.  
  87.     `<'
  88.           An RTX code for a comparison.  The codes in this class are
  89.           `NE', `EQ', `LE', `LT', `GE', `GT', `LEU', `LTU', `GEU',
  90.           `GTU'.
  91.  
  92.     `1'
  93.           An RTX code for a unary arithmetic operation, such as `neg'.
  94.  
  95.     `c'
  96.           An RTX code for a commutative binary operation, other than
  97.           `NE' and `EQ' (which have class `<').
  98.  
  99.     `2'
  100.           An RTX code for a noncommutative binary operation, such as
  101.           `MINUS'.
  102.  
  103.     `b'
  104.           An RTX code for a bitfield operation (`ZERO_EXTRACT' and
  105.           `SIGN_EXTRACT').
  106.  
  107.     `3'
  108.           An RTX code for other three input operations, such as
  109.           `IF_THEN_ELSE'.
  110.  
  111.     `i'
  112.           An RTX code for a machine insn (`INSN', `JUMP_INSN', and
  113.           `CALL_INSN').
  114.  
  115.     `m'
  116.           An RTX code for something that matches in insns, such as
  117.           `MATCH_DUP'.
  118.  
  119.     `x'
  120.           All other RTX codes.
  121.  
  122.    Operands of expressions are accessed using the macros `XEXP',
  123. `XINT' and `XSTR'.  Each of these macros takes two arguments: an
  124. expression-pointer (RTX) and an operand number (counting from zero). 
  125. Thus,
  126.  
  127.      XEXP (X, 2)
  128.  
  129. accesses operand 2 of expression X, as an expression.
  130.  
  131.      XINT (X, 2)
  132.  
  133. accesses the same operand as an integer.  `XSTR', used in the same
  134. fashion, would access it as a string.
  135.  
  136.    Any operand can be accessed as an integer, as an expression or as a
  137. string.  You must choose the correct method of access for the kind of
  138. value actually stored in the operand.  You would do this based on the
  139. expression code of the containing expression.  That is also how you
  140. would know how many operands there are.
  141.  
  142.    For example, if X is a `subreg' expression, you know that it has
  143. two operands which can be correctly accessed as `XEXP (X, 0)' and
  144. `XINT (X, 1)'.  If you did `XINT (X, 0)', you would get the address of
  145. the expression operand but cast as an integer; that might occasionally
  146. be useful, but it would be cleaner to write `(int) XEXP (X, 0)'. 
  147. `XEXP (X, 1)' would also compile without error, and would return the
  148. second, integer operand cast as an expression pointer, which would
  149. probably result in a crash when accessed.  Nothing stops you from
  150. writing `XEXP (X, 28)' either, but this will access memory past the
  151. end of the expression with unpredictable results.
  152.  
  153.    Access to operands which are vectors is more complicated.  You can
  154. use the macro `XVEC' to get the vector-pointer itself, or the macros
  155. `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
  156.  
  157. `XVEC (EXP, IDX)'
  158.      Access the vector-pointer which is operand number IDX in EXP.
  159.  
  160. `XVECLEN (EXP, IDX)'
  161.      Access the length (number of elements) in the vector which is in
  162.      operand number IDX in EXP.  This value is an `int'.
  163.  
  164. `XVECEXP (EXP, IDX, ELTNUM)'
  165.      Access element number ELTNUM in the vector which is in operand
  166.      number IDX in EXP.  This value is an RTX.
  167.  
  168.      It is up to you to make sure that ELTNUM is not negative and is
  169.      less than `XVECLEN (EXP, IDX)'.
  170.  
  171.    All the macros defined in this section expand into lvalues and
  172. therefore can be used to assign the operands, lengths and vector
  173. elements as well as to access them.
  174.  
  175. 
  176. File: gcc.info,  Node: Flags,  Next: Machine Modes,  Prev: Accessors,  Up: RTL
  177.  
  178. Flags in an RTL Expression
  179. ==========================
  180.  
  181.    RTL expressions contain several flags (one-bit bit-fields) that are
  182. used in certain types of expression.  Most often they are accessed
  183. with the following macros:
  184.  
  185. `MEM_VOLATILE_P (X)'
  186.      In `mem' expressions, nonzero for volatile memory references. 
  187.      Stored in the `volatil' field and printed as `/v'.
  188.  
  189. `MEM_IN_STRUCT_P (X)'
  190.      In `mem' expressions, nonzero for reference to an entire
  191.      structure, union or array, or to a component of one.  Zero for
  192.      references to a scalar variable or through a pointer to a scalar. 
  193.      Stored in the `in_struct' field and printed as `/s'.
  194.  
  195. `REG_LOOP_TEST_P'
  196.      In `reg' expressions, nonzero if this register's entire life is
  197.      contained in the exit test code for some loop.  Stored in the
  198.      `in_struct' field and printed as `/s'.
  199.  
  200. `REG_USERVAR_P (X)'
  201.      In a `reg', nonzero if it corresponds to a variable present in
  202.      the user's source code.  Zero for temporaries generated
  203.      internally by the compiler.  Stored in the `volatil' field and
  204.      printed as `/v'.
  205.  
  206. `REG_FUNCTION_VALUE_P (X)'
  207.      Nonzero in a `reg' if it is the place in which this function's
  208.      value is going to be returned.  (This happens only in a hard
  209.      register.)  Stored in the `integrated' field and printed as `/i'.
  210.  
  211.      The same hard register may be used also for collecting the values
  212.      of functions called by this one, but `REG_FUNCTION_VALUE_P' is
  213.      zero in this kind of use.
  214.  
  215. `RTX_UNCHANGING_P (X)'
  216.      Nonzero in a `reg' or `mem' if the value is not changed.  (This
  217.      flag is not set for memory references via pointers to constants. 
  218.      Such pointers only guarantee that the object will not be changed
  219.      explicitly by the current function.  The object might be changed
  220.      by other functions or by aliasing.)  Stored in the `unchanging'
  221.      field and printed as `/u'.
  222.  
  223. `RTX_INTEGRATED_P (INSN)'
  224.      Nonzero in an insn if it resulted from an in-line function call. 
  225.      Stored in the `integrated' field and printed as `/i'.  This may
  226.      be deleted; nothing currently depends on it.
  227.  
  228. `SYMBOL_REF_USED (X)'
  229.      In a `symbol_ref', indicates that X has been used.  This is
  230.      normally only used to ensure that X is only declared external
  231.      once.  Stored in the `used' field.
  232.  
  233. `SYMBOL_REF_FLAG (X)'
  234.      In a `symbol_ref', this is used as a flag for machine-specific
  235.      purposes.  Stored in the `volatil' field and printed as `/v'.
  236.  
  237. `LABEL_OUTSIDE_LOOP_P'
  238.      In `label_ref' expressions, nonzero if this is a reference to a
  239.      label that is outside the innermost loop containing the reference
  240.      to the label.  Stored in the `in_struct' field and printed as
  241.      `/s'.
  242.  
  243. `INSN_DELETED_P (INSN)'
  244.      In an insn, nonzero if the insn has been deleted.  Stored in the
  245.      `volatil' field and printed as `/v'.
  246.  
  247. `INSN_ANNULLED_BRANCH_P (INSN)'
  248.      In an `insn' in the delay slot of a branch insn, indicates that an
  249.      annulling branch should be used.  See the discussion under
  250.      `sequence' below.  Stored in the `unchanging' field and printed
  251.      as `/u'.
  252.  
  253. `INSN_FROM_TARGET_P (INSN)'
  254.      In an `insn' in a delay slot of a branch, indicates that the insn
  255.      is from the target of the branch.  If the branch insn has
  256.      `INSN_ANNULLED_BRANCH_P' set, this insn should only be executed if
  257.      the branch is taken.  For annulled branches with this bit clear,
  258.      the insn should be executed only if the branch is not taken. 
  259.      Stored in the `in_struct' field and printed as `/s'.
  260.  
  261. `CONSTANT_POOL_ADDRESS_P (X)'
  262.      Nonzero in a `symbol_ref' if it refers to part of the current
  263.      function's "constants pool".  These are addresses close to the
  264.      beginning of the function, and GNU CC assumes they can be
  265.      addressed directly (perhaps with the help of base registers). 
  266.      Stored in the `unchanging' field and printed as `/u'.
  267.  
  268. `CONST_CALL_P (X)'
  269.      In a `call_insn', indicates that the insn represents a call to a
  270.      const function.  Stored in the `unchanging' field and printed as
  271.      `/u'.
  272.  
  273. `LABEL_PRESERVE_P (X)'
  274.      In a `code_label', indicates that the label can never be deleted. 
  275.      Labels referenced by a a non-local goto will have this bit set. 
  276.      Stored in the `in_struct' field and printed as `/s'.
  277.  
  278. `SCHED_GROUP_P (INSN)'
  279.      During instruction scheduling, in an insn, indicates that the
  280.      previous insn must be scheduled together with this insn.  This is
  281.      used to ensure that certain groups of instructions will not be
  282.      split up by the instruction scheduling pass, for example, `use'
  283.      insns before a `call_insn' may not be separated from the
  284.      `call_insn'.  Stored in the `in_struct' field and printed as `/s'.
  285.  
  286.    These are the fields which the above macros refer to:
  287.  
  288. `used'
  289.      Normally, this flag is used only momentarily, at the end of RTL
  290.      generation for a function, to count the number of times an
  291.      expression appears in insns.  Expressions that appear more than
  292.      once are copied, according to the rules for shared structure
  293.      (*note Sharing::.).
  294.  
  295.      In a `symbol_ref', it indicates that an external declaration for
  296.      the symbol has already been written.
  297.  
  298.      In a `reg', it is used by the leaf register renumbering code to
  299.      ensure that each register is only renumbered once.
  300.  
  301. `volatil'
  302.      This flag is used in `mem',`symbol_ref' and `reg' expressions and
  303.      in insns.  In RTL dump files, it is printed as `/v'.
  304.  
  305.      In a `mem' expression, it is 1 if the memory reference is
  306.      volatile.  Volatile memory references may not be deleted,
  307.      reordered or combined.
  308.  
  309.      In a `symbol_ref' expression, it is used for machine-specific
  310.      purposes.
  311.  
  312.      In a `reg' expression, it is 1 if the value is a user-level
  313.      variable.  0 indicates an internal compiler temporary.
  314.  
  315.      In an insn, 1 means the insn has been deleted.
  316.  
  317. `in_struct'
  318.      In `mem' expressions, it is 1 if the memory datum referred to is
  319.      all or part of a structure or array; 0 if it is (or might be) a
  320.      scalar variable.  A reference through a C pointer has 0 because
  321.      the pointer might point to a scalar variable.  This information
  322.      allows the compiler to determine something about possible cases
  323.      of aliasing.
  324.  
  325.      In an insn in the delay slot of a branch, 1 means that this insn
  326.      is from the target of the branch.
  327.  
  328.      During instruction scheduling, in an insn, 1 means that this insn
  329.      must be scheduled as part of a group together with the previous
  330.      insn.
  331.  
  332.      In `reg' expressions, it is 1 if the register has its entire life
  333.      contained within the test expression of some loopl.
  334.  
  335.      In `label_ref' expressions, 1 means that the referenced label is
  336.      outside the innermost loop containing the insn in which the
  337.      `label_ref' was found.
  338.  
  339.      In `code_label' expressions, it is 1 if the label may never be
  340.      deleted.  This is used for labels which are the target of
  341.      non-local gotos.
  342.  
  343.      In an RTL dump, this flag is represented as `/s'.
  344.  
  345. `unchanging'
  346.      In `reg' and `mem' expressions, 1 means that the value of the
  347.      expression never changes.
  348.  
  349.      In an insn, 1 means that this is an annulling branch.
  350.  
  351.      In a `symbol_ref' expression, 1 means that this symbol addresses
  352.      something in the per-function constants pool.
  353.  
  354.      In a `call_insn', 1 means that this instruction is a call to a
  355.      const function.
  356.  
  357.      In an RTL dump, this flag is represented as `/u'.
  358.  
  359. `integrated'
  360.      In some kinds of expressions, including insns, this flag means the
  361.      rtl was produced by procedure integration.
  362.  
  363.      In a `reg' expression, this flag indicates the register
  364.      containing the value to be returned by the current function.  On
  365.      machines that pass parameters in registers, the same register
  366.      number may be used for parameters as well, but this flag is not
  367.      set on such uses.
  368.  
  369. 
  370. File: gcc.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
  371.  
  372. Machine Modes
  373. =============
  374.  
  375.    A machine mode describes a size of data object and the
  376. representation used for it.  In the C code, machine modes are
  377. represented by an enumeration type, `enum machine_mode', defined in
  378. `machmode.def'.  Each RTL expression has room for a machine mode and
  379. so do certain kinds of tree expressions (declarations and types, to be
  380. precise).
  381.  
  382.    In debugging dumps and machine descriptions, the machine mode of an
  383. RTL expression is written after the expression code with a colon to
  384. separate them.  The letters `mode' which appear at the end of each
  385. machine mode name are omitted.  For example, `(reg:SI 38)' is a `reg'
  386. expression with machine mode `SImode'.  If the mode is `VOIDmode', it
  387. is not written at all.
  388.  
  389.    Here is a table of machine modes.  The term "byte" below refers to
  390. an object of `BITS_PER_UNIT' bits (*note Storage Layout::.).
  391.  
  392. `QImode'
  393.      "Quarter-Integer" mode represents a single byte treated as an
  394.      integer.
  395.  
  396. `HImode'
  397.      "Half-Integer" mode represents a two-byte integer.
  398.  
  399. `PSImode'
  400.      "Partial Single Integer" mode represents an integer which occupies
  401.      four bytes but which doesn't really use all four.  On some
  402.      machines, this is the right mode to use for pointers.
  403.  
  404. `SImode'
  405.      "Single Integer" mode represents a four-byte integer.
  406.  
  407. `PDImode'
  408.      "Partial Double Integer" mode represents an integer which occupies
  409.      eight bytes but which doesn't really use all eight.  On some
  410.      machines, this is the right mode to use for certain pointers.
  411.  
  412. `DImode'
  413.      "Double Integer" mode represents an eight-byte integer.
  414.  
  415. `TImode'
  416.      "Tetra Integer" (?) mode represents a sixteen-byte integer.
  417.  
  418. `SFmode'
  419.      "Single Floating" mode represents a single-precision (four byte)
  420.      floating point number.
  421.  
  422. `DFmode'
  423.      "Double Floating" mode represents a double-precision (eight byte)
  424.      floating point number.
  425.  
  426. `XFmode'
  427.      "Extended Floating" mode represents a triple-precision (twelve
  428.      byte) floating point number.  This mode is used for IEEE extended
  429.      floating point.
  430.  
  431. `TFmode'
  432.      "Tetra Floating" mode represents a quadruple-precision (sixteen
  433.      byte) floating point number.
  434.  
  435. `CCmode'
  436.      "Condition Code" mode represents the value of a condition code,
  437.      which is a machine-specific set of bits used to represent the
  438.      result of a comparison operation.  Other machine-specific modes
  439.      may also be used for the condition code.  These modes are not
  440.      used on machines that use `cc0' (see *note Condition Code::.).
  441.  
  442. `BLKmode'
  443.      "Block" mode represents values that are aggregates to which none
  444.      of the other modes apply.  In RTL, only memory references can
  445.      have this mode, and only if they appear in string-move or vector
  446.      instructions.  On machines which have no such instructions,
  447.      `BLKmode' will not appear in RTL.
  448.  
  449. `VOIDmode'
  450.      Void mode means the absence of a mode or an unspecified mode. 
  451.      For example, RTL expressions of code `const_int' have mode
  452.      `VOIDmode' because they can be taken to have whatever mode the
  453.      context requires.  In debugging dumps of RTL, `VOIDmode' is
  454.      expressed by the absence of any mode.
  455.  
  456. `SCmode, DCmode, XCmode, TCmode'
  457.      These modes stand for a complex number represented as a pair of
  458.      floating point values.  The values are in `SFmode', `DFmode',
  459.      `XFmode', and `TFmode', respectively.  Since C does not support
  460.      complex numbers, these machine modes are only partially
  461.      implemented.
  462.  
  463.    The machine description defines `Pmode' as a C macro which expands
  464. into the machine mode used for addresses.  Normally this is the mode
  465. whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
  466.  
  467.    The only modes which a machine description must support are
  468. `QImode', and the modes corresponding to `BITS_PER_WORD',
  469. `FLOAT_TYPE_SIZE' and `DOUBLE_TYPE_SIZE'.  The compiler will attempt
  470. to use `DImode' for 8-byte structures and unions, but this can be
  471. prevented by overriding the definition of `MAX_FIXED_MODE_SIZE'. 
  472. Alternatively, you can have the compiler use `TImode' for 16-byte
  473. structures and unions.  Likewise, you can arrange for the C type
  474. `short int' to avoid using `HImode'.
  475.  
  476.    Very few explicit references to machine modes remain in the
  477. compiler and these few references will soon be removed.  Instead, the
  478. machine modes are divided into mode classes.  These are represented by
  479. the enumeration type `enum mode_class' defined in `machmode.h'.  The
  480. possible mode classes are:
  481.  
  482. `MODE_INT'
  483.      Integer modes.  By default these are `QImode', `HImode',
  484.      `SImode', `DImode', and `TImode'.
  485.  
  486. `MODE_PARTIAL_INT'
  487.      The "partial integer" modes, `PSImode' and `PDImode'.
  488.  
  489. `MODE_FLOAT'
  490.      floating point modes.  By default these are `SFmode', `DFmode',
  491.      `XFmode' and `TFmode'.
  492.  
  493. `MODE_COMPLEX_INT'
  494.      Complex integer modes.  (These are not currently implemented).
  495.  
  496. `MODE_COMPLEX_FLOAT'
  497.      Complex floating point modes.  By default these are `SCmode',
  498.      `DCmode', `XCmode', and `TCmode'.
  499.  
  500. `MODE_FUNCTION'
  501.      Algol or Pascal function variables including a static chain. 
  502.      (These are not currently implemented).
  503.  
  504. `MODE_CC'
  505.      Modes representing condition code values.  These are `CCmode' plus
  506.      any modes listed in the `EXTRA_CC_MODES' macro.  *Note Jump
  507.      Patterns::, also see *Note Condition Code::.
  508.  
  509. `MODE_RANDOM'
  510.      This is a catchall mode class for modes which don't fit into the
  511.      above classes.  Currently `VOIDmode' and `BLKmode' are in
  512.      `MODE_RANDOM'.
  513.  
  514.    Here are some C macros that relate to machine modes:
  515.  
  516. `GET_MODE (X)'
  517.      Returns the machine mode of the RTX X.
  518.  
  519. `PUT_MODE (X, NEWMODE)'
  520.      Alters the machine mode of the RTX X to be NEWMODE.
  521.  
  522. `NUM_MACHINE_MODES'
  523.      Stands for the number of machine modes available on the target
  524.      machine.  This is one greater than the largest numeric value of
  525.      any machine mode.
  526.  
  527. `GET_MODE_NAME (M)'
  528.      Returns the name of mode M as a string.
  529.  
  530. `GET_MODE_CLASS (M)'
  531.      Returns the mode class of mode M.
  532.  
  533. `GET_MODE_WIDER_MODE (M)'
  534.      Returns the next wider natural mode.  E.g.,
  535.      `GET_WIDER_MODE(QImode)' returns `HImode'.
  536.  
  537. `GET_MODE_SIZE (M)'
  538.      Returns the size in bytes of a datum of mode M.
  539.  
  540. `GET_MODE_BITSIZE (M)'
  541.      Returns the size in bits of a datum of mode M.
  542.  
  543. `GET_MODE_MASK (M)'
  544.      Returns a bitmask containing 1 for all bits in a word that fit
  545.      within mode M.  This macro can only be used for modes whose
  546.      bitsize is less than or equal to `HOST_BITS_PER_INT'.
  547.  
  548. `GET_MODE_ALIGNMENT (M))'
  549.      Return the required alignment, in bits, for an object of mode M.
  550.  
  551. `GET_MODE_UNIT_SIZE (M)'
  552.      Returns the size in bytes of the subunits of a datum of mode M. 
  553.      This is the same as `GET_MODE_SIZE' except in the case of complex
  554.      modes.  For them, the unit size is the size of the real or
  555.      imaginary part.
  556.  
  557. `GET_MODE_NUNITS (M)'
  558.      Returns the number of units contained in a mode, i.e.,
  559.      `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
  560.  
  561. `GET_CLASS_NARROWEST_MODE (C)'
  562.      Returns the narrowest mode in mode class C.
  563.  
  564.    The global variables `byte_mode' and `word_mode' contain modes
  565. whose classes are `MODE_INT' and whose bitsizes are `BITS_PER_UNIT' or
  566. `BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
  567. and `SImode', respectively.
  568.  
  569. 
  570. File: gcc.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
  571.  
  572. Constant Expression Types
  573. =========================
  574.  
  575.    The simplest RTL expressions are those that represent constant
  576. values.
  577.  
  578. `(const_int I)'
  579.      This type of expression represents the integer value I.  I is
  580.      customarily accessed with the macro `INTVAL' as in `INTVAL
  581.      (EXP)', which is equivalent to `XINT (EXP, 0)'.
  582.  
  583.      Keep in mind that the result of `INTVAL' is an integer on the host
  584.      machine.  If the host machine has more bits in an `int' than the
  585.      target machine has in the mode in which the constant will be
  586.      used, then some of the bits you get from `INTVAL' will be
  587.      superfluous.  In many cases, for proper results, you must
  588.      carefully disregard the values of those bits.
  589.  
  590.      There is only one expression object for the integer value zero;
  591.      it is the value of the variable `const0_rtx'.  Likewise, the only
  592.      expression for integer value one is found in `const1_rtx', the
  593.      only expression for integer value two is found in `const2_rtx',
  594.      and the only expression for integer value negative one is found in
  595.      `constm1_rtx'.  Any attempt to create an expression of code
  596.      `const_int' and value zero, one, two or negative one will return
  597.      `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
  598.      appropriate.
  599.  
  600.      Similarly, there is only one object for the integer whose value is
  601.      `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
  602.      `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
  603.      point to the same object.  If `STORE_FLAG_VALUE' is -1,
  604.      `const_true_rtx' and `constm1_rtx' will point to the same object.
  605.  
  606. `(const_double:M ADDR I0 I1 ...)'
  607.      Represents either a floating-point constant of mode M or an
  608.      integer constant that is too large to fit into `HOST_BITS_PER_INT'
  609.      bits but small enough to fit within twice that number of bits
  610.      (GNU CC does not provide a mechanism to represent even larger
  611.      constants).  In the latter case, M will be `VOIDmode'.
  612.  
  613.      ADDR is used to contain the `mem' expression that corresponds to
  614.      the location in memory that at which the constant can be found. 
  615.      If it has not been allocated a memory location, but is on the
  616.      chain of all `const_double' expressions in this compilation
  617.      (maintained using an undisplayed field), ADDR contains
  618.      `const0_rtx'.  If it is not on the chain, ADDR contains
  619.      `cc0_rtx'.  ADDR is customarily accessed with the macro
  620.      `CONST_DOUBLE_MEM' and the chain field via `CONST_DOUBLE_CHAIN'.
  621.  
  622.      If M is `VOIDmode', the bit of the value are stored in I0 and I1.
  623.       I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
  624.      I1 with `CONST_DOUBLE_HIGH'.
  625.  
  626.      If the constant is floating point (either single or double
  627.      precision), then the number of integers used to store the value
  628.      depends on the size of `REAL_VALUE_TYPE' (*note
  629.      Cross-compilation::.).  The integers represent a `double'.  To
  630.      convert them to a `double', do
  631.  
  632.           union real_extract u;
  633.           bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u);
  634.  
  635.      and then refer to `u.d'.
  636.  
  637.      The macro `CONST0_RTX (MODE)' refers to an expression with value
  638.      0 in mode MODE. If mode MODE is of mode class `MODE_INT', it
  639.      returns `const0_rtx'.  Otherwise, it returns a `CONST_DOUBLE'
  640.      expression in mode MODE.  Similarly, the macro `CONST1_RTX
  641.      (MODE)' refers to an expression with value 1 in mode MODE and
  642.      similarly for `CONST2_RTX'.
  643.  
  644. `(const_string STR)'
  645.      Represents a constant string with value STR.  Currently this is
  646.      used only for insn attributes (*note Insn Attributes::.) since
  647.      constant strings in C are placed in memory.
  648.  
  649. `(symbol_ref SYMBOL)'
  650.      Represents the value of an assembler label for data.  SYMBOL is a
  651.      string that describes the name of the assembler label.  If it
  652.      starts with a `*', the label is the rest of SYMBOL not including
  653.      the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
  654.      `_'.
  655.  
  656. `(label_ref LABEL)'
  657.      Represents the value of an assembler label for code.  It contains
  658.      one operand, an expression, which must be a `code_label' that
  659.      appears in the instruction sequence to identify the place where
  660.      the label should go.
  661.  
  662.      The reason for using a distinct expression type for code label
  663.      references is so that jump optimization can distinguish them.
  664.  
  665. `(const:M EXP)'
  666.      Represents a constant that is the result of an assembly-time
  667.      arithmetic computation.  The operand, EXP, is an expression that
  668.      contains only constants (`const_int', `symbol_ref' and
  669.      `label_ref' expressions) combined with `plus' and `minus'. 
  670.      However, not all combinations are valid, since the assembler
  671.      cannot do arbitrary arithmetic on relocatable symbols.
  672.  
  673.      M should be `Pmode'.
  674.  
  675. `(high:M EXP)'
  676.      Represents the high-order bits of EXP, usually a `symbol_ref'. 
  677.      The number of bits is machine-dependent and is normally the
  678.      number of bits specified in an instruction that initializes the
  679.      high order bits of a register.  It is used with `lo_sum' to
  680.      represent the typical two-instruction sequence used in RISC
  681.      machines to reference a global memory location.
  682.  
  683.      M should be `Pmode'.
  684.  
  685. 
  686. File: gcc.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
  687.  
  688. Registers and Memory
  689. ====================
  690.  
  691.    Here are the RTL expression types for describing access to machine
  692. registers and to main memory.
  693.  
  694. `(reg:M N)'
  695.      For small values of the integer N (less than
  696.      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
  697.      register number N: a "hard register".  For larger values of N, it
  698.      stands for a temporary value or "pseudo register".  The
  699.      compiler's strategy is to generate code assuming an unlimited
  700.      number of such pseudo registers, and later convert them into hard
  701.      registers or into memory references.
  702.  
  703.      M is the machine mode of the reference.  It is necessary because
  704.      machines can generally refer to each register in more than one
  705.      mode.  For example, a register may contain a full word but there
  706.      may be instructions to refer to it as a half word or as a single
  707.      byte, as well as instructions to refer to it as a floating point
  708.      number of various precisions.
  709.  
  710.      Even for a register that the machine can access in only one mode,
  711.      the mode must always be specified.
  712.  
  713.      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
  714.      description, since the number of hard registers on the machine is
  715.      an invariant characteristic of the machine.  Note, however, that
  716.      not all of the machine registers must be general registers.  All
  717.      the machine registers that can be used for storage of data are
  718.      given hard register numbers, even those that can be used only in
  719.      certain instructions or can hold only certain types of data.
  720.  
  721.      A hard register may be accessed in various modes throughout one
  722.      function, but each pseudo register is given a natural mode and is
  723.      accessed only in that mode.  When it is necessary to describe an
  724.      access to a pseudo register using a nonnatural mode, a `subreg'
  725.      expression is used.
  726.  
  727.      A `reg' expression with a machine mode that specifies more than
  728.      one word of data may actually stand for several consecutive
  729.      registers.  If in addition the register number specifies a
  730.      hardware register, then it actually represents several
  731.      consecutive hardware registers starting with the specified one.
  732.  
  733.      Each pseudo register number used in a function's RTL code is
  734.      represented by a unique `reg' expression.
  735.  
  736.      Some pseudo register numbers, those within the range of
  737.      `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
  738.      during the RTL generation phase and are eliminated before the
  739.      optimization phases.  These represent locations in the stack
  740.      frame that cannot be determined until RTL generation for the
  741.      function has been completed.  The following virtual register
  742.      numbers are defined:
  743.  
  744.     `VIRTUAL_INCOMING_ARGS_REGNUM'
  745.           This points to the first word of the incoming arguments
  746.           passed on the stack.  Normally these arguments are placed
  747.           there by the caller, but the callee may have pushed some
  748.           arguments that were previously passed in registers.
  749.  
  750.           When RTL generation is complete, this virtual register is
  751.           replaced by the sum of the register given by
  752.           `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
  753.  
  754.     `VIRTUAL_STACK_VARS_REGNUM'
  755.           If `FRAME_GROWS_DOWNWARDS' is defined, this points to
  756.           immediately above the first variable on the stack. 
  757.           Otherwise, it points to the first variable on the stack.
  758.  
  759.           It is replaced with the sum of the register given by
  760.           `FRAME_POINTER_REGNUM' and the value `STARTING_FRAME_OFFSET'.
  761.  
  762.     `VIRTUAL_STACK_DYNAMIC_REGNUM'
  763.           This points to the location of dynamically allocated memory
  764.           on the stack immediately after the stack pointer has been
  765.           adjusted by the amount of memory desired.
  766.  
  767.           It is replaced by the sum of the register given by
  768.           `STACK_POINTER_REGNUM' and the value `STACK_DYNAMIC_OFFSET'.
  769.  
  770.     `VIRTUAL_OUTGOING_ARGS_REGNUM'
  771.           This points to the location in the stack at which outgoing
  772.           arguments should be written when the stack is pre-pushed
  773.           (arguments pushed using push insns should always use
  774.           `STACK_POINTER_REGNUM').
  775.  
  776.           It is replaced by the sum of the register given by
  777.           `STACK_POINTER_REGNUM' and the value `STACK_POINTER_OFFSET'.
  778.  
  779. `(subreg:M REG WORDNUM)'
  780.      `subreg' expressions are used to refer to a register in a machine
  781.      mode other than its natural one, or to refer to one register of a
  782.      multi-word `reg' that actually refers to several registers.
  783.  
  784.      Each pseudo-register has a natural mode.  If it is necessary to
  785.      operate on it in a different mode--for example, to perform a
  786.      fullword move instruction on a pseudo-register that contains a
  787.      single byte--the pseudo-register must be enclosed in a `subreg'. 
  788.      In such a case, WORDNUM is zero.
  789.  
  790.      Usually M is at least as narrow as the mode of REG, in which case
  791.      it is restricting consideration to only the bits of REG that are
  792.      in M.  However, sometimes M is wider than the mode of REG.  These
  793.      `subreg' expressions are often called "paradoxical".  They are
  794.      used in cases where we want to refer to an object in a wider mode
  795.      but do not care what value the additional bits have.  The reload
  796.      pass ensures that paradoxical references are only made to hard
  797.      registers.
  798.  
  799.      The other use of `subreg' is to extract the individual registers
  800.      of a multi-register value.  Machine modes such as `DImode' and
  801.      `TImode' can indicate values longer than a word, values which
  802.      usually require two or more consecutive registers.  To access one
  803.      of the registers, use a `subreg' with mode `SImode' and a WORDNUM
  804.      that says which register.
  805.  
  806.      The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says
  807.      that word number zero is the most significant part; otherwise, it
  808.      is the least significant part.
  809.  
  810.      Between the combiner pass and the reload pass, it is possible to
  811.      have a paradoxical `subreg' which contains a `mem' instead of a
  812.      `reg' as its first operand.  After the reload pass, it is also
  813.      possible to have a non-paradoxical `subreg' which contains a
  814.      `mem'; this usually occurs when the `mem' is a stack slot which
  815.      replaced a pseudo register.
  816.  
  817.      Note that it is not valid to access a `DFmode' value in `SFmode'
  818.      using a `subreg'.  On some machines the most significant part of a
  819.      `DFmode' value does not have the same format as a single-precision
  820.      floating value.
  821.  
  822.      It is also not valid to access a single word of a multi-word
  823.      value in a hard register when less registers can hold the value
  824.      than would be expected from its size.  For example, some 32-bit
  825.      machines have floating-point registers that can hold an entire
  826.      `DFmode' value.  If register 10 were such a register `(subreg:SI
  827.      (reg:DF 10) 1)' would be invalid because there is no way to
  828.      convert that reference to a single machine register.  The reload
  829.      pass prevents `subreg' expressions such as these from being
  830.      formed.
  831.  
  832.      The first operand of a `subreg' expression is customarily accessed
  833.      with the `SUBREG_REG' macro and the second operand is customarily
  834.      accessed with the `SUBREG_WORD' macro.
  835.  
  836. `(scratch:M)'
  837.      This represents a scratch register that will be required for the
  838.      execution of a single instruction and not used subsequently.  It
  839.      is converted into a `reg' by either the local register allocator
  840.      or the reload pass.
  841.  
  842.      `scratch' is usually present inside a `clobber' operation (*note
  843.      Side Effects::.).
  844.  
  845. `(cc0)'
  846.      This refers to the machine's condition code register.  It has no
  847.      operands and may not have a machine mode.  There are two ways to
  848.      use it:
  849.  
  850.         * To stand for a complete set of condition code flags.  This
  851.           is best on most machines, where each comparison sets the
  852.           entire series of flags.
  853.  
  854.           With this technique, `(cc0)' may be validly used in only two
  855.           contexts: as the destination of an assignment (in test and
  856.           compare instructions) and in comparison operators comparing
  857.           against zero (`const_int' with value zero; that is to say,
  858.           `const0_rtx').
  859.  
  860.         * To stand for a single flag that is the result of a single
  861.           condition.  This is useful on machines that have only a
  862.           single flag bit, and in which comparison instructions must
  863.           specify the condition to test.
  864.  
  865.           With this technique, `(cc0)' may be validly used in only two
  866.           contexts: as the destination of an assignment (in test and
  867.           compare instructions) where the source is a comparison
  868.           operator, and as the first operand of `if_then_else' (in a
  869.           conditional branch).
  870.  
  871.      There is only one expression object of code `cc0'; it is the
  872.      value of the variable `cc0_rtx'.  Any attempt to create an
  873.      expression of code `cc0' will return `cc0_rtx'.
  874.  
  875.      Instructions can set the condition code implicitly.  On many
  876.      machines, nearly all instructions set the condition code based on
  877.      the value that they compute or store.  It is not necessary to
  878.      record these actions explicitly in the RTL because the machine
  879.      description includes a prescription for recognizing the
  880.      instructions that do so (by means of the macro
  881.      `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
  882.      whose sole purpose is to set the condition code, and instructions
  883.      that use the condition code, need mention `(cc0)'.
  884.  
  885.      On some machines, the condition code register is given a register
  886.      number and a `reg' is used instead of `(cc0)'.  This is usually
  887.      the preferable approach if only a small subset of instructions
  888.      modify the condition code.  Other machines store condition codes
  889.      in general registers; in such cases a pseudo register should be
  890.      used.
  891.  
  892.      Some machines, such as the Sparc and RS/6000, have two sets of
  893.      arithmetic instructions, one that sets and one that does not set
  894.      the condition code.  This is best handled by normally generating
  895.      the instruction that does not set the condition code, and making
  896.      a pattern that both performs the arithmetic and sets the
  897.      condition code register (which would not be `(cc0)' in this
  898.      case).  For examples, search for `addcc' and `andcc' in
  899.      `sparc.md'.
  900.  
  901. `(pc)'
  902.      This represents the machine's program counter.  It has no
  903.      operands and may not have a machine mode.  `(pc)' may be validly
  904.      used only in certain specific contexts in jump instructions.
  905.  
  906.      There is only one expression object of code `pc'; it is the value
  907.      of the variable `pc_rtx'.  Any attempt to create an expression of
  908.      code `pc' will return `pc_rtx'.
  909.  
  910.      All instructions that do not jump alter the program counter
  911.      implicitly by incrementing it, but there is no need to mention
  912.      this in the RTL.
  913.  
  914. `(mem:M ADDR)'
  915.      This RTX represents a reference to main memory at an address
  916.      represented by the expression ADDR.  M specifies how large a unit
  917.      of memory is accessed.
  918.  
  919. 
  920. File: gcc.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
  921.  
  922. RTL Expressions for Arithmetic
  923. ==============================
  924.  
  925.    Unless otherwise specified, all the operands of arithmetic
  926. expressions must be valid for mode M.  An operand is valid for mode M
  927. if it has mode M, or if it is a `const_int' or `const_double' and M is
  928. a mode of class `MODE_INT'.
  929.  
  930.    For commutative binary operations, constants should be placed in the
  931. second operand.
  932.  
  933. `(plus:M X Y)'
  934.      Represents the sum of the values represented by X and Y carried
  935.      out in machine mode M.
  936.  
  937. `(lo_sum:M X Y)'
  938.      Like `plus', except that it represents that sum of X and the
  939.      low-order bits of Y.  The number of low order bits is
  940.      machine-dependent but is normally the number of bits in a `Pmode'
  941.      item minus the number of bits set by the `high' code (*note
  942.      Constants::.).
  943.  
  944.      M should be `Pmode'.
  945.  
  946. `(minus:M X Y)'
  947.      Like `plus' but represents subtraction.
  948.  
  949. `(compare:M X Y)'
  950.      Represents the result of subtracting Y from X for purposes of
  951.      comparison.  The result is computed without overflow, as if with
  952.      infinite precision.
  953.  
  954.      Of course, machines can't really subtract with infinite precision. 
  955.      However, they can pretend to do so when only the sign of the
  956.      result will be used, which is the case when the result is stored
  957.      in the condition code.   And that is the only way this kind of
  958.      expression may validly be used: as a value to be stored in the
  959.      condition codes.
  960.  
  961.      The mode M is not related to the modes of X and Y, but instead is
  962.      the mode of the condition code value.  If `(cc0)' is used, it is
  963.      `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
  964.      `CCmode'.  *Note Condition Code::.
  965.  
  966.      Normally, X and Y must have the same mode.  Otherwise, `compare'
  967.      is valid only if the mode of X is in class `MODE_INT' and Y is a
  968.      `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
  969.      determines what mode the comparison is to be done in; thus it
  970.      must not be `VOIDmode'.
  971.  
  972.      If one of the operands is a constant, it should be placed in the
  973.      second operand and the comparison code adjusted as appropriate.
  974.  
  975.      A `compare' specifying two `VOIDmode' constants is not valid
  976.      since there is no way to know in what mode the comparison is to be
  977.      performed; the comparison must either be folded during the
  978.      compilation or the first operand must be loaded into a register
  979.      while its mode is still known.
  980.  
  981. `(neg:M X)'
  982.      Represents the negation (subtraction from zero) of the value
  983.      represented by X, carried out in mode M.
  984.  
  985. `(mult:M X Y)'
  986.      Represents the signed product of the values represented by X and
  987.      Y carried out in machine mode M.
  988.  
  989.      Some machines support a multiplication that generates a product
  990.      wider than the operands.  Write the pattern for this as
  991.  
  992.           (mult:M (sign_extend:M X) (sign_extend:M Y))
  993.  
  994.      where M is wider than the modes of X and Y, which need not be the
  995.      same.
  996.  
  997.      Write patterns for unsigned widening multiplication similarly
  998.      using `zero_extend'.
  999.  
  1000. `(div:M X Y)'
  1001.      Represents the quotient in signed division of X by Y, carried out
  1002.      in machine mode M.  If M is a floating point mode, it represents
  1003.      the exact quotient; otherwise, the integerized quotient.
  1004.  
  1005.      Some machines have division instructions in which the operands and
  1006.      quotient widths are not all the same; you should represent such
  1007.      instructions using `truncate' and `sign_extend' as in,
  1008.  
  1009.           (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
  1010.  
  1011. `(udiv:M X Y)'
  1012.      Like `div' but represents unsigned division.
  1013.  
  1014. `(mod:M X Y)'
  1015. `(umod:M X Y)'
  1016.      Like `div' and `udiv' but represent the remainder instead of the
  1017.      quotient.
  1018.  
  1019. `(smin:M X Y)'
  1020. `(smax:M X Y)'
  1021.      Represents the smaller (for `smin') or larger (for `smax') of X
  1022.      and Y, interpreted as signed integers in mode M.
  1023.  
  1024. `(umin:M X Y)'
  1025. `(umax:M X Y)'
  1026.      Like `smin' and `smax', but the values are interpreted as unsigned
  1027.      integers.
  1028.  
  1029. `(not:M X)'
  1030.      Represents the bitwise complement of the value represented by X,
  1031.      carried out in mode M, which must be a fixed-point machine mode.
  1032.  
  1033. `(and:M X Y)'
  1034.      Represents the bitwise logical-and of the values represented by X
  1035.      and Y, carried out in machine mode M, which must be a fixed-point
  1036.      machine mode.
  1037.  
  1038. `(ior:M X Y)'
  1039.      Represents the bitwise inclusive-or of the values represented by X
  1040.      and Y, carried out in machine mode M, which must be a fixed-point
  1041.      mode.
  1042.  
  1043. `(xor:M X Y)'
  1044.      Represents the bitwise exclusive-or of the values represented by X
  1045.      and Y, carried out in machine mode M, which must be a fixed-point
  1046.      mode.
  1047.  
  1048. `(ashift:M X C)'
  1049.      Represents the result of arithmetically shifting X left by C
  1050.      places.  X have mode M, a fixed-point machine mode.  C be a
  1051.      fixed-point mode or be a constant with mode `VOIDmode'; which
  1052.      mode is determined by the mode called for in the machine
  1053.      description entry for the left-shift instruction.  For example,
  1054.      on the Vax, the mode of C is `QImode' regardless of M.
  1055.  
  1056. `(lshift:M X C)'
  1057.      Like `lshift' but for arithmetic left shift.  `ashift' and
  1058.      `lshift' are identical operations; we customarily use `ashift'
  1059.      for both.
  1060.  
  1061. `(lshiftrt:M X C)'
  1062. `(ashiftrt:M X C)'
  1063.      Like `lshift' and `ashift' but for right shift.  Unlike the case
  1064.      for left shift, these two operations are distinct.
  1065.  
  1066. `(rotate:M X C)'
  1067. `(rotatert:M X C)'
  1068.      Similar but represent left and right rotate.  If C is a constant,
  1069.      use `rotate'.
  1070.  
  1071. `(abs:M X)'
  1072.      Represents the absolute value of X, computed in mode M.
  1073.  
  1074. `(sqrt:M X)'
  1075.      Represents the square root of X, computed in mode M.  Most often
  1076.      M will be a floating point mode.
  1077.  
  1078. `(ffs:M X)'
  1079.      Represents one plus the index of the least significant 1-bit in
  1080.      X, represented as an integer of mode M.  (The value is zero if X
  1081.      is zero.)  The mode of X need not be M; depending on the target
  1082.      machine, various mode combinations may be valid.
  1083.  
  1084. 
  1085. File: gcc.info,  Node: Comparisons,  Next: Bit Fields,  Prev: Arithmetic,  Up: RTL
  1086.  
  1087. Comparison Operations
  1088. =====================
  1089.  
  1090.    Comparison operators test a relation on two operands and are
  1091. considered to represent a machine-dependent nonzero value described
  1092. by, but not necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::.)
  1093. if the relation holds, or zero if it does not.  The mode of the
  1094. comparison operation is independent of the mode of the data being
  1095. compared.  If the comparison operation is being tested (e.g., the first
  1096. operand of an `if_then_else'), the mode must be `VOIDmode'.  If the
  1097. comparison operation is producing data to be stored in some variable,
  1098. the mode must be in class `MODE_INT'.  All comparison operations
  1099. producing data must use the same mode, which is machine-specific.
  1100.  
  1101.    There are two ways that comparison operations may be used.  The
  1102. comparison operators may be used to compare the condition codes
  1103. `(cc0)' against zero, as in `(eq (cc0) (const_int 0))'.  Such a
  1104. construct actually refers to the result of the preceding instruction
  1105. in which the condition codes were set.  The instructing setting the
  1106. condition code must be adjacent to the instruction using the condition
  1107. code; only `note' insns may separate them.
  1108.  
  1109.    Alternatively, a comparison operation may directly compare two data
  1110. objects.  The mode of the comparison is determined by the operands;
  1111. they must both be valid for a common machine mode.  A comparison with
  1112. both operands constant would be invalid as the machine mode could not
  1113. be deduced from it, but such a comparison should never exist in RTL
  1114. due to constant folding.
  1115.  
  1116.    In the example above, if `(cc0)' were last set to `(compare X Y)',
  1117. the comparison operation is identical to `(eq X Y)'.  Usually only one
  1118. style of comparisons is supported on a particular machine, but the
  1119. combine pass will try to merge the operations to produce the `eq' shown
  1120. in case it exists in the context of the particular insn involved.
  1121.  
  1122.    Inequality comparisons come in two flavors, signed and unsigned. 
  1123. Thus, there are distinct expression codes `gt' and `gtu' for signed and
  1124. unsigned greater-than.  These can produce different results for the
  1125. same pair of integer values: for example, 1 is signed greater-than -1
  1126. but not unsigned greater-than, because -1 when regarded as unsigned is
  1127. actually `0xffffffff' which is greater than 1.
  1128.  
  1129.    The signed comparisons are also used for floating point values. 
  1130. Floating point comparisons are distinguished by the machine modes of
  1131. the operands.
  1132.  
  1133. `(eq:M X Y)'
  1134.      1 if the values represented by X and Y are equal, otherwise 0.
  1135.  
  1136. `(ne:M X Y)'
  1137.      1 if the values represented by X and Y are not equal, otherwise 0.
  1138.  
  1139. `(gt:M X Y)'
  1140.      1 if the X is greater than Y.  If they are fixed-point, the
  1141.      comparison is done in a signed sense.
  1142.  
  1143. `(gtu:M X Y)'
  1144.      Like `gt' but does unsigned comparison, on fixed-point numbers
  1145.      only.
  1146.  
  1147. `(lt:M X Y)'
  1148. `(ltu:M X Y)'
  1149.      Like `gt' and `gtu' but test for "less than".
  1150.  
  1151. `(ge:M X Y)'
  1152. `(geu:M X Y)'
  1153.      Like `gt' and `gtu' but test for "greater than or equal".
  1154.  
  1155. `(le:M X Y)'
  1156. `(leu:M X Y)'
  1157.      Like `gt' and `gtu' but test for "less than or equal".
  1158.  
  1159. `(if_then_else COND THEN ELSE)'
  1160.      This is not a comparison operation but is listed here because it
  1161.      is always used in conjunction with a comparison operation.  To be
  1162.      precise, COND is a comparison expression.  This expression
  1163.      represents a choice, according to COND, between the value
  1164.      represented by THEN and the one represented by ELSE.
  1165.  
  1166.      On most machines, `if_then_else' expressions are valid only to
  1167.      express conditional jumps.
  1168.  
  1169. `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
  1170.      Similar to `if_then_else', but more general.  Each of TEST1,
  1171.      TEST2, ... is performed in turn.  The result of this expression is
  1172.      the VALUE corresponding to the first non-zero test, or DEFAULT if
  1173.      none of the tests are non-zero expressions.
  1174.  
  1175.      This is currently not valid for instruction patterns and is
  1176.      supported only for insn attributes.  *Note Insn Attributes::.
  1177.  
  1178. 
  1179. File: gcc.info,  Node: Bit Fields,  Next: Conversions,  Prev: Comparisons,  Up: RTL
  1180.  
  1181. Bit Fields
  1182. ==========
  1183.  
  1184.    Special expression codes exist to represent bit-field instructions. 
  1185. These types of expressions are lvalues in RTL; they may appear on the
  1186. left side of an assignment, indicating insertion of a value into the
  1187. specified bit field.
  1188.  
  1189. `(sign_extract:M LOC SIZE POS)'
  1190.      This represents a reference to a sign-extended bit field
  1191.      contained or starting in LOC (a memory or register reference). 
  1192.      The bit field is SIZE bits wide and starts at bit POS.  The
  1193.      compilation option `BITS_BIG_ENDIAN' says which end of the memory
  1194.      unit POS counts from.
  1195.  
  1196.      If LOC is in memory, its mode must be a single-byte integer mode. 
  1197.      If LOC is in a register, the mode to use is specified by the
  1198.      operand of the `insv' or `extv' pattern (*note Standard Names::.)
  1199.      and is usually a full-word integer mode.
  1200.  
  1201.      The mode of POS is machine-specific and is also specified in the
  1202.      `insv' or `extv' pattern.
  1203.  
  1204.      The mode M is the same as the mode that would be used for LOC if
  1205.      it were a register.
  1206.  
  1207. `(zero_extract:M LOC SIZE POS)'
  1208.      Like `sign_extract' but refers to an unsigned or zero-extended
  1209.      bit field.  The same sequence of bits are extracted, but they are
  1210.      filled to an entire word with zeros instead of by sign-extension.
  1211.  
  1212.