Annotation of gcc/internals-6, revision 1.1

1.1     ! root        1: Info file internals, produced by Makeinfo, -*- Text -*-
        !             2: from input file internals.texinfo.
        !             3: 
        !             4: 
        !             5: 
        !             6: This file documents the internals of the GNU compiler.
        !             7: 
        !             8: Copyright (C) 1988 Free Software Foundation, Inc.
        !             9: 
        !            10: Permission is granted to make and distribute verbatim copies of
        !            11: this manual provided the copyright notice and this permission notice
        !            12: are preserved on all copies.
        !            13: 
        !            14: Permission is granted to copy and distribute modified versions of this
        !            15: manual under the conditions for verbatim copying, provided also that the
        !            16: section entitled ``GNU CC General Public License'' is included exactly as
        !            17: in the original, and provided that the entire resulting derived work is
        !            18: distributed under the terms of a permission notice identical to this one.
        !            19: 
        !            20: Permission is granted to copy and distribute translations of this manual
        !            21: into another language, under the above conditions for modified versions,
        !            22: except that the section entitled ``GNU CC General Public License'' and
        !            23: this permission notice may be included in translations approved by the
        !            24: Free Software Foundation instead of in the original English.
        !            25: 
        !            26: 
        !            27: 
        !            28: 
        !            29: 
        !            30: 
        !            31: File: internals,  Node: Misc,  Next: Condition Code,  Prev: Addressing Modes,  Up: Machine Macros
        !            32: 
        !            33: Miscellaneous Parameters
        !            34: ========================
        !            35: 
        !            36: `CASE_VECTOR_MODE'
        !            37:      An alias for a machine mode name.  This is the machine mode that
        !            38:      elements of a jump-table should have.
        !            39: 
        !            40: `CASE_VECTOR_PC_RELATIVE'
        !            41:      Define this macro if jump-tables should contain relative addresses.
        !            42: 
        !            43: `CASE_DROPS_THROUGH'
        !            44:      Define this if control falls through a `case' insn when the index
        !            45:      value is out of range.  This means the specified default-label is
        !            46:      actually ignored by the `case' insn proper.
        !            47: 
        !            48: `IMPLICIT_FIX_EXPR'
        !            49:      An alias for a tree code that should be used by default for conversion
        !            50:      of floating point values to fixed point.  Normally, `FIX_ROUND_EXPR'
        !            51:      is used.
        !            52: 
        !            53: `FIXUNS_TRUNC_LIKE_FIX_TRUNC'
        !            54:      Define this macro if the same instructions that convert a floating
        !            55:      point number to a signed fixed point number also convert validly to an
        !            56:      unsigned one.
        !            57: 
        !            58: `EASY_DIV_EXPR'
        !            59:      An alias for a tree code that is the easiest kind of division to
        !            60:      compile code for in the general case.  It may be `TRUNC_DIV_EXPR',
        !            61:      `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'.  These four
        !            62:      division operators differ in how they round the result to an integer. 
        !            63:      `EASY_DIV_EXPR' is used when it is permissible to use any of those
        !            64:      kinds of division and the choice should be made on the basis of
        !            65:      efficiency.
        !            66: 
        !            67: `DEFAULT_SIGNED_CHAR'
        !            68:      An expression whose value is 1 or 0, according to whether the type
        !            69:      `char' should be signed or unsigned by default.  The user can always
        !            70:      override this default with the options `-fsigned-char' and
        !            71:      `-funsigned-char'.
        !            72: 
        !            73: `SCCS_DIRECTIVE'
        !            74:      Define this if the preprocessor should ignore `#sccs' directives with
        !            75:      no error message.
        !            76: 
        !            77: `MOVE_MAX'
        !            78:      The maximum number of bytes that a single instruction can move quickly
        !            79:      from memory to memory.
        !            80: 
        !            81: `INT_TYPE_SIZE'
        !            82:      A C expression for the size in bits of the type `int' on the target
        !            83:      machine.
        !            84: 
        !            85: `SLOW_BYTE_ACCESS'
        !            86:      Define this macro as a C expression which is nonzero if accessing less
        !            87:      than a word of memory (i.e. a `char' or a `short') is slow (requires
        !            88:      more than one instruction).
        !            89: 
        !            90: `SLOW_ZERO_EXTEND'
        !            91:      Define this macro if zero-extension (of a `char' or `short' to an
        !            92:      `int') can be done faster if the destination is a register that is
        !            93:      known to be zero.
        !            94: 
        !            95:      If you define this macro, you must have instruction patterns that
        !            96:      recognize RTL structures like this:
        !            97: 
        !            98:           (set (strict-low-part (subreg:QI (reg:SI ...) 0)) ...)
        !            99: 
        !           100: 
        !           101:      and likewise for `HImode'.
        !           102: 
        !           103: `SHIFT_COUNT_TRUNCATED'
        !           104:      Define this macro if shift instructions ignore all but the lowest few
        !           105:      bits of the shift count.  It implies that a sign-extend or zero-extend
        !           106:      instruction for the shift count can be omitted.
        !           107: 
        !           108: `TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)'
        !           109:      A C expression which is nonzero if on this machine it is safe to
        !           110:      ``convert'' an integer of INPREC bits to one of OUTPREC bits (where
        !           111:      OUTPREC is smaller than INPREC) by merely operating on it as if it had
        !           112:      only OUTPREC bits.
        !           113: 
        !           114:      On many machines, this expression can be 1.
        !           115: 
        !           116: `NO_FUNCTION_CSE'
        !           117:      Define this macro if it is as good or better to call a constant
        !           118:      function address than to call an address kept in a register.
        !           119: 
        !           120: `STORE_FLAG_VALUE'
        !           121:      A C expression for the value stored by a store-flag instruction
        !           122:      (`sCOND') when the condition is true.  This is usually 1 or -1; it is
        !           123:      required to be an odd number.
        !           124: 
        !           125:      Do not define `STORE_FLAG_VALUE' if the machine has no store-flag
        !           126:      instructions.
        !           127: 
        !           128: `Pmode'
        !           129:      An alias for the machine mode for pointers.  Normally the definition
        !           130:      can be
        !           131: 
        !           132:           #define Pmode SImode
        !           133: 
        !           134: 
        !           135: `FUNCTION_MODE'
        !           136:      An alias for the machine mode used for memory references to functions
        !           137:      being called, in `call' RTL expressions.  On most machines this should
        !           138:      be `QImode'.
        !           139: 
        !           140: `CONST_COST (X, CODE)'
        !           141:      A part of a C `switch' statement that describes the relative costs of
        !           142:      constant RTL expressions.  It must contain `case' labels for
        !           143:      expression codes `const_int', `const', `symbol_ref', `label_ref' and
        !           144:      `const_double'.  Each case must ultimately reach a `return' statement
        !           145:      to return the relative cost of the use of that kind of constant value
        !           146:      in an expression.  The cost may depend on the precise value of the
        !           147:      constant, which is available for examination in X.
        !           148: 
        !           149:      CODE is the expression code---redundant, since it can be obtained with
        !           150:      `GET_CODE (X)'.
        !           151: 
        !           152: `DOLLARS_IN_IDENTIFIERS'
        !           153:      Define this if the character `$' should be allowed in identifier names.
        !           154: 
        !           155: 
        !           156: File: internals,  Node: Condition Code,  Next: Assembler Format,  Prev: Misc,  Up: Machine Macros
        !           157: 
        !           158: Condition Code Information
        !           159: ==========================
        !           160: 
        !           161: The file `conditions.h' defines a variable `cc_status' to describe how the
        !           162: condition code was computed (in case the interpretation of the condition
        !           163: code depends on the instruction that it was set by).  This variable
        !           164: contains the RTL expressions on which the condition code is currently
        !           165: based, and several standard flags.
        !           166: 
        !           167: Sometimes additional machine-specific flags must be defined in the machine
        !           168: description header file.  It can also add additional machine-specific
        !           169: information by defining `CC_STATUS_MDEP'.
        !           170: 
        !           171: `CC_STATUS_MDEP'
        !           172:      C code for a data type which is used for declaring the `mdep'
        !           173:      component of `cc_status'.  It defaults to `int'.
        !           174: 
        !           175: `CC_STATUS_MDEP_INIT'
        !           176:      A C expression for the initial value of the `mdep' field.  It defaults
        !           177:      to 0.
        !           178: 
        !           179: `NOTICE_UPDATE_CC (EXP)'
        !           180:      A C compound statement to set the components of `cc_status'
        !           181:      appropriately for an insn whose body is EXP.  It is this macro's
        !           182:      responsibility to recognize insns that set the condition code as a
        !           183:      byproduct of other activity as well as those that explicitly set
        !           184:      `(cc0)'.
        !           185: 
        !           186:      If there are insn that do not set the condition code but do alter
        !           187:      other machine registers, this macro must check to see whether they
        !           188:      invalidate the expressions that the condition code is recorded as
        !           189:      reflecting.  For example, on the 68000, insns that store in address
        !           190:      registers do not set the condition code, which means that usually
        !           191:      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns. 
        !           192:      But suppose that the previous insn set the condition code based on
        !           193:      location `a4@(102)' and the current insn stores a new value in `a4'. 
        !           194:      Although the condition code is not changed by this, it will no longer
        !           195:      be true that it reflects the contents of `a4@(102)'.  Therefore,
        !           196:      `NOTICE_UPDATE_CC' must alter `cc_status' in this case to say that
        !           197:      nothing is known about the condition code value.
        !           198: 
        !           199: 
        !           200: File: internals,  Node: Assembler Format,  Prev: Condition Code,  Up: Machine Macros
        !           201: 
        !           202: Output of Assembler Code
        !           203: ========================
        !           204: 
        !           205: `ASM_SPEC'
        !           206:      A C string constant that tells the GNU CC driver program options to
        !           207:      pass to the assembler.  It can also specify how to translate options
        !           208:      you give to GNU CC into options for GNU CC to pass to the assembler. 
        !           209:      See the file `tm-sun3.h' for an example of this.
        !           210: 
        !           211:      Do not define this macro if it does not need to do anything.
        !           212: 
        !           213: `LINK_SPEC'
        !           214:      A C string constant that tells the GNU CC driver program options to
        !           215:      pass to the linker.  It can also specify how to translate options you
        !           216:      give to GNU CC into options for GNU CC to pass to the linker.
        !           217: 
        !           218:      Do not define this macro if it does not need to do anything.
        !           219: 
        !           220: `ASM_FILE_START'
        !           221:      A C string constant for text to be output at the start of each
        !           222:      assembler output file.  Normally this is `"#NO_APP"', which is a
        !           223:      comment that has no effect on most assemblers but tells the GNU
        !           224:      assembler that it can save time by not checking for certain assembler
        !           225:      constructs.
        !           226: 
        !           227: `ASM_APP_ON'
        !           228:      A C string constant for text to be output before each `asm' statement
        !           229:      or group of consecutive ones.  Normally this is `"#APP"', which is a
        !           230:      comment that has no effect on most assemblers but tells the GNU
        !           231:      assembler that it must check the lines that follow for all valid
        !           232:      assembler constructs.
        !           233: 
        !           234: `ASM_APP_OFF'
        !           235:      A C string constant for text to be output after each `asm' statement
        !           236:      or group of consecutive ones.  Normally this is `"#NO_APP"', which
        !           237:      tells the GNU assembler to resume making the time-saving assumptions
        !           238:      that are valid for ordinary compiler output.
        !           239: 
        !           240: `TEXT_SECTION_ASM_OP'
        !           241:      A C string constant for the assembler operation that should precede
        !           242:      instructions and read-only data.  Normally `".text"' is right.
        !           243: 
        !           244: `DATA_SECTION_ASM_OP'
        !           245:      A C string constant for the assembler operation to identify the
        !           246:      following data as writable initialized data.  Normally `".data"' is
        !           247:      right.
        !           248: 
        !           249: `REGISTER_NAMES'
        !           250:      A C initializer containing the assembler's names for the machine
        !           251:      registers, each one as a C string constant.  This is what translates
        !           252:      register numbers in the compiler into assembler language.
        !           253: 
        !           254: `DBX_REGISTER_NUMBER (REGNO)'
        !           255:      A C expression that returns the DBX register number for the compiler
        !           256:      register number REGNO.  In simple cases, the value of this expression
        !           257:      may be REGNO itself.  But sometimes there are some registers that the
        !           258:      compiler knows about and DBX does not, or vice versa.  In such cases,
        !           259:      some register may need to have one number in the compiler and another
        !           260:      for DBX.
        !           261: 
        !           262: `DBX_NO_XREFS'
        !           263:      Define this macro if DBX on your system does not support the construct
        !           264:      `xsTAGNAME'.  On some systems, this construct is used to describe a
        !           265:      forward reference to a structure named TAGNAME.  On other systems,
        !           266:      this construct is not supported at all.
        !           267: 
        !           268: `DBX_CONTIN_LENGTH'
        !           269:      A symbol name in DBX-format debugging information is normally
        !           270:      continued (split into two separate `.stabs' directives) when it
        !           271:      exceeds a certain length (by default, 80 characters).  On some
        !           272:      operating systems, DBX requires this splitting; on others, splitting
        !           273:      must not be done.  You can inhibit splitting by defining this macro
        !           274:      with the value zero.  You can override the default splitting-length by
        !           275:      defining this macro as an expression for the length you desire.
        !           276: 
        !           277: `DBX_CONTIN_CHAR'
        !           278:      Normally continuation is indicated by adding a `\' character to the
        !           279:      end of a `.stabs' string when a continuation follows.  To use a
        !           280:      different character instead, define this macro as a character constant
        !           281:      for the character you want to use.  Do not define this macro if
        !           282:      backslash is correct for your system.
        !           283: 
        !           284: `ASM_OUTPUT_LABEL (FILE, NAME)'
        !           285:      A C statement (sans semicolon) to output to the stdio stream FILE the
        !           286:      assembler definition of a label named NAME.  Use the expression
        !           287:      `assemble_name (FILE, NAME)' to output the name itself; before and
        !           288:      after that, output the additional assembler syntax for defining the
        !           289:      name, and a newline.
        !           290: 
        !           291: `ASM_DECLARE_FUNCTION_NAME (FILE, NAME)'
        !           292:      A C statement (sans semicolon) to output to the stdio stream FILE any
        !           293:      text necessary for declaring the name of a function which is being
        !           294:      defined.  This macro is responsible for outputting the label
        !           295:      definition (perhaps using `ASM_OUTPUT_LABEL').
        !           296: 
        !           297:      If this macro is not defined, then the function name is defined in the
        !           298:      usual manner as a label (by means of `ASM_OUTPUT_LABEL').
        !           299: 
        !           300: `ASM_GLOBALIZE_LABEL (FILE, NAME)'
        !           301:      A C statement (sans semicolon) to output to the stdio stream FILE some
        !           302:      commands that will make the label NAME global; that is, available for
        !           303:      reference from other files.  Use the expression `assemble_name (FILE,
        !           304:      NAME)' to output the name itself; before and after that, output the
        !           305:      additional assembler syntax for making that name global, and a newline.
        !           306: 
        !           307: `ASM_OUTPUT_EXTERNAL (FILE, NAME)'
        !           308:      A C statement (sans semicolon) to output to the stdio stream FILE any
        !           309:      text necessary for declaring the name of an external symbol which is
        !           310:      referenced in this compilation but not defined.
        !           311: 
        !           312:      This macro need not be defined if it does not need to output anything.
        !           313:       The GNU assembler and most Unix assemblers don't require anything.
        !           314: 
        !           315: `ASM_OUTPUT_LABELREF (FILE, NAME)'
        !           316:      A C statement to output to the stdio stream FILE a reference in
        !           317:      assembler syntax to a label named NAME.  The character `_' should be
        !           318:      added to the front of the name, if that is customary on your operating
        !           319:      system, as it is in most Berkeley Unix systems.  This macro is used in
        !           320:      `assemble_name'.
        !           321: 
        !           322: `ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)'
        !           323:      A C statement to output to the stdio stream FILE a label whose name is
        !           324:      made from the string PREFIX and the number NUM.  These labels are used
        !           325:      for internal purposes, and there is no reason for them to appear in
        !           326:      the symbol table of the object file.  On many systems, the letter `L'
        !           327:      at the beginning of a label has this effect.  The usual definition of
        !           328:      this macro is as follows:
        !           329: 
        !           330:           fprintf (FILE, "L%s%d:\n", PREFIX, NUM)
        !           331: 
        !           332: 
        !           333: `ASM_OUTPUT_CASE_LABEL (FILE, PREFIX, NUM, TABLE)'
        !           334:      Define this if the label before a jump-table needs to be output
        !           335:      specially.  The first three arguments are the same as for
        !           336:      `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the jump-table
        !           337:      which follows (a `jump_insn' containing an `addr_vec' or
        !           338:      `addr_diff_vec').
        !           339: 
        !           340:      This feature is used on system V to output a `swbeg' statement for the
        !           341:      table.
        !           342: 
        !           343:      If this macro is not defined, these labels are output with
        !           344:      `ASM_OUTPUT_INTERNAL_LABEL'.
        !           345: 
        !           346: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)'
        !           347:      A C expression to assign to OUTVAR (which is a variable of type `char
        !           348:      *') a newly allocated string made from the string NAME and the number
        !           349:      NUMBER, with some suitable punctuation added.  Use `alloca' to get
        !           350:      space for the string.
        !           351: 
        !           352:      This string will be used as the argument to `ASM_OUTPUT_LABELREF' to
        !           353:      produce an assembler label for an internal static variable whose name
        !           354:      is NAME.  Therefore, the string must be such as to result in valid
        !           355:      assembler code.  The argument NUMBER is different each time this macro
        !           356:      is executed; it prevents conflicts between similarly-named internal
        !           357:      static variables in different scopes.
        !           358: 
        !           359:      Ideally this string should not be a valid C identifier, to prevent any
        !           360:      conflict with the user's own symbols.  Most assemblers allow periods
        !           361:      or percent signs in assembler symbols; putting at least one of these
        !           362:      between the name and the number will suffice.
        !           363: 
        !           364: `ASM_OUTPUT_ADDR_DIFF_ELT (FILE, VALUE, REL)'
        !           365:      This macro should be provided on machines where the addresses in a
        !           366:      dispatch table are relative to the table's own address.
        !           367: 
        !           368:      The definition should be a C statement to output to the stdio stream
        !           369:      FILE an assembler pseudo-instruction to generate a difference between
        !           370:      two labels.  VALUE and REL are the numbers of two internal labels. 
        !           371:      The definitions of these labels are output using
        !           372:      `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in the same way
        !           373:      here.  For example,
        !           374: 
        !           375:           fprintf (FILE, "\t.word L%d-L%d\n",
        !           376:                    VALUE, REL)
        !           377: 
        !           378: 
        !           379: `ASM_OUTPUT_ADDR_VEC_ELT (FILE, VALUE)'
        !           380:      This macro should be provided on machines where the addresses in a
        !           381:      dispatch table are absolute.
        !           382: 
        !           383:      The definition should be a C statement to output to the stdio stream
        !           384:      FILE an assembler pseudo-instruction to generate a reference to a
        !           385:      label.  VALUE is the number of an internal label whose definition is
        !           386:      output using `ASM_OUTPUT_INTERNAL_LABEL'.  For example,
        !           387: 
        !           388:           fprintf (FILE, "\t.word L%d\n", VALUE)
        !           389: 
        !           390: 
        !           391: `ASM_OUTPUT_DOUBLE (FILE, VALUE)'
        !           392:      A C statement to output to the stdio stream FILE an assembler
        !           393:      instruction to assemble a `double' constant whose value is VALUE. 
        !           394:      VALUE will be a C expression of type `double'.
        !           395: 
        !           396: `ASM_OUTPUT_FLOAT (FILE, VALUE)'
        !           397:      A C statement to output to the stdio stream FILE an assembler
        !           398:      instruction to assemble a `float' constant whose value is VALUE. 
        !           399:      VALUE will be a C expression of type `float'.
        !           400: 
        !           401: `ASM_OUTPUT_INT (FILE, EXP)'
        !           402: `ASM_OUTPUT_SHORT (FILE, EXP)'
        !           403: `ASM_OUTPUT_CHAR (FILE, EXP)'
        !           404:      A C statement to output to the stdio stream FILE an assembler
        !           405:      instruction to assemble a `int', `short' or `char' constant whose
        !           406:      value is VALUE.  The argument EXP will be an RTL expression which
        !           407:      represents a constant value.  Use `output_addr_const (EXP)' to output
        !           408:      this value as an assembler expression.
        !           409: 
        !           410: `ASM_OUTPUT_BYTE (FILE, VALUE)'
        !           411:      A C statement to output to the stdio stream FILE an assembler
        !           412:      instruction to assemble a single byte containing the number VALUE.
        !           413: 
        !           414: `ASM_OUTPUT_ASCII (FILE, PTR, LEN)'
        !           415:      A C statement to output to the stdio stream FILE an assembler
        !           416:      instruction to assemble a string constant containing the LEN bytes at
        !           417:      PTR.  PTR will be a C expression of type `char *' and LEN a C
        !           418:      expression of type `int'.
        !           419: 
        !           420:      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
        !           421:      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
        !           422: 
        !           423: `ASM_OUTPUT_SKIP (FILE, NBYTES)'
        !           424:      A C statement to output to the stdio stream FILE an assembler
        !           425:      instruction to advance the location counter by NBYTES bytes.  NBYTES
        !           426:      will be a C expression of type `int'.
        !           427: 
        !           428: `ASM_OUTPUT_ALIGN (FILE, POWER)'
        !           429:      A C statement to output to the stdio stream FILE an assembler
        !           430:      instruction to advance the location counter to a multiple of 2 to the
        !           431:      POWER bytes.  POWER will be a C expression of type `int'.
        !           432: 
        !           433: `ASM_OUTPUT_COMMON (FILE, NAME, SIZE)'
        !           434:      A C statement (sans semicolon) to output to the stdio stream FILE the
        !           435:      assembler definition of a common-label named NAME whose size is SIZE
        !           436:      bytes.  Use the expression `assemble_name (FILE, NAME)' to output the
        !           437:      name itself; before and after that, output the additional assembler
        !           438:      syntax for defining the name, and a newline.
        !           439: 
        !           440:      This macro controls how the assembler definitions of uninitialized
        !           441:      global variables are output.
        !           442: 
        !           443: `ASM_OUTPUT_LOCAL (FILE, NAME, SIZE)'
        !           444:      A C statement (sans semicolon) to output to the stdio stream FILE the
        !           445:      assembler definition of a local-common-label named NAME whose size is
        !           446:      SIZE bytes.  Use the expression `assemble_name (FILE, NAME)' to output
        !           447:      the name itself; before and after that, output the additional
        !           448:      assembler syntax for defining the name, and a newline.
        !           449: 
        !           450:      This macro controls how the assembler definitions of uninitialized
        !           451:      static variables are output.
        !           452: 
        !           453: `TARGET_BELL'
        !           454:      A C constant expression for the integer value for escape sequence `\a'.
        !           455: 
        !           456: `TARGET_BS'
        !           457: `TARGET_TAB'
        !           458: `TARGET_NEWLINE'
        !           459:      C constant expressions for the integer values for escape sequences
        !           460:      `\b', `\t' and `\n'.
        !           461: 
        !           462: `TARGET_VT'
        !           463: `TARGET_FF'
        !           464: `TARGET_CR'
        !           465:      C constant expressions for the integer values for escape sequences
        !           466:      `\v', `\f' and `\r'.
        !           467: 
        !           468: `ASM_OUTPUT_OPCODE (FILE, PTR)'
        !           469:      Define this macro if you are using an unusual assembler that requires
        !           470:      different names for the machine instructions.
        !           471: 
        !           472:      The definition is a C statement or statements which output an
        !           473:      assembler instruction opcode to the stdio stream FILE.  The
        !           474:      macro-operand PTR is a variable of type `char *' which points to the
        !           475:      opcode name in its ``internal'' form---the form that is written in the
        !           476:      machine description.  The definition should output the opcode name to
        !           477:      FILE, performing any translation you desire, and increment the
        !           478:      variABLE PTR to point at the end of the opcode so that it will not be
        !           479:      output twice.
        !           480: 
        !           481:      In fact, your macro definition may process less than the entire opcode
        !           482:      name, or more than the opcode name; but if you want to process text
        !           483:      that includes `%'-sequences to substitute operands, you must take care
        !           484:      of the substitution yourself.  Just be sure to increment PTR over
        !           485:      whatever text should not be output normally.
        !           486: 
        !           487:      If the macro definition does nothing, the instruction is output in the
        !           488:      usual way.
        !           489: 
        !           490: `PRINT_OPERAND (FILE, X, CODE)'
        !           491:      A C compound statement to output to stdio stream FILE the assembler
        !           492:      syntax for an instruction operand X.  X is an RTL expression.
        !           493: 
        !           494:      CODE is a value that can be used to specify one of several ways of
        !           495:      printing the operand.  It is used when identical operands must be
        !           496:      printed differently depending on the context.  CODE comes from the `%'
        !           497:      specification that was used to request printing of the operand.  If
        !           498:      the specification was just `%DIGIT' then CODE is 0; if the
        !           499:      specification was `%LTR DIGIT' then CODE is the ASCII code for LTR.
        !           500: 
        !           501:      If X is a register, this macro should print the register's name.  The
        !           502:      names can be found in an array `reg_names' whose type is `char *[]'. 
        !           503:      `reg_names' is initialized from `REGISTER_NAMES'.
        !           504: 
        !           505:      When the machine description has a specification `%PUNCT' (a `%'
        !           506:      followed by a punctuation character), this macro is called with a null
        !           507:      pointer for X and the punctuation character for CODE.
        !           508: 
        !           509: `PRINT_OPERAND_ADDRESS (FILE, X)'
        !           510:      A C compound statement to output to stdio stream FILE the assembler
        !           511:      syntax for an instruction operand that is a memory reference whose
        !           512:      address is X.  X is an RTL expression.
        !           513: 
        !           514: `ASM_OPEN_PAREN'
        !           515: `ASM_CLOSE_PAREN'
        !           516:      These macros are defined as C string constant, describing the syntax
        !           517:      in the assembler for grouping arithmetic expressions.  The following
        !           518:      definitions are correct for most assemblers:
        !           519: 
        !           520:           #define ASM_OPEN_PAREN "("
        !           521:           #define ASM_CLOSE_PAREN ")"
        !           522: 
        !           523: 
        !           524: 
        !           525: File: internals,  Node: Config,  Prev: Machine Macros,  Up: Top
        !           526: 
        !           527: The Configuration File
        !           528: **********************
        !           529: 
        !           530: The configuration file `config-MACHINE.h' contains macro definitions that
        !           531: describe the machine and system on which the compiler is running.  Most of
        !           532: the values in it are actually the same on all machines that GNU CC runs on,
        !           533: so most all configuration files are identical.  But there are some macros
        !           534: that vary:
        !           535: 
        !           536: `FAILURE_EXIT_CODE'
        !           537:      A C expression for the status code to be returned when the compiler
        !           538:      exits after serious errors.
        !           539: 
        !           540: `SUCCESS_EXIT_CODE'
        !           541:      A C expression for the status code to be returned when the compiler
        !           542:      exits without serious errors.
        !           543: 
        !           544: 

unix.superglobalmegacorp.com

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