|
|
1.1 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input ! 2: file gcc.texi. ! 3: ! 4: This file documents the use and the internals of the GNU compiler. ! 5: ! 6: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of ! 9: this manual provided the copyright notice and this permission notice ! 10: are 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 General Public License" is included ! 15: exactly as in the original, and provided that the entire resulting ! 16: derived work is distributed under the terms of a permission notice ! 17: 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 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: File: gcc.info, Node: Frame Registers, Next: Elimination, Prev: Frame Layout, Up: Stack and Calling ! 28: ! 29: Registers That Address the Stack Frame ! 30: -------------------------------------- ! 31: ! 32: `STACK_POINTER_REGNUM' ! 33: The register number of the stack pointer register, which must ! 34: also be a fixed register according to `FIXED_REGISTERS'. On most ! 35: machines, the hardware determines which register this is. ! 36: ! 37: `FRAME_POINTER_REGNUM' ! 38: The register number of the frame pointer register, which is used ! 39: to access automatic variables in the stack frame. On some ! 40: machines, the hardware determines which register this is. On ! 41: other machines, you can choose any register you wish for this ! 42: purpose. ! 43: ! 44: `ARG_POINTER_REGNUM' ! 45: The register number of the arg pointer register, which is used to ! 46: access the function's argument list. On some machines, this is ! 47: the same as the frame pointer register. On some machines, the ! 48: hardware determines which register this is. On other machines, ! 49: you can choose any register you wish for this purpose. If this ! 50: is not the same register as the frame pointer register, then you ! 51: must mark it as a fixed register according to `FIXED_REGISTERS', ! 52: or arrange to be able to eliminate it (*note Elimination::.). ! 53: ! 54: `STATIC_CHAIN_REGNUM' ! 55: `STATIC_CHAIN_INCOMING_REGNUM' ! 56: Register numbers used for passing a function's static chain ! 57: pointer. If register windows are used, ! 58: `STATIC_CHAIN_INCOMING_REGNUM' is the register number as seen by ! 59: the called function, while `STATIC_CHAIN_REGNUM' is the register ! 60: number as seen by the calling function. If these registers are ! 61: the same, `STATIC_CHAIN_INCOMING_REGNUM' need not be defined. ! 62: ! 63: The static chain register need not be a fixed register. ! 64: ! 65: If the static chain is passed in memory, these macros should not ! 66: be defined; instead, the next two macros should be defined. ! 67: ! 68: `STATIC_CHAIN' ! 69: `STATIC_CHAIN_INCOMING' ! 70: If the static chain is passed in memory, these macros provide rtx ! 71: giving `mem' expressions that denote where they are stored. ! 72: `STATIC_CHAIN' and `STATIC_CHAIN_INCOMING' give the locations as ! 73: seen by the calling and called functions, respectively. Often ! 74: the former will be at an offset from the stack pointer and the ! 75: latter at an offset from the frame pointer. ! 76: ! 77: The variables `stack_pointer_rtx', `frame_pointer_rtx', and ! 78: `arg_pointer_rtx' will have been initialized prior to the use of ! 79: these macros and should be used to refer to those items. ! 80: ! 81: If the static chain is passed in a register, the two previous ! 82: macros should be defined instead. ! 83: ! 84: ! 85: File: gcc.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling ! 86: ! 87: Eliminating Frame Pointer and Arg Pointer ! 88: ----------------------------------------- ! 89: ! 90: `FRAME_POINTER_REQUIRED' ! 91: A C expression which is nonzero if a function must have and use a ! 92: frame pointer. This expression is evaluated in the reload pass. ! 93: If its value is nonzero the function will have a frame pointer. ! 94: ! 95: The expression can in principle examine the current function and ! 96: decide according to the facts, but on most machines the constant ! 97: 0 or the constant 1 suffices. Use 0 when the machine allows code ! 98: to be generated with no frame pointer, and doing so saves some ! 99: time or space. Use 1 when there is no possible advantage to ! 100: avoiding a frame pointer. ! 101: ! 102: In certain cases, the compiler does not know how to produce valid ! 103: code without a frame pointer. The compiler recognizes those ! 104: cases and automatically gives the function a frame pointer ! 105: regardless of what `FRAME_POINTER_REQUIRED' says. You don't need ! 106: to worry about them. ! 107: ! 108: In a function that does not require a frame pointer, the frame ! 109: pointer register can be allocated for ordinary usage, unless you ! 110: mark it as a fixed register. See `FIXED_REGISTERS' for more ! 111: information. ! 112: ! 113: This macro is ignored and need not be defined if `ELIMINABLE_REGS' ! 114: is defined. ! 115: ! 116: `INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)' ! 117: A C statement to store in the variable DEPTH-VAR the difference ! 118: between the frame pointer and the stack pointer values ! 119: immediately after the function prologue. The value would be ! 120: computed from information such as the result of `get_frame_size ! 121: ()' and the tables of registers `regs_ever_live' and ! 122: `call_used_regs'. ! 123: ! 124: If `ELIMINABLE_REGS' is defined, this macro will be not be used ! 125: and need not be defined. Otherwise, it must be defined even if ! 126: `FRAME_POINTER_REQUIRED' is defined to always be true; in that ! 127: case, you may set DEPTH-VAR to anything. ! 128: ! 129: `ELIMINABLE_REGS' ! 130: If defined, this macro specifies a table of register pairs used to ! 131: eliminate unneeded registers that point into the stack frame. If ! 132: it is not defined, the only elimination attempted by the compiler ! 133: is to replace references to the frame pointer with references to ! 134: the stack pointer. ! 135: ! 136: The definition of this macro is a list of structure ! 137: initializations, each of which specifies an original and ! 138: replacement register. ! 139: ! 140: On some machines, the position of the argument pointer is not ! 141: known until the compilation is completed. In such a case, a ! 142: separate hard register must be used for the argument pointer. ! 143: This register can be eliminated by replacing it with either the ! 144: frame pointer or the argument pointer, depending on whether or ! 145: not the frame pointer has been eliminated. ! 146: ! 147: In this case, you might specify: ! 148: #define ELIMINABLE_REGS \ ! 149: {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ ! 150: {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ ! 151: {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} ! 152: ! 153: Note that the elimination of the argument pointer with the stack ! 154: pointer is specified first since that is the preferred ! 155: elimination. ! 156: ! 157: `CAN_ELIMINATE (FROM-REG, TO-REG)' ! 158: A C expression that returns non-zero if the compiler is allowed ! 159: to try to replace register number FROM-REG with register number ! 160: TO-REG. This macro need only be defined if `ELIMINABLE_REGS' is ! 161: defined, and will usually be the constant 1, since most of the ! 162: cases preventing register elimination are things that the ! 163: compiler already knows about. ! 164: ! 165: `INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)' ! 166: This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It ! 167: specifies the initial difference between the specified pair of ! 168: registers. This macro must be defined if `ELIMINABLE_REGS' is ! 169: defined. ! 170: ! 171: `LONGJMP_RESTORE_FROM_STACK' ! 172: Define this macro if the `longjmp' function restores registers ! 173: from the stack frames, rather than from those saved specifically ! 174: by `setjmp'. Certain quantities must not be kept in registers ! 175: across a call to `setjmp' on such machines. ! 176: ! 177: ! 178: File: gcc.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling ! 179: ! 180: Passing Function Arguments on the Stack ! 181: --------------------------------------- ! 182: ! 183: The macros in this section control how arguments are passed on the ! 184: stack. See the following section for other macros that control ! 185: passing certain arguments in registers. ! 186: ! 187: `PROMOTE_PROTOTYPES' ! 188: Define this macro if an argument declared as `char' or `short' in ! 189: a prototype should actually be passed as an `int'. In addition ! 190: to avoiding errors in certain cases of mismatch, it also makes ! 191: for better code on certain machines. ! 192: ! 193: `PUSH_ROUNDING (NPUSHED)' ! 194: A C expression that is the number of bytes actually pushed onto ! 195: the stack when an instruction attempts to push NPUSHED bytes. ! 196: ! 197: If the target machine does not have a push instruction, do not ! 198: define this macro. That directs GNU CC to use an alternate ! 199: strategy: to allocate the entire argument block and then store ! 200: the arguments into it. ! 201: ! 202: On some machines, the definition ! 203: ! 204: #define PUSH_ROUNDING(BYTES) (BYTES) ! 205: ! 206: will suffice. But on other machines, instructions that appear to ! 207: push one byte actually push two bytes in an attempt to maintain ! 208: alignment. Then the definition should be ! 209: ! 210: #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) ! 211: ! 212: `ACCUMULATE_OUTGOING_ARGS' ! 213: If defined, the maximum amount of space required for outgoing ! 214: arguments will be computed and placed into the variable ! 215: `current_function_outgoing_args_size'. No space will be pushed ! 216: onto the stack for each call; instead, the function prologue ! 217: should increase the stack frame size by this amount. ! 218: ! 219: It is not proper to define both `PUSH_ROUNDING' and ! 220: `ACCUMULATE_OUTGOING_ARGS'. ! 221: ! 222: `REG_PARM_STACK_SPACE' ! 223: Define this macro if functions should assume that stack space has ! 224: been allocated for arguments even when their values are passed in ! 225: registers. ! 226: ! 227: The value of this macro is the size, in bytes, of the area ! 228: reserved for arguments passed in registers. ! 229: ! 230: This space can either be allocated by the caller or be a part of ! 231: the machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' ! 232: says which. ! 233: ! 234: `OUTGOING_REG_PARM_STACK_SPACE' ! 235: Define this if it is the responsibility of the caller to allocate ! 236: the area reserved for arguments passed in registers. ! 237: ! 238: If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls ! 239: whether the space for these arguments counts in the value of ! 240: `current_function_outgoing_args_size'. ! 241: ! 242: `STACK_PARMS_IN_REG_PARM_AREA' ! 243: Define this macro if `REG_PARM_STACK_SPACE' is defined but stack ! 244: parameters don't skip the area specified by ! 245: `REG_PARM_STACK_SPACE'. ! 246: ! 247: Normally, when a parameter is not passed in registers, it is ! 248: placed on the stack beyond the `REG_PARM_STACK_SPACE' area. ! 249: Defining this macro suppresses this behavior and causes the ! 250: parameter to be passed on the stack in its natural location. ! 251: ! 252: `RETURN_POPS_ARGS (FUNTYPE, STACK-SIZE)' ! 253: A C expression that should indicate the number of bytes of its own ! 254: arguments that a function pops on returning, or 0 if the function ! 255: pops no arguments and the caller must therefore pop them all ! 256: after the function returns. ! 257: ! 258: FUNTYPE is a C variable whose value is a tree node that describes ! 259: the function in question. Normally it is a node of type ! 260: `FUNCTION_TYPE' that describes the data type of the function. ! 261: From this it is possible to obtain the data types of the value and ! 262: arguments (if known). ! 263: ! 264: When a call to a library function is being considered, FUNTYPE ! 265: will contain an identifier node for the library function. Thus, ! 266: if you need to distinguish among various library functions, you ! 267: can do so by their names. Note that "library function" in this ! 268: context means a function used to perform arithmetic, whose name ! 269: is known specially in the compiler and was not mentioned in the C ! 270: code being compiled. ! 271: ! 272: STACK-SIZE is the number of bytes of arguments passed on the ! 273: stack. If a variable number of bytes is passed, it is zero, and ! 274: argument popping will always be the responsibility of the calling ! 275: function. ! 276: ! 277: On the Vax, all functions always pop their arguments, so the ! 278: definition of this macro is STACK-SIZE. On the 68000, using the ! 279: standard calling convention, no functions pop their arguments, so ! 280: the value of the macro is always 0 in this case. But an ! 281: alternative calling convention is available in which functions ! 282: that take a fixed number of arguments pop them but other ! 283: functions (such as `printf') pop nothing (the caller pops all). ! 284: When this convention is in use, FUNTYPE is examined to determine ! 285: whether a function takes a fixed number of arguments. ! 286: ! 287: ! 288: File: gcc.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling ! 289: ! 290: Passing Arguments in Registers ! 291: ------------------------------ ! 292: ! 293: This section describes the macros which let you control how various ! 294: types of arguments are passed in registers or how they are arranged in ! 295: the stack. ! 296: ! 297: `FUNCTION_ARG (CUM, MODE, TYPE, NAMED)' ! 298: A C expression that controls whether a function argument is passed ! 299: in a register, and which register. ! 300: ! 301: The arguments are CUM, which summarizes all the previous ! 302: arguments; MODE, the machine mode of the argument; TYPE, the data ! 303: type of the argument as a tree node or 0 if that is not known ! 304: (which happens for C support library functions); and NAMED, which ! 305: is 1 for an ordinary argument and 0 for nameless arguments that ! 306: correspond to `...' in the called function's prototype. ! 307: ! 308: The value of the expression should either be a `reg' RTX for the ! 309: hard register in which to pass the argument, or zero to pass the ! 310: argument on the stack. ! 311: ! 312: For machines like the Vax and 68000, where normally all arguments ! 313: are pushed, zero suffices as a definition. ! 314: ! 315: The usual way to make the ANSI library `stdarg.h' work on a ! 316: machine where some arguments are usually passed in registers, is ! 317: to cause nameless arguments to be passed on the stack instead. ! 318: This is done by making `FUNCTION_ARG' return 0 whenever NAMED is ! 319: 0. ! 320: ! 321: You may use the macro `MUST_PASS_IN_STACK (MODE, TYPE)' in the ! 322: definition of this macro to determine if this argument is of a ! 323: type that must be passed in the stack. If `REG_PARM_STACK_SPACE' ! 324: is not defined and `FUNCTION_ARG' returns non-zero for such an ! 325: argument, the compiler will abort. If `REG_PARM_STACK_SPACE' is ! 326: defined, the argument will be computed in the stack and then ! 327: loaded into a register. ! 328: ! 329: `FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)' ! 330: Define this macro if the target machine has "register windows", so ! 331: that the register in which a function sees an arguments is not ! 332: necessarily the same as the one in which the caller passed the ! 333: argument. ! 334: ! 335: For such machines, `FUNCTION_ARG' computes the register in which ! 336: the caller passes the value, and `FUNCTION_INCOMING_ARG' should ! 337: be defined in a similar fashion to tell the function being called ! 338: where the arguments will arrive. ! 339: ! 340: If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves ! 341: both purposes. ! 342: ! 343: `FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)' ! 344: A C expression for the number of words, at the beginning of an ! 345: argument, must be put in registers. The value must be zero for ! 346: arguments that are passed entirely in registers or that are ! 347: entirely pushed on the stack. ! 348: ! 349: On some machines, certain arguments must be passed partially in ! 350: registers and partially in memory. On these machines, typically ! 351: the first N words of arguments are passed in registers, and the ! 352: rest on the stack. If a multi-word argument (a `double' or a ! 353: structure) crosses that boundary, its first few words must be ! 354: passed in registers and the rest must be pushed. This macro ! 355: tells the compiler when this occurs, and how many of the words ! 356: should go in registers. ! 357: ! 358: `FUNCTION_ARG' for these arguments should return the first ! 359: register to be used by the caller for this argument; likewise ! 360: `FUNCTION_INCOMING_ARG', for the called function. ! 361: ! 362: `FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)' ! 363: A C expression that indicates when an argument must be passed by ! 364: reference. If nonzero for an argument, a copy of that argument ! 365: is made in memory and a pointer to the argument is passed instead ! 366: of the argument itself. The pointer is passed in whatever way is ! 367: appropriate for passing a pointer to that type. ! 368: ! 369: On machines where `REG_PARM_STACK_SPACE' is not defined, a ! 370: suitable definition of this macro might be ! 371: #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ ! 372: MUST_PASS_IN_STACK (MODE, TYPE) ! 373: ! 374: `CUMULATIVE_ARGS' ! 375: A C type for declaring a variable that is used as the first ! 376: argument of `FUNCTION_ARG' and other related values. For some ! 377: target machines, the type `int' suffices and can hold the number ! 378: of bytes of argument so far. ! 379: ! 380: There is no need to record in `CUMULATIVE_ARGS' anything about the ! 381: arguments that have been passed on the stack. The compiler has ! 382: other variables to keep track of that. For target machines on ! 383: which all arguments are passed on the stack, there is no need to ! 384: store anything in `CUMULATIVE_ARGS'; however, the data structure ! 385: must exist and should not be empty, so use `int'. ! 386: ! 387: `INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME)' ! 388: A C statement (sans semicolon) for initializing the variable CUM ! 389: for the state at the beginning of the argument list. The ! 390: variable has type `CUMULATIVE_ARGS'. The value of FNTYPE is the ! 391: tree node for the data type of the function which will receive ! 392: the args, or 0 if the args are to a compiler support library ! 393: function. ! 394: ! 395: When processing a call to a compiler support library function, ! 396: LIBNAME identifies which one. It is a `symbol_ref' rtx which ! 397: contains the name of the function, as a string. LIBNAME is 0 when ! 398: an ordinary C function call is being processed. Thus, each time ! 399: this macro is called, either LIBNAME or FNTYPE is nonzero, but ! 400: never both of them at once. ! 401: ! 402: `INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)' ! 403: Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of ! 404: finding the arguments for the function being compiled. If this ! 405: macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead. ! 406: ! 407: The argument LIBNAME exists for symmetry with ! 408: `INIT_CUMULATIVE_ARGS'. The value passed for LIBNAME is always ! 409: 0, since library routines with special calling conventions are ! 410: never compiled with GNU CC. ! 411: ! 412: `FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)' ! 413: A C statement (sans semicolon) to update the summarizer variable ! 414: CUM to advance past an argument in the argument list. The values ! 415: MODE, TYPE and NAMED describe that argument. Once this is done, ! 416: the variable CUM is suitable for analyzing the *following* ! 417: argument with `FUNCTION_ARG', etc. ! 418: ! 419: This macro need not do anything if the argument in question was ! 420: passed on the stack. The compiler knows how to track the amount ! 421: of stack space used for arguments without any special help. ! 422: ! 423: `FUNCTION_ARG_PADDING (MODE, TYPE)' ! 424: If defined, a C expression which determines whether, and in which ! 425: direction, to pad out an argument with extra space. The value ! 426: should be of type `enum direction': either `upward' to pad above ! 427: the argument, `downward' to pad below, or `none' to inhibit ! 428: padding. ! 429: ! 430: This macro does not control the *amount* of padding; that is ! 431: always just enough to reach the next multiple of ! 432: `FUNCTION_ARG_BOUNDARY'. ! 433: ! 434: This macro has a default definition which is right for most ! 435: systems. For little-endian machines, the default is to pad ! 436: upward. For big-endian machines, the default is to pad downward ! 437: for an argument of constant size shorter than an `int', and ! 438: upward otherwise. ! 439: ! 440: `FUNCTION_ARG_BOUNDARY (MODE, TYPE)' ! 441: If defined, a C expression that gives the alignment boundary, in ! 442: bits, of an argument with the specified mode and type. If it is ! 443: not defined, `PARM_BOUNDARY' is used for all arguments. ! 444: ! 445: `FUNCTION_ARG_REGNO_P (REGNO)' ! 446: A C expression that is nonzero if REGNO is the number of a hard ! 447: register in which function arguments are sometimes passed. This ! 448: does *not* include implicit arguments such as the static chain and ! 449: the structure-value address. On many machines, no registers can ! 450: be used for this purpose since all function arguments are pushed ! 451: on the stack. ! 452: ! 453: ! 454: File: gcc.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling ! 455: ! 456: How Scalar Function Values Are Returned ! 457: --------------------------------------- ! 458: ! 459: This section discusses the macros that control returning scalars as ! 460: values--values that can fit in registers. ! 461: ! 462: `TRADITIONAL_RETURN_FLOAT' ! 463: Define this macro if `-traditional' should not cause functions ! 464: declared to return `float' to convert the value to `double'. ! 465: ! 466: `FUNCTION_VALUE (VALTYPE, FUNC)' ! 467: A C expression to create an RTX representing the place where a ! 468: function returns a value of data type VALTYPE. VALTYPE is a tree ! 469: node representing a data type. Write `TYPE_MODE (VALTYPE)' to ! 470: get the machine mode used to represent that type. On many ! 471: machines, only the mode is relevant. (Actually, on most ! 472: machines, scalar values are returned in the same place regardless ! 473: of mode). ! 474: ! 475: If the precise function being called is known, FUNC is a tree ! 476: node (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. ! 477: This makes it possible to use a different value-returning ! 478: convention for specific functions when all their calls are known. ! 479: ! 480: `FUNCTION_VALUE' is not used for return vales with aggregate data ! 481: types, because these are returned in another way. See ! 482: `STRUCT_VALUE_REGNUM' and related macros, below. ! 483: ! 484: `FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)' ! 485: Define this macro if the target machine has "register windows" so ! 486: that the register in which a function returns its value is not ! 487: the same as the one in which the caller sees the value. ! 488: ! 489: For such machines, `FUNCTION_VALUE' computes the register in ! 490: which the caller will see the value, and ! 491: `FUNCTION_OUTGOING_VALUE' should be defined in a similar fashion ! 492: to tell the function where to put the value. ! 493: ! 494: If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE' ! 495: serves both purposes. ! 496: ! 497: `FUNCTION_OUTGOING_VALUE' is not used for return vales with ! 498: aggregate data types, because these are returned in another way. ! 499: See `STRUCT_VALUE_REGNUM' and related macros, below. ! 500: ! 501: `LIBCALL_VALUE (MODE)' ! 502: A C expression to create an RTX representing the place where a ! 503: library function returns a value of mode MODE. If the precise ! 504: function being called is known, FUNC is a tree node ! 505: (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. ! 506: This makes it possible to use a different value-returning ! 507: convention for specific functions when all their calls are known. ! 508: ! 509: Note that "library function" in this context means a compiler ! 510: support routine, used to perform arithmetic, whose name is known ! 511: specially by the compiler and was not mentioned in the C code ! 512: being compiled. ! 513: ! 514: The definition of `LIBRARY_VALUE' need not be concerned aggregate ! 515: data types, because none of the library functions returns such ! 516: types. ! 517: ! 518: `FUNCTION_VALUE_REGNO_P (REGNO)' ! 519: A C expression that is nonzero if REGNO is the number of a hard ! 520: register in which the values of called function may come back. ! 521: ! 522: A register whose use for returning values is limited to serving ! 523: as the second of a pair (for a value of type `double', say) need ! 524: not be recognized by this macro. So for most machines, this ! 525: definition suffices: ! 526: ! 527: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) ! 528: ! 529: If the machine has register windows, so that the caller and the ! 530: called function use different registers for the return value, ! 531: this macro should recognize only the caller's register numbers. ! 532: ! 533: ! 534: File: gcc.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling ! 535: ! 536: How Large Values Are Returnd ! 537: ---------------------------- ! 538: ! 539: When a function value's mode is `BLKmode' (and in some other ! 540: cases), the value is not returned according to `FUNCTION_VALUE' (*note ! 541: Scalar Return::.). Instead, the caller passes the address of a block ! 542: of memory in which the value should be stored. This address is called ! 543: the "structure value address". ! 544: ! 545: This section describes how to control returning structure values in ! 546: memory. ! 547: ! 548: `RETURN_IN_MEMORY (TYPE)' ! 549: A C expression which can inhibit the returning of certain function ! 550: values in registers, based on the type of value. A nonzero value ! 551: says to return the function value in memory, just as large ! 552: structures are always returned. Here TYPE will be a C expression ! 553: of type `tree', representing the data type of the value. ! 554: ! 555: Note that values of mode `BLKmode' are returned in memory ! 556: regardless of this macro. Also, the option `-fpcc-struct-return' ! 557: takes effect regardless of this macro. On most systems, it is ! 558: possible to leave the macro undefined; this causes a default ! 559: definition to be used, whose value is the constant 0. ! 560: ! 561: `STRUCT_VALUE_REGNUM' ! 562: If the structure value address is passed in a register, then ! 563: `STRUCT_VALUE_REGNUM' should be the number of that register. ! 564: ! 565: `STRUCT_VALUE' ! 566: If the structure value address is not passed in a register, define ! 567: `STRUCT_VALUE' as an expression returning an RTX for the place ! 568: where the address is passed. If it returns 0, the address is ! 569: passed as an "invisible" first argument. ! 570: ! 571: `STRUCT_VALUE_INCOMING_REGNUM' ! 572: On some architectures the place where the structure value address ! 573: is found by the called function is not the same place that the ! 574: caller put it. This can be due to register windows, or it could ! 575: be because the function prologue moves it to a different place. ! 576: ! 577: If the incoming location of the structure value address is in a ! 578: register, define this macro as the register number. ! 579: ! 580: `STRUCT_VALUE_INCOMING' ! 581: If the incoming location is not a register, define ! 582: `STRUCT_VALUE_INCOMING' as an expression for an RTX for where the ! 583: called function should find the value. If it should find the ! 584: value on the stack, define this to create a `mem' which refers to ! 585: the frame pointer. A definition of 0 means that the address is ! 586: passed as an "invisible" first argument. ! 587: ! 588: `PCC_STATIC_STRUCT_RETURN' ! 589: Define this macro if the usual system convention on the target ! 590: machine for returning structures and unions is for the called ! 591: function to return the address of a static variable containing ! 592: the value. GNU CC does not normally use this convention, even if ! 593: it is the usual one, but does use it if `-fpcc-struct-value' is ! 594: specified. ! 595: ! 596: Do not define this if the usual system convention is for the ! 597: caller to pass an address to the subroutine. ! 598: ! 599: ! 600: File: gcc.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling ! 601: ! 602: Caller-Saves Register Allocation ! 603: -------------------------------- ! 604: ! 605: If you enable it, GNU CC can save registers around function calls. ! 606: This makes it possible to use call-clobbered registers to hold ! 607: variables that must live across calls. ! 608: ! 609: `DEFAULT_CALLER_SAVES' ! 610: Define this macro if function calls on the target machine do not ! 611: preserve any registers; in other words, if `CALL_USED_REGISTERS' ! 612: has 1 for all registers. This macro enables `-fcaller-saves' by ! 613: default. Eventually that option will be enabled by default on ! 614: all machines and both the option and this macro will be ! 615: eliminated. ! 616: ! 617: `CALLER_SAVE_PROFITABLE (REFS, CALLS)' ! 618: A C expression to determine whether it is worthwhile to consider ! 619: placing a pseudo-register in a call-clobbered hard register and ! 620: saving and restoring it around each function call. The ! 621: expression should be 1 when this is worth doing, and 0 otherwise. ! 622: ! 623: If you don't define this macro, a default is used which is good ! 624: on most machines: `4 * CALLS < REFS'. ! 625: ! 626: ! 627: File: gcc.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling ! 628: ! 629: Function Entry and Exit ! 630: ----------------------- ! 631: ! 632: This section describes the macros that output function entry ! 633: ("prologue") and exit ("epilogue") code. ! 634: ! 635: `FUNCTION_PROLOGUE (FILE, SIZE)' ! 636: A C compound statement that outputs the assembler code for entry ! 637: to a function. The prologue is responsible for setting up the ! 638: stack frame, initializing the frame pointer register, saving ! 639: registers that must be saved, and allocating SIZE additional ! 640: bytes of storage for the local variables. SIZE is an integer. ! 641: FILE is a stdio stream to which the assembler code should be ! 642: output. ! 643: ! 644: The label for the beginning of the function need not be output by ! 645: this macro. That has already been done when the macro is run. ! 646: ! 647: To determine which registers to save, the macro can refer to the ! 648: array `regs_ever_live': element R is nonzero if hard register R ! 649: is used anywhere within the function. This implies the function ! 650: prologue should save register R, provided it is not one of the ! 651: call-used registers. (`FUNCTION_EPILOGUE' must likewise use ! 652: `regs_ever_live'.) ! 653: ! 654: On machines that have "register windows", the function entry code ! 655: does not save on the stack the registers that are in the windows, ! 656: even if they are supposed to be preserved by function calls; ! 657: instead it takes appropriate steps to "push" the register stack, ! 658: if any non-call-used registers are used in the function. ! 659: ! 660: On machines where functions may or may not have frame-pointers, ! 661: the function entry code must vary accordingly; it must set up the ! 662: frame pointer if one is wanted, and not otherwise. To determine ! 663: whether a frame pointer is in wanted, the macro can refer to the ! 664: variable `frame_pointer_needed'. The variable's value will be 1 ! 665: at run time in a function that needs a frame pointer. *Note ! 666: Elimination::. ! 667: ! 668: The function entry code is responsible for allocating any stack ! 669: space required for the function. This stack space consists of ! 670: the regions listed below. In most cases, these regions are ! 671: allocated in the order listed, with the last listed region ! 672: closest to the top of the stack (the lowest address if ! 673: `STACK_GROWS_DOWNWARD' is defined, and the highest address if it ! 674: is not defined). You can use a different order for a machine if ! 675: doing so is more convenient or required for compatibility ! 676: reasons. Except in cases where required by standard or by a ! 677: debugger, there is no reason why the stack layout used by GCC ! 678: need agree with that used by other compilers for a machine. ! 679: ! 680: * A region of `current_function_pretend_args_size' bytes of ! 681: uninitialized space just underneath the first argument ! 682: arriving on the stack. (This may not be at the very start ! 683: of the allocated stack region if the calling sequence has ! 684: pushed anything else since pushing the stack arguments. But ! 685: usually, on such machines, nothing else has been pushed yet, ! 686: because the function prologue itself does all the pushing.) ! 687: This region is used on machines where an argument may be ! 688: passed partly in registers and partly in memory, and, in ! 689: some cases to support the features in `varargs.h' and ! 690: `stdargs.h'. ! 691: ! 692: * An area of memory used to save certain registers used by the ! 693: function. The size of this area, which may also include ! 694: space for such things as the return address and pointers to ! 695: previous stack frames, is machine-specific and usually ! 696: depends on which registers have been used in the function. ! 697: Machines with register windows often do not require a save ! 698: area. ! 699: ! 700: * A region of at least SIZE bytes, possibly rounded up to an ! 701: allocation boundary, to contain the local variables of the ! 702: function. On some machines, this region and the save area ! 703: may occur in the opposite order, with the save area closer ! 704: to the top of the stack. ! 705: ! 706: * Optionally, in the case that `ACCUMULATE_OUTGOING_ARGS' is ! 707: defined, a region of `current_function_outgoing_args_size' ! 708: bytes to be used for outgoing argument lists of the ! 709: function. *Note Stack Arguments::. ! 710: ! 711: Normally, it is necessary for `FUNCTION_PROLOGUE' and ! 712: `FUNCTION_EPILOGUE' to treat leaf functions specially. The C ! 713: variable `leaf_function' is nonzero for such a function. ! 714: ! 715: `EXIT_IGNORE_STACK' ! 716: Define this macro as a C expression that is nonzero if the return ! 717: instruction or the function epilogue ignores the value of the ! 718: stack pointer; in other words, if it is safe to delete an ! 719: instruction to adjust the stack pointer before a return from the ! 720: function. ! 721: ! 722: Note that this macro's value is relevant only for functions for ! 723: which frame pointers are maintained. It is never safe to delete ! 724: a final stack adjustment in a function that has no frame pointer, ! 725: and the compiler knows this regardless of `EXIT_IGNORE_STACK'. ! 726: ! 727: `FUNCTION_EPILOGUE (FILE, SIZE)' ! 728: A C compound statement that outputs the assembler code for exit ! 729: from a function. The epilogue is responsible for restoring the ! 730: saved registers and stack pointer to their values when the ! 731: function was called, and returning control to the caller. This ! 732: macro takes the same arguments as the macro `FUNCTION_PROLOGUE', ! 733: and the registers to restore are determined from `regs_ever_live' ! 734: and `CALL_USED_REGISTERS' in the same way. ! 735: ! 736: On some machines, there is a single instruction that does all the ! 737: work of returning from the function. On these machines, give that ! 738: instruction the name `return' and do not define the macro ! 739: `FUNCTION_EPILOGUE' at all. ! 740: ! 741: Do not define a pattern named `return' if you want the ! 742: `FUNCTION_EPILOGUE' to be used. If you want the target switches ! 743: to control whether return instructions or epilogues are used, ! 744: define a `return' pattern with a validity condition that tests ! 745: the target switches appropriately. If the `return' pattern's ! 746: validity condition is false, epilogues will be used. ! 747: ! 748: On machines where functions may or may not have frame-pointers, ! 749: the function exit code must vary accordingly. Sometimes the code ! 750: for these two cases is completely different. To determine ! 751: whether a frame pointer is in wanted, the macro can refer to the ! 752: variable `frame_pointer_needed'. The variable's value will be 1 ! 753: at run time in a function that needs a frame pointer. ! 754: ! 755: Normally, it is necessary for `FUNCTION_PROLOGUE' and ! 756: `FUNCTION_EPILOGUE' to treat leaf functions specially. The C ! 757: variable `leaf_function' is nonzero for such a function. *Note ! 758: Leaf Functions::. ! 759: ! 760: On some machines, some functions pop their arguments on exit while ! 761: others leave that for the caller to do. For example, the 68020 ! 762: when given `-mrtd' pops arguments in functions that take a fixed ! 763: number of arguments. ! 764: ! 765: Your definition of the macro `RETURN_POPS_ARGS' decides which ! 766: functions pop their own arguments. `FUNCTION_EPILOGUE' needs to ! 767: know what was decided. The variable `current_function_pops_args' ! 768: is the number of bytes of its arguments that a function should ! 769: pop. *Note Scalar Return::. ! 770: ! 771: `DELAY_SLOTS_FOR_EPILOGUE' ! 772: Define this macro if the function epilogue contains delay slots ! 773: to which instructions from the rest of the function can be ! 774: "moved". The definition should be a C expression whose value is ! 775: an integer representing the number of delay slots there. ! 776: ! 777: `ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)' ! 778: A C expression that returns 1 if INSN can be placed in delay slot ! 779: number N of the epilogue. ! 780: ! 781: The argument N is an integer which identifies the delay slot now ! 782: being considered (since different slots may have different rules ! 783: of eligibility). It is never negative and is always less than ! 784: the number of epilogue delay slots (what ! 785: `DELAY_SLOTS_FOR_EPILOGUE' returns). If you reject a particular ! 786: insn for a given delay slot, in principle, it may be reconsidered ! 787: for a subsequent delay slot. Also, other insns may (at least in ! 788: principle) be considered for the so far unfilled delay slot. ! 789: ! 790: The insns accepted to fill the epilogue delay slots are put in an ! 791: RTL list made with `insn_list' objects, stored in the variable ! 792: `current_function_epilogue_delay_list'. The insn for the first ! 793: delay slot comes first in the list. Your definition of the macro ! 794: `FUNCTION_EPILOGUE' should fill the delay slots by outputting the ! 795: insns in this list, usually by calling `final_scan_insn'. ! 796: ! 797: You need not define this macro if you did not define ! 798: `DELAY_SLOTS_FOR_EPILOGUE'. ! 799: ! 800: ! 801: File: gcc.info, Node: Profiling, Prev: Function Entry, Up: Stack and Calling ! 802: ! 803: Generating Code for Profiling ! 804: ----------------------------- ! 805: ! 806: `FUNCTION_PROFILER (FILE, LABELNO)' ! 807: A C statement or compound statement to output to FILE some ! 808: assembler code to call the profiling subroutine `mcount'. Before ! 809: calling, the assembler code must load the address of a counter ! 810: variable into a register where `mcount' expects to find the ! 811: address. The name of this variable is `LP' followed by the ! 812: number LABELNO, so you would generate the name using `LP%d' in a ! 813: `fprintf'. ! 814: ! 815: The details of how the address should be passed to `mcount' are ! 816: determined by your operating system environment, not by GNU CC. ! 817: To figure them out, compile a small program for profiling using ! 818: the system's installed C compiler and look at the assembler code ! 819: that results. ! 820: ! 821: `PROFILE_BEFORE_PROLOGUE' ! 822: Define this macro if the code for function profiling should come ! 823: before the function prologue. Normally, the profiling code comes ! 824: after. ! 825: ! 826: `FUNCTION_BLOCK_PROFILER (FILE, LABELNO)' ! 827: A C statement or compound statement to output to FILE some ! 828: assembler code to initialize basic-block profiling for the current ! 829: object module. This code should call the subroutine ! 830: `__bb_init_func' once per object module, passing it as its sole ! 831: argument the address of a block allocated in the object module. ! 832: ! 833: The name of the block is a local symbol made with this statement: ! 834: ! 835: ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); ! 836: ! 837: Of course, since you are writing the definition of ! 838: `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! 839: can take a short cut in the definition of this macro and use the ! 840: name that you know will result. ! 841: ! 842: The first word of this block is a flag which will be nonzero if ! 843: the object module has already been initialized. So test this ! 844: word first, and do not call `__bb_init_func' if the flag is ! 845: nonzero. ! 846: ! 847: `BLOCK_PROFILER (FILE, BLOCKNO)' ! 848: A C statement or compound statement to increment the count ! 849: associated with the basic block number BLOCKNO. Basic blocks are ! 850: numbered separately from zero within each compilation. The count ! 851: associated with block number BLOCKNO is at index BLOCKNO in a ! 852: vector of words; the name of this array is a local symbol made ! 853: with this statement: ! 854: ! 855: ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); ! 856: ! 857: Of course, since you are writing the definition of ! 858: `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! 859: can take a short cut in the definition of this macro and use the ! 860: name that you know will result. ! 861: ! 862: ! 863: File: gcc.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Machine Macros ! 864: ! 865: Implementing the Varargs Macros ! 866: =============================== ! 867: ! 868: GNU CC comes with an implementation of `varargs.h' and `stdarg.h' ! 869: that work without change on machines that pass arguments on the stack. ! 870: Other machines require their own implementations of varargs, and the ! 871: two machine independent header files must have conditionals to include ! 872: it. ! 873: ! 874: ANSI `stdarg.h' differs from traditional `varargs.h' mainly in the ! 875: calling convention for `va_start'. The traditional implementation ! 876: takes just one argument, which is the variable in which to store the ! 877: argument pointer. The ANSI implementation takes an additional first ! 878: argument, which is the last named argument of the function. However, ! 879: it should not use this argument. The way to find the end of the named ! 880: arguments is with the built-in functions described below. ! 881: ! 882: `__builtin_saveregs ()' ! 883: Use this built-in function to save the argument registers in ! 884: memory so that the varargs mechanism can access them. Both ANSI ! 885: and traditional versions of `va_start' must use ! 886: `__builtin_saveregs', unless you use `SETUP_INCOMING_VARARGS' ! 887: (see below) instead. ! 888: ! 889: On some machines, `__builtin_saveregs' is open-coded under the ! 890: control of the macro `EXPAND_BUILTIN_SAVEREGS'. On other ! 891: machines, it calls a routine written in assembler language, found ! 892: in `libgcc2.c'. ! 893: ! 894: Regardless of what code is generated for the call to ! 895: `__builtin_saveregs', it appears at the beginning of the function, ! 896: not where the call to `__builtin_saveregs' is written. This is ! 897: because the registers must be saved before the function starts to ! 898: use them for its own purposes. ! 899: ! 900: `__builtin_args_info (CATEGORY)' ! 901: Use this built-in function to find the first anonymous arguments ! 902: in registers. ! 903: ! 904: In general, a machine may have several categories of registers ! 905: used for arguments, each for a particular category of data types. ! 906: (For example, on some machines, floating-point registers are ! 907: used for floating-point arguments while other arguments are ! 908: passed in the general registers.) To make non-varargs functions ! 909: use the proper calling convention, you have defined the ! 910: `CUMULATIVE_ARGS' data type to record how many registers in each ! 911: category have been used so far ! 912: ! 913: `__builtin_args_info' accesses the same data structure of type ! 914: `CUMULATIVE_ARGS' after the ordinary argument layout is finished ! 915: with it, with CATEGORY specifying which word to access. Thus, the ! 916: value indicates the first unused register in a given category. ! 917: ! 918: Normally, you would use `__builtin_args_info' in the ! 919: implementation of `va_start', accessing each category just once ! 920: and storing the value in the `va_list' object. This is because ! 921: `va_list' will have to update the values, and there is no way to ! 922: alter the values accessed by `__builtin_args_info'. ! 923: ! 924: `__builtin_next_arg ()' ! 925: This is the equivalent of `__builtin_args_info', for stack ! 926: arguments. It returns the address of the first anonymous stack ! 927: argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns ! 928: the address of the location above the first anonymous stack ! 929: argument. Use it in `va_start' to initialize the pointer for ! 930: fetching arguments from the stack. ! 931: ! 932: `__builtin_classify_type (OBJECT)' ! 933: Since each machine has its own conventions for which data types ! 934: are passed in which kind of register, your implementation of ! 935: `va_arg' has to embody these conventions. The easiest way to ! 936: categorize the specified data type is to use ! 937: `__builtin_classify_type' together with `sizeof' and ! 938: `__alignof__'. ! 939: ! 940: `__builtin_classify_type' ignores the value of OBJECT, ! 941: considering only its data type. It returns an integer describing ! 942: what kind of type that is--integer, floating, pointer, structure, ! 943: and so on. ! 944: ! 945: The file `typeclass.h' defines an enumeration that you can use to ! 946: interpret the values of `__builtin_classify_type'. ! 947: ! 948: These machine description macros help implement varargs: ! 949: ! 950: `EXPAND_BUILTIN_SAVEREGS (ARGS)' ! 951: If defined, is a C expression that produces the machine-specific ! 952: code for a call to `__builtin_saveregs'. This code will be moved ! 953: to the very beginning of the function, before any parameter ! 954: access are made. The return value of this function should be an ! 955: RTX that contains the value to use as the return of ! 956: `__builtin_saveregs'. ! 957: ! 958: The argument ARGS is a `tree_list' containing the arguments that ! 959: were passed to `__builtin_saveregs'. ! 960: ! 961: If this macro is not defined, the compiler will output an ordinary ! 962: call to the library function `__builtin_saveregs'. ! 963: ! 964: `SETUP_INCOMING_VARARGS (ARGS_SO_FAR, MODE, TYPE, PRETEND_ARGS_SIZE, SECOND_TIME)' ! 965: This macro offers an alternative to using `__builtin_saveregs' and ! 966: defining the macro `EXPAND_BUILTIN_SAVEREGS'. Use it to store the ! 967: anonymous register arguments into the stack so that all the ! 968: arguments appear to have been passed consecutively on the stack. ! 969: Once this is done, you can use the standard implementation of ! 970: varargs that works for machines that pass all their arguments on ! 971: the stack. ! 972: ! 973: The argument ARGS_SO_FAR is the `CUMULATIVE_ARGS' data structure, ! 974: containing the values that obtain after processing of the named ! 975: arguments. The arguments MODE and TYPE describe the last named ! 976: argument--its machine mode and its data type as a tree node. ! 977: ! 978: The macro implementation should do two things: first, push onto ! 979: the stack all the argument registers *not* used for the named ! 980: arguments, and second, store the size of the data thus pushed ! 981: into the `int'-valued variable whose name is supplied as the ! 982: argument PRETEND_ARGS_SIZE. The value that you store here will ! 983: serve as additional offset for setting up the stack frame. ! 984: ! 985: Because you must generate code to push the anonymous arguments at ! 986: compile time without knowing their data types, ! 987: `SETUP_INCOMING_VARARGS' is only useful on machines that have just ! 988: a single category of argument register and use it uniformly for ! 989: all data types. ! 990: ! 991: If the argument SECOND_TIME is nonzero, it means that the ! 992: arguments of the function are being analyzed for the second time. ! 993: This happens for an inline function, which is not actually ! 994: compiled until the end of the source file. The macro ! 995: `SETUP_INCOMING_VARARGS' should not generate any instructions in ! 996: this case. ! 997: ! 998:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.