|
|
1.1 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input ! 2: file gcc.texi. ! 3: ! 4: This file documents the use and the internals of the GNU compiler. ! 5: ! 6: Published by the Free Software Foundation 675 Massachusetts Avenue ! 7: Cambridge, MA 02139 USA ! 8: ! 9: Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. ! 10: ! 11: Permission is granted to make and distribute verbatim copies of this ! 12: manual provided the copyright notice and this permission notice are ! 13: preserved on all copies. ! 14: ! 15: Permission is granted to copy and distribute modified versions of ! 16: this manual under the conditions for verbatim copying, provided also ! 17: that the sections entitled "GNU General Public License" and "Protect ! 18: Your Freedom--Fight `Look And Feel'" are included exactly as in the ! 19: original, and provided that the entire resulting derived work is ! 20: distributed under the terms of a permission notice identical to this ! 21: one. ! 22: ! 23: Permission is granted to copy and distribute translations of this ! 24: manual into another language, under the above conditions for modified ! 25: versions, except that the sections entitled "GNU General Public ! 26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this ! 27: permission notice, may be included in translations approved by the Free ! 28: Software Foundation instead of in the original English. ! 29: ! 30: ! 31: File: gcc.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling ! 32: ! 33: How Scalar Function Values Are Returned ! 34: --------------------------------------- ! 35: ! 36: This section discusses the macros that control returning scalars as ! 37: values--values that can fit in registers. ! 38: ! 39: `TRADITIONAL_RETURN_FLOAT' ! 40: Define this macro if `-traditional' should not cause functions ! 41: declared to return `float' to convert the value to `double'. ! 42: ! 43: `FUNCTION_VALUE (VALTYPE, FUNC)' ! 44: A C expression to create an RTX representing the place where a ! 45: function returns a value of data type VALTYPE. VALTYPE is a tree ! 46: node representing a data type. Write `TYPE_MODE (VALTYPE)' to get ! 47: the machine mode used to represent that type. On many machines, ! 48: only the mode is relevant. (Actually, on most machines, scalar ! 49: values are returned in the same place regardless of mode). ! 50: ! 51: If `PROMOTE_FUNCTION_RETURN' is defined, you must apply the same ! 52: promotion rules specified in `PROMOTE_MODE' if VALTYPE is a scalar ! 53: type. ! 54: ! 55: If the precise function being called is known, FUNC is a tree node ! 56: (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This ! 57: makes it possible to use a different value-returning convention ! 58: for specific functions when all their calls are known. ! 59: ! 60: `FUNCTION_VALUE' is not used for return vales with aggregate data ! 61: types, because these are returned in another way. See ! 62: `STRUCT_VALUE_REGNUM' and related macros, below. ! 63: ! 64: `FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)' ! 65: Define this macro if the target machine has "register windows" so ! 66: that the register in which a function returns its value is not the ! 67: same as the one in which the caller sees the value. ! 68: ! 69: For such machines, `FUNCTION_VALUE' computes the register in which ! 70: the caller will see the value. `FUNCTION_OUTGOING_VALUE' should be ! 71: defined in a similar fashion to tell the function where to put the ! 72: value. ! 73: ! 74: If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE' ! 75: serves both purposes. ! 76: ! 77: `FUNCTION_OUTGOING_VALUE' is not used for return vales with ! 78: aggregate data types, because these are returned in another way. ! 79: See `STRUCT_VALUE_REGNUM' and related macros, below. ! 80: ! 81: `LIBCALL_VALUE (MODE)' ! 82: A C expression to create an RTX representing the place where a ! 83: library function returns a value of mode MODE. If the precise ! 84: function being called is known, FUNC is a tree node ! 85: (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This ! 86: makes it possible to use a different value-returning convention ! 87: for specific functions when all their calls are known. ! 88: ! 89: Note that "library function" in this context means a compiler ! 90: support routine, used to perform arithmetic, whose name is known ! 91: specially by the compiler and was not mentioned in the C code being ! 92: compiled. ! 93: ! 94: The definition of `LIBRARY_VALUE' need not be concerned aggregate ! 95: data types, because none of the library functions returns such ! 96: types. ! 97: ! 98: `FUNCTION_VALUE_REGNO_P (REGNO)' ! 99: A C expression that is nonzero if REGNO is the number of a hard ! 100: register in which the values of called function may come back. ! 101: ! 102: A register whose use for returning values is limited to serving as ! 103: the second of a pair (for a value of type `double', say) need not ! 104: be recognized by this macro. So for most machines, this definition ! 105: suffices: ! 106: ! 107: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) ! 108: ! 109: If the machine has register windows, so that the caller and the ! 110: called function use different registers for the return value, this ! 111: macro should recognize only the caller's register numbers. ! 112: ! 113: `APPLY_RESULT_SIZE' ! 114: Define this macro if `untyped_call' and `untyped_return' need more ! 115: space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and ! 116: restoring an arbitrary return value. ! 117: ! 118: ! 119: File: gcc.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling ! 120: ! 121: How Large Values Are Returned ! 122: ----------------------------- ! 123: ! 124: When a function value's mode is `BLKmode' (and in some other cases), ! 125: the value is not returned according to `FUNCTION_VALUE' (*note Scalar ! 126: Return::.). Instead, the caller passes the address of a block of ! 127: memory in which the value should be stored. This address is called the ! 128: "structure value address". ! 129: ! 130: This section describes how to control returning structure values in ! 131: memory. ! 132: ! 133: `RETURN_IN_MEMORY (TYPE)' ! 134: A C expression which can inhibit the returning of certain function ! 135: values in registers, based on the type of value. A nonzero value ! 136: says to return the function value in memory, just as large ! 137: structures are always returned. Here TYPE will be a C expression ! 138: of type `tree', representing the data type of the value. ! 139: ! 140: Note that values of mode `BLKmode' must be explicitly handled by ! 141: this macro. Also, the option `-fpcc-struct-return' takes effect ! 142: regardless of this macro. On most systems, it is possible to ! 143: leave the macro undefined; this causes a default definition to be ! 144: used, whose value is the constant 1 for `BLKmode' values, and 0 ! 145: otherwise. ! 146: ! 147: Do not use this macro to indicate that structures and unions ! 148: should always be returned in memory. You should instead use ! 149: `DEFAULT_PCC_STRUCT_RETURN' to indicate this. ! 150: ! 151: `DEFAULT_PCC_STRUCT_RETURN' ! 152: Define this macro to be 1 if all structure and union return values ! 153: must be in memory. Since this results in slower code, this should ! 154: be defined only if needed for compatibility with other compilers ! 155: or with an ABI. If you define this macro to be 0, then the ! 156: conventions used for structure and union return values are decided ! 157: by the `RETURN_IN_MEMORY' macro. ! 158: ! 159: If not defined, this defaults to the value 1. ! 160: ! 161: `STRUCT_VALUE_REGNUM' ! 162: If the structure value address is passed in a register, then ! 163: `STRUCT_VALUE_REGNUM' should be the number of that register. ! 164: ! 165: `STRUCT_VALUE' ! 166: If the structure value address is not passed in a register, define ! 167: `STRUCT_VALUE' as an expression returning an RTX for the place ! 168: where the address is passed. If it returns 0, the address is ! 169: passed as an "invisible" first argument. ! 170: ! 171: `STRUCT_VALUE_INCOMING_REGNUM' ! 172: On some architectures the place where the structure value address ! 173: is found by the called function is not the same place that the ! 174: caller put it. This can be due to register windows, or it could ! 175: be because the function prologue moves it to a different place. ! 176: ! 177: If the incoming location of the structure value address is in a ! 178: register, define this macro as the register number. ! 179: ! 180: `STRUCT_VALUE_INCOMING' ! 181: If the incoming location is not a register, then you should define ! 182: `STRUCT_VALUE_INCOMING' as an expression for an RTX for where the ! 183: called function should find the value. If it should find the ! 184: value on the stack, define this to create a `mem' which refers to ! 185: the frame pointer. A definition of 0 means that the address is ! 186: passed as an "invisible" first argument. ! 187: ! 188: `PCC_STATIC_STRUCT_RETURN' ! 189: Define this macro if the usual system convention on the target ! 190: machine for returning structures and unions is for the called ! 191: function to return the address of a static variable containing the ! 192: value. ! 193: ! 194: Do not define this if the usual system convention is for the ! 195: caller to pass an address to the subroutine. ! 196: ! 197: This macro has effect in `-fpcc-struct-return' mode, but not in ! 198: `-freg-struct-return' mode. ! 199: ! 200: ! 201: File: gcc.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling ! 202: ! 203: Caller-Saves Register Allocation ! 204: -------------------------------- ! 205: ! 206: If you enable it, GNU CC can save registers around function calls. ! 207: This makes it possible to use call-clobbered registers to hold ! 208: variables that must live across calls. ! 209: ! 210: `DEFAULT_CALLER_SAVES' ! 211: Define this macro if function calls on the target machine do not ! 212: preserve any registers; in other words, if `CALL_USED_REGISTERS' ! 213: has 1 for all registers. This macro enables `-fcaller-saves' by ! 214: default. Eventually that option will be enabled by default on all ! 215: machines and both the option and this macro will be eliminated. ! 216: ! 217: `CALLER_SAVE_PROFITABLE (REFS, CALLS)' ! 218: A C expression to determine whether it is worthwhile to consider ! 219: placing a pseudo-register in a call-clobbered hard register and ! 220: saving and restoring it around each function call. The expression ! 221: should be 1 when this is worth doing, and 0 otherwise. ! 222: ! 223: If you don't define this macro, a default is used which is good on ! 224: most machines: `4 * CALLS < REFS'. ! 225: ! 226: ! 227: File: gcc.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling ! 228: ! 229: Function Entry and Exit ! 230: ----------------------- ! 231: ! 232: This section describes the macros that output function entry ! 233: ("prologue") and exit ("epilogue") code. ! 234: ! 235: `FUNCTION_PROLOGUE (FILE, SIZE)' ! 236: A C compound statement that outputs the assembler code for entry ! 237: to a function. The prologue is responsible for setting up the ! 238: stack frame, initializing the frame pointer register, saving ! 239: registers that must be saved, and allocating SIZE additional bytes ! 240: of storage for the local variables. SIZE is an integer. FILE is ! 241: a stdio stream to which the assembler code should be output. ! 242: ! 243: The label for the beginning of the function need not be output by ! 244: this macro. That has already been done when the macro is run. ! 245: ! 246: To determine which registers to save, the macro can refer to the ! 247: array `regs_ever_live': element R is nonzero if hard register R is ! 248: used anywhere within the function. This implies the function ! 249: prologue should save register R, provided it is not one of the ! 250: call-used registers. (`FUNCTION_EPILOGUE' must likewise use ! 251: `regs_ever_live'.) ! 252: ! 253: On machines that have "register windows", the function entry code ! 254: does not save on the stack the registers that are in the windows, ! 255: even if they are supposed to be preserved by function calls; ! 256: instead it takes appropriate steps to "push" the register stack, ! 257: if any non-call-used registers are used in the function. ! 258: ! 259: On machines where functions may or may not have frame-pointers, the ! 260: function entry code must vary accordingly; it must set up the frame ! 261: pointer if one is wanted, and not otherwise. To determine whether ! 262: a frame pointer is in wanted, the macro can refer to the variable ! 263: `frame_pointer_needed'. The variable's value will be 1 at run ! 264: time in a function that needs a frame pointer. *Note ! 265: Elimination::. ! 266: ! 267: The function entry code is responsible for allocating any stack ! 268: space required for the function. This stack space consists of the ! 269: regions listed below. In most cases, these regions are allocated ! 270: in the order listed, with the last listed region closest to the ! 271: top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is ! 272: defined, and the highest address if it is not defined). You can ! 273: use a different order for a machine if doing so is more convenient ! 274: or required for compatibility reasons. Except in cases where ! 275: required by standard or by a debugger, there is no reason why the ! 276: stack layout used by GCC need agree with that used by other ! 277: compilers for a machine. ! 278: ! 279: * A region of `current_function_pretend_args_size' bytes of ! 280: uninitialized space just underneath the first argument ! 281: arriving on the stack. (This may not be at the very start of ! 282: the allocated stack region if the calling sequence has pushed ! 283: anything else since pushing the stack arguments. But ! 284: usually, on such machines, nothing else has been pushed yet, ! 285: because the function prologue itself does all the pushing.) ! 286: This region is used on machines where an argument may be ! 287: passed partly in registers and partly in memory, and, in some ! 288: cases to support the features in `varargs.h' and `stdargs.h'. ! 289: ! 290: * An area of memory used to save certain registers used by the ! 291: function. The size of this area, which may also include ! 292: space for such things as the return address and pointers to ! 293: previous stack frames, is machine-specific and usually ! 294: depends on which registers have been used in the function. ! 295: Machines with register windows often do not require a save ! 296: area. ! 297: ! 298: * A region of at least SIZE bytes, possibly rounded up to an ! 299: allocation boundary, to contain the local variables of the ! 300: function. On some machines, this region and the save area ! 301: may occur in the opposite order, with the save area closer to ! 302: the top of the stack. ! 303: ! 304: * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a ! 305: region of `current_function_outgoing_args_size' bytes to be ! 306: used for outgoing argument lists of the function. *Note ! 307: Stack Arguments::. ! 308: ! 309: Normally, it is necessary for the macros `FUNCTION_PROLOGUE' and ! 310: `FUNCTION_EPILOGUE' to treat leaf functions specially. The C ! 311: variable `leaf_function' is nonzero for such a function. ! 312: ! 313: `EXIT_IGNORE_STACK' ! 314: Define this macro as a C expression that is nonzero if the return ! 315: instruction or the function epilogue ignores the value of the stack ! 316: pointer; in other words, if it is safe to delete an instruction to ! 317: adjust the stack pointer before a return from the function. ! 318: ! 319: Note that this macro's value is relevant only for functions for ! 320: which frame pointers are maintained. It is never safe to delete a ! 321: final stack adjustment in a function that has no frame pointer, ! 322: and the compiler knows this regardless of `EXIT_IGNORE_STACK'. ! 323: ! 324: `FUNCTION_EPILOGUE (FILE, SIZE)' ! 325: A C compound statement that outputs the assembler code for exit ! 326: from a function. The epilogue is responsible for restoring the ! 327: saved registers and stack pointer to their values when the ! 328: function was called, and returning control to the caller. This ! 329: macro takes the same arguments as the macro `FUNCTION_PROLOGUE', ! 330: and the registers to restore are determined from `regs_ever_live' ! 331: and `CALL_USED_REGISTERS' in the same way. ! 332: ! 333: On some machines, there is a single instruction that does all the ! 334: work of returning from the function. On these machines, give that ! 335: instruction the name `return' and do not define the macro ! 336: `FUNCTION_EPILOGUE' at all. ! 337: ! 338: Do not define a pattern named `return' if you want the ! 339: `FUNCTION_EPILOGUE' to be used. If you want the target switches ! 340: to control whether return instructions or epilogues are used, ! 341: define a `return' pattern with a validity condition that tests the ! 342: target switches appropriately. If the `return' pattern's validity ! 343: condition is false, epilogues will be used. ! 344: ! 345: On machines where functions may or may not have frame-pointers, the ! 346: function exit code must vary accordingly. Sometimes the code for ! 347: these two cases is completely different. To determine whether a ! 348: frame pointer is wanted, the macro can refer to the variable ! 349: `frame_pointer_needed'. The variable's value will be 1 when ! 350: compiling a function that needs a frame pointer. ! 351: ! 352: Normally, `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' must treat ! 353: leaf functions specially. The C variable `leaf_function' is ! 354: nonzero for such a function. *Note Leaf Functions::. ! 355: ! 356: On some machines, some functions pop their arguments on exit while ! 357: others leave that for the caller to do. For example, the 68020 ! 358: when given `-mrtd' pops arguments in functions that take a fixed ! 359: number of arguments. ! 360: ! 361: Your definition of the macro `RETURN_POPS_ARGS' decides which ! 362: functions pop their own arguments. `FUNCTION_EPILOGUE' needs to ! 363: know what was decided. The variable that is called ! 364: `current_function_pops_args' is the number of bytes of its ! 365: arguments that a function should pop. *Note Scalar Return::. ! 366: ! 367: `DELAY_SLOTS_FOR_EPILOGUE' ! 368: Define this macro if the function epilogue contains delay slots to ! 369: which instructions from the rest of the function can be "moved". ! 370: The definition should be a C expression whose value is an integer ! 371: representing the number of delay slots there. ! 372: ! 373: `ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)' ! 374: A C expression that returns 1 if INSN can be placed in delay slot ! 375: number N of the epilogue. ! 376: ! 377: The argument N is an integer which identifies the delay slot now ! 378: being considered (since different slots may have different rules of ! 379: eligibility). It is never negative and is always less than the ! 380: number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE' ! 381: returns). If you reject a particular insn for a given delay slot, ! 382: in principle, it may be reconsidered for a subsequent delay slot. ! 383: Also, other insns may (at least in principle) be considered for ! 384: the so far unfilled delay slot. ! 385: ! 386: The insns accepted to fill the epilogue delay slots are put in an ! 387: RTL list made with `insn_list' objects, stored in the variable ! 388: `current_function_epilogue_delay_list'. The insn for the first ! 389: delay slot comes first in the list. Your definition of the macro ! 390: `FUNCTION_EPILOGUE' should fill the delay slots by outputting the ! 391: insns in this list, usually by calling `final_scan_insn'. ! 392: ! 393: You need not define this macro if you did not define ! 394: `DELAY_SLOTS_FOR_EPILOGUE'. ! 395: ! 396: ! 397: File: gcc.info, Node: Profiling, Prev: Function Entry, Up: Stack and Calling ! 398: ! 399: Generating Code for Profiling ! 400: ----------------------------- ! 401: ! 402: These macros will help you generate code for profiling. ! 403: ! 404: `FUNCTION_PROFILER (FILE, LABELNO)' ! 405: A C statement or compound statement to output to FILE some ! 406: assembler code to call the profiling subroutine `mcount'. Before ! 407: calling, the assembler code must load the address of a counter ! 408: variable into a register where `mcount' expects to find the ! 409: address. The name of this variable is `LP' followed by the number ! 410: LABELNO, so you would generate the name using `LP%d' in a ! 411: `fprintf'. ! 412: ! 413: The details of how the address should be passed to `mcount' are ! 414: determined by your operating system environment, not by GNU CC. To ! 415: figure them out, compile a small program for profiling using the ! 416: system's installed C compiler and look at the assembler code that ! 417: results. ! 418: ! 419: `PROFILE_BEFORE_PROLOGUE' ! 420: Define this macro if the code for function profiling should come ! 421: before the function prologue. Normally, the profiling code comes ! 422: after. ! 423: ! 424: `FUNCTION_BLOCK_PROFILER (FILE, LABELNO)' ! 425: A C statement or compound statement to output to FILE some ! 426: assembler code to initialize basic-block profiling for the current ! 427: object module. This code should call the subroutine ! 428: `__bb_init_func' once per object module, passing it as its sole ! 429: argument the address of a block allocated in the object module. ! 430: ! 431: The name of the block is a local symbol made with this statement: ! 432: ! 433: ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); ! 434: ! 435: Of course, since you are writing the definition of ! 436: `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! 437: can take a short cut in the definition of this macro and use the ! 438: name that you know will result. ! 439: ! 440: The first word of this block is a flag which will be nonzero if the ! 441: object module has already been initialized. So test this word ! 442: first, and do not call `__bb_init_func' if the flag is nonzero. ! 443: ! 444: `BLOCK_PROFILER (FILE, BLOCKNO)' ! 445: A C statement or compound statement to increment the count ! 446: associated with the basic block number BLOCKNO. Basic blocks are ! 447: numbered separately from zero within each compilation. The count ! 448: associated with block number BLOCKNO is at index BLOCKNO in a ! 449: vector of words; the name of this array is a local symbol made ! 450: with this statement: ! 451: ! 452: ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); ! 453: ! 454: Of course, since you are writing the definition of ! 455: `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! 456: can take a short cut in the definition of this macro and use the ! 457: name that you know will result. ! 458: ! 459: `BLOCK_PROFILER_CODE' ! 460: A C function or functions which are needed in the library to ! 461: support block profiling. ! 462: ! 463: ! 464: File: gcc.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros ! 465: ! 466: Implementing the Varargs Macros ! 467: =============================== ! 468: ! 469: GNU CC comes with an implementation of `varargs.h' and `stdarg.h' ! 470: that work without change on machines that pass arguments on the stack. ! 471: Other machines require their own implementations of varargs, and the ! 472: two machine independent header files must have conditionals to include ! 473: it. ! 474: ! 475: ANSI `stdarg.h' differs from traditional `varargs.h' mainly in the ! 476: calling convention for `va_start'. The traditional implementation ! 477: takes just one argument, which is the variable in which to store the ! 478: argument pointer. The ANSI implementation of `va_start' takes an ! 479: additional second argument. The user is supposed to write the last ! 480: named argument of the function here. ! 481: ! 482: However, `va_start' should not use this argument. The way to find ! 483: the end of the named arguments is with the built-in functions described ! 484: below. ! 485: ! 486: `__builtin_saveregs ()' ! 487: Use this built-in function to save the argument registers in ! 488: memory so that the varargs mechanism can access them. Both ANSI ! 489: and traditional versions of `va_start' must use ! 490: `__builtin_saveregs', unless you use `SETUP_INCOMING_VARARGS' (see ! 491: below) instead. ! 492: ! 493: On some machines, `__builtin_saveregs' is open-coded under the ! 494: control of the macro `EXPAND_BUILTIN_SAVEREGS'. On other machines, ! 495: it calls a routine written in assembler language, found in ! 496: `libgcc2.c'. ! 497: ! 498: Code generated for the call to `__builtin_saveregs' appears at the ! 499: beginning of the function, as opposed to where the call to ! 500: `__builtin_saveregs' is written, regardless of what the code is. ! 501: This is because the registers must be saved before the function ! 502: starts to use them for its own purposes. ! 503: ! 504: `__builtin_args_info (CATEGORY)' ! 505: Use this built-in function to find the first anonymous arguments in ! 506: registers. ! 507: ! 508: In general, a machine may have several categories of registers ! 509: used for arguments, each for a particular category of data types. ! 510: (For example, on some machines, floating-point registers are used ! 511: for floating-point arguments while other arguments are passed in ! 512: the general registers.) To make non-varargs functions use the ! 513: proper calling convention, you have defined the `CUMULATIVE_ARGS' ! 514: data type to record how many registers in each category have been ! 515: used so far ! 516: ! 517: `__builtin_args_info' accesses the same data structure of type ! 518: `CUMULATIVE_ARGS' after the ordinary argument layout is finished ! 519: with it, with CATEGORY specifying which word to access. Thus, the ! 520: value indicates the first unused register in a given category. ! 521: ! 522: Normally, you would use `__builtin_args_info' in the implementation ! 523: of `va_start', accessing each category just once and storing the ! 524: value in the `va_list' object. This is because `va_list' will ! 525: have to update the values, and there is no way to alter the values ! 526: accessed by `__builtin_args_info'. ! 527: ! 528: `__builtin_next_arg ()' ! 529: This is the equivalent of `__builtin_args_info', for stack ! 530: arguments. It returns the address of the first anonymous stack ! 531: argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns ! 532: the address of the location above the first anonymous stack ! 533: argument. Use it in `va_start' to initialize the pointer for ! 534: fetching arguments from the stack. ! 535: ! 536: `__builtin_classify_type (OBJECT)' ! 537: Since each machine has its own conventions for which data types are ! 538: passed in which kind of register, your implementation of `va_arg' ! 539: has to embody these conventions. The easiest way to categorize the ! 540: specified data type is to use `__builtin_classify_type' together ! 541: with `sizeof' and `__alignof__'. ! 542: ! 543: `__builtin_classify_type' ignores the value of OBJECT, considering ! 544: only its data type. It returns an integer describing what kind of ! 545: type that is--integer, floating, pointer, structure, and so on. ! 546: ! 547: The file `typeclass.h' defines an enumeration that you can use to ! 548: interpret the values of `__builtin_classify_type'. ! 549: ! 550: These machine description macros help implement varargs: ! 551: ! 552: `EXPAND_BUILTIN_SAVEREGS (ARGS)' ! 553: If defined, is a C expression that produces the machine-specific ! 554: code for a call to `__builtin_saveregs'. This code will be moved ! 555: to the very beginning of the function, before any parameter access ! 556: are made. The return value of this function should be an RTX that ! 557: contains the value to use as the return of `__builtin_saveregs'. ! 558: ! 559: The argument ARGS is a `tree_list' containing the arguments that ! 560: were passed to `__builtin_saveregs'. ! 561: ! 562: If this macro is not defined, the compiler will output an ordinary ! 563: call to the library function `__builtin_saveregs'. ! 564: ! 565: `SETUP_INCOMING_VARARGS (ARGS_SO_FAR, MODE, TYPE,' ! 566: PRETEND_ARGS_SIZE, SECOND_TIME) This macro offers an alternative ! 567: to using `__builtin_saveregs' and defining the macro ! 568: `EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous register ! 569: arguments into the stack so that all the arguments appear to have ! 570: been passed consecutively on the stack. Once this is done, you ! 571: can use the standard implementation of varargs that works for ! 572: machines that pass all their arguments on the stack. ! 573: ! 574: The argument ARGS_SO_FAR is the `CUMULATIVE_ARGS' data structure, ! 575: containing the values that obtain after processing of the named ! 576: arguments. The arguments MODE and TYPE describe the last named ! 577: argument--its machine mode and its data type as a tree node. ! 578: ! 579: The macro implementation should do two things: first, push onto the ! 580: stack all the argument registers *not* used for the named ! 581: arguments, and second, store the size of the data thus pushed into ! 582: the `int'-valued variable whose name is supplied as the argument ! 583: PRETEND_ARGS_SIZE. The value that you store here will serve as ! 584: additional offset for setting up the stack frame. ! 585: ! 586: Because you must generate code to push the anonymous arguments at ! 587: compile time without knowing their data types, ! 588: `SETUP_INCOMING_VARARGS' is only useful on machines that have just ! 589: a single category of argument register and use it uniformly for ! 590: all data types. ! 591: ! 592: If the argument SECOND_TIME is nonzero, it means that the ! 593: arguments of the function are being analyzed for the second time. ! 594: This happens for an inline function, which is not actually ! 595: compiled until the end of the source file. The macro ! 596: `SETUP_INCOMING_VARARGS' should not generate any instructions in ! 597: this case. ! 598: ! 599: ! 600: File: gcc.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros ! 601: ! 602: Trampolines for Nested Functions ! 603: ================================ ! 604: ! 605: A "trampoline" is a small piece of code that is created at run time ! 606: when the address of a nested function is taken. It normally resides on ! 607: the stack, in the stack frame of the containing function. These macros ! 608: tell GNU CC how to generate code to allocate and initialize a ! 609: trampoline. ! 610: ! 611: The instructions in the trampoline must do two things: load a ! 612: constant address into the static chain register, and jump to the real ! 613: address of the nested function. On CISC machines such as the m68k, ! 614: this requires two instructions, a move immediate and a jump. Then the ! 615: two addresses exist in the trampoline as word-long immediate operands. ! 616: On RISC machines, it is often necessary to load each address into a ! 617: register in two parts. Then pieces of each address form separate ! 618: immediate operands. ! 619: ! 620: The code generated to initialize the trampoline must store the ! 621: variable parts--the static chain value and the function address--into ! 622: the immediate operands of the instructions. On a CISC machine, this is ! 623: simply a matter of copying each address to a memory reference at the ! 624: proper offset from the start of the trampoline. On a RISC machine, it ! 625: may be necessary to take out pieces of the address and store them ! 626: separately. ! 627: ! 628: `TRAMPOLINE_TEMPLATE (FILE)' ! 629: A C statement to output, on the stream FILE, assembler code for a ! 630: block of data that contains the constant parts of a trampoline. ! 631: This code should not include a label--the label is taken care of ! 632: automatically. ! 633: ! 634: `TRAMPOLINE_SECTION' ! 635: The name of a subroutine to switch to the section in which the ! 636: trampoline template is to be placed (*note Sections::.). The ! 637: default is a value of `readonly_data_section', which places the ! 638: trampoline in the section containing read-only data. ! 639: ! 640: `TRAMPOLINE_SIZE' ! 641: A C expression for the size in bytes of the trampoline, as an ! 642: integer. ! 643: ! 644: `TRAMPOLINE_ALIGNMENT' ! 645: Alignment required for trampolines, in bits. ! 646: ! 647: If you don't define this macro, the value of `BIGGEST_ALIGNMENT' ! 648: is used for aligning trampolines. ! 649: ! 650: `INITIALIZE_TRAMPOLINE (ADDR, FNADDR, STATIC_CHAIN)' ! 651: A C statement to initialize the variable parts of a trampoline. ! 652: aDDR is an RTX for the address of the trampoline; FNADDR is an RTX ! 653: for the address of the nested function; STATIC_CHAIN is an RTX for ! 654: the static chain value that should be passed to the function when ! 655: it is called. ! 656: ! 657: `ALLOCATE_TRAMPOLINE (FP)' ! 658: A C expression to allocate run-time space for a trampoline. The ! 659: expression value should be an RTX representing a memory reference ! 660: to the space for the trampoline. ! 661: ! 662: If this macro is not defined, by default the trampoline is ! 663: allocated as a stack slot. This default is right for most ! 664: machines. The exceptions are machines where it is impossible to ! 665: execute instructions in the stack area. On such machines, you may ! 666: have to implement a separate stack, using this macro in ! 667: conjunction with `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE'. ! 668: ! 669: FP points to a data structure, a `struct function', which ! 670: describes the compilation status of the immediate containing ! 671: function of the function which the trampoline is for. Normally ! 672: (when `ALLOCATE_TRAMPOLINE' is not defined), the stack slot for the ! 673: trampoline is in the stack frame of this containing function. ! 674: Other allocation strategies probably must do something analogous ! 675: with this information. ! 676: ! 677: Implementing trampolines is difficult on many machines because they ! 678: have separate instruction and data caches. Writing into a stack ! 679: location fails to clear the memory in the instruction cache, so when ! 680: the program jumps to that location, it executes the old contents. ! 681: ! 682: Here are two possible solutions. One is to clear the relevant parts ! 683: of the instruction cache whenever a trampoline is set up. The other is ! 684: to make all trampolines identical, by having them jump to a standard ! 685: subroutine. The former technique makes trampoline execution faster; the ! 686: latter makes initialization faster. ! 687: ! 688: To clear the instruction cache when a trampoline is initialized, ! 689: define the following macros which describe the shape of the cache. ! 690: ! 691: `INSN_CACHE_SIZE' ! 692: The total size in bytes of the cache. ! 693: ! 694: `INSN_CACHE_LINE_WIDTH' ! 695: The length in bytes of each cache line. The cache is divided into ! 696: cache lines which are disjoint slots, each holding a contiguous ! 697: chunk of data fetched from memory. Each time data is brought into ! 698: the cache, an entire line is read at once. The data loaded into a ! 699: cache line is always aligned on a boundary equal to the line size. ! 700: ! 701: `INSN_CACHE_DEPTH' ! 702: The number of alternative cache lines that can hold any particular ! 703: memory location. ! 704: ! 705: Alternatively, if the machine has system calls or instructions to ! 706: clear the instruction cache directly, you can define the following ! 707: macro. ! 708: ! 709: `' ! 710: If defined, expands to a C expression clearing the *instruction ! 711: cache* in the specified interval. If it is not defined, and the ! 712: macro INSN_CACHE_SIZE is defined, some generic code is generated ! 713: to clear the cache. The definition of this macro would typically ! 714: be a series of `asm' statements. Both BEG and END are both pointer ! 715: expressions. ! 716: ! 717: To use a standard subroutine, define the following macro. In ! 718: addition, you must make sure that the instructions in a trampoline fill ! 719: an entire cache line with identical instructions, or else ensure that ! 720: the beginning of the trampoline code is always aligned at the same ! 721: point in its cache line. Look in `m68k.h' as a guide. ! 722: ! 723: `TRANSFER_FROM_TRAMPOLINE' ! 724: Define this macro if trampolines need a special subroutine to do ! 725: their work. The macro should expand to a series of `asm' ! 726: statements which will be compiled with GNU CC. They go in a ! 727: library function named `__transfer_from_trampoline'. ! 728: ! 729: If you need to avoid executing the ordinary prologue code of a ! 730: compiled C function when you jump to the subroutine, you can do so ! 731: by placing a special label of your own in the assembler code. Use ! 732: one `asm' statement to generate an assembler label, and another to ! 733: make the label global. Then trampolines can use that label to ! 734: jump directly to your special assembler code. ! 735: ! 736: ! 737: File: gcc.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros ! 738: ! 739: Implicit Calls to Library Routines ! 740: ================================== ! 741: ! 742: `MULSI3_LIBCALL' ! 743: A C string constant giving the name of the function to call for ! 744: multiplication of one signed full-word by another. If you do not ! 745: define this macro, the default name is used, which is `__mulsi3', ! 746: a function defined in `libgcc.a'. ! 747: ! 748: `DIVSI3_LIBCALL' ! 749: A C string constant giving the name of the function to call for ! 750: division of one signed full-word by another. If you do not define ! 751: this macro, the default name is used, which is `__divsi3', a ! 752: function defined in `libgcc.a'. ! 753: ! 754: `UDIVSI3_LIBCALL' ! 755: A C string constant giving the name of the function to call for ! 756: division of one unsigned full-word by another. If you do not ! 757: define this macro, the default name is used, which is `__udivsi3', ! 758: a function defined in `libgcc.a'. ! 759: ! 760: `MODSI3_LIBCALL' ! 761: A C string constant giving the name of the function to call for the ! 762: remainder in division of one signed full-word by another. If you ! 763: do not define this macro, the default name is used, which is ! 764: `__modsi3', a function defined in `libgcc.a'. ! 765: ! 766: `UMODSI3_LIBCALL' ! 767: A C string constant giving the name of the function to call for the ! 768: remainder in division of one unsigned full-word by another. If ! 769: you do not define this macro, the default name is used, which is ! 770: `__umodsi3', a function defined in `libgcc.a'. ! 771: ! 772: `MULDI3_LIBCALL' ! 773: A C string constant giving the name of the function to call for ! 774: multiplication of one signed double-word by another. If you do not ! 775: define this macro, the default name is used, which is `__muldi3', ! 776: a function defined in `libgcc.a'. ! 777: ! 778: `DIVDI3_LIBCALL' ! 779: A C string constant giving the name of the function to call for ! 780: division of one signed double-word by another. If you do not ! 781: define this macro, the default name is used, which is `__divdi3', a ! 782: function defined in `libgcc.a'. ! 783: ! 784: `UDIVDI3_LIBCALL' ! 785: A C string constant giving the name of the function to call for ! 786: division of one unsigned full-word by another. If you do not ! 787: define this macro, the default name is used, which is `__udivdi3', ! 788: a function defined in `libgcc.a'. ! 789: ! 790: `MODDI3_LIBCALL' ! 791: A C string constant giving the name of the function to call for the ! 792: remainder in division of one signed double-word by another. If ! 793: you do not define this macro, the default name is used, which is ! 794: `__moddi3', a function defined in `libgcc.a'. ! 795: ! 796: `UMODDI3_LIBCALL' ! 797: A C string constant giving the name of the function to call for the ! 798: remainder in division of one unsigned full-word by another. If ! 799: you do not define this macro, the default name is used, which is ! 800: `__umoddi3', a function defined in `libgcc.a'. ! 801: ! 802: `TARGET_EDOM' ! 803: The value of `EDOM' on the target machine, as a C integer constant ! 804: expression. If you don't define this macro, GNU CC does not ! 805: attempt to deposit the value of `EDOM' into `errno' directly. ! 806: Look in `/usr/include/errno.h' to find the value of `EDOM' on your ! 807: system. ! 808: ! 809: If you do not define `TARGET_EDOM', then compiled code reports ! 810: domain errors by calling the library function and letting it ! 811: report the error. If mathematical functions on your system use ! 812: `matherr' when there is an error, then you should leave ! 813: `TARGET_EDOM' undefined so that `matherr' is used normally. ! 814: ! 815: `GEN_ERRNO_RTX' ! 816: Define this macro as a C expression to create an rtl expression ! 817: that refers to the global "variable" `errno'. (On certain systems, ! 818: `errno' may not actually be a variable.) If you don't define this ! 819: macro, a reasonable default is used. ! 820: ! 821: `TARGET_MEM_FUNCTIONS' ! 822: Define this macro if GNU CC should generate calls to the System V ! 823: (and ANSI C) library functions `memcpy' and `memset' rather than ! 824: the BSD functions `bcopy' and `bzero'. ! 825: ! 826: `LIBGCC_NEEDS_DOUBLE' ! 827: Define this macro if only `float' arguments cannot be passed to ! 828: library routines (so they must be converted to `double'). This ! 829: macro affects both how library calls are generated and how the ! 830: library routines in `libgcc1.c' accept their arguments. It is ! 831: useful on machines where floating and fixed point arguments are ! 832: passed differently, such as the i860. ! 833: ! 834: `FLOAT_ARG_TYPE' ! 835: Define this macro to override the type used by the library ! 836: routines to pick up arguments of type `float'. (By default, they ! 837: use a union of `float' and `int'.) ! 838: ! 839: The obvious choice would be `float'--but that won't work with ! 840: traditional C compilers that expect all arguments declared as ! 841: `float' to arrive as `double'. To avoid this conversion, the ! 842: library routines ask for the value as some other type and then ! 843: treat it as a `float'. ! 844: ! 845: On some systems, no other type will work for this. For these ! 846: systems, you must use `LIBGCC_NEEDS_DOUBLE' instead, to force ! 847: conversion of the values `double' before they are passed. ! 848: ! 849: `FLOATIFY (PASSED-VALUE)' ! 850: Define this macro to override the way library routines redesignate ! 851: a `float' argument as a `float' instead of the type it was passed ! 852: as. The default is an expression which takes the `float' field of ! 853: the union. ! 854: ! 855: `FLOAT_VALUE_TYPE' ! 856: Define this macro to override the type used by the library ! 857: routines to return values that ought to have type `float'. (By ! 858: default, they use `int'.) ! 859: ! 860: The obvious choice would be `float'--but that won't work with ! 861: traditional C compilers gratuitously convert values declared as ! 862: `float' into `double'. ! 863: ! 864: `INTIFY (FLOAT-VALUE)' ! 865: Define this macro to override the way the value of a ! 866: `float'-returning library routine should be packaged in order to ! 867: return it. These functions are actually declared to return type ! 868: `FLOAT_VALUE_TYPE' (normally `int'). ! 869: ! 870: These values can't be returned as type `float' because traditional ! 871: C compilers would gratuitously convert the value to a `double'. ! 872: ! 873: A local variable named `intify' is always available when the macro ! 874: `INTIFY' is used. It is a union of a `float' field named `f' and ! 875: a field named `i' whose type is `FLOAT_VALUE_TYPE' or `int'. ! 876: ! 877: If you don't define this macro, the default definition works by ! 878: copying the value through that union. ! 879: ! 880: `nongcc_SI_type' ! 881: Define this macro as the name of the data type corresponding to ! 882: `SImode' in the system's own C compiler. ! 883: ! 884: You need not define this macro if that type is `long int', as it ! 885: usually is. ! 886: ! 887: `nongcc_word_type' ! 888: Define this macro as the name of the data type corresponding to the ! 889: word_mode in the system's own C compiler. ! 890: ! 891: You need not define this macro if that type is `long int', as it ! 892: usually is. ! 893: ! 894: `perform_...' ! 895: Define these macros to supply explicit C statements to carry out ! 896: various arithmetic operations on types `float' and `double' in the ! 897: library routines in `libgcc1.c'. See that file for a full list of ! 898: these macros and their arguments. ! 899: ! 900: On most machines, you don't need to define any of these macros, ! 901: because the C compiler that comes with the system takes care of ! 902: doing them. ! 903: ! 904: `NEXT_OBJC_RUNTIME' ! 905: Define this macro to generate code for Objective C message sending ! 906: using the calling convention of the NeXT system. This calling ! 907: convention involves passing the object, the selector and the ! 908: method arguments all at once to the method-lookup library function. ! 909: ! 910: The default calling convention passes just the object and the ! 911: selector to the lookup function, which returns a pointer to the ! 912: method. ! 913: ! 914: ! 915: File: gcc.info, Node: Addressing Modes, Next: Condition Code, Prev: Library Calls, Up: Target Macros ! 916: ! 917: Addressing Modes ! 918: ================ ! 919: ! 920: `HAVE_POST_INCREMENT' ! 921: Define this macro if the machine supports post-increment ! 922: addressing. ! 923: ! 924: `HAVE_PRE_INCREMENT' ! 925: `HAVE_POST_DECREMENT' ! 926: `HAVE_PRE_DECREMENT' ! 927: Similar for other kinds of addressing. ! 928: ! 929: `CONSTANT_ADDRESS_P (X)' ! 930: A C expression that is 1 if the RTX X is a constant which is a ! 931: valid address. On most machines, this can be defined as ! 932: `CONSTANT_P (X)', but a few machines are more restrictive in which ! 933: constant addresses are supported. ! 934: ! 935: `CONSTANT_P' accepts integer-values expressions whose values are ! 936: not explicitly known, such as `symbol_ref', `label_ref', and ! 937: `high' expressions and `const' arithmetic expressions, in addition ! 938: to `const_int' and `const_double' expressions. ! 939: ! 940: `MAX_REGS_PER_ADDRESS' ! 941: A number, the maximum number of registers that can appear in a ! 942: valid memory address. Note that it is up to you to specify a ! 943: value equal to the maximum number that `GO_IF_LEGITIMATE_ADDRESS' ! 944: would ever accept. ! 945: ! 946: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)' ! 947: A C compound statement with a conditional `goto LABEL;' executed ! 948: if X (an RTX) is a legitimate memory address on the target machine ! 949: for a memory operand of mode MODE. ! 950: ! 951: It usually pays to define several simpler macros to serve as ! 952: subroutines for this one. Otherwise it may be too complicated to ! 953: understand. ! 954: ! 955: This macro must exist in two variants: a strict variant and a ! 956: non-strict one. The strict variant is used in the reload pass. It ! 957: must be defined so that any pseudo-register that has not been ! 958: allocated a hard register is considered a memory reference. In ! 959: contexts where some kind of register is required, a pseudo-register ! 960: with no hard register must be rejected. ! 961: ! 962: The non-strict variant is used in other passes. It must be ! 963: defined to accept all pseudo-registers in every context where some ! 964: kind of register is required. ! 965: ! 966: Compiler source files that want to use the strict variant of this ! 967: macro define the macro `REG_OK_STRICT'. You should use an `#ifdef ! 968: REG_OK_STRICT' conditional to define the strict variant in that ! 969: case and the non-strict variant otherwise. ! 970: ! 971: Subroutines to check for acceptable registers for various purposes ! 972: (one for base registers, one for index registers, and so on) are ! 973: typically among the subroutines used to define ! 974: `GO_IF_LEGITIMATE_ADDRESS'. Then only these subroutine macros ! 975: need have two variants; the higher levels of macros may be the ! 976: same whether strict or not. ! 977: ! 978: Normally, constant addresses which are the sum of a `symbol_ref' ! 979: and an integer are stored inside a `const' RTX to mark them as ! 980: constant. Therefore, there is no need to recognize such sums ! 981: specifically as legitimate addresses. Normally you would simply ! 982: recognize any `const' as legitimate. ! 983: ! 984: Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant ! 985: sums that are not marked with `const'. It assumes that a naked ! 986: `plus' indicates indexing. If so, then you *must* reject such ! 987: naked constant sums as illegitimate addresses, so that none of ! 988: them will be given to `PRINT_OPERAND_ADDRESS'. ! 989: ! 990: On some machines, whether a symbolic address is legitimate depends ! 991: on the section that the address refers to. On these machines, ! 992: define the macro `ENCODE_SECTION_INFO' to store the information ! 993: into the `symbol_ref', and then check for it here. When you see a ! 994: `const', you will have to look inside it to find the `symbol_ref' ! 995: in order to determine the section. *Note Assembler Format::. ! 996: ! 997: The best way to modify the name string is by adding text to the ! 998: beginning, with suitable punctuation to prevent any ambiguity. ! 999: Allocate the new name in `saveable_obstack'. You will have to ! 1000: modify `ASM_OUTPUT_LABELREF' to remove and decode the added text ! 1001: and output the name accordingly, and define `STRIP_NAME_ENCODING' ! 1002: to access the original name string. ! 1003: ! 1004: You can check the information stored here into the `symbol_ref' in ! 1005: the definitions of the macros `GO_IF_LEGITIMATE_ADDRESS' and ! 1006: `PRINT_OPERAND_ADDRESS'. ! 1007: ! 1008: `REG_OK_FOR_BASE_P (X)' ! 1009: A C expression that is nonzero if X (assumed to be a `reg' RTX) is ! 1010: valid for use as a base register. For hard registers, it should ! 1011: always accept those which the hardware permits and reject the ! 1012: others. Whether the macro accepts or rejects pseudo registers ! 1013: must be controlled by `REG_OK_STRICT' as described above. This ! 1014: usually requires two variant definitions, of which `REG_OK_STRICT' ! 1015: controls the one actually used. ! 1016: ! 1017: `REG_OK_FOR_INDEX_P (X)' ! 1018: A C expression that is nonzero if X (assumed to be a `reg' RTX) is ! 1019: valid for use as an index register. ! 1020: ! 1021: The difference between an index register and a base register is ! 1022: that the index register may be scaled. If an address involves the ! 1023: sum of two registers, neither one of them scaled, then either one ! 1024: may be labeled the "base" and the other the "index"; but whichever ! 1025: labeling is used must fit the machine's constraints of which ! 1026: registers may serve in each capacity. The compiler will try both ! 1027: labelings, looking for one that is valid, and will reload one or ! 1028: both registers only if neither labeling works. ! 1029: ! 1030: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)' ! 1031: A C compound statement that attempts to replace X with a valid ! 1032: memory address for an operand of mode MODE. WIN will be a C ! 1033: statement label elsewhere in the code; the macro definition may use ! 1034: ! 1035: GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); ! 1036: ! 1037: to avoid further processing if the address has become legitimate. ! 1038: ! 1039: X will always be the result of a call to `break_out_memory_refs', ! 1040: and OLDX will be the operand that was given to that function to ! 1041: produce X. ! 1042: ! 1043: The code generated by this macro should not alter the substructure ! 1044: of X. If it transforms X into a more legitimate form, it should ! 1045: assign X (which will always be a C variable) a new value. ! 1046: ! 1047: It is not necessary for this macro to come up with a legitimate ! 1048: address. The compiler has standard ways of doing so in all cases. ! 1049: In fact, it is safe for this macro to do nothing. But often a ! 1050: machine-dependent strategy can generate better code. ! 1051: ! 1052: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)' ! 1053: A C statement or compound statement with a conditional `goto ! 1054: LABEL;' executed if memory address X (an RTX) can have different ! 1055: meanings depending on the machine mode of the memory reference it ! 1056: is used for or if the address is valid for some modes but not ! 1057: others. ! 1058: ! 1059: Autoincrement and autodecrement addresses typically have ! 1060: mode-dependent effects because the amount of the increment or ! 1061: decrement is the size of the operand being addressed. Some ! 1062: machines have other mode-dependent addresses. Many RISC machines ! 1063: have no mode-dependent addresses. ! 1064: ! 1065: You may assume that ADDR is a valid address for the machine. ! 1066: ! 1067: `LEGITIMATE_CONSTANT_P (X)' ! 1068: A C expression that is nonzero if X is a legitimate constant for ! 1069: an immediate operand on the target machine. You can assume that X ! 1070: satisfies `CONSTANT_P', so you need not check this. In fact, `1' ! 1071: is a suitable definition for this macro on machines where anything ! 1072: `CONSTANT_P' is valid. ! 1073:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.