Annotation of gcc/gcc.info-7, revision 1.1.1.1

1.1       root        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: 

unix.superglobalmegacorp.com

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