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