|
|
1.1 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input ! 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: ! 9: Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. ! 10: ! 11: Permission is granted to make and distribute verbatim copies of this ! 12: manual provided the copyright notice and this permission notice are ! 13: preserved on all copies. ! 14: ! 15: Permission is granted to copy and distribute modified versions of ! 16: this manual under the conditions for verbatim copying, provided also ! 17: that the sections entitled "GNU General Public License" and "Protect ! 18: Your Freedom--Fight `Look And Feel'" are included exactly as in the ! 19: original, and provided that the entire resulting derived work is ! 20: distributed under the terms of a permission notice identical to this ! 21: one. ! 22: ! 23: Permission is granted to copy and distribute translations of this ! 24: manual into another language, under the above conditions for modified ! 25: versions, except that the sections entitled "GNU General Public ! 26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this ! 27: permission notice, may be included in translations approved by the Free ! 28: Software Foundation instead of in the original English. ! 29: ! 30: ! 31: File: gcc.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format ! 32: ! 33: Output of Assembler Instructions ! 34: -------------------------------- ! 35: ! 36: `REGISTER_NAMES' ! 37: A C initializer containing the assembler's names for the machine ! 38: registers, each one as a C string constant. This is what ! 39: translates register numbers in the compiler into assembler ! 40: language. ! 41: ! 42: `ADDITIONAL_REGISTER_NAMES' ! 43: If defined, a C initializer for an array of structures containing ! 44: a name and a register number. This macro defines additional names ! 45: for hard registers, thus allowing the `asm' option in declarations ! 46: to refer to registers using alternate names. ! 47: ! 48: `ASM_OUTPUT_OPCODE (STREAM, PTR)' ! 49: Define this macro if you are using an unusual assembler that ! 50: requires different names for the machine instructions. ! 51: ! 52: The definition is a C statement or statements which output an ! 53: assembler instruction opcode to the stdio stream STREAM. The ! 54: macro-operand PTR is a variable of type `char *' which points to ! 55: the opcode name in its "internal" form--the form that is written ! 56: in the machine description. The definition should output the ! 57: opcode name to STREAM, performing any translation you desire, and ! 58: increment the variable PTR to point at the end of the opcode so ! 59: that it will not be output twice. ! 60: ! 61: In fact, your macro definition may process less than the entire ! 62: opcode name, or more than the opcode name; but if you want to ! 63: process text that includes `%'-sequences to substitute operands, ! 64: you must take care of the substitution yourself. Just be sure to ! 65: increment PTR over whatever text should not be output normally. ! 66: ! 67: If you need to look at the operand values, they can be found as the ! 68: elements of `recog_operand'. ! 69: ! 70: If the macro definition does nothing, the instruction is output in ! 71: the usual way. ! 72: ! 73: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)' ! 74: If defined, a C statement to be executed just prior to the output ! 75: of assembler code for INSN, to modify the extracted operands so ! 76: they will be output differently. ! 77: ! 78: Here the argument OPVEC is the vector containing the operands ! 79: extracted from INSN, and NOPERANDS is the number of elements of ! 80: the vector which contain meaningful data for this insn. The ! 81: contents of this vector are what will be used to convert the insn ! 82: template into assembler code, so you can change the assembler ! 83: output by changing the contents of the vector. ! 84: ! 85: This macro is useful when various assembler syntaxes share a single ! 86: file of instruction patterns; by defining this macro differently, ! 87: you can cause a large class of instructions to be output ! 88: differently (such as with rearranged operands). Naturally, ! 89: variations in assembler syntax affecting individual insn patterns ! 90: ought to be handled by writing conditional output routines in ! 91: those patterns. ! 92: ! 93: If this macro is not defined, it is equivalent to a null statement. ! 94: ! 95: `PRINT_OPERAND (STREAM, X, CODE)' ! 96: A C compound statement to output to stdio stream STREAM the ! 97: assembler syntax for an instruction operand X. X is an RTL ! 98: expression. ! 99: ! 100: CODE is a value that can be used to specify one of several ways of ! 101: printing the operand. It is used when identical operands must be ! 102: printed differently depending on the context. CODE comes from the ! 103: `%' specification that was used to request printing of the ! 104: operand. If the specification was just `%DIGIT' then CODE is 0; ! 105: if the specification was `%LTR DIGIT' then CODE is the ASCII code ! 106: for LTR. ! 107: ! 108: If X is a register, this macro should print the register's name. ! 109: The names can be found in an array `reg_names' whose type is `char ! 110: *[]'. `reg_names' is initialized from `REGISTER_NAMES'. ! 111: ! 112: When the machine description has a specification `%PUNCT' (a `%' ! 113: followed by a punctuation character), this macro is called with a ! 114: null pointer for X and the punctuation character for CODE. ! 115: ! 116: `PRINT_OPERAND_PUNCT_VALID_P (CODE)' ! 117: A C expression which evaluates to true if CODE is a valid ! 118: punctuation character for use in the `PRINT_OPERAND' macro. If ! 119: `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no ! 120: punctuation characters (except for the standard one, `%') are used ! 121: in this way. ! 122: ! 123: `PRINT_OPERAND_ADDRESS (STREAM, X)' ! 124: A C compound statement to output to stdio stream STREAM the ! 125: assembler syntax for an instruction operand that is a memory ! 126: reference whose address is X. X is an RTL expression. ! 127: ! 128: On some machines, the syntax for a symbolic address depends on the ! 129: section that the address refers to. On these machines, define the ! 130: macro `ENCODE_SECTION_INFO' to store the information into the ! 131: `symbol_ref', and then check for it here. *Note Assembler ! 132: Format::. ! 133: ! 134: `DBR_OUTPUT_SEQEND(FILE)' ! 135: A C statement, to be executed after all slot-filler instructions ! 136: have been output. If necessary, call `dbr_sequence_length' to ! 137: determine the number of slots filled in a sequence (zero if not ! 138: currently outputting a sequence), to decide how many no-ops to ! 139: output, or whatever. ! 140: ! 141: Don't define this macro if it has nothing to do, but it is helpful ! 142: in reading assembly output if the extent of the delay sequence is ! 143: made explicit (e.g. with white space). ! 144: ! 145: Note that output routines for instructions with delay slots must be ! 146: prepared to deal with not being output as part of a sequence (i.e. ! 147: when the scheduling pass is not run, or when no slot fillers could ! 148: be found.) The variable `final_sequence' is null when not ! 149: processing a sequence, otherwise it contains the `sequence' rtx ! 150: being output. ! 151: ! 152: `REGISTER_PREFIX' ! 153: `LOCAL_LABEL_PREFIX' ! 154: `USER_LABEL_PREFIX' ! 155: `IMMEDIATE_PREFIX' ! 156: If defined, C string expressions to be used for the `%R', `%L', ! 157: `%U', and `%I' options of `asm_fprintf' (see `final.c'). These ! 158: are useful when a single `md' file must support multiple assembler ! 159: formats. In that case, the various `tm.h' files can define these ! 160: macros differently. ! 161: ! 162: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)' ! 163: A C expression to output to STREAM some assembler code which will ! 164: push hard register number REGNO onto the stack. The code need not ! 165: be optimal, since this macro is used only when profiling. ! 166: ! 167: `ASM_OUTPUT_REG_POP (STREAM, REGNO)' ! 168: A C expression to output to STREAM some assembler code which will ! 169: pop hard register number REGNO off of the stack. The code need ! 170: not be optimal, since this macro is used only when profiling. ! 171: ! 172: ! 173: File: gcc.info, Node: Dispatch Tables, Next: Alignment Output, Prev: Instruction Output, Up: Assembler Format ! 174: ! 175: Output of Dispatch Tables ! 176: ------------------------- ! 177: ! 178: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)' ! 179: This macro should be provided on machines where the addresses in a ! 180: dispatch table are relative to the table's own address. ! 181: ! 182: The definition should be a C statement to output to the stdio ! 183: stream STREAM an assembler pseudo-instruction to generate a ! 184: difference between two labels. VALUE and REL are the numbers of ! 185: two internal labels. The definitions of these labels are output ! 186: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in the ! 187: same way here. For example, ! 188: ! 189: fprintf (STREAM, "\t.word L%d-L%d\n", ! 190: VALUE, REL) ! 191: ! 192: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)' ! 193: This macro should be provided on machines where the addresses in a ! 194: dispatch table are absolute. ! 195: ! 196: The definition should be a C statement to output to the stdio ! 197: stream STREAM an assembler pseudo-instruction to generate a ! 198: reference to a label. VALUE is the number of an internal label ! 199: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. For ! 200: example, ! 201: ! 202: fprintf (STREAM, "\t.word L%d\n", VALUE) ! 203: ! 204: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)' ! 205: Define this if the label before a jump-table needs to be output ! 206: specially. The first three arguments are the same as for ! 207: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the jump-table ! 208: which follows (a `jump_insn' containing an `addr_vec' or ! 209: `addr_diff_vec'). ! 210: ! 211: This feature is used on system V to output a `swbeg' statement for ! 212: the table. ! 213: ! 214: If this macro is not defined, these labels are output with ! 215: `ASM_OUTPUT_INTERNAL_LABEL'. ! 216: ! 217: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)' ! 218: Define this if something special must be output at the end of a ! 219: jump-table. The definition should be a C statement to be executed ! 220: after the assembler code for the table is written. It should write ! 221: the appropriate code to stdio stream STREAM. The argument TABLE ! 222: is the jump-table insn, and NUM is the label-number of the ! 223: preceding label. ! 224: ! 225: If this macro is not defined, nothing special is output at the end ! 226: of the jump-table. ! 227: ! 228: ! 229: File: gcc.info, Node: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format ! 230: ! 231: Assembler Commands for Alignment ! 232: -------------------------------- ! 233: ! 234: `ASM_OUTPUT_ALIGN_CODE (FILE)' ! 235: A C expression to output text to align the location counter in the ! 236: way that is desirable at a point in the code that is reached only ! 237: by jumping. ! 238: ! 239: This macro need not be defined if you don't want any special ! 240: alignment to be done at such a time. Most machine descriptions do ! 241: not currently define the macro. ! 242: ! 243: `ASM_OUTPUT_LOOP_ALIGN (FILE)' ! 244: A C expression to output text to align the location counter in the ! 245: way that is desirable at the beginning of a loop. ! 246: ! 247: This macro need not be defined if you don't want any special ! 248: alignment to be done at such a time. Most machine descriptions do ! 249: not currently define the macro. ! 250: ! 251: `ASM_OUTPUT_SKIP (STREAM, NBYTES)' ! 252: A C statement to output to the stdio stream STREAM an assembler ! 253: instruction to advance the location counter by NBYTES bytes. ! 254: Those bytes should be zero when loaded. NBYTES will be a C ! 255: expression of type `int'. ! 256: ! 257: `ASM_NO_SKIP_IN_TEXT' ! 258: Define this macro if `ASM_OUTPUT_SKIP' should not be used in the ! 259: text section because it fails put zeros in the bytes that are ! 260: skipped. This is true on many Unix systems, where the pseudo-op ! 261: to skip bytes produces no-op instructions rather than zeros when ! 262: used in the text section. ! 263: ! 264: `ASM_OUTPUT_ALIGN (STREAM, POWER)' ! 265: A C statement to output to the stdio stream STREAM an assembler ! 266: command to advance the location counter to a multiple of 2 to the ! 267: POWER bytes. POWER will be a C expression of type `int'. ! 268: ! 269: ! 270: File: gcc.info, Node: Debugging Info, Next: Cross-compilation, Prev: Assembler Format, Up: Target Macros ! 271: ! 272: Controlling Debugging Information Format ! 273: ======================================== ! 274: ! 275: * Menu: ! 276: ! 277: * All Debuggers:: Macros that affect all debugging formats uniformly. ! 278: * DBX Options:: Macros enabling specific options in DBX format. ! 279: * DBX Hooks:: Hook macros for varying DBX format. ! 280: * File Names and DBX:: Macros controlling output of file names in DBX format. ! 281: * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. ! 282: ! 283: ! 284: File: gcc.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info ! 285: ! 286: Macros Affecting All Debugging Formats ! 287: -------------------------------------- ! 288: ! 289: `DBX_REGISTER_NUMBER (REGNO)' ! 290: A C expression that returns the DBX register number for the ! 291: compiler register number REGNO. In simple cases, the value of this ! 292: expression may be REGNO itself. But sometimes there are some ! 293: registers that the compiler knows about and DBX does not, or vice ! 294: versa. In such cases, some register may need to have one number in ! 295: the compiler and another for DBX. ! 296: ! 297: If two registers have consecutive numbers inside GNU CC, and they ! 298: can be used as a pair to hold a multiword value, then they *must* ! 299: have consecutive numbers after renumbering with ! 300: `DBX_REGISTER_NUMBER'. Otherwise, debuggers will be unable to ! 301: access such a pair, because they expect register pairs to be ! 302: consecutive in their own numbering scheme. ! 303: ! 304: If you find yourself defining `DBX_REGISTER_NUMBER' in way that ! 305: does not preserve register pairs, then what you must do instead is ! 306: redefine the actual register numbering scheme. ! 307: ! 308: `DEBUGGER_AUTO_OFFSET (X)' ! 309: A C expression that returns the integer offset value for an ! 310: automatic variable having address X (an RTL expression). The ! 311: default computation assumes that X is based on the frame-pointer ! 312: and gives the offset from the frame-pointer. This is required for ! 313: targets that produce debugging output for DBX or COFF-style ! 314: debugging output for SDB and allow the frame-pointer to be ! 315: eliminated when the `-g' options is used. ! 316: ! 317: `DEBUGGER_ARG_OFFSET (OFFSET, X)' ! 318: A C expression that returns the integer offset value for an ! 319: argument having address X (an RTL expression). The nominal offset ! 320: is OFFSET. ! 321: ! 322: ! 323: File: gcc.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info ! 324: ! 325: Specific Options for DBX Output ! 326: ------------------------------- ! 327: ! 328: `DBX_DEBUGGING_INFO' ! 329: Define this macro if GNU CC should produce debugging output for DBX ! 330: in response to the `-g' option. ! 331: ! 332: `XCOFF_DEBUGGING_INFO' ! 333: Define this macro if GNU CC should produce XCOFF format debugging ! 334: output in response to the `-g' option. This is a variant of DBX ! 335: format. ! 336: ! 337: `DEFAULT_GDB_EXTENSIONS' ! 338: Define this macro to control whether GNU CC should by default ! 339: generate GDB's extended version of DBX debugging information ! 340: (assuming DBX-format debugging information is enabled at all). If ! 341: you don't define the macro, the default is 1: always generate the ! 342: extended information if there is any occasion to. ! 343: ! 344: `DEBUG_SYMS_TEXT' ! 345: Define this macro if all `.stabs' commands should be output while ! 346: in the text section. ! 347: ! 348: `ASM_STABS_OP' ! 349: A C string constant naming the assembler pseudo op to use instead ! 350: of `.stabs' to define an ordinary debugging symbol. If you don't ! 351: define this macro, `.stabs' is used. This macro applies only to ! 352: DBX debugging information format. ! 353: ! 354: `ASM_STABD_OP' ! 355: A C string constant naming the assembler pseudo op to use instead ! 356: of `.stabd' to define a debugging symbol whose value is the current ! 357: location. If you don't define this macro, `.stabd' is used. This ! 358: macro applies only to DBX debugging information format. ! 359: ! 360: `ASM_STABN_OP' ! 361: A C string constant naming the assembler pseudo op to use instead ! 362: of `.stabn' to define a debugging symbol with no name. If you ! 363: don't define this macro, `.stabn' is used. This macro applies ! 364: only to DBX debugging information format. ! 365: ! 366: `DBX_NO_XREFS' ! 367: Define this macro if DBX on your system does not support the ! 368: construct `xsTAGNAME'. On some systems, this construct is used to ! 369: describe a forward reference to a structure named TAGNAME. On ! 370: other systems, this construct is not supported at all. ! 371: ! 372: `DBX_CONTIN_LENGTH' ! 373: A symbol name in DBX-format debugging information is normally ! 374: continued (split into two separate `.stabs' directives) when it ! 375: exceeds a certain length (by default, 80 characters). On some ! 376: operating systems, DBX requires this splitting; on others, ! 377: splitting must not be done. You can inhibit splitting by defining ! 378: this macro with the value zero. You can override the default ! 379: splitting-length by defining this macro as an expression for the ! 380: length you desire. ! 381: ! 382: `DBX_CONTIN_CHAR' ! 383: Normally continuation is indicated by adding a `\' character to ! 384: the end of a `.stabs' string when a continuation follows. To use ! 385: a different character instead, define this macro as a character ! 386: constant for the character you want to use. Do not define this ! 387: macro if backslash is correct for your system. ! 388: ! 389: `DBX_STATIC_STAB_DATA_SECTION' ! 390: Define this macro if it is necessary to go to the data section ! 391: before outputting the `.stabs' pseudo-op for a non-global static ! 392: variable. ! 393: ! 394: `DBX_TYPE_DECL_STABS_CODE' ! 395: The value to use in the "code" field of the `.stabs' directive for ! 396: a typedef. The default is `N_LSYM'. ! 397: ! 398: `DBX_STATIC_CONST_VAR_CODE' ! 399: The value to use in the "code" field of the `.stabs' directive for ! 400: a static variable located in the text section. DBX format does not ! 401: provide any "right" way to do this. The default is `N_FUN'. ! 402: ! 403: `DBX_REGPARM_STABS_CODE' ! 404: The value to use in the "code" field of the `.stabs' directive for ! 405: a parameter passed in registers. DBX format does not provide any ! 406: "right" way to do this. The default is `N_RSYM'. ! 407: ! 408: `DBX_REGPARM_STABS_LETTER' ! 409: The letter to use in DBX symbol data to identify a symbol as a ! 410: parameter passed in registers. DBX format does not customarily ! 411: provide any way to do this. The default is `'P''. ! 412: ! 413: `DBX_MEMPARM_STABS_LETTER' ! 414: The letter to use in DBX symbol data to identify a symbol as a ! 415: stack parameter. The default is `'p''. ! 416: ! 417: `DBX_FUNCTION_FIRST' ! 418: Define this macro if the DBX information for a function and its ! 419: arguments should precede the assembler code for the function. ! 420: Normally, in DBX format, the debugging information entirely ! 421: follows the assembler code. ! 422: ! 423: `DBX_LBRAC_FIRST' ! 424: Define this macro if the `N_LBRAC' symbol for a block should ! 425: precede the debugging information for variables and functions ! 426: defined in that block. Normally, in DBX format, the `N_LBRAC' ! 427: symbol comes first. ! 428: ! 429: ! 430: File: gcc.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info ! 431: ! 432: Open-Ended Hooks for DBX Format ! 433: ------------------------------- ! 434: ! 435: `DBX_OUTPUT_LBRAC (STREAM, NAME)' ! 436: Define this macro to say how to output to STREAM the debugging ! 437: information for the start of a scope level for variable names. The ! 438: argument NAME is the name of an assembler symbol (for use with ! 439: `assemble_name') whose value is the address where the scope begins. ! 440: ! 441: `DBX_OUTPUT_RBRAC (STREAM, NAME)' ! 442: Like `DBX_OUTPUT_LBRAC', but for the end of a scope level. ! 443: ! 444: `DBX_OUTPUT_ENUM (STREAM, TYPE)' ! 445: Define this macro if the target machine requires special handling ! 446: to output an enumeration type. The definition should be a C ! 447: statement (sans semicolon) to output the appropriate information ! 448: to STREAM for the type TYPE. ! 449: ! 450: `DBX_OUTPUT_FUNCTION_END (STREAM, FUNCTION)' ! 451: Define this macro if the target machine requires special output at ! 452: the end of the debugging information for a function. The ! 453: definition should be a C statement (sans semicolon) to output the ! 454: appropriate information to STREAM. FUNCTION is the ! 455: `FUNCTION_DECL' node for the function. ! 456: ! 457: `DBX_OUTPUT_STANDARD_TYPES (SYMS)' ! 458: Define this macro if you need to control the order of output of the ! 459: standard data types at the beginning of compilation. The argument ! 460: SYMS is a `tree' which is a chain of all the predefined global ! 461: symbols, including names of data types. ! 462: ! 463: Normally, DBX output starts with definitions of the types for ! 464: integers and characters, followed by all the other predefined ! 465: types of the particular language in no particular order. ! 466: ! 467: On some machines, it is necessary to output different particular ! 468: types first. To do this, define `DBX_OUTPUT_STANDARD_TYPES' to ! 469: output those symbols in the necessary order. Any predefined types ! 470: that you don't explicitly output will be output afterward in no ! 471: particular order. ! 472: ! 473: Be careful not to define this macro so that it works only for C. ! 474: There are no global variables to access most of the built-in ! 475: types, because another language may have another set of types. ! 476: The way to output a particular type is to look through SYMS to see ! 477: if you can find it. Here is an example: ! 478: ! 479: { ! 480: tree decl; ! 481: for (decl = syms; decl; decl = TREE_CHAIN (decl)) ! 482: if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)), ! 483: "long int")) ! 484: dbxout_symbol (decl); ! 485: ... ! 486: } ! 487: ! 488: This does nothing if the expected type does not exist. ! 489: ! 490: See the function `init_decl_processing' in `c-decl.c' to find the ! 491: names to use for all the built-in C types. ! 492: ! 493: Here is another way of finding a particular type: ! 494: ! 495: { ! 496: tree decl; ! 497: for (decl = syms; decl; decl = TREE_CHAIN (decl)) ! 498: if (TREE_CODE (decl) == TYPE_DECL ! 499: && (TREE_CODE (TREE_TYPE (decl)) ! 500: == INTEGER_CST) ! 501: && TYPE_PRECISION (TREE_TYPE (decl)) == 16 ! 502: && TYPE_UNSIGNED (TREE_TYPE (decl))) ! 503: /* This must be `unsigned short'. */ ! 504: dbxout_symbol (decl); ! 505: ... ! 506: } ! 507: ! 508: ! 509: File: gcc.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info ! 510: ! 511: File Names in DBX Format ! 512: ------------------------ ! 513: ! 514: `DBX_WORKING_DIRECTORY' ! 515: Define this if DBX wants to have the current directory recorded in ! 516: each object file. ! 517: ! 518: Note that the working directory is always recorded if GDB ! 519: extensions are enabled. ! 520: ! 521: `DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)' ! 522: A C statement to output DBX debugging information to the stdio ! 523: stream STREAM which indicates that file NAME is the main source ! 524: file--the file specified as the input file for compilation. This ! 525: macro is called only once, at the beginning of compilation. ! 526: ! 527: This macro need not be defined if the standard form of output for ! 528: DBX debugging information is appropriate. ! 529: ! 530: `DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (STREAM, NAME)' ! 531: A C statement to output DBX debugging information to the stdio ! 532: stream STREAM which indicates that the current directory during ! 533: compilation is named NAME. ! 534: ! 535: This macro need not be defined if the standard form of output for ! 536: DBX debugging information is appropriate. ! 537: ! 538: `DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)' ! 539: A C statement to output DBX debugging information at the end of ! 540: compilation of the main source file NAME. ! 541: ! 542: If you don't define this macro, nothing special is output at the ! 543: end of compilation, which is correct for most machines. ! 544: ! 545: `DBX_OUTPUT_SOURCE_FILENAME (STREAM, NAME)' ! 546: A C statement to output DBX debugging information to the stdio ! 547: stream STREAM which indicates that file NAME is the current source ! 548: file. This output is generated each time input shifts to a ! 549: different source file as a result of `#include', the end of an ! 550: included file, or a `#line' command. ! 551: ! 552: This macro need not be defined if the standard form of output for ! 553: DBX debugging information is appropriate. ! 554: ! 555: ! 556: File: gcc.info, Node: SDB and DWARF, Prev: File Names and DBX, Up: Debugging Info ! 557: ! 558: Macros for SDB and DWARF Output ! 559: ------------------------------- ! 560: ! 561: `SDB_DEBUGGING_INFO' ! 562: Define this macro if GNU CC should produce COFF-style debugging ! 563: output for SDB in response to the `-g' option. ! 564: ! 565: `DWARF_DEBUGGING_INFO' ! 566: Define this macro if GNU CC should produce dwarf format debugging ! 567: output in response to the `-g' option. ! 568: ! 569: `PUT_SDB_...' ! 570: Define these macros to override the assembler syntax for the ! 571: special SDB assembler directives. See `sdbout.c' for a list of ! 572: these macros and their arguments. If the standard syntax is used, ! 573: you need not define them yourself. ! 574: ! 575: `SDB_DELIM' ! 576: Some assemblers do not support a semicolon as a delimiter, even ! 577: between SDB assembler directives. In that case, define this macro ! 578: to be the delimiter to use (usually `\n'). It is not necessary to ! 579: define a new set of `PUT_SDB_OP' macros if this is the only change ! 580: required. ! 581: ! 582: `SDB_GENERATE_FAKE' ! 583: Define this macro to override the usual method of constructing a ! 584: dummy name for anonymous structure and union types. See ! 585: `sdbout.c' for more information. ! 586: ! 587: `SDB_ALLOW_UNKNOWN_REFERENCES' ! 588: Define this macro to allow references to unknown structure, union, ! 589: or enumeration tags to be emitted. Standard COFF does not allow ! 590: handling of unknown references, MIPS ECOFF has support for it. ! 591: ! 592: `SDB_ALLOW_FORWARD_REFERENCES' ! 593: Define this macro to allow references to structure, union, or ! 594: enumeration tags that have not yet been seen to be handled. Some ! 595: assemblers choke if forward tags are used, while some require it. ! 596: ! 597: ! 598: File: gcc.info, Node: Cross-compilation, Next: Misc, Prev: Debugging Info, Up: Target Macros ! 599: ! 600: Cross Compilation and Floating Point ! 601: ==================================== ! 602: ! 603: While all modern machines use 2's complement representation for ! 604: integers, there are a variety of representations for floating point ! 605: numbers. This means that in a cross-compiler the representation of ! 606: floating point numbers in the compiled program may be different from ! 607: that used in the machine doing the compilation. ! 608: ! 609: Because different representation systems may offer different amounts ! 610: of range and precision, the cross compiler cannot safely use the host ! 611: machine's floating point arithmetic. Therefore, floating point ! 612: constants must be represented in the target machine's format. This ! 613: means that the cross compiler cannot use `atof' to parse a floating ! 614: point constant; it must have its own special routine to use instead. ! 615: Also, constant folding must emulate the target machine's arithmetic (or ! 616: must not be done at all). ! 617: ! 618: The macros in the following table should be defined only if you are ! 619: cross compiling between different floating point formats. ! 620: ! 621: Otherwise, don't define them. Then default definitions will be set ! 622: up which use `double' as the data type, `==' to test for equality, etc. ! 623: ! 624: You don't need to worry about how many times you use an operand of ! 625: any of these macros. The compiler never uses operands which have side ! 626: effects. ! 627: ! 628: `REAL_VALUE_TYPE' ! 629: A macro for the C data type to be used to hold a floating point ! 630: value in the target machine's format. Typically this would be a ! 631: `struct' containing an array of `int'. ! 632: ! 633: `REAL_VALUES_EQUAL (X, Y)' ! 634: A macro for a C expression which compares for equality the two ! 635: values, X and Y, both of type `REAL_VALUE_TYPE'. ! 636: ! 637: `REAL_VALUES_LESS (X, Y)' ! 638: A macro for a C expression which tests whether X is less than Y, ! 639: both values being of type `REAL_VALUE_TYPE' and interpreted as ! 640: floating point numbers in the target machine's representation. ! 641: ! 642: `REAL_VALUE_LDEXP (X, SCALE)' ! 643: A macro for a C expression which performs the standard library ! 644: function `ldexp', but using the target machine's floating point ! 645: representation. Both X and the value of the expression have type ! 646: `REAL_VALUE_TYPE'. The second argument, SCALE, is an integer. ! 647: ! 648: `REAL_VALUE_FIX (X)' ! 649: A macro whose definition is a C expression to convert the ! 650: target-machine floating point value X to a signed integer. X has ! 651: type `REAL_VALUE_TYPE'. ! 652: ! 653: `REAL_VALUE_UNSIGNED_FIX (X)' ! 654: A macro whose definition is a C expression to convert the ! 655: target-machine floating point value X to an unsigned integer. X ! 656: has type `REAL_VALUE_TYPE'. ! 657: ! 658: `REAL_VALUE_RNDZINT (X)' ! 659: A macro whose definition is a C expression to round the ! 660: target-machine floating point value X towards zero to an integer ! 661: value (but still as a floating point number). X has type ! 662: `REAL_VALUE_TYPE', and so does the value. ! 663: ! 664: `REAL_VALUE_UNSIGNED_RNDZINT (X)' ! 665: A macro whose definition is a C expression to round the ! 666: target-machine floating point value X towards zero to an unsigned ! 667: integer value (but still represented as a floating point number). ! 668: x has type `REAL_VALUE_TYPE', and so does the value. ! 669: ! 670: `REAL_VALUE_ATOF (STRING, MODE)' ! 671: A macro for a C expression which converts STRING, an expression of ! 672: type `char *', into a floating point number in the target machine's ! 673: representation for mode MODE. The value has type ! 674: `REAL_VALUE_TYPE'. ! 675: ! 676: `REAL_INFINITY' ! 677: Define this macro if infinity is a possible floating point value, ! 678: and therefore division by 0 is legitimate. ! 679: ! 680: `REAL_VALUE_ISINF (X)' ! 681: A macro for a C expression which determines whether X, a floating ! 682: point value, is infinity. The value has type `int'. By default, ! 683: this is defined to call `isinf'. ! 684: ! 685: `REAL_VALUE_ISNAN (X)' ! 686: A macro for a C expression which determines whether X, a floating ! 687: point value, is a "nan" (not-a-number). The value has type `int'. ! 688: By default, this is defined to call `isnan'. ! 689: ! 690: Define the following additional macros if you want to make floating ! 691: point constant folding work while cross compiling. If you don't define ! 692: them, cross compilation is still possible, but constant folding will ! 693: not happen for floating point values. ! 694: ! 695: `REAL_ARITHMETIC (OUTPUT, CODE, X, Y)' ! 696: A macro for a C statement which calculates an arithmetic operation ! 697: of the two floating point values X and Y, both of type ! 698: `REAL_VALUE_TYPE' in the target machine's representation, to ! 699: produce a result of the same type and representation which is ! 700: stored in OUTPUT (which will be a variable). ! 701: ! 702: The operation to be performed is specified by CODE, a tree code ! 703: which will always be one of the following: `PLUS_EXPR', ! 704: `MINUS_EXPR', `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'. ! 705: ! 706: The expansion of this macro is responsible for checking for ! 707: overflow. If overflow happens, the macro expansion should execute ! 708: the statement `return 0;', which indicates the inability to ! 709: perform the arithmetic operation requested. ! 710: ! 711: `REAL_VALUE_NEGATE (X)' ! 712: A macro for a C expression which returns the negative of the ! 713: floating point value X. Both X and the value of the expression ! 714: have type `REAL_VALUE_TYPE' and are in the target machine's ! 715: floating point representation. ! 716: ! 717: There is no way for this macro to report overflow, since overflow ! 718: can't happen in the negation operation. ! 719: ! 720: `REAL_VALUE_TRUNCATE (MODE, X)' ! 721: A macro for a C expression which converts the floating point value ! 722: X to mode MODE. ! 723: ! 724: Both X and the value of the expression are in the target machine's ! 725: floating point representation and have type `REAL_VALUE_TYPE'. ! 726: However, the value should have an appropriate bit pattern to be ! 727: output properly as a floating constant whose precision accords ! 728: with mode MODE. ! 729: ! 730: There is no way for this macro to report overflow. ! 731: ! 732: `REAL_VALUE_TO_INT (LOW, HIGH, X)' ! 733: A macro for a C expression which converts a floating point value X ! 734: into a double-precision integer which is then stored into LOW and ! 735: HIGH, two variables of type INT. ! 736: ! 737: `REAL_VALUE_FROM_INT (X, LOW, HIGH)' ! 738: A macro for a C expression which converts a double-precision ! 739: integer found in LOW and HIGH, two variables of type INT, into a ! 740: floating point value which is then stored into X. ! 741: ! 742: ! 743: File: gcc.info, Node: Misc, Prev: Cross-compilation, Up: Target Macros ! 744: ! 745: Miscellaneous Parameters ! 746: ======================== ! 747: ! 748: `PREDICATE_CODES' ! 749: Define this if you have defined special-purpose predicates in the ! 750: file `MACHINE.c'. This macro is called within an initializer of an ! 751: array of structures. The first field in the structure is the name ! 752: of a predicate and the second field is an array of rtl codes. For ! 753: each predicate, list all rtl codes that can be in expressions ! 754: matched by the predicate. The list should have a trailing comma. ! 755: Here is an example of two entries in the list for a typical RISC ! 756: machine: ! 757: ! 758: #define PREDICATE_CODES \ ! 759: {"gen_reg_rtx_operand", {SUBREG, REG}}, \ ! 760: {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}}, ! 761: ! 762: Defining this macro does not affect the generated code (however, ! 763: incorrect definitions that omit an rtl code that may be matched by ! 764: the predicate can cause the compiler to malfunction). Instead, it ! 765: allows the table built by `genrecog' to be more compact and ! 766: efficient, thus speeding up the compiler. The most important ! 767: predicates to include in the list specified by this macro are ! 768: thoses used in the most insn patterns. ! 769: ! 770: `CASE_VECTOR_MODE' ! 771: An alias for a machine mode name. This is the machine mode that ! 772: elements of a jump-table should have. ! 773: ! 774: `CASE_VECTOR_PC_RELATIVE' ! 775: Define this macro if jump-tables should contain relative addresses. ! 776: ! 777: `CASE_DROPS_THROUGH' ! 778: Define this if control falls through a `case' insn when the index ! 779: value is out of range. This means the specified default-label is ! 780: actually ignored by the `case' insn proper. ! 781: ! 782: `CASE_VALUES_THRESHOLD' ! 783: Define this to be the smallest number of different values for ! 784: which it is best to use a jump-table instead of a tree of ! 785: conditional branches. The default is four for machines with a ! 786: `casesi' instruction and five otherwise. This is best for most ! 787: machines. ! 788: ! 789: `BYTE_LOADS_ZERO_EXTEND' ! 790: Define this macro if an instruction to load a value narrower than a ! 791: word from memory into a register also zero-extends the value to ! 792: the whole register. ! 793: ! 794: `BYTE_LOADS_SIGN_EXTEND' ! 795: Define this macro if an instruction to load a value narrower than a ! 796: word from memory into a register also sign-extends the value to ! 797: the whole register. ! 798: ! 799: `IMPLICIT_FIX_EXPR' ! 800: An alias for a tree code that should be used by default for ! 801: conversion of floating point values to fixed point. Normally, ! 802: `FIX_ROUND_EXPR' is used. ! 803: ! 804: `FIXUNS_TRUNC_LIKE_FIX_TRUNC' ! 805: Define this macro if the same instructions that convert a floating ! 806: point number to a signed fixed point number also convert validly ! 807: to an unsigned one. ! 808: ! 809: `EASY_DIV_EXPR' ! 810: An alias for a tree code that is the easiest kind of division to ! 811: compile code for in the general case. It may be `TRUNC_DIV_EXPR', ! 812: `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four ! 813: division operators differ in how they round the result to an ! 814: integer. `EASY_DIV_EXPR' is used when it is permissible to use ! 815: any of those kinds of division and the choice should be made on ! 816: the basis of efficiency. ! 817: ! 818: `MOVE_MAX' ! 819: The maximum number of bytes that a single instruction can move ! 820: quickly from memory to memory. ! 821: ! 822: `SHIFT_COUNT_TRUNCATED' ! 823: Defining this macro causes the compiler to omit a sign-extend, ! 824: zero-extend, or bitwise `and' instruction that truncates the count ! 825: of a shift operation to a width equal to the number of bits needed ! 826: to represent the size of the object being shifted. On machines ! 827: that have instructions that act on bitfields at variable ! 828: positions, which may include `bit test' instructions, defining ! 829: `SHIFT_COUNT_TRUNCATED' also enables deletion of truncations of ! 830: the values that serve as arguments to bitfield instructions. ! 831: ! 832: If both types of instructions truncate the count (for shifts) and ! 833: position (for bitfield operations), or if no variable-position ! 834: bitfield instructions exist, you should define this macro. ! 835: ! 836: However, on some machines, such as the 80386 and the 680x0, ! 837: truncation only applies to shift operations and not the (real or ! 838: pretended) bitfield operations. Do not define ! 839: `SHIFT_COUNT_TRUNCATED' on such machines. Instead, add patterns ! 840: to the `md' file that include the implied truncation of the shift ! 841: instructions. ! 842: ! 843: `TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)' ! 844: A C expression which is nonzero if on this machine it is safe to ! 845: "convert" an integer of INPREC bits to one of OUTPREC bits (where ! 846: OUTPREC is smaller than INPREC) by merely operating on it as if it ! 847: had only OUTPREC bits. ! 848: ! 849: On many machines, this expression can be 1. ! 850: ! 851: When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for ! 852: modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result. ! 853: If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in ! 854: such cases may improve things. ! 855: ! 856: `STORE_FLAG_VALUE' ! 857: A C expression describing the value returned by a comparison ! 858: operator with an integral mode and stored by a store-flag ! 859: instruction (`sCOND') when the condition is true. This ! 860: description must apply to *all* the `sCOND' patterns and all the ! 861: comparison operators whose results have a `MODE_INT' mode. ! 862: ! 863: A value of 1 or -1 means that the instruction implementing the ! 864: comparison operator returns exactly 1 or -1 when the comparison is ! 865: true and 0 when the comparison is false. Otherwise, the value ! 866: indicates which bits of the result are guaranteed to be 1 when the ! 867: comparison is true. This value is interpreted in the mode of the ! 868: comparison operation, which is given by the mode of the first ! 869: operand in the `sCOND' pattern. Either the low bit or the sign ! 870: bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are ! 871: used by the compiler. ! 872: ! 873: If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will ! 874: generate code that depends only on the specified bits. It can also ! 875: replace comparison operators with equivalent operations if they ! 876: cause the required bits to be set, even if the remaining bits are ! 877: undefined. For example, on a machine whose comparison operators ! 878: return an `SImode' value and where `STORE_FLAG_VALUE' is defined as ! 879: `0x80000000', saying that just the sign bit is relevant, the ! 880: expression ! 881: ! 882: (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) ! 883: ! 884: can be converted to ! 885: ! 886: (ashift:SI X (const_int N)) ! 887: ! 888: where N is the appropriate shift count to move the bit being ! 889: tested into the sign bit. ! 890: ! 891: There is no way to describe a machine that always sets the ! 892: low-order bit for a true value, but does not guarantee the value ! 893: of any other bits, but we do not know of any machine that has such ! 894: an instruction. If you are trying to port GNU CC to such a ! 895: machine, include an instruction to perform a logical-and of the ! 896: result with 1 in the pattern for the comparison operators and let ! 897: us know (*note How to Report Bugs: Bug Reporting.). ! 898: ! 899: Often, a machine will have multiple instructions that obtain a ! 900: value from a comparison (or the condition codes). Here are rules ! 901: to guide the choice of value for `STORE_FLAG_VALUE', and hence the ! 902: instructions to be used: ! 903: ! 904: * Use the shortest sequence that yields a valid definition for ! 905: `STORE_FLAG_VALUE'. It is more efficient for the compiler to ! 906: "normalize" the value (convert it to, e.g., 1 or 0) than for ! 907: the comparison operators to do so because there may be ! 908: opportunities to combine the normalization with other ! 909: operations. ! 910: ! 911: * For equal-length sequences, use a value of 1 or -1, with -1 ! 912: being slightly preferred on machines with expensive jumps and ! 913: 1 preferred on other machines. ! 914: ! 915: * As a second choice, choose a value of `0x80000001' if ! 916: instructions exist that set both the sign and low-order bits ! 917: but do not define the others. ! 918: ! 919: * Otherwise, use a value of `0x80000000'. ! 920: ! 921: Many machines can produce both the value chosen for ! 922: `STORE_FLAG_VALUE' and its negation in the same number of ! 923: instructions. On those machines, you should also define a pattern ! 924: for those cases, e.g., one matching ! 925: ! 926: (set A (neg:M (ne:M B C))) ! 927: ! 928: Some machines can also perform `and' or `plus' operations on ! 929: condition code values with less instructions than the corresponding ! 930: `sCOND' insn followed by `and' or `plus'. On those machines, ! 931: define the appropriate patterns. Use the names `incscc' and ! 932: `decscc', respectively, for the the patterns which perform `plus' ! 933: or `minus' operations on condition code values. See `rs6000.md' ! 934: for some examples. The GNU Superoptizer can be used to find such ! 935: instruction sequences on other machines. ! 936: ! 937: You need not define `STORE_FLAG_VALUE' if the machine has no ! 938: store-flag instructions. ! 939: ! 940: `FLOAT_STORE_FLAG_VALUE' ! 941: A C expression that gives a non-zero floating point value that is ! 942: returned when comparison operators with floating-point results are ! 943: true. Define this macro on machine that have comparison ! 944: operations that return floating-point values. If there are no ! 945: such operations, do not define this macro. ! 946: ! 947: `Pmode' ! 948: An alias for the machine mode for pointers. Normally the ! 949: definition can be ! 950: ! 951: #define Pmode SImode ! 952: ! 953: `FUNCTION_MODE' ! 954: An alias for the machine mode used for memory references to ! 955: functions being called, in `call' RTL expressions. On most ! 956: machines this should be `QImode'. ! 957: ! 958: `INTEGRATE_THRESHOLD (DECL)' ! 959: A C expression for the maximum number of instructions above which ! 960: the function DECL should not be inlined. DECL is a ! 961: `FUNCTION_DECL' node. ! 962: ! 963: The default definition of this macro is 64 plus 8 times the number ! 964: of arguments that the function accepts. Some people think a larger ! 965: threshold should be used on RISC machines. ! 966: ! 967: `SCCS_DIRECTIVE' ! 968: Define this if the preprocessor should ignore `#sccs' directives ! 969: and print no error message. ! 970: ! 971: `HANDLE_PRAGMA (STREAM)' ! 972: Define this macro if you want to implement any pragmas. If ! 973: defined, it should be a C statement to be executed when `#pragma' ! 974: is seen. The argument STREAM is the stdio input stream from which ! 975: the source text can be read. ! 976: ! 977: It is generally a bad idea to implement new uses of `#pragma'. The ! 978: only reason to define this macro is for compatibility with other ! 979: compilers that do support `#pragma' for the sake of any user ! 980: programs which already use it. ! 981: ! 982: `DOLLARS_IN_IDENTIFIERS' ! 983: Define this macro to control use of the character `$' in identifier ! 984: names. The value should be 0, 1, or 2. 0 means `$' is not allowed ! 985: by default; 1 means it is allowed by default if `-traditional' is ! 986: used; 2 means it is allowed by default provided `-ansi' is not ! 987: used. 1 is the default; there is no need to define this macro in ! 988: that case. ! 989: ! 990: `NO_DOLLAR_IN_LABEL' ! 991: Define this macro if the assembler does not accept the character ! 992: `$' in label names. By default constructors and destructors in ! 993: G++ have `$' in the identifiers. If this macro is defined, `.' is ! 994: used instead. ! 995: ! 996: `DEFAULT_MAIN_RETURN' ! 997: Define this macro if the target system expects every program's ! 998: `main' function to return a standard "success" value by default ! 999: (if no other value is explicitly returned). ! 1000: ! 1001: The definition should be a C statement (sans semicolon) to ! 1002: generate the appropriate rtl instructions. It is used only when ! 1003: compiling the end of `main'. ! 1004: ! 1005: `HAVE_ATEXIT' ! 1006: Define this if the target system supports the function `atexit' ! 1007: from the ANSI C standard. If this is not defined, and ! 1008: `INIT_SECTION_ASM_OP' is not defined, a default `exit' function ! 1009: will be provided to support C++. ! 1010: ! 1011: `EXIT_BODY' ! 1012: Define this if your `exit' function needs to do something besides ! 1013: calling an external function `_cleanup' before terminating with ! 1014: `_exit'. The `EXIT_BODY' macro is only needed if netiher ! 1015: `HAVE_ATEXIT' nor `INIT_SECTION_ASM_OP' are defined. ! 1016: ! 1017: `INSN_SETS_ARE_DELAYED (INSN)' ! 1018: Define this macro as a C expression that is nonzero if it is safe ! 1019: for the delay slot scheduler to place instructions in the delay ! 1020: slot of INSN, even if they appear to use a resource set or ! 1021: clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GNU ! 1022: CC knows that every `call_insn' has this behavior. On machines ! 1023: where some `insn' or `jump_insn' is really a function call and ! 1024: hence has this behavior, you should define this macro. ! 1025: ! 1026: You need not define this macro if it would always return zero. ! 1027: ! 1028: `INSN_REFERENCES_ARE_DELAYED (INSN)' ! 1029: Define this macro as a C expression that is nonzero if it is safe ! 1030: for the delay slot scheduler to place instructions in the delay ! 1031: slot of INSN, even if they appear to set or clobber a resource ! 1032: referenced in INSN. INSN is always a `jump_insn' or an `insn'. ! 1033: On machines where some `insn' or `jump_insn' is really a function ! 1034: call and its operands are registers whose use is actually in the ! 1035: subroutine it calls, you should define this macro. Doing so ! 1036: allows the delay slot scheduler to move instructions which copy ! 1037: arguments into the argument registers into the delay slot of INSN. ! 1038: ! 1039: You need not define this macro if it would always return zero. ! 1040:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.