|
|
1.1 ! root 1: Info file gcc.info, produced by Makeinfo, -*- Text -*- from input ! 2: file gcc.texinfo. ! 3: ! 4: This file documents the use and the internals of the GNU compiler. ! 5: ! 6: Copyright (C) 1988, 1989 Free Software Foundation, Inc. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of this ! 9: manual provided the copyright notice and this permission notice are ! 10: preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the sections entitled ``GNU General Public License'' and ! 15: ``Protect Your Freedom--Fight `Look And Feel''' are included exactly ! 16: as in the original, and provided that the entire resulting derived ! 17: work is distributed under the terms of a permission notice identical ! 18: to this one. ! 19: ! 20: Permission is granted to copy and distribute translations of this ! 21: manual into another language, under the above conditions for modified ! 22: versions, except that the sections entitled ``GNU General Public ! 23: License'' and ``Protect Your Freedom--Fight `Look And Feel''' and ! 24: this permission notice may be included in translations approved by ! 25: the Free Software Foundation instead of in the original English. ! 26: ! 27: ! 28: ! 29: File: gcc.info, Node: Assembler Format, Prev: Misc, Up: Machine Macros ! 30: ! 31: Output of Assembler Code ! 32: ======================== ! 33: ! 34: `ASM_SPEC' ! 35: A C string constant that tells the GNU CC driver program options ! 36: to pass to the assembler. It can also specify how to translate ! 37: options you give to GNU CC into options for GNU CC to pass to ! 38: the assembler. See the file `tm-sun3.h' for an example of this. ! 39: ! 40: Do not define this macro if it does not need to do anything. ! 41: ! 42: `LINK_SPEC' ! 43: A C string constant that tells the GNU CC driver program options ! 44: to pass to the linker. It can also specify how to translate ! 45: options you give to GNU CC into options for GNU CC to pass to ! 46: the linker. ! 47: ! 48: Do not define this macro if it does not need to do anything. ! 49: ! 50: `LIB_SPEC' ! 51: Another C string constant used much like `LINK_SPEC'. The ! 52: difference between the two is that `LIBS_SPEC' is used at the ! 53: end of the command given to the linker. ! 54: ! 55: If this macro is not defined, a default is provided that loads ! 56: the standard C library from the usual place. See `gcc.c'. ! 57: ! 58: `STARTFILE_SPEC' ! 59: Another C string constant used much like `LINK_SPEC'. The ! 60: difference between the two is that `STARTFILE_SPEC' is used at ! 61: the very beginning of the command given to the linker. ! 62: ! 63: If this macro is not defined, a default is provided that loads ! 64: the standard C startup file from the usual place. See `gcc.c'. ! 65: ! 66: `STANDARD_EXEC_PREFIX' ! 67: Define this macro as a C string constant if you wish to override ! 68: the standard choice of `/usr/local/lib/gcc-' as the default ! 69: prefix to try when searching for the executable files of the ! 70: compiler. ! 71: ! 72: The prefix specified by the `-B' option, if any, is tried before ! 73: the default prefix. After the default prefix, if the executable ! 74: is not found that way, `/usr/lib/gcc-' is tried next; then the ! 75: directories in your search path for shell commands are searched. ! 76: ! 77: `STANDARD_STARTFILE_PREFIX' ! 78: Define this macro as a C string constant if you wish to override ! 79: the standard choice of `/usr/local/lib/' as the default prefix ! 80: to try when searching for startup files such as `crt0.o'. ! 81: ! 82: In this search, all the prefixes tried for executable files are ! 83: tried first. Then comes the default startfile prefix specified ! 84: by this macro, followed by the prefixes `/lib/' and `/usr/lib/' ! 85: as last resorts. ! 86: ! 87: `ASM_FILE_START (STREAM)' ! 88: A C expression which outputs to the stdio stream STREAM some ! 89: appropriate text to go at the start of an assembler file. ! 90: ! 91: Normally this macro is defined to output a line containing ! 92: `#NO_APP', which is a comment that has no effect on most ! 93: assemblers but tells the GNU assembler that it can save time by ! 94: not checking for certain assembler constructs. ! 95: ! 96: On systems that use SDB, it is necessary to output certain ! 97: commands; see `tm-attasm.h'. ! 98: ! 99: `ASM_FILE_END (STREAM)' ! 100: A C expression which outputs to the stdio stream STREAM some ! 101: appropriate text to go at the end of an assembler file. ! 102: ! 103: If this macro is not defined, the default is to output nothing ! 104: special at the end of the file. Most systems don't require any ! 105: definition. ! 106: ! 107: On systems that use SDB, it is necessary to output certain ! 108: commands; see `tm-attasm.h'. ! 109: ! 110: `ASM_IDENTIFY_GCC (FILE)' ! 111: A C statement to output assembler commands which will identify ! 112: the object file as having been compiled with GNU CC (or another ! 113: GNU compiler). ! 114: ! 115: If you don't define this macro, the string `gcc_compiled.:' is ! 116: output. This string is calculated to define a symbol which, on ! 117: BSD systems, will never be defined for any other reason. GDB ! 118: checks for the presence of this symbol when reading the symbol ! 119: table of an executable. ! 120: ! 121: On non-BSD systems, you must arrange communication with GDB in ! 122: some other fashion. If GDB is not used on your system, you can ! 123: define this macro with an empty body. ! 124: ! 125: `ASM_APP_ON' ! 126: A C string constant for text to be output before each `asm' ! 127: statement or group of consecutive ones. Normally this is ! 128: `"#APP"', which is a comment that has no effect on most ! 129: assemblers but tells the GNU assembler that it must check the ! 130: lines that follow for all valid assembler constructs. ! 131: ! 132: `ASM_APP_OFF' ! 133: A C string constant for text to be output after each `asm' ! 134: statement or group of consecutive ones. Normally this is ! 135: `"#NO_APP"', which tells the GNU assembler to resume making the ! 136: time-saving assumptions that are valid for ordinary compiler ! 137: output. ! 138: ! 139: `TEXT_SECTION_ASM_OP' ! 140: A C string constant for the assembler operation that should ! 141: precede instructions and read-only data. Normally `".text"' is ! 142: right. ! 143: ! 144: `DATA_SECTION_ASM_OP' ! 145: A C string constant for the assembler operation to identify the ! 146: following data as writable initialized data. Normally `".data"' ! 147: is right. ! 148: ! 149: `EXTRA_SECTIONS' ! 150: A list of names for sections other than the standard two, which ! 151: are `in_text' and `in_data'. You need not define this macro on ! 152: a system with no other sections (that GCC needs to use). ! 153: ! 154: `EXTRA_SECTION_FUNCTIONS' ! 155: One or more functions to be defined in `varasm.c'. These ! 156: functions should do jobs analogous to those of `text_section' ! 157: and `data_section', for your additional sections. Do not define ! 158: this macro if you do not define `EXTRA_SECTIONS'. ! 159: ! 160: `SELECT_SECTION (EXP)' ! 161: A C statement or statements to switch to the appropriate section ! 162: for output of EXP. You can assume that EXP is either a ! 163: `VAR_DECL' node or a constant of some sort. Select the section ! 164: by calling `text_section' or one of the alternatives for other ! 165: sections. ! 166: ! 167: Do not define this macro if you use only the standard two ! 168: sections and put all read-only variables and constants in the ! 169: text section. ! 170: ! 171: `SELECT_RTX_SECTION (MODE, RTX)' ! 172: A C statement or statements to switch to the appropriate section ! 173: for output of RTX in mode MODE. You can assume that RTX is some ! 174: kind of constant in RTL. The argument MODE is redundant except ! 175: in the case of a `const_int' rtx. Select the section by calling ! 176: `text_section' or one of the alternatives for other sections. ! 177: ! 178: Do not define this macro if you use only the standard two ! 179: sections and put all constants in the text section. ! 180: ! 181: `REGISTER_NAMES' ! 182: A C initializer containing the assembler's names for the machine ! 183: registers, each one as a C string constant. This is what ! 184: translates register numbers in the compiler into assembler ! 185: language. ! 186: ! 187: `DBX_REGISTER_NUMBER (REGNO)' ! 188: A C expression that returns the DBX register number for the ! 189: compiler register number REGNO. In simple cases, the value of ! 190: this expression may be REGNO itself. But sometimes there are ! 191: some registers that the compiler knows about and DBX does not, ! 192: or vice versa. In such cases, some register may need to have ! 193: one number in the compiler and another for DBX. ! 194: ! 195: `DBX_DEBUGGING_INFO' ! 196: Define this macro if GNU CC should produce debugging output for ! 197: DBX in response to the `-g' option. ! 198: ! 199: `SDB_DEBUGGING_INFO' ! 200: Define this macro if GNU CC should produce debugging output for ! 201: SDB in response to the `-g' option. ! 202: ! 203: `PUT_SDB_OP' ! 204: Define these macros to override the assembler syntax for the ! 205: special SDB assembler directives. See `sdbout.c' for a list of ! 206: these macros and their arguments. If the standard syntax is ! 207: used, you need not define them yourself. ! 208: ! 209: `SDB_GENERATE_FAKE' ! 210: Define this macro to override the usual method of constructing a ! 211: dummy name for anonymous structure and union types. See ! 212: `sdbout.c' for more information. ! 213: ! 214: `DBX_NO_XREFS' ! 215: Define this macro if DBX on your system does not support the ! 216: construct `xsTAGNAME'. On some systems, this construct is used ! 217: to describe a forward reference to a structure named TAGNAME. ! 218: On other systems, this construct is not supported at all. ! 219: ! 220: `DBX_CONTIN_LENGTH' ! 221: A symbol name in DBX-format debugging information is normally ! 222: continued (split into two separate `.stabs' directives) when it ! 223: exceeds a certain length (by default, 80 characters). On some ! 224: operating systems, DBX requires this splitting; on others, ! 225: splitting must not be done. You can inhibit splitting by ! 226: defining this macro with the value zero. You can override the ! 227: default splitting-length by defining this macro as an expression ! 228: for the length you desire. ! 229: ! 230: `DBX_CONTIN_CHAR' ! 231: Normally continuation is indicated by adding a `\' character to ! 232: the end of a `.stabs' string when a continuation follows. To ! 233: use a different character instead, define this macro as a ! 234: character constant for the character you want to use. Do not ! 235: define this macro if backslash is correct for your system. ! 236: ! 237: `DBX_STATIC_STAB_DATA_SECTION' ! 238: Define this macro if it is necessary to go to the data section ! 239: before outputting the `.stabs' pseudo-op for a non-global static ! 240: variable. ! 241: ! 242: `ASM_OUTPUT_LABEL (STREAM, NAME)' ! 243: A C statement (sans semicolon) to output to the stdio stream ! 244: STREAM the assembler definition of a label named NAME. Use the ! 245: expression `assemble_name (STREAM, NAME)' to output the name ! 246: itself; before and after that, output the additional assembler ! 247: syntax for defining the name, and a newline. ! 248: ! 249: `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)' ! 250: A C statement (sans semicolon) to output to the stdio stream ! 251: STREAM any text necessary for declaring the name NAME of a ! 252: function which is being defined. This macro is responsible for ! 253: outputting the label definition (perhaps using ! 254: `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL' ! 255: tree node representing the function. ! 256: ! 257: If this macro is not defined, then the function name is defined ! 258: in the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). ! 259: ! 260: `ASM_GLOBALIZE_LABEL (STREAM, NAME)' ! 261: A C statement (sans semicolon) to output to the stdio stream ! 262: STREAM some commands that will make the label NAME global; that ! 263: is, available for reference from other files. Use the ! 264: expression `assemble_name (STREAM, NAME)' to output the name ! 265: itself; before and after that, output the additional assembler ! 266: syntax for making that name global, and a newline. ! 267: ! 268: `ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)' ! 269: A C statement (sans semicolon) to output to the stdio stream ! 270: STREAM any text necessary for declaring the name of an external ! 271: symbol named NAME which is referenced in this compilation but ! 272: not defined. The value of DECL is the tree node for the ! 273: declaration. ! 274: ! 275: This macro need not be defined if it does not need to output ! 276: anything. The GNU assembler and most Unix assemblers don't ! 277: require anything. ! 278: ! 279: `ASM_OUTPUT_LABELREF (STREAM, NAME)' ! 280: A C statement to output to the stdio stream STREAM a reference ! 281: in assembler syntax to a label named NAME. The character `_' ! 282: should be added to the front of the name, if that is customary ! 283: on your operating system, as it is in most Berkeley Unix ! 284: systems. This macro is used in `assemble_name'. ! 285: ! 286: `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)' ! 287: A C statement to store into the string STRING a label whose name ! 288: is made from the string PREFIX and the number NUM. ! 289: ! 290: This string, when output subsequently by `ASM_OUTPUT_LABELREF', ! 291: should produce the same output that `ASM_OUTPUT_INTERNAL_LABEL' ! 292: would produce with the same PREFIX and NUM. ! 293: ! 294: `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)' ! 295: A C statement to output to the stdio stream STREAM a label whose ! 296: name is made from the string PREFIX and the number NUM. These ! 297: labels are used for internal purposes, and there is no reason ! 298: for them to appear in the symbol table of the object file. On ! 299: many systems, the letter `L' at the beginning of a label has ! 300: this effect. The usual definition of this macro is as follows: ! 301: ! 302: fprintf (STREAM, "L%s%d:\n", PREFIX, NUM) ! 303: ! 304: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)' ! 305: Define this if the label before a jump-table needs to be output ! 306: specially. The first three arguments are the same as for ! 307: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the ! 308: jump-table which follows (a `jump_insn' containing an `addr_vec' ! 309: or `addr_diff_vec'). ! 310: ! 311: This feature is used on system V to output a `swbeg' statement ! 312: for the table. ! 313: ! 314: If this macro is not defined, these labels are output with ! 315: `ASM_OUTPUT_INTERNAL_LABEL'. ! 316: ! 317: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)' ! 318: Define this if something special must be output at the end of a ! 319: jump-table. The definition should be a C statement to be ! 320: executed after the assembler code for the table is written. It ! 321: should write the appropriate code to stdio stream STREAM. The ! 322: argument TABLE is the jump-table insn, and NUM is the ! 323: label-number of the preceding label. ! 324: ! 325: If this macro is not defined, nothing special is output at the ! 326: end of the jump-table. ! 327: ! 328: `ASM_OUTPUT_ALIGN_CODE (FILE)' ! 329: A C expression to output text to align the location counter in ! 330: the way that is desirable at a point in the code that is reached ! 331: only by jumping. ! 332: ! 333: This macro need not be defined if you don't want any special ! 334: alignment to be done at such a time. Most machine descriptions ! 335: do not currently define the macro. ! 336: ! 337: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)' ! 338: A C expression to assign to OUTVAR (which is a variable of type ! 339: `char *') a newly allocated string made from the string NAME and ! 340: the number NUMBER, with some suitable punctuation added. Use ! 341: `alloca' to get space for the string. ! 342: ! 343: This string will be used as the argument to ! 344: `ASM_OUTPUT_LABELREF' to produce an assembler label for an ! 345: internal static variable whose name is NAME. Therefore, the ! 346: string must be such as to result in valid assembler code. The ! 347: argument NUMBER is different each time this macro is executed; ! 348: it prevents conflicts between similarly-named internal static ! 349: variables in different scopes. ! 350: ! 351: Ideally this string should not be a valid C identifier, to ! 352: prevent any conflict with the user's own symbols. Most ! 353: assemblers allow periods or percent signs in assembler symbols; ! 354: putting at least one of these between the name and the number ! 355: will suffice. ! 356: ! 357: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)' ! 358: A C expression to output to STREAM some assembler code which ! 359: will push hard register number REGNO onto the stack. The code ! 360: need not be optimal, since this macro is used only when profiling. ! 361: ! 362: `ASM_OUTPUT_REG_POP (STREAM, REGNO)' ! 363: A C expression to output to STREAM some assembler code which ! 364: will pop hard register number REGNO off of the stack. The code ! 365: need not be optimal, since this macro is used only when profiling. ! 366: ! 367: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)' ! 368: This macro should be provided on machines where the addresses in ! 369: a dispatch table are relative to the table's own address. ! 370: ! 371: The definition should be a C statement to output to the stdio ! 372: stream STREAM an assembler pseudo-instruction to generate a ! 373: difference between two labels. VALUE and REL are the numbers of ! 374: two internal labels. The definitions of these labels are output ! 375: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in ! 376: the same way here. For example, ! 377: ! 378: fprintf (STREAM, "\t.word L%d-L%d\n", ! 379: VALUE, REL) ! 380: ! 381: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)' ! 382: This macro should be provided on machines where the addresses in ! 383: a dispatch table are absolute. ! 384: ! 385: The definition should be a C statement to output to the stdio ! 386: stream STREAM an assembler pseudo-instruction to generate a ! 387: reference to a label. VALUE is the number of an internal label ! 388: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. ! 389: For example, ! 390: ! 391: fprintf (STREAM, "\t.word L%d\n", VALUE) ! 392: ! 393: `ASM_OUTPUT_DOUBLE (STREAM, VALUE)' ! 394: A C statement to output to the stdio stream STREAM an assembler ! 395: instruction to assemble a `double' constant whose value is ! 396: VALUE. VALUE will be a C expression of type `double'. ! 397: ! 398: `ASM_OUTPUT_FLOAT (STREAM, VALUE)' ! 399: A C statement to output to the stdio stream STREAM an assembler ! 400: instruction to assemble a `float' constant whose value is VALUE. ! 401: vALUE will be a C expression of type `float'. ! 402: ! 403: `ASM_OUTPUT_INT (STREAM, EXP)' ! 404: `ASM_OUTPUT_SHORT (STREAM, EXP)' ! 405: `ASM_OUTPUT_CHAR (STREAM, EXP)' ! 406: A C statement to output to the stdio stream STREAM an assembler ! 407: instruction to assemble a `int', `short' or `char' constant ! 408: whose value is VALUE. The argument EXP will be an RTL ! 409: expression which represents a constant value. Use ! 410: `output_addr_const (EXP)' to output this value as an assembler ! 411: expression. ! 412: ! 413: `ASM_OUTPUT_DOUBLE_INT (STREAM, EXP)' ! 414: A C statement to output to the stdio stream STREAM an assembler ! 415: instruction to assemble a `long long' constant whose value is ! 416: EXP. The argument EXP will be an RTL expression which ! 417: represents a constant value. It may be a `const_double' RTX, or ! 418: it may be an ordinary single-precision constant. In the latter ! 419: case, you should zero-extend it. ! 420: ! 421: `ASM_OUTPUT_BYTE (STREAM, VALUE)' ! 422: A C statement to output to the stdio stream STREAM an assembler ! 423: instruction to assemble a single byte containing the number VALUE. ! 424: ! 425: `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)' ! 426: A C statement to output to the stdio stream STREAM an assembler ! 427: instruction to assemble a string constant containing the LEN ! 428: bytes at PTR. PTR will be a C expression of type `char *' and ! 429: LEN a C expression of type `int'. ! 430: ! 431: If the assembler has a `.ascii' pseudo-op as found in the ! 432: Berkeley Unix assembler, do not define the macro ! 433: `ASM_OUTPUT_ASCII'. ! 434: ! 435: `ASM_OUTPUT_SKIP (STREAM, NBYTES)' ! 436: A C statement to output to the stdio stream STREAM an assembler ! 437: instruction to advance the location counter by NBYTES bytes. ! 438: NBYTES will be a C expression of type `int'. ! 439: ! 440: `ASM_OUTPUT_ALIGN (STREAM, POWER)' ! 441: A C statement to output to the stdio stream STREAM an assembler ! 442: instruction to advance the location counter to a multiple of 2 ! 443: to the POWER bytes. POWER will be a C expression of type `int'. ! 444: ! 445: `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)' ! 446: A C statement (sans semicolon) to output to the stdio stream ! 447: STREAM the assembler definition of a common-label named NAME ! 448: whose size is SIZE bytes. The variable ROUNDED is the size ! 449: rounded up to whatever alignment the caller wants. ! 450: ! 451: Use the expression `assemble_name (STREAM, NAME)' to output the ! 452: name itself; before and after that, output the additional ! 453: assembler syntax for defining the name, and a newline. ! 454: ! 455: This macro controls how the assembler definitions of ! 456: uninitialized global variables are output. ! 457: ! 458: `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)' ! 459: A C statement (sans semicolon) to output to the stdio stream ! 460: STREAM the assembler definition of a local-common-label named ! 461: NAME whose size is SIZE bytes. The variable ROUNDED is the size ! 462: rounded up to whatever alignment the caller wants. ! 463: ! 464: Use the expression `assemble_name (STREAM, NAME)' to output the ! 465: name itself; before and after that, output the additional ! 466: assembler syntax for defining the name, and a newline. ! 467: ! 468: This macro controls how the assembler definitions of ! 469: uninitialized static variables are output. ! 470: ! 471: `ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)' ! 472: A C statment to output DBX or SDB debugging information which ! 473: indicates that filename NAME is the current source file to the ! 474: stdio stream STREAM. ! 475: ! 476: This macro need not be defined if the standard form of debugging ! 477: information for the debugger in use is appropriate. ! 478: ! 479: `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)' ! 480: A C statment to output DBX or SDB debugging information before ! 481: code for line number LINE of the current source file to the ! 482: stdio stream STREAM. ! 483: ! 484: This macro need not be defined if the standard form of debugging ! 485: information for the debugger in use is appropriate. ! 486: ! 487: `ASM_OUTPUT_IDENT (STREAM, STRING)' ! 488: A C statement to output something to the assembler file to ! 489: handle a `#ident' directive containing the text STRING. If this ! 490: macro is not defined, nothing is output for a `#ident' directive. ! 491: ! 492: `TARGET_BELL' ! 493: A C constant expression for the integer value for escape ! 494: sequence `\a'. ! 495: ! 496: `TARGET_BS' ! 497: `TARGET_TAB' ! 498: `TARGET_NEWLINE' ! 499: C constant expressions for the integer values for escape ! 500: sequences `\b', `\t' and `\n'. ! 501: ! 502: `TARGET_VT' ! 503: `TARGET_FF' ! 504: `TARGET_CR' ! 505: C constant expressions for the integer values for escape ! 506: sequences `\v', `\f' and `\r'. ! 507: ! 508: `ASM_OUTPUT_OPCODE (STREAM, PTR)' ! 509: Define this macro if you are using an unusual assembler that ! 510: requires different names for the machine instructions. ! 511: ! 512: The definition is a C statement or statements which output an ! 513: assembler instruction opcode to the stdio stream STREAM. The ! 514: macro-operand PTR is a variable of type `char *' which points to ! 515: the opcode name in its ``internal'' form--the form that is ! 516: written in the machine description. The definition should ! 517: output the opcode name to STREAM, performing any translation you ! 518: desire, and increment the variable PTR to point at the end of ! 519: the opcode so that it will not be output twice. ! 520: ! 521: In fact, your macro definition may process less than the entire ! 522: opcode name, or more than the opcode name; but if you want to ! 523: process text that includes `%'-sequences to substitute operands, ! 524: you must take care of the substitution yourself. Just be sure ! 525: to increment PTR over whatever text should not be output normally. ! 526: ! 527: If you need to look at the operand values, they can be found as ! 528: the elements of `recog_operand'. ! 529: ! 530: If the macro definition does nothing, the instruction is output ! 531: in the usual way. ! 532: ! 533: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)' ! 534: If defined, a C statement to be executed just prior to the ! 535: output of assembler code for INSN, to modify the extracted ! 536: operands so they will be output differently. ! 537: ! 538: Here the argument OPVEC is the vector containing the operands ! 539: extracted from INSN, and NOPERANDS is the number of elements of ! 540: the vector which contain meaningful data for this insn. The ! 541: contents of this vector are what will be used to convert the ! 542: insn template into assembler code, so you can change the ! 543: assembler output by changing the contents of the vector. ! 544: ! 545: This macro is useful when various assembler syntaxes share a ! 546: single file of instruction patterns; by defining this macro ! 547: differently, you can cause a large class of instructions to be ! 548: output differently (such as with rearranged operands). ! 549: Naturally, variations in assembler syntax affecting individual ! 550: insn patterns ought to be handled by writing conditional output ! 551: routines in those patterns. ! 552: ! 553: If this macro is not defined, it is equivalent to a null ! 554: statement. ! 555: ! 556: `PRINT_OPERAND (STREAM, X, CODE)' ! 557: A C compound statement to output to stdio stream STREAM the ! 558: assembler syntax for an instruction operand X. X is an RTL ! 559: expression. ! 560: ! 561: CODE is a value that can be used to specify one of several ways ! 562: of printing the operand. It is used when identical operands ! 563: must be printed differently depending on the context. CODE ! 564: comes from the `%' specification that was used to request ! 565: printing of the operand. If the specification was just `%DIGIT' ! 566: then CODE is 0; if the specification was `%LTR DIGIT' then CODE ! 567: is the ASCII code for LTR. ! 568: ! 569: If X is a register, this macro should print the register's name. ! 570: The names can be found in an array `reg_names' whose type is ! 571: `char *[]'. `reg_names' is initialized from `REGISTER_NAMES'. ! 572: ! 573: When the machine description has a specification `%PUNCT' (a `%' ! 574: followed by a punctuation character), this macro is called with ! 575: a null pointer for X and the punctuation character for CODE. ! 576: ! 577: `PRINT_OPERAND_PUNCT_VALID_P (CODE)' ! 578: A C expression which evaluates to true if CODE is a valid ! 579: punctuation character for use in the `PRINT_OPERAND' macro. If ! 580: `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no ! 581: punctuation characters (except for the standard one, `%') are ! 582: used in this way. ! 583: ! 584: `PRINT_OPERAND_ADDRESS (STREAM, X)' ! 585: A C compound statement to output to stdio stream STREAM the ! 586: assembler syntax for an instruction operand that is a memory ! 587: reference whose address is X. X is an RTL expression. ! 588: ! 589: `ASM_OPEN_PAREN' ! 590: `ASM_CLOSE_PAREN' ! 591: These macros are defined as C string constant, describing the ! 592: syntax in the assembler for grouping arithmetic expressions. ! 593: The following definitions are correct for most assemblers: ! 594: ! 595: #define ASM_OPEN_PAREN "(" ! 596: #define ASM_CLOSE_PAREN ")" ! 597: ! 598: ! 599: ! 600: File: gcc.info, Node: Config, Prev: Machine Macros, Up: Top ! 601: ! 602: The Configuration File ! 603: ********************** ! 604: ! 605: The configuration file `xm-MACHINE.h' contains macro definitions that ! 606: describe the machine and system on which the compiler is running. ! 607: Most of the values in it are actually the same on all machines that ! 608: GNU CC runs on, so large parts of all configuration files are ! 609: identical. But there are some macros that vary: ! 610: ! 611: `FAILURE_EXIT_CODE' ! 612: A C expression for the status code to be returned when the ! 613: compiler exits after serious errors. ! 614: ! 615: `SUCCESS_EXIT_CODE' ! 616: A C expression for the status code to be returned when the ! 617: compiler exits without serious errors. ! 618: ! 619: In addition, configuration files for system V define `bcopy', `bzero' ! 620: and `bcmp' as aliases. Some files define `alloca' as a macro when ! 621: compiled with GNU CC, in order to take advantage of the benefit of ! 622: GNU CC's built-in `alloca'. ! 623:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.