Annotation of gcc/gcc.info-9, revision 1.1

1.1     ! root        1: Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
        !             2: file gcc.texinfo.
        !             3: 
        !             4: This file documents the use and the internals of the GNU compiler.
        !             5: 
        !             6: Copyright (C) 1988, 1989 Free Software Foundation, Inc.
        !             7: 
        !             8: Permission is granted to make and distribute verbatim copies of this
        !             9: manual provided the copyright notice and this permission notice are
        !            10: 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 sections entitled ``GNU General Public License'' and
        !            15: ``Protect Your Freedom--Fight `Look And Feel''' are included exactly
        !            16: as in the original, and provided that the entire resulting derived
        !            17: work is distributed under the terms of a permission notice identical
        !            18: to this one.
        !            19: 
        !            20: Permission is granted to copy and distribute translations of this
        !            21: manual into another language, under the above conditions for modified
        !            22: versions, except that the sections entitled ``GNU General Public
        !            23: License'' and ``Protect Your Freedom--Fight `Look And Feel''' and
        !            24: this permission notice may be included in translations approved by
        !            25: the Free Software Foundation instead of in the original English.
        !            26: 
        !            27: 
        !            28: 
        !            29: File: gcc.info,  Node: Stack Layout,  Next: Library Names,  Prev: Register Classes,  Up: Machine Macros
        !            30: 
        !            31: Describing Stack Layout
        !            32: =======================
        !            33: 
        !            34: `STACK_GROWS_DOWNWARD'
        !            35:      Define this macro if pushing a word onto the stack moves the
        !            36:      stack pointer to a smaller address.
        !            37: 
        !            38:      When we say, ``define this macro if ...,'' it means that the
        !            39:      compiler checks this macro only with `#ifdef' so the precise
        !            40:      definition used does not matter.
        !            41: 
        !            42: `FRAME_GROWS_DOWNWARD'
        !            43:      Define this macro if the addresses of local variable slots are
        !            44:      at negative offsets from the frame pointer.
        !            45: 
        !            46: `STARTING_FRAME_OFFSET'
        !            47:      Offset from the frame pointer to the first local variable slot
        !            48:      to be allocated.
        !            49: 
        !            50:      If `FRAME_GROWS_DOWNWARD', the next slot's offset is found by
        !            51:      subtracting the length of the first slot from
        !            52:      `STARTING_FRAME_OFFSET'.  Otherwise, it is found by adding the
        !            53:      length of the first slot to the value `STARTING_FRAME_OFFSET'.
        !            54: 
        !            55: `PUSH_ROUNDING (NPUSHED)'
        !            56:      A C expression that is the number of bytes actually pushed onto
        !            57:      the stack when an instruction attempts to push NPUSHED bytes.
        !            58: 
        !            59:      If the target machine does not have a push instruction, do not
        !            60:      define this macro.  That directs GNU CC to use an alternate
        !            61:      strategy: to allocate the entire argument block and then store
        !            62:      the arguments into it.
        !            63: 
        !            64:      On some machines, the definition
        !            65: 
        !            66:           #define PUSH_ROUNDING(BYTES) (BYTES)
        !            67: 
        !            68:      will suffice.  But on other machines, instructions that appear
        !            69:      to push one byte actually push two bytes in an attempt to
        !            70:      maintain alignment.  Then the definition should be
        !            71: 
        !            72:           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
        !            73: 
        !            74: `FIRST_PARM_OFFSET (FUNDECL)'
        !            75:      Offset from the argument pointer register to the first
        !            76:      argument's address.  On some machines it may depend on the data
        !            77:      type of the function.  (In the next version of GNU CC, the
        !            78:      argument will be changed to the function data type rather than
        !            79:      its declaration.)
        !            80: 
        !            81: `FIRST_PARM_CALLER_OFFSET (FUNDECL)'
        !            82:      Define this macro on machines where register parameters have
        !            83:      shadow locations on the stack, at addresses below the nominal
        !            84:      parameter.  This matters because certain arguments cannot be
        !            85:      passed on the stack.  On these machines, such arguments must be
        !            86:      stored into the shadow locations.
        !            87: 
        !            88:      This macro should expand into a C expression whose value is the
        !            89:      offset of the first parameter's shadow location from the nominal
        !            90:      stack pointer value.  (That value is itself computed by adding
        !            91:      the value of `STACK_POINTER_OFFSET' to the stack pointer
        !            92:      register.)
        !            93: 
        !            94: `REG_PARM_STACK_SPACE'
        !            95:      Define this macro if functions should assume that stack space
        !            96:      has been allocated for arguments even when their values are
        !            97:      passed in registers.
        !            98: 
        !            99:      The actual allocation of such space would be done either by the
        !           100:      call instruction or by the function prologue, or by defining
        !           101:      FIRST_PARM_CALLER_OFFSET.
        !           102: 
        !           103: `STACK_ARGS_ADJUST (SIZE)'
        !           104:      Define this macro if the machine requires padding on the stack
        !           105:      for certain function calls.  This is padding on a
        !           106:      per-function-call basis, not padding for individual arguments.
        !           107: 
        !           108:      The argument SIZE will be a C variable of type `struct arg_data'
        !           109:      which contains two fields, an integer named `constant' and an
        !           110:      RTX named `var'.  These together represent a size measured in
        !           111:      bytes which is the sum of the integer and the RTX.  Most of the
        !           112:      time `var' is 0, which means that the size is simply the integer.
        !           113: 
        !           114:      The definition should be a C statement or compound statement
        !           115:      which alters the variable supplied in whatever way you wish.
        !           116: 
        !           117:      Note that the value you leave in the variable `size' will
        !           118:      ultimately be rounded up to a multiple of `STACK_BOUNDARY' bits.
        !           119: 
        !           120:      This macro is not fully implemented for machines which have push
        !           121:      instructions (i.e., on which `PUSH_ROUNDING' is defined).
        !           122: 
        !           123: `RETURN_POPS_ARGS (FUNTYPE)'
        !           124:      A C expression that should be 1 if a function pops its own
        !           125:      arguments on returning, or 0 if the function pops no arguments
        !           126:      and the caller must therefore pop them all after the function
        !           127:      returns.
        !           128: 
        !           129:      FUNTYPE is a C variable whose value is a tree node that
        !           130:      describes the function in question.  Normally it is a node of
        !           131:      type `FUNCTION_TYPE' that describes the data type of the function.
        !           132:      From this it is possible to obtain the data types of the value
        !           133:      and arguments (if known).
        !           134: 
        !           135:      When a call to a library function is being considered, FUNTYPE
        !           136:      will contain an identifier node for the library function.  Thus,
        !           137:      if you need to distinguish among various library functions, you
        !           138:      can do so by their names.  Note that ``library function'' in
        !           139:      this context means a function used to perform arithmetic, whose
        !           140:      name is known specially in the compiler and was not mentioned in
        !           141:      the C code being compiled.
        !           142: 
        !           143:      On the Vax, all functions always pop their arguments, so the
        !           144:      definition of this macro is 1.  On the 68000, using the standard
        !           145:      calling convention, no functions pop their arguments, so the
        !           146:      value of the macro is always 0 in this case.  But an alternative
        !           147:      calling convention is available in which functions that take a
        !           148:      fixed number of arguments pop them but other functions (such as
        !           149:      `printf') pop nothing (the caller pops all).  When this
        !           150:      convention is in use, FUNTYPE is examined to determine whether a
        !           151:      function takes a fixed number of arguments.
        !           152: 
        !           153: `FUNCTION_VALUE (VALTYPE, FUNC)'
        !           154:      A C expression to create an RTX representing the place where a
        !           155:      function returns a value of data type VALTYPE.  VALTYPE is a
        !           156:      tree node representing a data type.  Write `TYPE_MODE (VALTYPE)'
        !           157:      to get the machine mode used to represent that type.  On many
        !           158:      machines, only the mode is relevant.  (Actually, on most
        !           159:      machines, scalar values are returned in the same place
        !           160:      regardless of mode).
        !           161: 
        !           162:      If the precise function being called is known, FUNC is a tree
        !           163:      node (`FUNCTION_DECL') for it; otherwise, FUNC is a null
        !           164:      pointer.  This makes it possible to use a different
        !           165:      value-returning convention for specific functions when all their
        !           166:      calls are known.
        !           167: 
        !           168: `FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)'
        !           169:      Define this macro if the target machine has ``register windows''
        !           170:      so that the register in which a function returns its value is
        !           171:      not the same as the one in which the caller sees the value.
        !           172: 
        !           173:      For such machines, `FUNCTION_VALUE' computes the register in
        !           174:      which the caller will see the value, and
        !           175:      `FUNCTION_OUTGOING_VALUE' should be defined in a similar fashion
        !           176:      to tell the function where to put the value.
        !           177: 
        !           178:      If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE'
        !           179:      serves both purposes.
        !           180: 
        !           181: `RETURN_IN_MEMORY (TYPE)'
        !           182:      A C expression which can inhibit the returning of certain
        !           183:      function values in registers, based on the type of value.  A
        !           184:      nonzero value says to return the function value in memory, just
        !           185:      as large structures are always returned.  Here TYPE will be a C
        !           186:      expression of type `tree', representing the data type of the
        !           187:      value.
        !           188: 
        !           189:      Note that values of mode `BLKmode' are returned in memory
        !           190:      regardless of this macro.  Also, the option
        !           191:      `-fpcc-struct-return' takes effect regardless of this macro.  On
        !           192:      most systems, it is possible to leave the macro undefined; this
        !           193:      causes a default definition to be used, whose value is the
        !           194:      constant 0.
        !           195: 
        !           196: `LIBCALL_VALUE (MODE)'
        !           197:      A C expression to create an RTX representing the place where a
        !           198:      library function returns a value of mode MODE.  If the precise
        !           199:      function being called is known, FUNC is a tree node
        !           200:      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. 
        !           201:      This makes it possible to use a different value-returning
        !           202:      convention for specific functions when all their calls are known.
        !           203: 
        !           204:      Note that ``library function'' in this context means a compiler
        !           205:      support routine, used to perform arithmetic, whose name is known
        !           206:      specially by the compiler and was not mentioned in the C code
        !           207:      being compiled.
        !           208: 
        !           209: `FUNCTION_VALUE_REGNO_P (REGNO)'
        !           210:      A C expression that is nonzero if REGNO is the number of a hard
        !           211:      register in which the values of called function may come back.
        !           212: 
        !           213:      A register whose use for returning values is limited to serving
        !           214:      as the second of a pair (for a value of type `double', say) need
        !           215:      not be recognized by this macro.  So for most machines, this
        !           216:      definition suffices:
        !           217: 
        !           218:           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
        !           219: 
        !           220:      If the machine has register windows, so that the caller and the
        !           221:      called function use different registers for the return value,
        !           222:      this macro should recognize only the caller's register numbers.
        !           223: 
        !           224: `FUNCTION_ARG (CUM, MODE, TYPE, NAMED)'
        !           225:      A C expression that controls whether a function argument is
        !           226:      passed in a register, and which register.
        !           227: 
        !           228:      The arguments are CUM, which summarizes all the previous
        !           229:      arguments; MODE, the machine mode of the argument; TYPE, the
        !           230:      data type of the argument as a tree node or 0 if that is not
        !           231:      known (which happens for C support library functions); and
        !           232:      NAMED, which is 1 for an ordinary argument and 0 for nameless
        !           233:      arguments that correspond to `...' in the called function's
        !           234:      prototype.
        !           235: 
        !           236:      The value of the expression should either be a `reg' RTX for the
        !           237:      hard register in which to pass the argument, or zero to pass the
        !           238:      argument on the stack.
        !           239: 
        !           240:      For the Vax and 68000, where normally all arguments are pushed,
        !           241:      zero suffices as a definition.
        !           242: 
        !           243:      The usual way to make the ANSI library `stdarg.h' work on a
        !           244:      machine where some arguments are usually passed in registers, is
        !           245:      to cause nameless arguments to be passed on the stack instead. 
        !           246:      This is done by making `FUNCTION_ARG' return 0 whenever NAMED is
        !           247:      0.
        !           248: 
        !           249: `FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)'
        !           250:      Define this macro if the target machine has ``register
        !           251:      windows'', so that the register in which a function sees an
        !           252:      arguments is not necessarily the same as the one in which the
        !           253:      caller passed the argument.
        !           254: 
        !           255:      For such machines, `FUNCTION_ARG' computes the register in which
        !           256:      the caller passes the value, and `FUNCTION_INCOMING_ARG' should
        !           257:      be defined in a similar fashion to tell the function being
        !           258:      called where the arguments will arrive.
        !           259: 
        !           260:      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
        !           261:      both purposes.
        !           262: 
        !           263: `FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)'
        !           264:      A C expression for the number of words, at the beginning of an
        !           265:      argument, must be put in registers.  The value must be zero for
        !           266:      arguments that are passed entirely in registers or that are
        !           267:      entirely pushed on the stack.
        !           268: 
        !           269:      On some machines, certain arguments must be passed partially in
        !           270:      registers and partially in memory.  On these machines, typically
        !           271:      the first N words of arguments are passed in registers, and the
        !           272:      rest on the stack.  If a multi-word argument (a `double' or a
        !           273:      structure) crosses that boundary, its first few words must be
        !           274:      passed in registers and the rest must be pushed.  This macro
        !           275:      tells the compiler when this occurs, and how many of the words
        !           276:      should go in registers.
        !           277: 
        !           278:      `FUNCTION_ARG' for these arguments should return the first
        !           279:      register to be used by the caller for this argument; likewise
        !           280:      `FUNCTION_INCOMING_ARG', for the called function.
        !           281: 
        !           282: `CUMULATIVE_ARGS'
        !           283:      A C type for declaring a variable that is used as the first
        !           284:      argument of `FUNCTION_ARG' and other related values.  For some
        !           285:      target machines, the type `int' suffices and can hold the number
        !           286:      of bytes of argument so far.
        !           287: 
        !           288: `INIT_CUMULATIVE_ARGS (CUM, FNTYPE)'
        !           289:      A C statement (sans semicolon) for initializing the variable CUM
        !           290:      for the state at the beginning of the argument list.  The
        !           291:      variable has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the
        !           292:      tree node for the data type of the function which will receive
        !           293:      the args, or 0 if the args are to a compiler support library
        !           294:      function.
        !           295: 
        !           296: `FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)'
        !           297:      A C statement (sans semicolon) to update the summarizer variable
        !           298:      CUM to advance past an argument in the argument list.  The
        !           299:      values MODE, TYPE and NAMED describe that argument.  Once this
        !           300:      is done, the variable CUM is suitable for analyzing the
        !           301:      *following* argument with `FUNCTION_ARG', etc.
        !           302: 
        !           303: `FUNCTION_ARG_REGNO_P (REGNO)'
        !           304:      A C expression that is nonzero if REGNO is the number of a hard
        !           305:      register in which function arguments are sometimes passed.  This
        !           306:      does *not* include implicit arguments such as the static chain
        !           307:      and the structure-value address.  On many machines, no registers
        !           308:      can be used for this purpose since all function arguments are
        !           309:      pushed on the stack.
        !           310: 
        !           311: `FUNCTION_ARG_PADDING (MODE, SIZE)'
        !           312:      If defined, a C expression which determines whether, and in
        !           313:      which direction, to pad out an argument with extra space.  The
        !           314:      value should be of type `enum direction': either `upward' to pad
        !           315:      above the argument, `downward' to pad below, or `none' to
        !           316:      inhibit padding.
        !           317: 
        !           318:      The argument SIZE is an RTX which describes the size of the
        !           319:      argument, in bytes.  It should be used only if MODE is
        !           320:      `BLKmode'.  Otherwise, SIZE is 0.
        !           321: 
        !           322:      This macro does not control the *amount* of padding; that is
        !           323:      always just enough to reach the next multiple of `PARM_BOUNDARY'.
        !           324: 
        !           325:      This macro has a default definition which is right for most
        !           326:      systems.  For little-endian machines, the default is to pad
        !           327:      upward.  For big-endian machines, the default is to pad downward
        !           328:      for an argument of constant size shorter than an `int', and
        !           329:      upward otherwise.
        !           330: 
        !           331: `FUNCTION_PROLOGUE (FILE, SIZE)'
        !           332:      A C compound statement that outputs the assembler code for entry
        !           333:      to a function.  The prologue is responsible for setting up the
        !           334:      stack frame, initializing the frame pointer register, saving
        !           335:      registers that must be saved, and allocating SIZE additional
        !           336:      bytes of storage for the local variables.  SIZE is an integer. 
        !           337:      FILE is a stdio stream to which the assembler code should be
        !           338:      output.
        !           339: 
        !           340:      The label for the beginning of the function need not be output
        !           341:      by this macro.  That has already been done when the macro is run.
        !           342: 
        !           343:      To determine which registers to save, the macro can refer to the
        !           344:      array `regs_ever_live': element R is nonzero if hard register R
        !           345:      is used anywhere within the function.  This implies the function
        !           346:      prologue should save register R, but not if it is one of the
        !           347:      call-used registers.
        !           348: 
        !           349:      On machines where functions may or may not have frame-pointers,
        !           350:      the function entry code must vary accordingly; it must set up
        !           351:      the frame pointer if one is wanted, and not otherwise.  To
        !           352:      determine whether a frame pointer is in wanted, the macro can
        !           353:      refer to the variable `frame_pointer_needed'.  The variable's
        !           354:      value will be 1 at run time in a function that needs a frame
        !           355:      pointer.
        !           356: 
        !           357:      On machines where arguments may be passed in registers, and not
        !           358:      have stack space allocated, this macro must examine the variable
        !           359:      `current_function_pretend_args_size', and allocate that many
        !           360:      bytes of uninitialized space on the stack just underneath the
        !           361:      first argument arriving on the stack.  (This may not be at the
        !           362:      very end of the stack, if the calling sequence has pushed
        !           363:      anything else since pushing the stack arguments.  But usually,
        !           364:      on such machines, nothing else has been pushed yet, because the
        !           365:      function prologue itself does all the pushing.)
        !           366: 
        !           367:      This ``pretend argument'' space is allocated in functions that
        !           368:      use the ANSI library `stdarg.h' to accept anonymous arguments of
        !           369:      unspecified types; the last named argument is copied into the
        !           370:      space, so that the anonymous arguments follow it consecutively.
        !           371: 
        !           372: `FUNCTION_PROFILER (FILE, LABELNO)'
        !           373:      A C statement or compound statement to output to FILE some
        !           374:      assembler code to call the profiling subroutine `mcount'. 
        !           375:      Before calling, the assembler code must load the address of a
        !           376:      counter variable into a register where `mcount' expects to find
        !           377:      the address.  The name of this variable is `LP' followed by the
        !           378:      number LABELNO, so you would generate the name using `LP%d' in a
        !           379:      `fprintf'.
        !           380: 
        !           381:      The details of how the address should be passed to `mcount' are
        !           382:      determined by your operating system environment, not by GNU CC. 
        !           383:      To figure them out, compile a small program for profiling using
        !           384:      the system's installed C compiler and look at the assembler code
        !           385:      that results.
        !           386: 
        !           387: `FUNCTION_BLOCK_PROFILER (FILE, LABELNO)'
        !           388:      A C statement or compound statement to output to FILE some
        !           389:      assembler code to initialize basic-block profiling for the
        !           390:      current object module.  This code should call the subroutine
        !           391:      `__bb_init_func' once per object module, passing it as its sole
        !           392:      argument the address of a block allocated in the object module.
        !           393: 
        !           394:      The name of the block is a local symbol made with this statement:
        !           395: 
        !           396:           ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0);
        !           397: 
        !           398:      Of course, since you are writing the definition of
        !           399:      `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
        !           400:      can take a short cut in the definition of this macro and use the
        !           401:      name that you know will result.
        !           402: 
        !           403:      The first word of this block is a flag which will be nonzero if
        !           404:      the object module has already been initialized.  So test this
        !           405:      word first, and do not call `__bb_init_func' if the flag is
        !           406:      nonzero.
        !           407: 
        !           408: `BLOCK_PROFILER (FILE, BLOCKNO)'
        !           409:      A C statement or compound statement to increment the count
        !           410:      associated with the basic block number BLOCKNO.  Basic blocks
        !           411:      are numbered separately from zero within each compilation.  The
        !           412:      count associated with block number BLOCKNO is at index BLOCKNO
        !           413:      in a vector of words; the name of this array is a local symbol
        !           414:      made with this statement:
        !           415: 
        !           416:           ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2);
        !           417: 
        !           418:      Of course, since you are writing the definition of
        !           419:      `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
        !           420:      can take a short cut in the definition of this macro and use the
        !           421:      name that you know will result.
        !           422: 
        !           423: `EXIT_IGNORES_STACK'
        !           424:      Define this macro as a C expression that is nonzero if the
        !           425:      return instruction or the function epilogue ignores the value of
        !           426:      the stack pointer; in other words, if it is safe to delete an
        !           427:      instruction to adjust the stack pointer before a return from the
        !           428:      function.
        !           429: 
        !           430:      Note that this macro's value is relevant only for functions for
        !           431:      which frame pointers are maintained.  It is never safe to delete
        !           432:      a final stack adjustment in a function that has no frame
        !           433:      pointer, and the compiler knows this regardless of
        !           434:      `EXIT_IGNORES_STACK'.
        !           435: 
        !           436: `FUNCTION_EPILOGUE (FILE, SIZE)'
        !           437:      A C compound statement that outputs the assembler code for exit
        !           438:      from a function.  The epilogue is responsible for restoring the
        !           439:      saved registers and stack pointer to their values when the
        !           440:      function was called, and returning control to the caller.  This
        !           441:      macro takes the same arguments as the macro `FUNCTION_PROLOGUE',
        !           442:      and the registers to restore are determined from
        !           443:      `regs_ever_live' and `CALL_USED_REGISTERS' in the same way.
        !           444: 
        !           445:      On some machines, there is a single instruction that does all
        !           446:      the work of returning from the function.  On these machines,
        !           447:      give that instruction the name `return' and do not define the
        !           448:      macro `FUNCTION_EPILOGUE' at all.
        !           449: 
        !           450:      Do not define a pattern named `return' if you want the
        !           451:      `FUNCTION_EPILOGUE' to be used.  If you want the target switches
        !           452:      to control whether return instructions or epilogues are used,
        !           453:      define a `return' pattern with a validity condition that tests
        !           454:      the target switches appropriately.  If the `return' pattern's
        !           455:      validity condition is false, epilogues will be used.
        !           456: 
        !           457:      On machines where functions may or may not have frame-pointers,
        !           458:      the function exit code must vary accordingly.  Sometimes the
        !           459:      code for these two cases is completely different.  To determine
        !           460:      whether a frame pointer is in wanted, the macro can refer to the
        !           461:      variable `frame_pointer_needed'.  The variable's value will be 1
        !           462:      at run time in a function that needs a frame pointer.
        !           463: 
        !           464:      On some machines, some functions pop their arguments on exit
        !           465:      while others leave that for the caller to do.  For example, the
        !           466:      68020 when given `-mrtd' pops arguments in functions that take a
        !           467:      fixed number of arguments.
        !           468: 
        !           469:      Your definition of the macro `RETURN_POPS_ARGS' decides which
        !           470:      functions pop their own arguments.  `FUNCTION_EPILOGUE' needs to
        !           471:      know what was decided.  The variable
        !           472:      `current_function_pops_args' is nonzero if the function should
        !           473:      pop its own arguments.  If so, use the variable
        !           474:      `current_function_args_size' as the number of bytes to pop.
        !           475: 
        !           476: `FIX_FRAME_POINTER_ADDRESS (ADDR, DEPTH)'
        !           477:      A C compound statement to alter a memory address that uses the
        !           478:      frame pointer register so that it uses the stack pointer
        !           479:      register instead.  This must be done in the instructions that
        !           480:      load parameter values into registers, when the reload pass
        !           481:      determines that a frame pointer is not necessary for the
        !           482:      function.  ADDR will be a C variable name, and the updated
        !           483:      address should be stored in that variable.  DEPTH will be the
        !           484:      current depth of stack temporaries (number of bytes of arguments
        !           485:      currently pushed).  The change in offset between a
        !           486:      frame-pointer-relative address and a stack-pointer-relative
        !           487:      address must include DEPTH.
        !           488: 
        !           489:      Even if your machine description specifies there will always be
        !           490:      a frame pointer in the frame pointer register, you must still
        !           491:      define `FIX_FRAME_POINTER_ADDRESS', but the definition will
        !           492:      never be executed at run time, so it may be empty.
        !           493: 
        !           494: `LONGJMP_RESTORE_FROM_STACK'
        !           495:      Define this macro if the `longjmp' function restores registers
        !           496:      from the stack frames, rather than from those saved specifically
        !           497:      by `setjmp'.  Certain quantities must not be kept in registers
        !           498:      across a call to `setjmp' on such machines.
        !           499: 
        !           500: 
        !           501: 
        !           502: File: gcc.info,  Node: Library Names,  Next: Addressing Modes,  Prev: Stack Layout,  Up: Machine Macros
        !           503: 
        !           504: Library Subroutine Names
        !           505: ========================
        !           506: 
        !           507: `MULSI3_LIBCALL'
        !           508:      A C string constant giving the name of the function to call for
        !           509:      multiplication of one signed full-word by another.  If you do
        !           510:      not define this macro, the default name is used, which is
        !           511:      `__mulsi3', a function defined in `gnulib'.
        !           512: 
        !           513: `UMULSI3_LIBCALL'
        !           514:      A C string constant giving the name of the function to call for
        !           515:      multiplication of one unsigned full-word by another.  If you do
        !           516:      not define this macro, the default name is used, which is
        !           517:      `__umulsi3', a function defined in `gnulib'.
        !           518: 
        !           519: `DIVSI3_LIBCALL'
        !           520:      A C string constant giving the name of the function to call for
        !           521:      division of one signed full-word by another.  If you do not
        !           522:      define this macro, the default name is used, which is
        !           523:      `__divsi3', a function defined in `gnulib'.
        !           524: 
        !           525: `UDIVSI3_LIBCALL'
        !           526:      A C string constant giving the name of the function to call for
        !           527:      division of one unsigned full-word by another.  If you do not
        !           528:      define this macro, the default name is used, which is
        !           529:      `__udivsi3', a function defined in `gnulib'.
        !           530: 
        !           531: `MODSI3_LIBCALL'
        !           532:      A C string constant giving the name of the function to call for
        !           533:      the remainder in division of one signed full-word by another. 
        !           534:      If you do not define this macro, the default name is used, which
        !           535:      is `__modsi3', a function defined in `gnulib'.
        !           536: 
        !           537: `UMODSI3_LIBCALL'
        !           538:      A C string constant giving the name of the function to call for
        !           539:      the remainder in division of one unsigned full-word by another. 
        !           540:      If you do not define this macro, the default name is used, which
        !           541:      is `__umodsi3', a function defined in `gnulib'.
        !           542: 
        !           543: `TARGET_MEM_FUNCTIONS'
        !           544:      Define this macro if GNU CC should generate calls to the System
        !           545:      V (and ANSI C) library functions `memcpy' and `memset' rather
        !           546:      than the BSD functions `bcopy' and `bzero'.
        !           547: 
        !           548: 
        !           549: 
        !           550: File: gcc.info,  Node: Addressing Modes,  Next: Delayed Branch,  Prev: Library Names,  Up: Machine Macros
        !           551: 
        !           552: Addressing Modes
        !           553: ================
        !           554: 
        !           555: `HAVE_POST_INCREMENT'
        !           556:      Define this macro if the machine supports post-increment
        !           557:      addressing.
        !           558: 
        !           559: `HAVE_PRE_INCREMENT'
        !           560: `HAVE_POST_DECREMENT'
        !           561: `HAVE_PRE_DECREMENT'
        !           562:      Similar for other kinds of addressing.
        !           563: 
        !           564: `CONSTANT_ADDRESS_P (X)'
        !           565:      A C expression that is 1 if the RTX X is a constant whose value
        !           566:      is an integer.  This includes integers whose values are not
        !           567:      explicitly known, such as `symbol_ref' and `label_ref'
        !           568:      expressions and `const' arithmetic expressions.
        !           569: 
        !           570:      On most machines, this can be defined as `CONSTANT_P (X)', but a
        !           571:      few machines are more restrictive in which constant addresses
        !           572:      are supported.
        !           573: 
        !           574: `MAX_REGS_PER_ADDRESS'
        !           575:      A number, the maximum number of registers that can appear in a
        !           576:      valid memory address.
        !           577: 
        !           578: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)'
        !           579:      A C compound statement with a conditional `goto LABEL;' executed
        !           580:      if X (an RTX) is a legitimate memory address on the target
        !           581:      machine for a memory operand of mode MODE.
        !           582: 
        !           583:      It usually pays to define several simpler macros to serve as
        !           584:      subroutines for this one.  Otherwise it may be too complicated
        !           585:      to understand.
        !           586: 
        !           587:      This macro must exist in two variants: a strict variant and a
        !           588:      non-strict one.  The strict variant is used in the reload pass. 
        !           589:      It must be defined so that any pseudo-register that has not been
        !           590:      allocated a hard register is considered a memory reference.  In
        !           591:      contexts where some kind of register is required, a
        !           592:      pseudo-register with no hard register must be rejected.
        !           593: 
        !           594:      The non-strict variant is used in other passes.  It must be
        !           595:      defined to accept all pseudo-registers in every context where
        !           596:      some kind of register is required.
        !           597: 
        !           598:      Compiler source files that want to use the strict variant of
        !           599:      this macro define the macro `REG_OK_STRICT'.  You should use an
        !           600:      `#ifdef REG_OK_STRICT' conditional to define the strict variant
        !           601:      in that case and the non-strict variant otherwise.
        !           602: 
        !           603:      Typically among the subroutines used to define
        !           604:      `GO_IF_LEGITIMATE_ADDRESS' are subroutines to check for
        !           605:      acceptable registers for various purposes (one for base
        !           606:      registers, one for index registers, and so on).  Then only these
        !           607:      subroutine macros need have two variants; the higher levels of
        !           608:      macros may be the same whether strict or not.
        !           609: 
        !           610:      Normally, constant addresses which are the sum of a `symbol_ref'
        !           611:      and an integer are stored inside a `const' RTX to mark them as
        !           612:      constant.  Therefore, there is no need to recognize such sums as
        !           613:      legitimate addresses.
        !           614: 
        !           615:      Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle
        !           616:      constant sums that are not marked with  `const'.  It assumes
        !           617:      that a naked `plus' indicates indexing.  If so, then you *must*
        !           618:      reject such naked constant sums as illegitimate addresses, so
        !           619:      that none of them will be given to `PRINT_OPERAND_ADDRESS'.
        !           620: 
        !           621: `REG_OK_FOR_BASE_P (X)'
        !           622:      A C expression that is nonzero if X (assumed to be a `reg' RTX)
        !           623:      is valid for use as a base register.  For hard registers, it
        !           624:      should always accept those which the hardware permits and reject
        !           625:      the others.  Whether the macro accepts or rejects pseudo
        !           626:      registers must be controlled by `REG_OK_STRICT' as described
        !           627:      above.  This usually requires two variant definitions, of which
        !           628:      `REG_OK_STRICT' controls the one actually used.
        !           629: 
        !           630: `REG_OK_FOR_INDEX_P (X)'
        !           631:      A C expression that is nonzero if X (assumed to be a `reg' RTX)
        !           632:      is valid for use as an index register.
        !           633: 
        !           634:      The difference between an index register and a base register is
        !           635:      that the index register may be scaled.  If an address involves
        !           636:      the sum of two registers, neither one of them scaled, then
        !           637:      either one may be labeled the ``base'' and the other the
        !           638:      ``index''; but whichever labeling is used must fit the machine's
        !           639:      constraints of which registers may serve in each capacity.  The
        !           640:      compiler will try both labelings, looking for one that is valid,
        !           641:      and will reload one or both registers only if neither labeling
        !           642:      works.
        !           643: 
        !           644: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)'
        !           645:      A C compound statement that attempts to replace X with a valid
        !           646:      memory address for an operand of mode MODE.  WIN will be a C
        !           647:      statement label elsewhere in the code; the macro definition may
        !           648:      use
        !           649: 
        !           650:           GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
        !           651: 
        !           652:      to avoid further processing if the address has become legitimate.
        !           653: 
        !           654:      X will always be the result of a call to
        !           655:      `break_out_memory_refs', and OLDX will be the operand that was
        !           656:      given to that function to produce X.
        !           657: 
        !           658:      The code generated by this macro should not alter the
        !           659:      substructure of X.  If it transforms X into a more legitimate
        !           660:      form, it should assign X (which will always be a C variable) a
        !           661:      new value.
        !           662: 
        !           663:      It is not necessary for this macro to come up with a legitimate
        !           664:      address.  The compiler has standard ways of doing so in all
        !           665:      cases.  In fact, it is safe for this macro to do nothing.  But
        !           666:      often a machine-dependent strategy can generate better code.
        !           667: 
        !           668: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)'
        !           669:      A C statement or compound statement with a conditional `goto
        !           670:      LABEL;' executed if memory address X (an RTX) can have different
        !           671:      meanings depending on the machine mode of the memory reference
        !           672:      it is used for.
        !           673: 
        !           674:      Autoincrement and autodecrement addresses typically have
        !           675:      mode-dependent effects because the amount of the increment or
        !           676:      decrement is the size of the operand being addressed.  Some
        !           677:      machines have other mode-dependent addresses.  Many RISC
        !           678:      machines have no mode-dependent addresses.
        !           679: 
        !           680:      You may assume that ADDR is a valid address for the machine.
        !           681: 
        !           682: `LEGITIMATE_CONSTANT_P (X)'
        !           683:      A C expression that is nonzero if X is a legitimate constant for
        !           684:      an immediate operand on the target machine.  You can assume that
        !           685:      either X is a `const_double' or it satisfies `CONSTANT_P', so
        !           686:      you need not check these things.  In fact, `1' is a suitable
        !           687:      definition for this macro on machines where any `const_double'
        !           688:      is valid and anything `CONSTANT_P' is valid.
        !           689: 
        !           690: 
        !           691: 
        !           692: File: gcc.info,  Node: Delayed Branch,  Next: Condition Code,  Prev: Addressing Modes,  Up: Machine Macros
        !           693: 
        !           694: Parameters for Delayed Branch Optimization
        !           695: ==========================================
        !           696: 
        !           697: `HAVE_DELAYED_BRANCH'
        !           698:      Define this macro if the target machine has delayed branches,
        !           699:      that is, a branch does not take effect immediately, and the
        !           700:      actual branch instruction may be followed by one or more
        !           701:      instructions that will be issued before the PC is actually
        !           702:      changed.
        !           703: 
        !           704:      If defined, this allows a special scheduling pass to be run
        !           705:      after the second jump optimization to attempt to reorder
        !           706:      instructions to exploit this.  Defining this macro also requires
        !           707:      the definition of certain other macros described below.
        !           708: 
        !           709: `DBR_SLOTS_AFTER (INSN)'
        !           710:      This macro must be defined if `HAVE_DELAYED_BRANCH' is defined. 
        !           711:      Its definition should be a C expression returning the number of
        !           712:      available delay slots following the instruction(s) output by the
        !           713:      pattern for INSN.  The definition of ``slot'' is
        !           714:      machine-dependent, and may denote instructions, bytes, or
        !           715:      whatever.
        !           716: 
        !           717: `DBR_INSN_SLOTS (INSN)'
        !           718:      This macro must be defined if `HAVE_DELAYED_BRANCH' is defined. 
        !           719:      It should be a C expression returning the number of slots
        !           720:      (typically the number of machine instructions) consumed by INSN.
        !           721: 
        !           722:      You may assume that INSN is truly an insn, not a note, label,
        !           723:      barrier, dispatch table, `use', or `clobber'.
        !           724: 
        !           725: `DBR_INSN_ELIGIBLE_P (INSN, DINSN)'
        !           726:      A C expression whose value is non-zero if it is legitimate to
        !           727:      put INSN in the delay slot following DINSN.
        !           728: 
        !           729:      You do not need to take account of data flow considerations in
        !           730:      the definition of this macro, because the delayed branch
        !           731:      optimizer always does that.  This macro is needed only when
        !           732:      certain insns may not be placed in certain delay slots for
        !           733:      reasons not evident from the RTL expressions themselves.  If
        !           734:      there are no such problems, you don't need to define this macro.
        !           735: 
        !           736:      You may assume that INSN is truly an insn, not a note, label,
        !           737:      barrier, dispatch table, `use', or `clobber'.  You may assume
        !           738:      that DINSN is a jump insn with a delay slot.
        !           739: 
        !           740: `DBR_OUTPUT_SEQEND(FILE)'
        !           741:      A C statement, to be executed after all slot-filler instructions
        !           742:      have been output.  If necessary, call `dbr_sequence_length' to
        !           743:      determine the number of slots filled in a sequence (zero if not
        !           744:      currently outputting a sequence), to decide how many no-ops to
        !           745:      output, or whatever.
        !           746: 
        !           747:      Don't define this macro if it has nothing to do, but it is
        !           748:      helpful in reading assembly output if the extent of the delay
        !           749:      sequence is made explicit (e.g. with white space).
        !           750: 
        !           751:      Note that output routines for instructions with delay slots must
        !           752:      be prepared to deal with not being output as part of a sequence
        !           753:      (i.e.  when the scheduling pass is not run, or when no slot
        !           754:      fillers could be found.)  The variable `final_sequence' is null
        !           755:      when not processing a sequence, otherwise it contains the
        !           756:      `sequence' rtx being output.
        !           757: 
        !           758: 
        !           759: 
        !           760: File: gcc.info,  Node: Condition Code,  Next: Cross-compilation,  Prev: Delayed Branch,  Up: Machine Macros
        !           761: 
        !           762: Condition Code Information
        !           763: ==========================
        !           764: 
        !           765: The file `conditions.h' defines a variable `cc_status' to describe
        !           766: how the condition code was computed (in case the interpretation of
        !           767: the condition code depends on the instruction that it was set by). 
        !           768: This variable contains the RTL expressions on which the condition
        !           769: code is currently based, and several standard flags.
        !           770: 
        !           771: Sometimes additional machine-specific flags must be defined in the
        !           772: machine description header file.  It can also add additional
        !           773: machine-specific information by defining `CC_STATUS_MDEP'.
        !           774: 
        !           775: `CC_STATUS_MDEP'
        !           776:      C code for a data type which is used for declaring the `mdep'
        !           777:      component of `cc_status'.  It defaults to `int'.
        !           778: 
        !           779: `CC_STATUS_MDEP_INIT'
        !           780:      A C expression to initialize the `mdep' field to ``empty''.  The
        !           781:      default definition does nothing, since most machines don't use
        !           782:      the field anyway.  If you want to use the field, you should
        !           783:      probably define this macro to initialize it.
        !           784: 
        !           785: `NOTICE_UPDATE_CC (EXP, INSN)'
        !           786:      A C compound statement to set the components of `cc_status'
        !           787:      appropriately for an insn INSN whose body is EXP.  It is this
        !           788:      macro's responsibility to recognize insns that set the condition
        !           789:      code as a byproduct of other activity as well as those that
        !           790:      explicitly set `(cc0)'.
        !           791: 
        !           792:      If there are insn that do not set the condition code but do
        !           793:      alter other machine registers, this macro must check to see
        !           794:      whether they invalidate the expressions that the condition code
        !           795:      is recorded as reflecting.  For example, on the 68000, insns
        !           796:      that store in address registers do not set the condition code,
        !           797:      which means that usually `NOTICE_UPDATE_CC' can leave
        !           798:      `cc_status' unaltered for such insns.  But suppose that the
        !           799:      previous insn set the condition code based on location
        !           800:      `a4@(102)' and the current insn stores a new value in `a4'. 
        !           801:      Although the condition code is not changed by this, it will no
        !           802:      longer be true that it reflects the contents of `a4@(102)'. 
        !           803:      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this
        !           804:      case to say that nothing is known about the condition code value.
        !           805: 
        !           806:      The definition of `NOTICE_UPDATE_CC' must be prepared to deal
        !           807:      with the results of peephole optimization: insns whose patterns
        !           808:      are `parallel' RTXs containing various `reg', `mem' or constants
        !           809:      which are just the operands.  The RTL structure of these insns
        !           810:      is not sufficient to indicate what the insns actually do.  What
        !           811:      `NOTICE_UPDATE_CC' should do when it sees one is just to run
        !           812:      `CC_STATUS_INIT'.
        !           813: 
        !           814: 
        !           815: 
        !           816: File: gcc.info,  Node: Cross-compilation,  Next: Misc,  Prev: Condition Code,  Up: Machine Macros
        !           817: 
        !           818: Cross Compilation and Floating-Point Format
        !           819: ===========================================
        !           820: 
        !           821: While all modern machines use 2's complement representation for
        !           822: integers, there are a variety of representations for floating point
        !           823: numbers.  This means that in a cross-compiler the representation of
        !           824: floating point numbers in the compiled program may be different from
        !           825: that used in the machine doing the compilation.
        !           826: 
        !           827: Because different representation systems may offer different amounts
        !           828: of range and precision, the cross compiler cannot safely use the host
        !           829: machine's floating point arithmetic.  Therefore, floating point
        !           830: constants must be represented in the target machine's format.  This
        !           831: means that the cross compiler cannot use `atof' to parse a floating
        !           832: point constant; it must have its own special routine to use instead. 
        !           833: Also, constant folding must emulate the target machine's arithmetic
        !           834: (or must not be done at all).
        !           835: 
        !           836: The macros in the following table should be defined only if you are
        !           837: cross compiling between different floating point formats.
        !           838: 
        !           839: Otherwise, don't define them. Then default definitions will be set up
        !           840: which use `double' as the data type, `==' to test for equality, etc.
        !           841: 
        !           842: You don't need to worry about how many times you use an operand of
        !           843: any of these macros.  The compiler never uses operands which have
        !           844: side effects.
        !           845: 
        !           846: `REAL_VALUE_TYPE'
        !           847:      A macro for the C data type to be used to hold a floating point
        !           848:      value in the target machine's format.  Typically this would be a
        !           849:      `struct' containing an array of `int'.
        !           850: 
        !           851: `REAL_VALUES_EQUAL (X, Y)'
        !           852:      A macro for a C expression which compares for equality the two
        !           853:      values, X and Y, both of type `REAL_VALUE_TYPE'.
        !           854: 
        !           855: `REAL_VALUES_LESS (X, Y)'
        !           856:      A macro for a C expression which tests whether X is less than Y,
        !           857:      both values being of type `REAL_VALUE_TYPE' and interpreted as
        !           858:      floating point numbers in the target machine's representation.
        !           859: 
        !           860: `REAL_VALUE_LDEXP (X, SCALE)'
        !           861:      A macro for a C expression which performs the standard library
        !           862:      function `ldexp', but using the target machine's floating point
        !           863:      representation.  Both X and the value of the expression have
        !           864:      type `REAL_VALUE_TYPE'.  The second argument, SCALE, is an
        !           865:      integer.
        !           866: 
        !           867: `REAL_VALUE_ATOF (STRING)'
        !           868:      A macro for a C expression which converts STRING, an expression
        !           869:      of type `char *', into a floating point number in the target
        !           870:      machine's representation.  The value has type `REAL_VALUE_TYPE'.
        !           871: 
        !           872: Define the following additional macros if you want to make floating
        !           873: point constant folding work while cross compiling.  If you don't
        !           874: define them, cross compilation is still possible, but constant
        !           875: folding will not happen for floating point values.
        !           876: 
        !           877: `REAL_ARITHMETIC (OUTPUT, CODE, X, Y)'
        !           878:      A macro for a C statement which calculates an arithmetic
        !           879:      operation of the two floating point values X and Y, both of type
        !           880:      `REAL_VALUE_TYPE' in the target machine's representation, to
        !           881:      produce a result of the same type and representation which is
        !           882:      stored in OUTPUT (which will be a variable).
        !           883: 
        !           884:      The operation to be performed is specified by CODE, a tree code
        !           885:      which will always be one of the following: `PLUS_EXPR',
        !           886:      `MINUS_EXPR', `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
        !           887: 
        !           888:      The expansion of this macro is responsible for checking for
        !           889:      overflow.  If overflow happens, the macro expansion should
        !           890:      execute the statement `return 0;', which indicates the inability
        !           891:      to perform the arithmetic operation requested.
        !           892: 
        !           893: `REAL_VALUE_NEGATE (X)'
        !           894:      A macro for a C expression which returns the negative of the
        !           895:      floating point value X.  Both X and the value of the expression
        !           896:      have type `REAL_VALUE_TYPE' and are in the target machine's
        !           897:      floating point representation.
        !           898: 
        !           899:      There is no way for this macro to report overflow, since
        !           900:      overflow can't happen in the negation operation.
        !           901: 
        !           902: `REAL_VALUE_TO_INT (LOW, HIGH, X)'
        !           903:      A macro for a C expression which converts a floating point value
        !           904:      X into a double-precision integer which is then stored into LOW
        !           905:      and HIGH, two variables of type INT.
        !           906: 
        !           907: `REAL_VALUE_FROM_INT (X, LOW, HIGH)'
        !           908:      A macro for a C expression which converts a double-precision
        !           909:      integer found in LOW and HIGH, two variables of type INT, into a
        !           910:      floating point value which is then stored into X.
        !           911: 
        !           912: 
        !           913: 
        !           914: File: gcc.info,  Node: Misc,  Next: Assembler Format,  Prev: Cross-compilation,  Up: Machine Macros
        !           915: 
        !           916: Miscellaneous Parameters
        !           917: ========================
        !           918: 
        !           919: `CASE_VECTOR_MODE'
        !           920:      An alias for a machine mode name.  This is the machine mode that
        !           921:      elements of a jump-table should have.
        !           922: 
        !           923: `CASE_VECTOR_PC_RELATIVE'
        !           924:      Define this macro if jump-tables should contain relative
        !           925:      addresses.
        !           926: 
        !           927: `CASE_DROPS_THROUGH'
        !           928:      Define this if control falls through a `case' insn when the
        !           929:      index value is out of range.  This means the specified
        !           930:      default-label is actually ignored by the `case' insn proper.
        !           931: 
        !           932: `IMPLICIT_FIX_EXPR'
        !           933:      An alias for a tree code that should be used by default for
        !           934:      conversion of floating point values to fixed point.  Normally,
        !           935:      `FIX_ROUND_EXPR' is used.
        !           936: 
        !           937: `FIXUNS_TRUNC_LIKE_FIX_TRUNC'
        !           938:      Define this macro if the same instructions that convert a
        !           939:      floating point number to a signed fixed point number also
        !           940:      convert validly to an unsigned one.
        !           941: 
        !           942: `EASY_DIV_EXPR'
        !           943:      An alias for a tree code that is the easiest kind of division to
        !           944:      compile code for in the general case.  It may be
        !           945:      `TRUNC_DIV_EXPR', `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or
        !           946:      `ROUND_DIV_EXPR'.  These four division operators differ in how
        !           947:      they round the result to an integer.  `EASY_DIV_EXPR' is used
        !           948:      when it is permissible to use any of those kinds of division and
        !           949:      the choice should be made on the basis of efficiency.
        !           950: 
        !           951: `DEFAULT_SIGNED_CHAR'
        !           952:      An expression whose value is 1 or 0, according to whether the
        !           953:      type `char' should be signed or unsigned by default.  The user
        !           954:      can always override this default with the options
        !           955:      `-fsigned-char' and `-funsigned-char'.
        !           956: 
        !           957: `SCCS_DIRECTIVE'
        !           958:      Define this if the preprocessor should ignore `#sccs' directives
        !           959:      and print no error message.
        !           960: 
        !           961: `HAVE_VPRINTF'
        !           962:      Define this if the library function `vprintf' is available on
        !           963:      your system.
        !           964: 
        !           965: `MOVE_MAX'
        !           966:      The maximum number of bytes that a single instruction can move
        !           967:      quickly from memory to memory.
        !           968: 
        !           969: `INT_TYPE_SIZE'
        !           970:      A C expression for the size in bits of the type `int' on the
        !           971:      target machine.  If you don't define this, the default is one
        !           972:      word.
        !           973: 
        !           974: `SHORT_TYPE_SIZE'
        !           975:      A C expression for the size in bits of the type `short' on the
        !           976:      target machine.  If you don't define this, the default is half a
        !           977:      word.  (If this would be less than one storage unit, it is
        !           978:      rounded up to one unit.)
        !           979: 
        !           980: `LONG_TYPE_SIZE'
        !           981:      A C expression for the size in bits of the type `long' on the
        !           982:      target machine.  If you don't define this, the default is one
        !           983:      word.
        !           984: 
        !           985: `LONG_LONG_TYPE_SIZE'
        !           986:      A C expression for the size in bits of the type `long long' on
        !           987:      the target machine.  If you don't define this, the default is
        !           988:      two words.
        !           989: 
        !           990: `CHAR_TYPE_SIZE'
        !           991:      A C expression for the size in bits of the type `char' on the
        !           992:      target machine.  If you don't define this, the default is one
        !           993:      quarter of a word.  (If this would be less than one storage
        !           994:      unit, it is rounded up to one unit.)
        !           995: 
        !           996: `FLOAT_TYPE_SIZE'
        !           997:      A C expression for the size in bits of the type `float' on the
        !           998:      target machine.  If you don't define this, the default is one
        !           999:      word.
        !          1000: 
        !          1001: `DOUBLE_TYPE_SIZE'
        !          1002:      A C expression for the size in bits of the type `double' on the
        !          1003:      target machine.  If you don't define this, the default is two
        !          1004:      words.
        !          1005: 
        !          1006: `LONG_DOUBLE_TYPE_SIZE'
        !          1007:      A C expression for the size in bits of the type `long double' on
        !          1008:      the target machine.  If you don't define this, the default is
        !          1009:      two words.
        !          1010: 
        !          1011: `SLOW_BYTE_ACCESS'
        !          1012:      Define this macro as a C expression which is nonzero if
        !          1013:      accessing less than a word of memory (i.e. a `char' or a
        !          1014:      `short') is slow (requires more than one instruction).
        !          1015: 
        !          1016: `SLOW_ZERO_EXTEND'
        !          1017:      Define this macro if zero-extension (of a `char' or `short' to
        !          1018:      an `int') can be done faster if the destination is a register
        !          1019:      that is known to be zero.
        !          1020: 
        !          1021:      If you define this macro, you must have instruction patterns
        !          1022:      that recognize RTL structures like this:
        !          1023: 
        !          1024:           (set (strict-low-part (subreg:QI (reg:SI ...) 0)) ...)
        !          1025: 
        !          1026:      and likewise for `HImode'.
        !          1027: 
        !          1028: `SHIFT_COUNT_TRUNCATED'
        !          1029:      Define this macro if shift instructions ignore all but the
        !          1030:      lowest few bits of the shift count.  It implies that a
        !          1031:      sign-extend or zero-extend instruction for the shift count can
        !          1032:      be omitted.
        !          1033: 
        !          1034: `TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)'
        !          1035:      A C expression which is nonzero if on this machine it is safe to
        !          1036:      ``convert'' an integer of INPREC bits to one of OUTPREC bits
        !          1037:      (where OUTPREC is smaller than INPREC) by merely operating on it
        !          1038:      as if it had only OUTPREC bits.
        !          1039: 
        !          1040:      On many machines, this expression can be 1.
        !          1041: 
        !          1042: `NO_FUNCTION_CSE'
        !          1043:      Define this macro if it is as good or better to call a constant
        !          1044:      function address than to call an address kept in a register.
        !          1045: 
        !          1046: `PROMOTE_PROTOTYPES'
        !          1047:      Define this macro if an argument declared as `char' or `short'
        !          1048:      in a prototype should actually be passed as an `int'.  In
        !          1049:      addition to avoiding errors in certain cases of mismatch, it
        !          1050:      also makes for better code on certain machines.
        !          1051: 
        !          1052: `STORE_FLAG_VALUE'
        !          1053:      A C expression for the value stored by a store-flag instruction
        !          1054:      (`sCOND') when the condition is true.  This is usually 1 or -1;
        !          1055:      it is required to be an odd number or a negative number.
        !          1056: 
        !          1057:      Do not define `STORE_FLAG_VALUE' if the machine has no
        !          1058:      store-flag instructions.
        !          1059: 
        !          1060: `Pmode'
        !          1061:      An alias for the machine mode for pointers.  Normally the
        !          1062:      definition can be
        !          1063: 
        !          1064:           #define Pmode SImode
        !          1065: 
        !          1066: `FUNCTION_MODE'
        !          1067:      An alias for the machine mode used for memory references to
        !          1068:      functions being called, in `call' RTL expressions.  On most
        !          1069:      machines this should be `QImode'.
        !          1070: 
        !          1071: `INSN_MACHINE_INFO'
        !          1072:      This macro should expand into a C structure type to use for the
        !          1073:      machine-dependent info field specified with the optional last
        !          1074:      argument in `define_insn' and `define_peephole' patterns.  For
        !          1075:      example, it might expand into `struct machine_info'; then it
        !          1076:      would be up to you to define this structure in the `tm.h' file.
        !          1077: 
        !          1078:      You do not need to define this macro if you do not write the
        !          1079:      optional last argument in any of the patterns in the machine
        !          1080:      description.
        !          1081: 
        !          1082: `DEFAULT_MACHINE_INFO'
        !          1083:      This macro should expand into a C initializer to use to
        !          1084:      initialize the machine-dependent info for one insn pattern.  It
        !          1085:      is used for patterns that do not specify the machine-dependent
        !          1086:      info.
        !          1087: 
        !          1088:      If you do not define this macro, zero is used.
        !          1089: 
        !          1090: `CONST_COSTS (X, CODE)'
        !          1091:      A part of a C `switch' statement that describes the relative
        !          1092:      costs of constant RTL expressions.  It must contain `case'
        !          1093:      labels for expression codes `const_int', `const', `symbol_ref',
        !          1094:      `label_ref' and `const_double'.  Each case must ultimately reach
        !          1095:      a `return' statement to return the relative cost of the use of
        !          1096:      that kind of constant value in an expression.  The cost may
        !          1097:      depend on the precise value of the constant, which is available
        !          1098:      for examination in X.
        !          1099: 
        !          1100:      CODE is the expression code--redundant, since it can be obtained
        !          1101:      with `GET_CODE (X)'.
        !          1102: 
        !          1103: `DOLLARS_IN_IDENTIFIERS'
        !          1104:      Define this to be nonzero if the character `$' should be allowed
        !          1105:      by default in identifier names.
        !          1106: 
        !          1107: `USE_C_ALLOCA'
        !          1108:      Define this macro to indicate that the compiler is running with
        !          1109:      the `alloca' implemented in C.  This version of `alloca' can be
        !          1110:      found in the file `alloca.c'; to use it, you must also alter the
        !          1111:      `Makefile' variable `ALLOCA'.
        !          1112: 
        !          1113:      This macro, unlike most, describes the machine that the compiler
        !          1114:      is running on, rather than the one the compiler is compiling for.
        !          1115:      Therefore, it should be set in the `xm-MACHINE.h' file rather
        !          1116:      than in the `tm-MACHINE.h' file.
        !          1117: 
        !          1118:      If you do define this macro, you should probably do it as follows:
        !          1119: 
        !          1120:           #ifndef __GNUC__
        !          1121:           #define USE_C_ALLOCA
        !          1122:           #else
        !          1123:           #define alloca __builtin_alloca
        !          1124:           #endif
        !          1125: 
        !          1126:      so that when the compiler is compiled with GNU CC it uses the
        !          1127:      more efficient built-in `alloca' function.
        !          1128: 
        !          1129: 

unix.superglobalmegacorp.com

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