Annotation of gcc/internals-3, revision 1.1.1.1

1.1       root        1: Info file internals, produced by texinfo-format-buffer   -*-Text-*-
                      2: from file internals.texinfo
                      3: 
                      4: 
                      5: This file documents the internals of the GNU compiler.
                      6: 
                      7: Copyright (C) 1987 Richard M. Stallman.
                      8: 
                      9: Permission is granted to make and distribute verbatim copies of
                     10: this manual provided the copyright notice and this permission notice
                     11: are preserved on all copies.
                     12: 
                     13: Permission is granted to copy and distribute modified versions of this
                     14: manual under the conditions for verbatim copying, provided also that the
                     15: section entitled "GNU CC General Public License" is included exactly as
                     16: in the original, and provided that the entire resulting derived work is
                     17: distributed under the terms of a permission notice identical to this one.
                     18: 
                     19: Permission is granted to copy and distribute translations of this manual
                     20: into another language, under the above conditions for modified versions,
                     21: except that the section entitled "GNU CC General Public License" may be
                     22: included in a translation approved by the author instead of in the original
                     23: English.
                     24: 
                     25: 
                     26: 
                     27: 
                     28: 
                     29: File: internals  Node: Dependent Patterns, Prev: Standard Names, Up: Machine Desc
                     30: 
                     31: Patterns Require Other Patterns
                     32: ===============================
                     33: 
                     34: Every machine description must have a named pattern for each of the
                     35: conditional branch names `bCOND'.  The recognition template
                     36: must always have the form
                     37: 
                     38:      (set (pc)
                     39:           (if_then_else (COND (cc0) (const_int 0))
                     40:                         (label_ref (match_operand 0 "" ""))
                     41:                         (pc)))
                     42: 
                     43: In addition, every machine description must have an anonymous pattern
                     44: for each of the possible reverse-conditional branches.  These patterns
                     45: look like
                     46: 
                     47:      (set (pc)
                     48:           (if_then_else (COND (cc0) (const_int 0))
                     49:                         (pc)
                     50:                         (label_ref (match_operand 0 "" ""))))
                     51: 
                     52: They are necessary because jump optimization can turn direct-conditional
                     53: branches into reverse-conditional branches.
                     54: 
                     55: The compiler does more with RTL than just create it from patterns
                     56: and recognize the patterns: it can perform arithmetic expression codes
                     57: when constant values for their operands can be determined.  As a result,
                     58: sometimes having one pattern can require other patterns.  For example, the
                     59: Vax has no `and' instruction, but it has `and not' instructions.  Here
                     60: is the definition of one of them:
                     61: 
                     62:      (define_insn "andcbsi2"
                     63:        [(set (match_operand:SI 0 "general_operand" "")
                     64:              (and:SI (match_dup 0)
                     65:                      (not:SI (match_operand:SI
                     66:                                1 "general_operand" ""))))]
                     67:        ""
                     68:        "bicl2 %1,%0")
                     69: 
                     70: If operand 1 is an explicit integer constant, an instruction constructed
                     71: using that pattern can end up looking like
                     72: 
                     73:      (set (reg:SI 41)
                     74:           (and:SI (reg:SI 41)
                     75:                   (const_int 0xffff7fff)))
                     76: 
                     77: (where the integer constant is the one's complement of what
                     78: appeared in the original instruction).
                     79: 
                     80: To avoid a fatal error, the compiler must have a pattern that recognizes
                     81: such an instruction.  Here is what is used:
                     82: 
                     83:      (define_insn ""
                     84:        [(set (match_operand:SI 0 "general_operand" "")
                     85:              (and:SI (match_dup 0)
                     86:                      (match_operand:SI 1 "general_operand" "")))]
                     87:        "GET_CODE (operands[1]) == CONST_INT"
                     88:        "*
                     89:      { operands[1]
                     90:          = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1]));
                     91:        return \"bicl2 %1,%0\";
                     92:      }")
                     93: 
                     94: Whereas a pattern to match a general `and' instruction is impossible to
                     95: support on the Vax, this pattern is possible because it matches only a
                     96: constant second argument: a special case that can be output as an `and not'
                     97: instruction.
                     98: 
                     99: 
                    100: File: internals  Node: Machine Macros, Prev: Machine Desc, Up: Top
                    101: 
                    102: Machine Description Macros
                    103: **************************
                    104: 
                    105: The other half of the machine description is a C header file conventionally
                    106: given the name `tm-MACHINE.h'.  The file `tm.h' should be a
                    107: link to it.  The header file `config.h' includes `tm.h' and most
                    108: compiler source files include `config.h'.
                    109: 
                    110: * Menu:
                    111: 
                    112: * Run-time Target::     Defining -m switches like -m68000 and -m68020.
                    113: * Storage Layout::      Defining sizes and alignments of data types.
                    114: * Registers::           Naming and describing the hardware registers.
                    115: * Register Classes::    Defining the classes of hardware registers.
                    116: * Stack Layout::        Defining which way the stack grows and by how much.
                    117: * Addressing Modes::    Defining addressing modes valid for memory operands.
                    118: * Condition Code::      Defining how insns update the condition code.
                    119: * Assembler Format::    Defining how to write insns and pseudo-ops to output.
                    120: * Misc::                Everything else.
                    121: 
                    122: 
                    123: File: internals  Node: Run-time Target, Prev: Machine Macros, Up: Machine Macros, Next: Storage Layout
                    124: 
                    125: Run-time Target Specification
                    126: =============================
                    127: 
                    128: `CPP_PREDEFINES'     
                    129:      Define this to be a string constant containing `-D' switches
                    130:      to define the predefined macros that identify this machine and system.
                    131:      
                    132:      For example, on the Sun, one can use the value
                    133:      
                    134:           "-Dmc68000 -Dsun"
                    135:      
                    136: `extern int target_flags;'     
                    137:      This declaration should be present.
                    138:      
                    139: `TARGET_...'     
                    140:      This series of macros is to allow compiler command arguments to
                    141:      enable or disable the use of optional features of the target machine.
                    142:      For example, one machine description serves both the 68000 and
                    143:      the 68020; a command argument tells the compiler whether it should
                    144:      use 68020-only instructions or not.  This command argument works
                    145:      by means of a macro `TARGET_68020' that tests a bit in
                    146:      `target_flags'.
                    147:      
                    148:      Define a macro `TARGET_FEATURENAME' for each such option.
                    149:      Its definition should test a bit in `target_flags'; for example:
                    150:      
                    151:           #define TARGET_68020 (target_flags & 1)
                    152:      
                    153:      One place where these macros are used is in the condition-expressions
                    154:      of instruction patterns.  Note how `TARGET_68020' appears
                    155:      frequently in the 68000 machine description file, `m68000.md'.
                    156:      Another place they are used is in the definitions of the other
                    157:      macros in the `tm-MACHINE.h' file.
                    158:      
                    159: `TARGET_SWITCHES'     
                    160:      This macro defines names of command switches to set and clear
                    161:      bits in `target_flags'.  Its definition is an initializer
                    162:      with a subgrouping for each command switches.
                    163:      
                    164:      Each subgrouping contains a string constant, that defines the switch
                    165:      name, and a number, which contains the bits to set in
                    166:      `target_flags'.  A negative number says to clear bits instead;
                    167:      the negative of the number is which bits to clear.  The actual switch
                    168:      name is made by appending `-m' to the specified name.
                    169:      
                    170:      One of the subgroupings should have a null string.  The number in
                    171:      this grouping is the default value for `target_flags'.  Any
                    172:      target switches act starting with that value.
                    173:      
                    174:      Here is an example which defines `-m68000' and `-m68020'
                    175:      with opposite meanings, and picks the latter as the default:
                    176:      
                    177:           #define TARGET_SWITCHES \
                    178:             { { "68020", 1},      \
                    179:               { "68000", -1},     \
                    180:               { "", 1}}
                    181: 
                    182: 
                    183: File: internals  Node: Storage Layout, Prev: Run-time Target, Up: Machine Macros, Next: Registers
                    184: 
                    185: Storage Layout
                    186: ==============
                    187: 
                    188: `BITS_BIG_ENDIAN'     
                    189:      Define this macro if the most significant bit in a byte has the lowest
                    190:      number.  This means that bit-field instructions count from the most
                    191:      significant bit.  If the machine has no bit-field instructions, this
                    192:      macro is irrelevant.
                    193:      
                    194: `BYTES_BIG_ENDIAN'     
                    195:      Define this macro if the most significant byte in a word has the
                    196:      lowest number.
                    197:      
                    198: `WORDS_BIG_ENDIAN'     
                    199:      Define this macro if, in a multiword object, the most signficant
                    200:      word has the lowest number.
                    201:      
                    202: `BITS_PER_UNIT'     
                    203:      Number of bits in an addressable storage unit (byte); normally 8.
                    204:      
                    205: `BITS_PER_WORD'     
                    206:      Number of bits in a word; normally 32.
                    207:      
                    208: `UNITS_PER_WORD'     
                    209:      Number of storage units in a word; normally 4.
                    210:      
                    211: `POINTER_SIZE'     
                    212:      Width of a pointer, in bits.
                    213:      
                    214: `PARM_BOUNDARY'     
                    215:      Alignment required for pointers, in bits.
                    216:      
                    217: `FUNCTION_BOUNDARY'     
                    218:      Alignment required for a function entry point, in bits.
                    219:      
                    220: `BIGGEST_ALIGNMENT'     
                    221:      Biggest alignment that anything can require on this machine, in bits.
                    222:      
                    223: `STRICT_ALIGNMENT'     
                    224:      Define this if instructions will fail to work if given data not
                    225:      on the nominal alignment.  If instructions will merely go slower
                    226:      in that case, do not define this macro.
                    227: 
                    228: 
                    229: File: internals  Node: Registers, Prev: Storage Layout, Up: Machine Macros, Next: Register Classes
                    230: 
                    231: Register Usage
                    232: ==============
                    233: 
                    234: `FIRST_PSEUDO_REGISTER'     
                    235:      Number of hardware registers known to the compiler.  They receive
                    236:      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
                    237:      pseudo register's number really is assigned the number7
                    238:      `FIRST_PSEUDO_REGISTER'.
                    239:      
                    240: `FIXED_REGISTERS'     
                    241:      An initializer that says which registers are used for fixed purposes
                    242:      all throughout the compiled code and are therefore not available for
                    243:      general allocation.  These would inclue the stack pointer, the frame
                    244:      pointer, the program counter on machines where that is considered one
                    245:      of the addressable registers, and any other numbered register with a
                    246:      standard use.
                    247:      
                    248:      This information is expressed as a sequence of numbers, separated by
                    249:      commas and surrounded by braces.  The Nth number is 1 if
                    250:      register N is fixed, 0 otherwise
                    251:      
                    252: `CALL_USED_REGISTERS'     
                    253:      Like `FIXED_REGISTERS' but has 1 for each register that is
                    254:      clobbered (in general) by function calls as well as for fixed
                    255:      registers.  This macro therefore identifies the registers that are not
                    256:      available for general allocation of values that must live across
                    257:      function calls.
                    258:      
                    259:      If a registers has 0 in `CALL_USED_REGISTERS', the compiler
                    260:      automatically saves it on function entry and restores it on function
                    261:      exit, if the register is used within the function.
                    262:      
                    263: `HARD_REGNO_REGS (REGNO, MODE)'     
                    264:      A C expression for the number of consecutive hard registers, starting
                    265:      at register number REGNO, required to hold a value of mode
                    266:      MODE.
                    267:      
                    268:      On a machine where all registers are exactly one word, a suitable
                    269:      definition of this macro is
                    270:      
                    271:           #define HARD_REGNO_NREGS(REGNO, MODE)            \
                    272:              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
                    273:               / UNITS_PER_WORD))
                    274:      
                    275: `HARD_REGNO_MODE_OK (REGNO, MODE)'     
                    276:      A C expression that is nonzero if it is permissible to store a value
                    277:      of mode MODE in hard register number REGNO (or in several
                    278:      registers starting with that one).  For a machine where all registers
                    279:      are equivalent, a suitable definition is
                    280:      
                    281:           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
                    282:      
                    283:      It is not necessary for this macro to check for fixed register numbers
                    284:      because the allocation mechanism considers them to be always occupied.
                    285:      
                    286: `MODES_TIEABLE_P (MODE1, MODE2)'     
                    287:      A C expression that is nonzero if it is desirable to choose register
                    288:      allocation so as to avoid move instructions between a value of mode
                    289:      MODE1 and a value of mode MODE2.
                    290:      
                    291:      If `HARD_REGNO_MODE_OK (R, MODE1)' and
                    292:      `HARD_REGNO_MODE_OK (R, MODE2)' are ever different
                    293:      for any R, then `MODES_TIEABLE_P (MODE1,
                    294:      MODE2)' must be zero.
                    295:      
                    296: `PC_REGNUM'     
                    297:      If the program counter has a register number, define this as that
                    298:      register number.  Otherwise, do not define it.
                    299:      
                    300: `STACK_POINTER_REGNUM'     
                    301:      The register number of the stack pointer register, which must also be
                    302:      a fixed register according to `FIXED_REGISTERS'.  On many
                    303:      machines, the hardware determines which register this is.
                    304:      
                    305: `FRAME_POINTER_REGNUM'     
                    306:      The register number of the frame pointer register, which is used to
                    307:      access automatic variables in the stack frame.  It must also described
                    308:      in `FIXED_REGISTERS' as a fixed register.  On some machines, the
                    309:      hardware determines which register this is.  On other machines, you
                    310:      can choose any register you wish for this purpose.
                    311:      
                    312: `ARG_POINTER_REGNUM'     
                    313:      The register number of the arg pointer register, which is used to
                    314:      access the function's argument list.  On some machines, this is the
                    315:      same as the frame pointer register.  On some machines, the hardware
                    316:      determines which register this is.  On other machines, you can choose
                    317:      any register you wish for this purpose.  It must in any case be a
                    318:      fixed register according to `FIXED_REGISTERS'.
                    319:      
                    320: `STATIC_CHAIN_REGNUM'     
                    321:      The register number used for passing a function's static chain
                    322:      pointer.  This is needed for languages such as Pascal and Algol where
                    323:      functions defined within other functions can access the local
                    324:      variables of the outer functions; it is not currently used because C
                    325:      does not provide this feature.
                    326:      
                    327:      The static chain register need not be a fixed register.
                    328:      
                    329: `FUNCTION_VALUE_REGNUM'     
                    330:      The register number used for returning values from a function.  This
                    331:      must be one of the call-used registers (since function calls alter
                    332:      it!) but should not be a fixed register.  When the value being
                    333:      returned has a multi-word machine mode, multiple consecutive registers
                    334:      starting with the specified one are used.
                    335:      
                    336: `STRUCT_VALUE_REGNUM'     
                    337:      When a function's value's mode is `BLKmode', the value is not returned
                    338:      in the register `FUNCTION_VALUE_REGNUM'.  Instead, the caller passes
                    339:      the address of a block of memory in which the value should be stored.
                    340:      `STRUCT_VALUE_REGNUM' is the register in which this address is passed.
                    341: 
                    342: 
                    343: File: internals  Node: Register Classes, Prev: Registers, Up: Machine Macros, Next: Stack Layout
                    344: 
                    345: Register Classes
                    346: ================
                    347: 
                    348: On many machines, the numbered registers are not all equivalent.
                    349: For example, certain registers may not be allowed for indexed addressing;
                    350: certain registers may not be allowed in some instructions.  These machine
                    351: restrictions are described to the compiler using "register classes".
                    352: 
                    353: You define a number of register classes, giving each one a name and saying
                    354: which of the registers belong to it.  Then you can specify register classes
                    355: that are allowed as operands to particular instruction patterns.
                    356: 
                    357: In general, each register will belong to several classes.  In fact, one
                    358: class must be named `ALL_REGS' and contain all the registers.  Another
                    359: class must be named `NO_REGS' and contain no registers.  Often the
                    360: union of two classes will be another class; however, this is not required.
                    361: 
                    362: One of the classes must be named `GENERAL_REGS'.  There is nothing
                    363: terribly special about the name, but the operand constraint letters
                    364: `r' and `g' specify this class.  If `GENERAL_REGS' is
                    365: the same as `ALL_REGS', just define it as a macro which expands
                    366: to `ALL_REGS'.
                    367: 
                    368: The way classes other than `GENERAL_REGS' are specified in operand
                    369: constraints is through machine-dependent operand constraint letters.
                    370: You can define such letters to correspond to various classes, then use
                    371: them in operand constraints.
                    372: 
                    373: You must also specify certain redundant information about the register
                    374: classes: for each class, which classes contain it and which ones are
                    375: contained in it; for each pair of classes, the largest class contained
                    376: in their union.
                    377: 
                    378: `enum reg_class'     
                    379:      An enumeral type that must be defined with all the register class names
                    380:      as enumeral values.  `NO_REGS' must be first.  `ALL_REGS'
                    381:      must be the last register class, followed by one more enumeral value,
                    382:      `LIM_REG_CLASSES', which is not a register class but rather
                    383:      tells how many classes there are.
                    384:      
                    385:      Each register class has a number, which is the value of casting
                    386:      the class name to type `int'.  The number serves as an index
                    387:      in many of the tables described below.
                    388:      
                    389: `REG_CLASS_NAMES'     
                    390:      An initializer containing the names of the register classes as C string
                    391:      constants.  These names are used in writing some of the debugging dumps.
                    392:      
                    393: `REG_CLASS_CONTENTS'     
                    394:      An initializer containing the contents of the register classes, as integers
                    395:      which are bit masks.  The Nth integer specifies the contents of class
                    396:      N.  The way the integer MASK is interpreted is that
                    397:      register R is in the class if `MASK & (1 << R)' is 1.
                    398:      
                    399:      When the machine has more than 32 registers, an integer does not suffice.
                    400:      Then the integers are replaced by sub-initializers, braced groupings containing
                    401:      several integers.  Each sub-initializer must be suitable as an initializer
                    402:      for the type `HARD_REG_SET' which is defined in `hard-reg-set.h'.
                    403:      
                    404: `REGNO_REG_CLASS (REGNO)'     
                    405:      A C expression whose value is a register class containing hard register
                    406:      REGNO.  In general there is more that one such class; choose a class
                    407:      which is "minimal", meaning that no smaller class also contains the
                    408:      register.
                    409:      
                    410: `REG_CLASS_SUPERCLASSES'     
                    411:      A two-level initializer that says, for each class, which classes contain
                    412:      it.  The Nth element of the initializer is a sub-initializer for
                    413:      class N; it contains the names of the othe classes that contain class
                    414:      N (but not the name of class N itself), followed by
                    415:      `LIM_REG_CLASSES' to mark the end of the element.
                    416:      
                    417: `REG_CLASS_SUBCLASSES'     
                    418:      Similar to `REG_CLASS_SUPERCLASSES', except that element N lists
                    419:      the classes *contained in* class N, followed once again by
                    420:      `LIM_REG_CLASSES' to mark the end of the element.
                    421:      
                    422: `REG_CLASS_SUBUNION'     
                    423:      An two-level initializer for a two-dimensional array.  The element
                    424:      (M, N) of this array must be a class that is "close to"
                    425:      being the union of classes M and N.  If there is a class
                    426:      that is exactly that union, use it; otherwise, choose some smaller
                    427:      class, preferably as large as possible but certainly not containing
                    428:      any register that is neither in class M nor in class N.
                    429:      
                    430: `INDEX_REG_CLASS'     
                    431:      A macro whose definition is the name of the class to which a valid index
                    432:      register must belong.
                    433:      
                    434: `REG_CLASS_FROM_LETTER (CHAR)'     
                    435:      A C expression which defines the machine-dependent operand constraint
                    436:      letters for register classes.  If CHAR is such a letter, the value
                    437:      should be the register class corresponding to it.  Otherwise, the value
                    438:      should be `NO_REGS'.
                    439:      
                    440: `REGNO_OK_FOR_CLASS_P (REGNO, CLASS)'     
                    441:      A C expression which is nonzero if register number REGNO is a hard
                    442:      register belonging to class CLASS.  The expression is always zero if
                    443:      REGNO is a pseudo register.
                    444:      
                    445: `REG_OK_FOR_CLASS_P (REG, CLASS)'     
                    446:      A C expression which is nonzero if REG (an rtx assumed to have
                    447:      code `reg') belongs to class CLASS.
                    448:      
                    449:      What about pseudo registers?  There are two alternatives, and the machine
                    450:      description header file must be able to do either one on command.  If the
                    451:      macro `REG_OK_STRICT' is defined, this macro should be defined to
                    452:      reject all pseudo registers (return 0 for them).  Otherwise, this macro
                    453:      should be defined to accept all pseudo registers (return 1 for them).
                    454:      
                    455:      Some source files of the compiler define `REG_OK_STRICT' before
                    456:      including the machine description header file, while others do not,
                    457:      according to the needs of that part of the compiler.
                    458:      
                    459: `PREFERRED_RELOAD_CLASS (X, CLASS)'     
                    460:      A C expression that places additional restrictions on the register class
                    461:      to use when it is necessary to copy value X into a register in class
                    462:      CLASS.  The value is a register class; perhaps CLASS, or perhaps
                    463:      another, smaller class.  CLASS is always safe as a value.  In fact,
                    464:      the definition
                    465:      
                    466:           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
                    467:      
                    468:      is always safe.  However, sometimes returning a more restrictive class
                    469:      makes better code.  For example, on the 68000, when X is an
                    470:      integer constant that is in range for a `moveq' instruction,
                    471:      the value of this macro is always `DATA_REGS' as long as
                    472:      CLASS includes the data registers.  Requiring a data register
                    473:      guarantees that a `moveq' will be used.
                    474: 
                    475: Two other special macros
                    476: 
                    477: `CONST_OK_FOR_LETTER_P (VALUE, C)'     
                    478:      A C expression that defines the machine-dependent operand constraint letters
                    479:      that specify particular ranges of integer values.  If C is one
                    480:      of those letters, the expression should check that VALUE, an integer,
                    481:      is in the appropriate range and return 1 if so, 0 otherwise.  If C is
                    482:      not one of those letters, the value should be 0 regardless of VALUE.
                    483:      
                    484: `CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)'     
                    485:      A C expression that defines the machine-dependent operand constraint
                    486:      letters that specify particular ranges of floating values.  If C is
                    487:      one of those letters, the expression should check that VALUE, an rtx
                    488:      of code `const_double', is in the appropriate range and return 1 if
                    489:      so, 0 otherwise.  If C is not one of those letters, the value should
                    490:      be 0 regardless of VALUE.
                    491: 
                    492: 
                    493: File: internals  Node: Stack Layout, Prev: Register Classes, Up: Machine Macros, Next: Addressing Modes
                    494: 
                    495: Describing Stack Layout
                    496: =======================
                    497: 
                    498: `STACK_GROWS_DOWNWARD'     
                    499:      Define this macro if pushing a word onto the stack moves the stack
                    500:      pointer to a smaller address.  The definition is irrelevant because the
                    501:      compiler checks this macro with `#ifdef'.
                    502:      
                    503: `FRAME_GROWS_DOWNWARD'     
                    504:      Define this macro if the addresses of local variable slots are at negative
                    505:      offsets from the frame pointer.
                    506:      
                    507: `STARTING_FRAME_OFFSET'     
                    508:      Offset from the frame pointer to the first local variable slot to be allocated.
                    509:      
                    510:      If `FRAME_GROWS_DOWNWARD', the next slot's offset is found by
                    511:      subtracting the length of the first slot from `STARTING_FRAME_OFFSET'.
                    512:      Otherwise, it is found by adding the length of the first slot to
                    513:      the value `STARTING_FRAME_OFFSET'.
                    514:      
                    515: `PUSH_ROUNDING (NPUSHED)'     
                    516:      A C expression that is the number of bytes actually pushed onto the
                    517:      stack when an instruction attempts to push NPUSHED bytes.
                    518:      
                    519:      On some machines, the definition
                    520:      
                    521:           #define PUSH_ROUNDING(BYTES) (BYTES)
                    522:      
                    523:      will suffice.  But on other machines, instructions that appear
                    524:      to push one byte actually push two bytes in an attempt to maintain
                    525:      alignment.  Then the definition should be
                    526:      
                    527:           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
                    528:      
                    529: `FIRST_PARM_OFFSET'     
                    530:      Offset from the argument pointer register to the first argument's address.
                    531:      
                    532: `RETURN_POPS_ARGS'     
                    533:      Define this macro if returning from a function automatically pops the
                    534:      function's arguments.  Do not define it if the caller must pop them.
                    535:      
                    536: `FUNCTION_PROLOGUE (FILE, SIZE)'     
                    537:      A C compound statement that outputs the assembler code for entry to a
                    538:      function.  The prologue is responsible for setting up the stack frame,
                    539:      initializing the frame pointer register, saving registers that must be
                    540:      saved, and allocating SIZE additional bytes of storage for the local
                    541:      variables.  SIZE is an integer.  FILE is a stdio stream to
                    542:      which the assembler code should be output.
                    543:      
                    544:      The label for the beginning of the function need not be output by this
                    545:      macro.  That has already been done when the macro is run.
                    546:      
                    547:      To determine which registers to save, the macro can refer to the array
                    548:      `regs_ever_live': element R is nonzero if hard register R
                    549:      is used anywhere within the function.  This implies the function prologue
                    550:      should save register R, but not if it is one of the call-used
                    551:      registers.
                    552:      
                    553: `FUNCTION_EPILOGUE (FILE, SIZE)'     
                    554:      A C compound statement that outputs the assembler code for exit from a
                    555:      function.  The epilogue is responsible for restoring the saved
                    556:      registers and stack pointer to their values when the function was
                    557:      called, and returning control to the caller.  This macro takes the
                    558:      same arguments as the macro `FUNCTION_PROLOGUE', and the
                    559:      registers to restore are determined from `regs_ever_live' and
                    560:      `CALL_USED_REGISTERS' in the same way.
                    561:      
                    562:      On some machines, there is a single instruction that does all the work of
                    563:      returning from the function.  On these machines, give that instruction the
                    564:      name `return' and do not define the macro `FUNCTION_EPILOGUE' at
                    565:      all.
                    566: 
                    567: 
                    568: File: internals  Node: Addressing Modes, Prev: Stack Layout, Up: Machine Macros, Next: Misc
                    569: 
                    570: Addressing Modes
                    571: ================
                    572: 
                    573: `HAVE_POST_INCREMENT'     
                    574:      Define this macro if the machine supports post-increment addressing.
                    575:      
                    576: `HAVE_PRE_INCREMENT'     
                    577: `HAVE_POST_DECREMENT'     
                    578: `HAVE_PRE_DECREMENT'     
                    579:      Similar for other kinds of addressing.
                    580:      
                    581: `CONSTANT_ADDRESS_P (X)'     
                    582:      A C expression that is 1 if the rtx X is a constant whose value
                    583:      is an integer.  This includes integers whose values are not explicitly
                    584:      known, such as `symbol_ref' and `label_ref' expressions
                    585:      and `const' arithmetic expressions.
                    586:      
                    587: `MAX_REGS_PER_ADDRESS'     
                    588:      A number, the maximum number of registers that can appear in a valid
                    589:      memory address.
                    590:      
                    591: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)'     
                    592:      A C compound statement with a conditional `goto LABEL;'
                    593:      executed if X (an rtx) is a legitimate memory address on
                    594:      the target machine for a memory operand of mode MODE.
                    595:      
                    596:      It usually pays to define several simpler macros to serve as
                    597:      subroutines for this one.  Otherwise it may be too complicated
                    598:      to understand.
                    599:      
                    600: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)'     
                    601:      A C compound statement that attempts to replace X with a valid
                    602:      memory address for an operand of mode MODE.  WIN will be
                    603:      a C statement label elsewhere in the code; the macro definition
                    604:      may use
                    605:      
                    606:           GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
                    607:      
                    608:      to avoid further processing if the address has become legitimate.
                    609:      
                    610:      X will always be the result of a call to `break_out_memory_refs',
                    611:      and OLDX will be the operand that was given to that function to produce
                    612:      X.
                    613:      
                    614:      The code generated by this macro should not alter the substructure of X.
                    615:      If it transforms X into a more legitimate form, it should assign X
                    616:      (which will always be a C variable) a new value.
                    617:      
                    618:      It is not necessary for this macro to come up with a legitimate address.
                    619:      The compiler has standard ways of doing so in all cases.  In fact, it is
                    620:      safe for this macro to do nothing.  But often a machine-dependent strategy
                    621:      can generate better code.
                    622: 
                    623: 
                    624: File: internals  Node: Misc, Prev: Addressing Modes, Up: Machine Macros, Next: Condition Code
                    625: 
                    626: Miscellaneous Parameters
                    627: ========================
                    628: 
                    629: `CASE_VECTOR_MODE'     
                    630:      An alias for a machine mode name.  This is the machine mode that elements
                    631:      of a jump-table should have.
                    632:      
                    633: `CASE_VECTOR_PC_RELATIVE'     
                    634:      Define this macro if jump-tables should contain relative addresses.
                    635:      
                    636: `IMPLICIT_FIX_EXPR'     
                    637:      An alias for a tree code that should be used by default for conversion
                    638:      of floating point values to fixed point.  Normally, `FIX_ROUND_EXPR'
                    639:      is used.
                    640:      
                    641: `EASY_DIV_EXPR'     
                    642:      An alias for a tree code that is the easiest kind of division to compile
                    643:      code for in the general case.  It may be `TRUNC_DIV_EXPR',
                    644:      `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'.
                    645:      These differ in how they round the result to an integer.
                    646:      `EASY_DIV_EXPR' is used when it is permissible to use any of those
                    647:      kinds of division and the choice should be made on the basis of efficiency.
                    648:      
                    649: `MOVE_MAX'     
                    650:      The maximum number of bytes that a single instruction can move quickly
                    651:      from memory to memory.
                    652:      
                    653: `SLOW_ZERO_EXTEND'     
                    654:      Define this macro if zero-extension (of chars or shorts to integers)
                    655:      can be done faster if the destination is a register that is known to be zero.
                    656:      
                    657: `SHIFT_COUNT_TRUNCATED'     
                    658:      Define this macro if shift instructions ignore all but the lowest few
                    659:      bits of the shift count.  It implies that a sign-extend or zero-extend
                    660:      instruction for the shift count can be omitted.
                    661:      
                    662: `TRULY_NOOP_TRUNCATON (OUTPREC, INPREC)'     
                    663:      A C expression which is nonzero if on this machine it is safe to
                    664:      "convert" an integer of INPREC bits to one of OUTPREC bits
                    665:      (where OUTPREC is smaller than INPREC) by merely operating
                    666:      on it as if it had only INPREC bits.
                    667:      
                    668:      On many machines, this expression can be 1.
                    669:      
                    670: `Pmode'     
                    671:      An alias for the machine mode for pointers.  Normally the definition can be
                    672:      
                    673:           #define Pmode SImode
                    674:      
                    675: `FUNCTION_MODE'     
                    676:      An alias for the machine mode used for memory references to functions being
                    677:      called, in `call' RTL expressions.  On most machines this should be
                    678:      `QImode'.
                    679:      
                    680: `CONST_COST (X, CODE)'     
                    681:      A part of a C `switch' statement that describes the relative costs of
                    682:      constant RTL expressions.  It must contain `case' labels for
                    683:      expression codes `const_int', `const', `symbol_ref',
                    684:      `label_ref' and `const_double'.  Each case must ultimately reach
                    685:      a `return' statement to return the relative cost of the use of that
                    686:      kind of constant value in an expression.  The cost may depend on the
                    687:      precise value of the constant, which is available for examination in
                    688:      X.
                    689:      
                    690:      CODE is the expression code---redundant, since it can be obtained with
                    691:      `GET_CODE (X)'.
                    692: 
                    693: 
                    694: File: internals  Node: Condition Code, Prev: Misc, Up: Machine Macros, Next: Assembler Format
                    695: 
                    696: Condition Code Information
                    697: ==========================
                    698: 
                    699: The file `conditions.h' defines a variable `cc_status' to
                    700: describe how the condition code was computed (in case the interpretation of
                    701: the condition code depends on the instruction that it was set by).  This
                    702: variable contains the RTL expressions on which the condition code is
                    703: currently based, and several standard flags.
                    704: 
                    705: Sometimes additional machine-specific flags must be defined in the machine
                    706: description header file.  It can also add additional machine-specific
                    707: information by defining `CC_STATUS_MDEP'.
                    708: 
                    709: `CC_STATUS_MDEP'     
                    710:      A type, with which the `mdep' component of `cc_status' should
                    711:      be declared.  It defaults to `int'.
                    712:      
                    713: `CC_STATUS_MDEP_INIT'     
                    714:      A C expression for the initial value of the `mdep' field.
                    715:      It defaults to 0.
                    716:      
                    717: `NOTICE_UPDATE_CC (EXP)'     
                    718:      A C compound statement to set the components of `cc_status'
                    719:      appropriately for an insn whose body is EXP.  It is this
                    720:      macro's responsibility to recognize insns that set the condition code
                    721:      as a byproduct of other activity as well as those that explicitly
                    722:      set `(cc0)'.
                    723:      
                    724:      If there are insn that do not set the condition code but do alter other
                    725:      machine registers, this macro must check to see whether they invalidate the
                    726:      expressions that the condition code is recorded as reflecting.  For
                    727:      example, on the 68000, insns that store in address registers do not set the
                    728:      condition code, which means that usually `NOTICE_UPDATE_CC' can leave
                    729:      `cc_status' unaltered for such insns.  But suppose that the previous
                    730:      insn set the condition code based on location `a4@(102)' and the
                    731:      current insn stores a new value in `a4'.  Although the condition code
                    732:      is not changed by this, it will no longer be true that it reflects the
                    733:      contents of `a4@(102)'.  Therefore, `NOTICE_UPDATE_CC' must alter
                    734:      `cc_status' in this case to say that nothing is known about the
                    735:      condition code value.
                    736: 
                    737: 
                    738: File: internals  Node: Assembler Format, Prev: Condition Code, Up: Machine Macros
                    739: 
                    740: Output of Assembler Code
                    741: ========================
                    742: 
                    743: `TEXT_SECTION_ASM_OP'     
                    744:      A C string constant for the assembler operation that should precede
                    745:      instructions and read-only data.  Normally `".text"' is right.
                    746:      
                    747: `DATA_SECTION_ASM_OP'     
                    748:      A C string constant for the assembler operation to identify the following
                    749:      data as writable initialized data.  Normally `".data"' is right.
                    750:      
                    751: `REGISTER_NAMES'     
                    752:      A C initializer containing the assembler's names for the machine registers,
                    753:      each one as a C string constant.  This is what translates register numbers
                    754:      in the compiler into assembler language.
                    755:      
                    756: `DBX_REGISTER_NUMBER (REGNO)'     
                    757:      A C expression that returns the DBX register number for the compiler register
                    758:      number REGNO.  In simple cases, the value of this expression may be
                    759:      REGNO itself.  But sometimes there are some registers that the compiler
                    760:      knows about and DBX does not, or vice versa.  In such cases, some register
                    761:      may need to have one number in the compiler and another for DBX.
                    762:      
                    763: `ASM_OUTPUT_DOUBLE (FILE, VALUE)'     
                    764:      A C statement to output to the stdio stream FILE an assembler
                    765:      instruction to assemble a `double' constant whose value is
                    766:      VALUE.  VALUE will be a C expression of type `double'.
                    767:      
                    768: `ASM_OUTPUT_FLOAT (FILE, VALUE)'     
                    769:      A C statement to output to the stdio stream FILE an assembler
                    770:      instruction to assemble a `float' constant whose value is VALUE.
                    771:      VALUE will be a C expression of type `float'.
                    772:      
                    773: `ASM_OUTPUT_SKIP (FILE, NBYTES)'     
                    774:      A C statement to output to the stdio stream FILE an assembler
                    775:      instruction to advance the location counter by NBYTES bytes.
                    776:      NBYTES will be a C expression of type `int'.
                    777:      
                    778: `ASM_OUTPUT_ALIGN (FILE, POWER)'     
                    779:      A C statement to output to the stdio stream FILE an assembler
                    780:      instruction to advance the location counter to a multiple of 2 to the
                    781:      POWER bytes.  POWER will be a C expression of type `int'.
                    782:      
                    783: `ASM_INT_OP'     
                    784:      A C string constant for the assembler operation that assembles constants of
                    785:      C type `int'.  A space must follow the operation name.  Normally
                    786:      `".long "'.
                    787:      
                    788: `ASM_SHORT_OP'     
                    789: `ASM_CHAR_OP'     
                    790:      Likewise, for C types `short' and `char'.  Normally `".word "'
                    791:      and `".byte "'.
                    792:      
                    793: `TARGET_BELL'     
                    794:      A C constant expression for the integer value for escape sequence `\a'.
                    795:      
                    796: `TARGET_BS'     
                    797: `TARGET_TAB'     
                    798: `TARGET_NEWLINE'     
                    799:      C constant expressions for the integer values for escape sequences
                    800:      `\b', `\t' and `\n'.
                    801:      
                    802: `TARGET_VT'     
                    803: `TARGET_FF'     
                    804: `TARGET_CR'     
                    805:      C constant expressions for the integer values for escape sequences
                    806:      `\v', `\f' and `\r'.
                    807:      
                    808: `PRINT_OPERAND (FILE, X)'     
                    809:      A C compound statement to output to stdio stream FILE
                    810:      the assembler syntax for an instruction operand X.
                    811:      X is an RTL expression.
                    812:      
                    813:      If X is a register, this macro should print the register's name.  The
                    814:      names can be found in an array `reg_names' whose type is `char
                    815:      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
                    816:      
                    817: `PRINT_OPERAND_ADDRESS (FILE, X)'     
                    818:      A C compound statement to output to stdio stream FILE the assembler
                    819:      syntax for an instruction operand that is a memory reference whose address
                    820:      is X.  X is an RTL expression.
                    821: 
                    822: 

unix.superglobalmegacorp.com

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