Annotation of gcc/gcc.info-22, revision 1.1.1.3

1.1.1.3 ! root        1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1       root        2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
1.1.1.3 ! root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation,
        !            10: Inc.
1.1       root       11: 
                     12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
                     15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.3 ! root       18: that the sections entitled "GNU General Public License," "Funding for
        !            19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
        !            20: included exactly as in the original, and provided that the entire
        !            21: resulting derived work is distributed under the terms of a permission
        !            22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
                     26: versions, except that the sections entitled "GNU General Public
1.1.1.3 ! root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
        !            28: `Look And Feel'", and this permission notice, may be included in
        !            29: translations approved by the Free Software Foundation instead of in the
        !            30: original English.
        !            31: 
        !            32: 
        !            33: File: gcc.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
        !            34: 
        !            35: How Initialization Functions Are Handled
        !            36: ----------------------------------------
        !            37: 
        !            38:    The compiled code for certain languages includes "constructors"
        !            39: (also called "initialization routines")--functions to initialize data
        !            40: in the program when the program is started.  These functions need to be
        !            41: called before the program is "started"--that is to say, before `main'
        !            42: is called.
        !            43: 
        !            44:    Compiling some languages generates "destructors" (also called
        !            45: "termination routines") that should be called when the program
        !            46: terminates.
        !            47: 
        !            48:    To make the initialization and termination functions work, the
        !            49: compiler must output something in the assembler code to cause those
        !            50: functions to be called at the appropriate time.  When you port the
        !            51: compiler to a new system, you need to specify how to do this.
        !            52: 
        !            53:    There are two major ways that GCC currently supports the execution of
        !            54: initialization and termination functions.  Each way has two variants.
        !            55: Much of the structure is common to all four variations.
        !            56: 
        !            57:    The linker must build two lists of these functions--a list of
        !            58: initialization functions, called `__CTOR_LIST__', and a list of
        !            59: termination functions, called `__DTOR_LIST__'.
        !            60: 
        !            61:    Each list always begins with an ignored function pointer (which may
        !            62: hold 0, -1, or a count of the function pointers after it, depending on
        !            63: the environment).  This is followed by a series of zero or more function
        !            64: pointers to constructors (or destructors), followed by a function
        !            65: pointer containing zero.
        !            66: 
        !            67:    Depending on the operating system and its executable file format,
        !            68: either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
        !            69: time and exit time.  Constructors are called in forward order of the
        !            70: list; destructors in reverse order.
        !            71: 
        !            72:    The best way to handle static constructors works only for object file
        !            73: formats which provide arbitrarily-named sections.  A section is set
        !            74: aside for a list of constructors, and another for a list of destructors.
        !            75: Traditionally these are called `.ctors' and `.dtors'.  Each object file
        !            76: that defines an initialization function also puts a word in the
        !            77: constructor section to point to that function.  The linker accumulates
        !            78: all these words into one contiguous `.ctors' section.  Termination
        !            79: functions are handled similarly.
        !            80: 
        !            81:    To use this method, you need appropriate definitions of the macros
        !            82: `ASM_OUTPUT_CONSTRUCTOR' and `ASM_OUTPUT_DESTRUCTOR'.  Usually you can
        !            83: get them by including `svr4.h'.
        !            84: 
        !            85:    When arbitrary sections are available, there are two variants,
        !            86: depending upon how the code in `crtstuff.c' is called.  On systems that
        !            87: support an "init" section which is executed at program startup, parts
        !            88: of `crtstuff.c' are compiled into that section.  The program is linked
        !            89: by the `gcc' driver like this:
        !            90: 
        !            91:      ld -o OUTPUT_FILE crtbegin.o ... crtend.o -lgcc
        !            92: 
        !            93:    The head of a function (`__do_global_ctors') appears in the init
        !            94: section of `crtbegin.o'; the remainder of the function appears in the
        !            95: init section of `crtend.o'.  The linker will pull these two parts of
        !            96: the section together, making a whole function.  If any of the user's
        !            97: object files linked into the middle of it contribute code, then that
        !            98: code will be executed as part of the body of `__do_global_ctors'.
        !            99: 
        !           100:    To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
        !           101: properly.
        !           102: 
        !           103:    If no init section is available, do not define
        !           104: `INIT_SECTION_ASM_OP'.  Then `__do_global_ctors' is built into the text
        !           105: section like all other functions, and resides in `libgcc.a'.  When GCC
        !           106: compiles any function called `main', it inserts a procedure call to
        !           107: `__main' as the first executable code after the function prologue.  The
        !           108: `__main' function, also defined in `libgcc2.c', simply calls
        !           109: `__do_global_ctors'.
        !           110: 
        !           111:    In file formats that don't support arbitrary sections, there are
        !           112: again two variants.  In the simplest variant, the GNU linker (GNU `ld')
        !           113: and an `a.out' format must be used.  In this case,
        !           114: `ASM_OUTPUT_CONSTRUCTOR' is defined to produce a `.stabs' entry of type
        !           115: `N_SETT', referencing the name `__CTOR_LIST__', and with the address of
        !           116: the void function containing the initialization code as its value.  The
        !           117: GNU linker recognizes this as a request to add the value to a "set";
        !           118: the values are accumulated, and are eventually placed in the executable
        !           119: as a vector in the format described above, with a leading (ignored)
        !           120: count and a trailing zero element.  `ASM_OUTPUT_DESTRUCTOR' is handled
        !           121: similarly.  Since no init section is available, the absence of
        !           122: `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
        !           123: as above, starting the initialization process.
        !           124: 
        !           125:    The last variant uses neither arbitrary sections nor the GNU linker.
        !           126: This is preferable when you want to do dynamic linking and when using
        !           127: file formats which the GNU linker does not support, such as `ECOFF'.  In
        !           128: this case, `ASM_OUTPUT_CONSTRUCTOR' does not produce an `N_SETT'
        !           129: symbol; initialization and termination functions are recognized simply
        !           130: by their names.  This requires an extra program in the linkage step,
        !           131: called `collect2'.  This program pretends to be the linker, for use
        !           132: with GNU CC; it does its job by running the ordinary linker, but also
        !           133: arranges to include the vectors of initialization and termination
        !           134: functions.  These functions are called via `__main' as described above.
        !           135: 
        !           136:    Choosing among these configuration options has been simplified by a
        !           137: set of operating-system-dependent files in the `config' subdirectory.
        !           138: These files define all of the relevant parameters.  Usually it is
        !           139: sufficient to include one into your specific machine-dependent
        !           140: configuration file.  These files are:
        !           141: 
        !           142: `aoutos.h'
        !           143:      For operating systems using the `a.out' format.
        !           144: 
        !           145: `next.h'
        !           146:      For operating systems using the `MachO' format.
        !           147: 
        !           148: `svr3.h'
        !           149:      For System V Release 3 and similar systems using `COFF' format.
        !           150: 
        !           151: `svr4.h'
        !           152:      For System V Release 4 and similar systems using `ELF' format.
        !           153: 
        !           154: `vms.h'
        !           155:      For the VMS operating system.
        !           156: 
        !           157:    The following section describes the specific macros that control and
        !           158: customize the handling of initialization and termination functions.
        !           159: 
        !           160: 
        !           161: File: gcc.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
        !           162: 
        !           163: Macros Controlling Initialization Routines
        !           164: ------------------------------------------
        !           165: 
        !           166:    Here are the macros that control how the compiler handles
        !           167: initialization and termination functions:
        !           168: 
        !           169: `INIT_SECTION_ASM_OP'
        !           170:      If defined, a C string constant for the assembler operation to
        !           171:      identify the following data as initialization code.  If not
        !           172:      defined, GNU CC will assume such a section does not exist.  When
        !           173:      you are using special sections for initialization and termination
        !           174:      functions, this macro also controls how `crtstuff.c' and
        !           175:      `libgcc2.c' arrange to run the initialization functions.
        !           176: 
        !           177: `HAS_INIT_SECTION'
        !           178:      If defined, `main' will not call `__main' as described above.
        !           179:      This macro should be defined for systems that control the contents
        !           180:      of the init section on a symbol-by-symbol basis, such as OSF/1,
        !           181:      and should not be defined explicitly for systems that support
        !           182:      `INIT_SECTION_ASM_OP'.
        !           183: 
        !           184: `INVOKE__main'
        !           185:      If defined, `main' will call `__main' despite the presence of
        !           186:      `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
        !           187:      where the init section is not actually run automatically, but is
        !           188:      still useful for collecting the lists of constructors and
        !           189:      destructors.
        !           190: 
        !           191: `ASM_OUTPUT_CONSTRUCTOR (STREAM, NAME)'
        !           192:      Define this macro as a C statement to output on the stream STREAM
        !           193:      the assembler code to arrange to call the function named NAME at
        !           194:      initialization time.
        !           195: 
        !           196:      Assume that NAME is the name of a C function generated
        !           197:      automatically by the compiler.  This function takes no arguments.
        !           198:      Use the function `assemble_name' to output the name NAME; this
        !           199:      performs any system-specific syntactic transformations such as
        !           200:      adding an underscore.
        !           201: 
        !           202:      If you don't define this macro, nothing special is output to
        !           203:      arrange to call the function.  This is correct when the function
        !           204:      will be called in some other manner--for example, by means of the
        !           205:      `collect2' program, which looks through the symbol table to find
        !           206:      these functions by their names.
        !           207: 
        !           208: `ASM_OUTPUT_DESTRUCTOR (STREAM, NAME)'
        !           209:      This is like `ASM_OUTPUT_CONSTRUCTOR' but used for termination
        !           210:      functions rather than initialization functions.
        !           211: 
        !           212:    If your system uses `collect2' as the means of processing
        !           213: constructors, then that program normally uses `nm' to scan an object
        !           214: file for constructor functions to be called.  On certain kinds of
        !           215: systems, you can define these macros to make `collect2' work faster
        !           216: (and, in some cases, make it work at all):
        !           217: 
        !           218: `OBJECT_FORMAT_COFF'
        !           219:      Define this macro if the system uses COFF (Common Object File
        !           220:      Format) object files, so that `collect2' can assume this format
        !           221:      and scan object files directly for dynamic constructor/destructor
        !           222:      functions.
        !           223: 
        !           224: `OBJECT_FORMAT_ROSE'
        !           225:      Define this macro if the system uses ROSE format object files, so
        !           226:      that `collect2' can assume this format and scan object files
        !           227:      directly for dynamic constructor/destructor functions.
        !           228: 
        !           229: `REAL_NM_FILE_NAME'
        !           230:      Define this macro as a C string constant containing the file name
        !           231:      to use to execute `nm'.  The default is to search the path
        !           232:      normally for `nm'.
        !           233: 
        !           234:    These macros are effective only in a native compiler; `collect2' as
        !           235: part of a cross compiler always uses `nm' for the target machine.
        !           236: 
        !           237: 
        !           238: File: gcc.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
        !           239: 
        !           240: Output of Assembler Instructions
        !           241: --------------------------------
        !           242: 
        !           243:    This describes assembler instruction output.
        !           244: 
        !           245: `REGISTER_NAMES'
        !           246:      A C initializer containing the assembler's names for the machine
        !           247:      registers, each one as a C string constant.  This is what
        !           248:      translates register numbers in the compiler into assembler
        !           249:      language.
        !           250: 
        !           251: `ADDITIONAL_REGISTER_NAMES'
        !           252:      If defined, a C initializer for an array of structures containing
        !           253:      a name and a register number.  This macro defines additional names
        !           254:      for hard registers, thus allowing the `asm' option in declarations
        !           255:      to refer to registers using alternate names.
        !           256: 
        !           257: `ASM_OUTPUT_OPCODE (STREAM, PTR)'
        !           258:      Define this macro if you are using an unusual assembler that
        !           259:      requires different names for the machine instructions.
        !           260: 
        !           261:      The definition is a C statement or statements which output an
        !           262:      assembler instruction opcode to the stdio stream STREAM.  The
        !           263:      macro-operand PTR is a variable of type `char *' which points to
        !           264:      the opcode name in its "internal" form--the form that is written
        !           265:      in the machine description.  The definition should output the
        !           266:      opcode name to STREAM, performing any translation you desire, and
        !           267:      increment the variable PTR to point at the end of the opcode so
        !           268:      that it will not be output twice.
        !           269: 
        !           270:      In fact, your macro definition may process less than the entire
        !           271:      opcode name, or more than the opcode name; but if you want to
        !           272:      process text that includes `%'-sequences to substitute operands,
        !           273:      you must take care of the substitution yourself.  Just be sure to
        !           274:      increment PTR over whatever text should not be output normally.
        !           275: 
        !           276:      If you need to look at the operand values, they can be found as the
        !           277:      elements of `recog_operand'.
        !           278: 
        !           279:      If the macro definition does nothing, the instruction is output in
        !           280:      the usual way.
        !           281: 
        !           282: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)'
        !           283:      If defined, a C statement to be executed just prior to the output
        !           284:      of assembler code for INSN, to modify the extracted operands so
        !           285:      they will be output differently.
        !           286: 
        !           287:      Here the argument OPVEC is the vector containing the operands
        !           288:      extracted from INSN, and NOPERANDS is the number of elements of
        !           289:      the vector which contain meaningful data for this insn.  The
        !           290:      contents of this vector are what will be used to convert the insn
        !           291:      template into assembler code, so you can change the assembler
        !           292:      output by changing the contents of the vector.
        !           293: 
        !           294:      This macro is useful when various assembler syntaxes share a single
        !           295:      file of instruction patterns; by defining this macro differently,
        !           296:      you can cause a large class of instructions to be output
        !           297:      differently (such as with rearranged operands).  Naturally,
        !           298:      variations in assembler syntax affecting individual insn patterns
        !           299:      ought to be handled by writing conditional output routines in
        !           300:      those patterns.
        !           301: 
        !           302:      If this macro is not defined, it is equivalent to a null statement.
        !           303: 
        !           304: `PRINT_OPERAND (STREAM, X, CODE)'
        !           305:      A C compound statement to output to stdio stream STREAM the
        !           306:      assembler syntax for an instruction operand X.  X is an RTL
        !           307:      expression.
        !           308: 
        !           309:      CODE is a value that can be used to specify one of several ways of
        !           310:      printing the operand.  It is used when identical operands must be
        !           311:      printed differently depending on the context.  CODE comes from the
        !           312:      `%' specification that was used to request printing of the
        !           313:      operand.  If the specification was just `%DIGIT' then CODE is 0;
        !           314:      if the specification was `%LTR DIGIT' then CODE is the ASCII code
        !           315:      for LTR.
        !           316: 
        !           317:      If X is a register, this macro should print the register's name.
        !           318:      The names can be found in an array `reg_names' whose type is `char
        !           319:      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
        !           320: 
        !           321:      When the machine description has a specification `%PUNCT' (a `%'
        !           322:      followed by a punctuation character), this macro is called with a
        !           323:      null pointer for X and the punctuation character for CODE.
        !           324: 
        !           325: `PRINT_OPERAND_PUNCT_VALID_P (CODE)'
        !           326:      A C expression which evaluates to true if CODE is a valid
        !           327:      punctuation character for use in the `PRINT_OPERAND' macro.  If
        !           328:      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
        !           329:      punctuation characters (except for the standard one, `%') are used
        !           330:      in this way.
        !           331: 
        !           332: `PRINT_OPERAND_ADDRESS (STREAM, X)'
        !           333:      A C compound statement to output to stdio stream STREAM the
        !           334:      assembler syntax for an instruction operand that is a memory
        !           335:      reference whose address is X.  X is an RTL expression.
        !           336: 
        !           337:      On some machines, the syntax for a symbolic address depends on the
        !           338:      section that the address refers to.  On these machines, define the
        !           339:      macro `ENCODE_SECTION_INFO' to store the information into the
        !           340:      `symbol_ref', and then check for it here.  *Note Assembler
        !           341:      Format::.
        !           342: 
        !           343: `DBR_OUTPUT_SEQEND(FILE)'
        !           344:      A C statement, to be executed after all slot-filler instructions
        !           345:      have been output.  If necessary, call `dbr_sequence_length' to
        !           346:      determine the number of slots filled in a sequence (zero if not
        !           347:      currently outputting a sequence), to decide how many no-ops to
        !           348:      output, or whatever.
        !           349: 
        !           350:      Don't define this macro if it has nothing to do, but it is helpful
        !           351:      in reading assembly output if the extent of the delay sequence is
        !           352:      made explicit (e.g. with white space).
        !           353: 
        !           354:      Note that output routines for instructions with delay slots must be
        !           355:      prepared to deal with not being output as part of a sequence (i.e.
        !           356:      when the scheduling pass is not run, or when no slot fillers could
        !           357:      be found.)  The variable `final_sequence' is null when not
        !           358:      processing a sequence, otherwise it contains the `sequence' rtx
        !           359:      being output.
        !           360: 
        !           361: `REGISTER_PREFIX'
        !           362: `LOCAL_LABEL_PREFIX'
        !           363: `USER_LABEL_PREFIX'
        !           364: `IMMEDIATE_PREFIX'
        !           365:      If defined, C string expressions to be used for the `%R', `%L',
        !           366:      `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
        !           367:      are useful when a single `md' file must support multiple assembler
        !           368:      formats.  In that case, the various `tm.h' files can define these
        !           369:      macros differently.
        !           370: 
        !           371: `ASSEMBLER_DIALECT'
        !           372:      If your target supports multiple dialects of assembler language
        !           373:      (such as different opcodes), define this macro as a C expression
        !           374:      that gives the numeric index of the assembler langauge dialect to
        !           375:      use, with zero as the first variant.
        !           376: 
        !           377:      If this macro is defined, you may use
        !           378:      `{option0|option1|option2...}' constructs in the output templates
        !           379:      of patterns (*note Output Template::.) or in the first argument of
        !           380:      `asm_fprintf'.  This construct outputs `option0', `option1' or
        !           381:      `option2', etc., if the value of `ASSEMBLER_DIALECT' is zero, one
        !           382:      or two, etc.  Any special characters within these strings retain
        !           383:      their usual meaning.
        !           384: 
        !           385:      If you do not define this macro, the characters `{', `|' and `}'
        !           386:      do not have any special meaning when used in templates or operands
        !           387:      to `asm_fprintf'.
        !           388: 
        !           389:      Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
        !           390:      `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
        !           391:      variations in assemble language syntax with that mechanism.  Define
        !           392:      `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax if the
        !           393:      syntax variant are larger and involve such things as different
        !           394:      opcodes or operand order.
        !           395: 
        !           396: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)'
        !           397:      A C expression to output to STREAM some assembler code which will
        !           398:      push hard register number REGNO onto the stack.  The code need not
        !           399:      be optimal, since this macro is used only when profiling.
        !           400: 
        !           401: `ASM_OUTPUT_REG_POP (STREAM, REGNO)'
        !           402:      A C expression to output to STREAM some assembler code which will
        !           403:      pop hard register number REGNO off of the stack.  The code need
        !           404:      not be optimal, since this macro is used only when profiling.
        !           405: 
        !           406: 
        !           407: File: gcc.info,  Node: Dispatch Tables,  Next: Alignment Output,  Prev: Instruction Output,  Up: Assembler Format
        !           408: 
        !           409: Output of Dispatch Tables
        !           410: -------------------------
        !           411: 
        !           412:    This concerns dispatch tables.
        !           413: 
        !           414: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)'
        !           415:      This macro should be provided on machines where the addresses in a
        !           416:      dispatch table are relative to the table's own address.
        !           417: 
        !           418:      The definition should be a C statement to output to the stdio
        !           419:      stream STREAM an assembler pseudo-instruction to generate a
        !           420:      difference between two labels.  VALUE and REL are the numbers of
        !           421:      two internal labels.  The definitions of these labels are output
        !           422:      using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in the
        !           423:      same way here.  For example,
        !           424: 
        !           425:           fprintf (STREAM, "\t.word L%d-L%d\n",
        !           426:                    VALUE, REL)
        !           427: 
        !           428: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)'
        !           429:      This macro should be provided on machines where the addresses in a
        !           430:      dispatch table are absolute.
        !           431: 
        !           432:      The definition should be a C statement to output to the stdio
        !           433:      stream STREAM an assembler pseudo-instruction to generate a
        !           434:      reference to a label.  VALUE is the number of an internal label
        !           435:      whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'.  For
        !           436:      example,
        !           437: 
        !           438:           fprintf (STREAM, "\t.word L%d\n", VALUE)
        !           439: 
        !           440: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)'
        !           441:      Define this if the label before a jump-table needs to be output
        !           442:      specially.  The first three arguments are the same as for
        !           443:      `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the jump-table
        !           444:      which follows (a `jump_insn' containing an `addr_vec' or
        !           445:      `addr_diff_vec').
        !           446: 
        !           447:      This feature is used on system V to output a `swbeg' statement for
        !           448:      the table.
        !           449: 
        !           450:      If this macro is not defined, these labels are output with
        !           451:      `ASM_OUTPUT_INTERNAL_LABEL'.
        !           452: 
        !           453: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)'
        !           454:      Define this if something special must be output at the end of a
        !           455:      jump-table.  The definition should be a C statement to be executed
        !           456:      after the assembler code for the table is written.  It should write
        !           457:      the appropriate code to stdio stream STREAM.  The argument TABLE
        !           458:      is the jump-table insn, and NUM is the label-number of the
        !           459:      preceding label.
        !           460: 
        !           461:      If this macro is not defined, nothing special is output at the end
        !           462:      of the jump-table.
        !           463: 
        !           464: 
        !           465: File: gcc.info,  Node: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
        !           466: 
        !           467: Assembler Commands for Alignment
        !           468: --------------------------------
        !           469: 
        !           470:    This describes commands for alignment.
        !           471: 
        !           472: `ASM_OUTPUT_ALIGN_CODE (FILE)'
        !           473:      A C expression to output text to align the location counter in the
        !           474:      way that is desirable at a point in the code that is reached only
        !           475:      by jumping.
        !           476: 
        !           477:      This macro need not be defined if you don't want any special
        !           478:      alignment to be done at such a time.  Most machine descriptions do
        !           479:      not currently define the macro.
        !           480: 
        !           481: `ASM_OUTPUT_LOOP_ALIGN (FILE)'
        !           482:      A C expression to output text to align the location counter in the
        !           483:      way that is desirable at the beginning of a loop.
        !           484: 
        !           485:      This macro need not be defined if you don't want any special
        !           486:      alignment to be done at such a time.  Most machine descriptions do
        !           487:      not currently define the macro.
        !           488: 
        !           489: `ASM_OUTPUT_SKIP (STREAM, NBYTES)'
        !           490:      A C statement to output to the stdio stream STREAM an assembler
        !           491:      instruction to advance the location counter by NBYTES bytes.
        !           492:      Those bytes should be zero when loaded.  NBYTES will be a C
        !           493:      expression of type `int'.
        !           494: 
        !           495: `ASM_NO_SKIP_IN_TEXT'
        !           496:      Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
        !           497:      text section because it fails put zeros in the bytes that are
        !           498:      skipped.  This is true on many Unix systems, where the pseudo-op
        !           499:      to skip bytes produces no-op instructions rather than zeros when
        !           500:      used in the text section.
        !           501: 
        !           502: `ASM_OUTPUT_ALIGN (STREAM, POWER)'
        !           503:      A C statement to output to the stdio stream STREAM an assembler
        !           504:      command to advance the location counter to a multiple of 2 to the
        !           505:      POWER bytes.  POWER will be a C expression of type `int'.
        !           506: 
        !           507: 
        !           508: File: gcc.info,  Node: Debugging Info,  Next: Cross-compilation,  Prev: Assembler Format,  Up: Target Macros
        !           509: 
        !           510: Controlling Debugging Information Format
        !           511: ========================================
        !           512: 
        !           513:    This describes how to specify debugging information.
        !           514: 
        !           515: * Menu:
        !           516: 
        !           517: * All Debuggers::      Macros that affect all debugging formats uniformly.
        !           518: * DBX Options::        Macros enabling specific options in DBX format.
        !           519: * DBX Hooks::          Hook macros for varying DBX format.
        !           520: * File Names and DBX:: Macros controlling output of file names in DBX format.
        !           521: * SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
        !           522: 
        !           523: 
        !           524: File: gcc.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
        !           525: 
        !           526: Macros Affecting All Debugging Formats
        !           527: --------------------------------------
        !           528: 
        !           529:    These macros affect all debugging formats.
        !           530: 
        !           531: `DBX_REGISTER_NUMBER (REGNO)'
        !           532:      A C expression that returns the DBX register number for the
        !           533:      compiler register number REGNO.  In simple cases, the value of this
        !           534:      expression may be REGNO itself.  But sometimes there are some
        !           535:      registers that the compiler knows about and DBX does not, or vice
        !           536:      versa.  In such cases, some register may need to have one number in
        !           537:      the compiler and another for DBX.
        !           538: 
        !           539:      If two registers have consecutive numbers inside GNU CC, and they
        !           540:      can be used as a pair to hold a multiword value, then they *must*
        !           541:      have consecutive numbers after renumbering with
        !           542:      `DBX_REGISTER_NUMBER'.  Otherwise, debuggers will be unable to
        !           543:      access such a pair, because they expect register pairs to be
        !           544:      consecutive in their own numbering scheme.
        !           545: 
        !           546:      If you find yourself defining `DBX_REGISTER_NUMBER' in way that
        !           547:      does not preserve register pairs, then what you must do instead is
        !           548:      redefine the actual register numbering scheme.
        !           549: 
        !           550: `DEBUGGER_AUTO_OFFSET (X)'
        !           551:      A C expression that returns the integer offset value for an
        !           552:      automatic variable having address X (an RTL expression).  The
        !           553:      default computation assumes that X is based on the frame-pointer
        !           554:      and gives the offset from the frame-pointer.  This is required for
        !           555:      targets that produce debugging output for DBX or COFF-style
        !           556:      debugging output for SDB and allow the frame-pointer to be
        !           557:      eliminated when the `-g' options is used.
        !           558: 
        !           559: `DEBUGGER_ARG_OFFSET (OFFSET, X)'
        !           560:      A C expression that returns the integer offset value for an
        !           561:      argument having address X (an RTL expression).  The nominal offset
        !           562:      is OFFSET.
        !           563: 
        !           564: `PREFERRED_DEBUGGING_TYPE'
        !           565:      A C expression that returns the type of debugging output GNU CC
        !           566:      produces when the user specifies `-g' or `-ggdb'.  Define this if
        !           567:      you have arranged for GNU CC to support more than one format of
        !           568:      debugging output.  Currently, the allowable values are `DBX_DEBUG',
        !           569:      `SDB_DEBUG', `DWARF_DEBUG', and `XCOFF_DEBUG'.
        !           570: 
        !           571:      The value of this macro only affects the default debugging output;
        !           572:      the user can always get a specific type of output by using
        !           573:      `-gstabs', `-gcoff', `-gdwarf', or `-gxcoff'.
        !           574: 
        !           575: 
        !           576: File: gcc.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
        !           577: 
        !           578: Specific Options for DBX Output
        !           579: -------------------------------
        !           580: 
        !           581:    These are specific options for DBX output.
        !           582: 
        !           583: `DBX_DEBUGGING_INFO'
        !           584:      Define this macro if GNU CC should produce debugging output for DBX
        !           585:      in response to the `-g' option.
        !           586: 
        !           587: `XCOFF_DEBUGGING_INFO'
        !           588:      Define this macro if GNU CC should produce XCOFF format debugging
        !           589:      output in response to the `-g' option.  This is a variant of DBX
        !           590:      format.
        !           591: 
        !           592: `DEFAULT_GDB_EXTENSIONS'
        !           593:      Define this macro to control whether GNU CC should by default
        !           594:      generate GDB's extended version of DBX debugging information
        !           595:      (assuming DBX-format debugging information is enabled at all).  If
        !           596:      you don't define the macro, the default is 1: always generate the
        !           597:      extended information if there is any occasion to.
        !           598: 
        !           599: `DEBUG_SYMS_TEXT'
        !           600:      Define this macro if all `.stabs' commands should be output while
        !           601:      in the text section.
        !           602: 
        !           603: `ASM_STABS_OP'
        !           604:      A C string constant naming the assembler pseudo op to use instead
        !           605:      of `.stabs' to define an ordinary debugging symbol.  If you don't
        !           606:      define this macro, `.stabs' is used.  This macro applies only to
        !           607:      DBX debugging information format.
        !           608: 
        !           609: `ASM_STABD_OP'
        !           610:      A C string constant naming the assembler pseudo op to use instead
        !           611:      of `.stabd' to define a debugging symbol whose value is the current
        !           612:      location.  If you don't define this macro, `.stabd' is used.  This
        !           613:      macro applies only to DBX debugging information format.
        !           614: 
        !           615: `ASM_STABN_OP'
        !           616:      A C string constant naming the assembler pseudo op to use instead
        !           617:      of `.stabn' to define a debugging symbol with no name.  If you
        !           618:      don't define this macro, `.stabn' is used.  This macro applies
        !           619:      only to DBX debugging information format.
        !           620: 
        !           621: `DBX_NO_XREFS'
        !           622:      Define this macro if DBX on your system does not support the
        !           623:      construct `xsTAGNAME'.  On some systems, this construct is used to
        !           624:      describe a forward reference to a structure named TAGNAME.  On
        !           625:      other systems, this construct is not supported at all.
        !           626: 
        !           627: `DBX_CONTIN_LENGTH'
        !           628:      A symbol name in DBX-format debugging information is normally
        !           629:      continued (split into two separate `.stabs' directives) when it
        !           630:      exceeds a certain length (by default, 80 characters).  On some
        !           631:      operating systems, DBX requires this splitting; on others,
        !           632:      splitting must not be done.  You can inhibit splitting by defining
        !           633:      this macro with the value zero.  You can override the default
        !           634:      splitting-length by defining this macro as an expression for the
        !           635:      length you desire.
        !           636: 
        !           637: `DBX_CONTIN_CHAR'
        !           638:      Normally continuation is indicated by adding a `\' character to
        !           639:      the end of a `.stabs' string when a continuation follows.  To use
        !           640:      a different character instead, define this macro as a character
        !           641:      constant for the character you want to use.  Do not define this
        !           642:      macro if backslash is correct for your system.
        !           643: 
        !           644: `DBX_STATIC_STAB_DATA_SECTION'
        !           645:      Define this macro if it is necessary to go to the data section
        !           646:      before outputting the `.stabs' pseudo-op for a non-global static
        !           647:      variable.
        !           648: 
        !           649: `DBX_TYPE_DECL_STABS_CODE'
        !           650:      The value to use in the "code" field of the `.stabs' directive for
        !           651:      a typedef.  The default is `N_LSYM'.
        !           652: 
        !           653: `DBX_STATIC_CONST_VAR_CODE'
        !           654:      The value to use in the "code" field of the `.stabs' directive for
        !           655:      a static variable located in the text section.  DBX format does not
        !           656:      provide any "right" way to do this.  The default is `N_FUN'.
        !           657: 
        !           658: `DBX_REGPARM_STABS_CODE'
        !           659:      The value to use in the "code" field of the `.stabs' directive for
        !           660:      a parameter passed in registers.  DBX format does not provide any
        !           661:      "right" way to do this.  The default is `N_RSYM'.
        !           662: 
        !           663: `DBX_REGPARM_STABS_LETTER'
        !           664:      The letter to use in DBX symbol data to identify a symbol as a
        !           665:      parameter passed in registers.  DBX format does not customarily
        !           666:      provide any way to do this.  The default is `'P''.
        !           667: 
        !           668: `DBX_MEMPARM_STABS_LETTER'
        !           669:      The letter to use in DBX symbol data to identify a symbol as a
        !           670:      stack parameter.  The default is `'p''.
        !           671: 
        !           672: `DBX_FUNCTION_FIRST'
        !           673:      Define this macro if the DBX information for a function and its
        !           674:      arguments should precede the assembler code for the function.
        !           675:      Normally, in DBX format, the debugging information entirely
        !           676:      follows the assembler code.
        !           677: 
        !           678: `DBX_LBRAC_FIRST'
        !           679:      Define this macro if the `N_LBRAC' symbol for a block should
        !           680:      precede the debugging information for variables and functions
        !           681:      defined in that block.  Normally, in DBX format, the `N_LBRAC'
        !           682:      symbol comes first.
        !           683: 
        !           684: `DBX_BLOCKS_FUNCTION_RELATIVE'
        !           685:      Define this macro if the value of a symbol describing the scope of
        !           686:      a block (`N_LBRAC' or `N_RBRAC') should be relative to the start
        !           687:      of the enclosing function.  Normally, GNU C uses an absolute
        !           688:      address.
        !           689: 
        !           690: 
        !           691: File: gcc.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
        !           692: 
        !           693: Open-Ended Hooks for DBX Format
        !           694: -------------------------------
        !           695: 
        !           696:    These are hooks for DBX format.
        !           697: 
        !           698: `DBX_OUTPUT_LBRAC (STREAM, NAME)'
        !           699:      Define this macro to say how to output to STREAM the debugging
        !           700:      information for the start of a scope level for variable names.  The
        !           701:      argument NAME is the name of an assembler symbol (for use with
        !           702:      `assemble_name') whose value is the address where the scope begins.
        !           703: 
        !           704: `DBX_OUTPUT_RBRAC (STREAM, NAME)'
        !           705:      Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
        !           706: 
        !           707: `DBX_OUTPUT_ENUM (STREAM, TYPE)'
        !           708:      Define this macro if the target machine requires special handling
        !           709:      to output an enumeration type.  The definition should be a C
        !           710:      statement (sans semicolon) to output the appropriate information
        !           711:      to STREAM for the type TYPE.
        !           712: 
        !           713: `DBX_OUTPUT_FUNCTION_END (STREAM, FUNCTION)'
        !           714:      Define this macro if the target machine requires special output at
        !           715:      the end of the debugging information for a function.  The
        !           716:      definition should be a C statement (sans semicolon) to output the
        !           717:      appropriate information to STREAM.  FUNCTION is the
        !           718:      `FUNCTION_DECL' node for the function.
        !           719: 
        !           720: `DBX_OUTPUT_STANDARD_TYPES (SYMS)'
        !           721:      Define this macro if you need to control the order of output of the
        !           722:      standard data types at the beginning of compilation.  The argument
        !           723:      SYMS is a `tree' which is a chain of all the predefined global
        !           724:      symbols, including names of data types.
        !           725: 
        !           726:      Normally, DBX output starts with definitions of the types for
        !           727:      integers and characters, followed by all the other predefined
        !           728:      types of the particular language in no particular order.
        !           729: 
        !           730:      On some machines, it is necessary to output different particular
        !           731:      types first.  To do this, define `DBX_OUTPUT_STANDARD_TYPES' to
        !           732:      output those symbols in the necessary order.  Any predefined types
        !           733:      that you don't explicitly output will be output afterward in no
        !           734:      particular order.
        !           735: 
        !           736:      Be careful not to define this macro so that it works only for C.
        !           737:      There are no global variables to access most of the built-in
        !           738:      types, because another language may have another set of types.
        !           739:      The way to output a particular type is to look through SYMS to see
        !           740:      if you can find it.  Here is an example:
        !           741: 
        !           742:           {
        !           743:             tree decl;
        !           744:             for (decl = syms; decl; decl = TREE_CHAIN (decl))
        !           745:               if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
        !           746:                            "long int"))
        !           747:                 dbxout_symbol (decl);
        !           748:             ...
        !           749:           }
        !           750: 
        !           751:      This does nothing if the expected type does not exist.
        !           752: 
        !           753:      See the function `init_decl_processing' in `c-decl.c' to find the
        !           754:      names to use for all the built-in C types.
        !           755: 
        !           756:      Here is another way of finding a particular type:
        !           757: 
        !           758:           {
        !           759:             tree decl;
        !           760:             for (decl = syms; decl; decl = TREE_CHAIN (decl))
        !           761:               if (TREE_CODE (decl) == TYPE_DECL
        !           762:                   && (TREE_CODE (TREE_TYPE (decl))
        !           763:                       == INTEGER_CST)
        !           764:                   && TYPE_PRECISION (TREE_TYPE (decl)) == 16
        !           765:                   && TYPE_UNSIGNED (TREE_TYPE (decl)))
        !           766:           /* This must be `unsigned short'.  */
        !           767:                 dbxout_symbol (decl);
        !           768:             ...
        !           769:           }
        !           770: 
        !           771: 
        !           772: File: gcc.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
        !           773: 
        !           774: File Names in DBX Format
        !           775: ------------------------
        !           776: 
        !           777:    This describes file names in DBX format.
        !           778: 
        !           779: `DBX_WORKING_DIRECTORY'
        !           780:      Define this if DBX wants to have the current directory recorded in
        !           781:      each object file.
        !           782: 
        !           783:      Note that the working directory is always recorded if GDB
        !           784:      extensions are enabled.
        !           785: 
        !           786: `DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)'
        !           787:      A C statement to output DBX debugging information to the stdio
        !           788:      stream STREAM which indicates that file NAME is the main source
        !           789:      file--the file specified as the input file for compilation.  This
        !           790:      macro is called only once, at the beginning of compilation.
        !           791: 
        !           792:      This macro need not be defined if the standard form of output for
        !           793:      DBX debugging information is appropriate.
        !           794: 
        !           795: `DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (STREAM, NAME)'
        !           796:      A C statement to output DBX debugging information to the stdio
        !           797:      stream STREAM which indicates that the current directory during
        !           798:      compilation is named NAME.
        !           799: 
        !           800:      This macro need not be defined if the standard form of output for
        !           801:      DBX debugging information is appropriate.
        !           802: 
        !           803: `DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)'
        !           804:      A C statement to output DBX debugging information at the end of
        !           805:      compilation of the main source file NAME.
        !           806: 
        !           807:      If you don't define this macro, nothing special is output at the
        !           808:      end of compilation, which is correct for most machines.
        !           809: 
        !           810: `DBX_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
        !           811:      A C statement to output DBX debugging information to the stdio
        !           812:      stream STREAM which indicates that file NAME is the current source
        !           813:      file.  This output is generated each time input shifts to a
        !           814:      different source file as a result of `#include', the end of an
        !           815:      included file, or a `#line' command.
        !           816: 
        !           817:      This macro need not be defined if the standard form of output for
        !           818:      DBX debugging information is appropriate.
        !           819: 
        !           820: 
        !           821: File: gcc.info,  Node: SDB and DWARF,  Prev: File Names and DBX,  Up: Debugging Info
        !           822: 
        !           823: Macros for SDB and DWARF Output
        !           824: -------------------------------
        !           825: 
        !           826:    Here are macros for SDB and DWARF output.
        !           827: 
        !           828: `SDB_DEBUGGING_INFO'
        !           829:      Define this macro if GNU CC should produce COFF-style debugging
        !           830:      output for SDB in response to the `-g' option.
        !           831: 
        !           832: `DWARF_DEBUGGING_INFO'
        !           833:      Define this macro if GNU CC should produce dwarf format debugging
        !           834:      output in response to the `-g' option.
        !           835: 
        !           836: `PUT_SDB_...'
        !           837:      Define these macros to override the assembler syntax for the
        !           838:      special SDB assembler directives.  See `sdbout.c' for a list of
        !           839:      these macros and their arguments.  If the standard syntax is used,
        !           840:      you need not define them yourself.
        !           841: 
        !           842: `SDB_DELIM'
        !           843:      Some assemblers do not support a semicolon as a delimiter, even
        !           844:      between SDB assembler directives.  In that case, define this macro
        !           845:      to be the delimiter to use (usually `\n').  It is not necessary to
        !           846:      define a new set of `PUT_SDB_OP' macros if this is the only change
        !           847:      required.
        !           848: 
        !           849: `SDB_GENERATE_FAKE'
        !           850:      Define this macro to override the usual method of constructing a
        !           851:      dummy name for anonymous structure and union types.  See
        !           852:      `sdbout.c' for more information.
        !           853: 
        !           854: `SDB_ALLOW_UNKNOWN_REFERENCES'
        !           855:      Define this macro to allow references to unknown structure, union,
        !           856:      or enumeration tags to be emitted.  Standard COFF does not allow
        !           857:      handling of unknown references, MIPS ECOFF has support for it.
        !           858: 
        !           859: `SDB_ALLOW_FORWARD_REFERENCES'
        !           860:      Define this macro to allow references to structure, union, or
        !           861:      enumeration tags that have not yet been seen to be handled.  Some
        !           862:      assemblers choke if forward tags are used, while some require it.
        !           863: 
        !           864: 
        !           865: File: gcc.info,  Node: Cross-compilation,  Next: Misc,  Prev: Debugging Info,  Up: Target Macros
        !           866: 
        !           867: Cross Compilation and Floating Point
        !           868: ====================================
        !           869: 
        !           870:    While all modern machines use 2's complement representation for
        !           871: integers, there are a variety of representations for floating point
        !           872: numbers.  This means that in a cross-compiler the representation of
        !           873: floating point numbers in the compiled program may be different from
        !           874: that used in the machine doing the compilation.
        !           875: 
        !           876:    Because different representation systems may offer different amounts
        !           877: of range and precision, the cross compiler cannot safely use the host
        !           878: machine's floating point arithmetic.  Therefore, floating point
        !           879: constants must be represented in the target machine's format.  This
        !           880: means that the cross compiler cannot use `atof' to parse a floating
        !           881: point constant; it must have its own special routine to use instead.
        !           882: Also, constant folding must emulate the target machine's arithmetic (or
        !           883: must not be done at all).
        !           884: 
        !           885:    The macros in the following table should be defined only if you are
        !           886: cross compiling between different floating point formats.
        !           887: 
        !           888:    Otherwise, don't define them.  Then default definitions will be set
        !           889: up which use `double' as the data type, `==' to test for equality, etc.
        !           890: 
        !           891:    You don't need to worry about how many times you use an operand of
        !           892: any of these macros.  The compiler never uses operands which have side
        !           893: effects.
        !           894: 
        !           895: `REAL_VALUE_TYPE'
        !           896:      A macro for the C data type to be used to hold a floating point
        !           897:      value in the target machine's format.  Typically this would be a
        !           898:      `struct' containing an array of `int'.
        !           899: 
        !           900: `REAL_VALUES_EQUAL (X, Y)'
        !           901:      A macro for a C expression which compares for equality the two
        !           902:      values, X and Y, both of type `REAL_VALUE_TYPE'.
        !           903: 
        !           904: `REAL_VALUES_LESS (X, Y)'
        !           905:      A macro for a C expression which tests whether X is less than Y,
        !           906:      both values being of type `REAL_VALUE_TYPE' and interpreted as
        !           907:      floating point numbers in the target machine's representation.
        !           908: 
        !           909: `REAL_VALUE_LDEXP (X, SCALE)'
        !           910:      A macro for a C expression which performs the standard library
        !           911:      function `ldexp', but using the target machine's floating point
        !           912:      representation.  Both X and the value of the expression have type
        !           913:      `REAL_VALUE_TYPE'.  The second argument, SCALE, is an integer.
        !           914: 
        !           915: `REAL_VALUE_FIX (X)'
        !           916:      A macro whose definition is a C expression to convert the
        !           917:      target-machine floating point value X to a signed integer.  X has
        !           918:      type `REAL_VALUE_TYPE'.
        !           919: 
        !           920: `REAL_VALUE_UNSIGNED_FIX (X)'
        !           921:      A macro whose definition is a C expression to convert the
        !           922:      target-machine floating point value X to an unsigned integer.  X
        !           923:      has type `REAL_VALUE_TYPE'.
        !           924: 
        !           925: `REAL_VALUE_RNDZINT (X)'
        !           926:      A macro whose definition is a C expression to round the
        !           927:      target-machine floating point value X towards zero to an integer
        !           928:      value (but still as a floating point number).  X has type
        !           929:      `REAL_VALUE_TYPE', and so does the value.
        !           930: 
        !           931: `REAL_VALUE_UNSIGNED_RNDZINT (X)'
        !           932:      A macro whose definition is a C expression to round the
        !           933:      target-machine floating point value X towards zero to an unsigned
        !           934:      integer value (but still represented as a floating point number).
        !           935:      x has type `REAL_VALUE_TYPE', and so does the value.
        !           936: 
        !           937: `REAL_VALUE_ATOF (STRING, MODE)'
        !           938:      A macro for a C expression which converts STRING, an expression of
        !           939:      type `char *', into a floating point number in the target machine's
        !           940:      representation for mode MODE.  The value has type
        !           941:      `REAL_VALUE_TYPE'.
        !           942: 
        !           943: `REAL_INFINITY'
        !           944:      Define this macro if infinity is a possible floating point value,
        !           945:      and therefore division by 0 is legitimate.
        !           946: 
        !           947: `REAL_VALUE_ISINF (X)'
        !           948:      A macro for a C expression which determines whether X, a floating
        !           949:      point value, is infinity.  The value has type `int'.  By default,
        !           950:      this is defined to call `isinf'.
        !           951: 
        !           952: `REAL_VALUE_ISNAN (X)'
        !           953:      A macro for a C expression which determines whether X, a floating
        !           954:      point value, is a "nan" (not-a-number).  The value has type `int'.
        !           955:      By default, this is defined to call `isnan'.
        !           956: 
        !           957:    Define the following additional macros if you want to make floating
        !           958: point constant folding work while cross compiling.  If you don't define
        !           959: them, cross compilation is still possible, but constant folding will
        !           960: not happen for floating point values.
        !           961: 
        !           962: `REAL_ARITHMETIC (OUTPUT, CODE, X, Y)'
        !           963:      A macro for a C statement which calculates an arithmetic operation
        !           964:      of the two floating point values X and Y, both of type
        !           965:      `REAL_VALUE_TYPE' in the target machine's representation, to
        !           966:      produce a result of the same type and representation which is
        !           967:      stored in OUTPUT (which will be a variable).
        !           968: 
        !           969:      The operation to be performed is specified by CODE, a tree code
        !           970:      which will always be one of the following: `PLUS_EXPR',
        !           971:      `MINUS_EXPR', `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
        !           972: 
        !           973:      The expansion of this macro is responsible for checking for
        !           974:      overflow.  If overflow happens, the macro expansion should execute
        !           975:      the statement `return 0;', which indicates the inability to
        !           976:      perform the arithmetic operation requested.
        !           977: 
        !           978: `REAL_VALUE_NEGATE (X)'
        !           979:      A macro for a C expression which returns the negative of the
        !           980:      floating point value X.  Both X and the value of the expression
        !           981:      have type `REAL_VALUE_TYPE' and are in the target machine's
        !           982:      floating point representation.
        !           983: 
        !           984:      There is no way for this macro to report overflow, since overflow
        !           985:      can't happen in the negation operation.
        !           986: 
        !           987: `REAL_VALUE_TRUNCATE (MODE, X)'
        !           988:      A macro for a C expression which converts the floating point value
        !           989:      X to mode MODE.
        !           990: 
        !           991:      Both X and the value of the expression are in the target machine's
        !           992:      floating point representation and have type `REAL_VALUE_TYPE'.
        !           993:      However, the value should have an appropriate bit pattern to be
        !           994:      output properly as a floating constant whose precision accords
        !           995:      with mode MODE.
        !           996: 
        !           997:      There is no way for this macro to report overflow.
        !           998: 
        !           999: `REAL_VALUE_TO_INT (LOW, HIGH, X)'
        !          1000:      A macro for a C expression which converts a floating point value X
        !          1001:      into a double-precision integer which is then stored into LOW and
        !          1002:      HIGH, two variables of type INT.
        !          1003: 
        !          1004: `REAL_VALUE_FROM_INT (X, LOW, HIGH)'
        !          1005:      A macro for a C expression which converts a double-precision
        !          1006:      integer found in LOW and HIGH, two variables of type INT, into a
        !          1007:      floating point value which is then stored into X.
1.1       root     1008: 

unix.superglobalmegacorp.com

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