|
|
1.1 ! root 1: Info file internals, produced by Makeinfo, -*- Text -*- ! 2: from input file internals.texinfo. ! 3: ! 4: ! 5: ! 6: This file documents the internals of the GNU compiler. ! 7: ! 8: Copyright (C) 1988 Free Software Foundation, Inc. ! 9: ! 10: Permission is granted to make and distribute verbatim copies of ! 11: this manual provided the copyright notice and this permission notice ! 12: are preserved on all copies. ! 13: ! 14: Permission is granted to copy and distribute modified versions of this ! 15: manual under the conditions for verbatim copying, provided also that the ! 16: section entitled ``GNU CC General Public License'' is included exactly as ! 17: in the original, and provided that the entire resulting derived work is ! 18: distributed under the terms of a permission notice identical to this one. ! 19: ! 20: Permission is granted to copy and distribute translations of this manual ! 21: into another language, under the above conditions for modified versions, ! 22: except that the section entitled ``GNU CC General Public License'' and ! 23: this permission notice may be included in translations approved by the ! 24: Free Software Foundation instead of in the original English. ! 25: ! 26: ! 27: ! 28: ! 29: ! 30: ! 31: File: internals, Node: Peephole Definitions, Next: Expander Definitions, Prev: Jump Patterns, Up: Machine Desc ! 32: ! 33: Defining Machine-Specific Peephole Optimizers ! 34: ============================================= ! 35: ! 36: In addition to instruction patterns the `md' file may contain definitions ! 37: of machine-specific peephole optimizations. ! 38: ! 39: The combiner does not notice certain peephole optimizations when the data ! 40: flow in the program does not suggest that it should try them. For example, ! 41: sometimes two consecutive insns related in purpose can be combined even ! 42: though the second one does not appear to use a register computed in the ! 43: first one. A machine-specific peephole optimizer can detect such ! 44: opportunities. ! 45: ! 46: A definition looks like this: ! 47: ! 48: (define_peephole ! 49: [INSN-PATTERN-1 ! 50: INSN-PATTERN-2 ! 51: ...] ! 52: "CONDITION" ! 53: "TEMPLATE") ! 54: ! 55: ! 56: In this skeleton, INSN-PATTERN-1 and so on are patterns to match ! 57: consecutive instructions. The optimization applies to a sequence of ! 58: instructions when INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 ! 59: matches the next, and so on. ! 60: ! 61: INSN-PATTERN-1 and so on look *almost* like the second operand of ! 62: `define_insn'. There is one important difference: this pattern is an RTX, ! 63: not a vector. If the `define_insn' pattern would be a vector of one ! 64: element, the INSN-PATTERN should be just that element, no vector. If the ! 65: `define_insn' pattern would have multiple elements then the INSN-PATTERN ! 66: must place the vector inside an explicit `parallel' RTX. ! 67: ! 68: The operands of the instructions are matched with `match_operands' and ! 69: `match_dup', as usual). What is not usual is that the operand numbers ! 70: apply to all the instruction patterns in the definition. So, you can check ! 71: for identical operands in two instructions by using `match_operand' in one ! 72: instruction and `match_dup' in the other. ! 73: ! 74: The operand constraints used in `match_operand' patterns do not have any ! 75: direct effect on the applicability of the optimization, but they will be ! 76: validated afterward, so write constraints that are sure to fit whenever the ! 77: optimization is applied. It is safe to use `"g"' for each operand. ! 78: ! 79: Once a sequence of instructions matches the patterns, the CONDITION is ! 80: checked. This is a C expression which makes the final decision whether to ! 81: perform the optimization (do so if the expression is nonzero). If ! 82: CONDITION is omitted (in other words, the string is empty) then the ! 83: optimization is applied to every sequence of instructions that matches the ! 84: patterns. ! 85: ! 86: The defined peephole optimizations are applied after register allocation is ! 87: complete. Therefore, the optimizer can check which operands have ended up ! 88: in which kinds of registers, just by looking at the operands. ! 89: ! 90: The way to refer to the operands in CONDITION is to write `operands[I]' for ! 91: operand number I (as matched by `(match_operand I ...)'). Use the variable ! 92: `insn' to refer to the last of the insns being matched; use `PREV_INSN' to ! 93: find the preceding insns (but be careful to skip over any `note' insns that ! 94: intervene). ! 95: ! 96: When optimizing computations with intermediate results, you can use ! 97: CONDITION to match only when the intermediate results are not used ! 98: elsewhere. Use the C expression `dead_or_set_p (INSN, OP)', where INSN is ! 99: the insn in which you expect the value to be used for the last time (from ! 100: the value of `insn', together with use of `PREV_INSN'), and OP is the ! 101: intermediate value (from `operands[I]'). ! 102: ! 103: Applying the optimization means replacing the sequence of instructions with ! 104: one new instruction. The TEMPLATE controls ultimate output of assembler ! 105: code for this combined instruction. It works exactly like the template of ! 106: a `define_insn'. Operand numbers in this template are the same ones used ! 107: in matching the original sequence of instructions. ! 108: ! 109: The result of a defined peephole optimizer does not need to match any of ! 110: the instruction patterns, and it does not have an opportunity to match ! 111: them. The peephole optimizer definition itself serves as the instruction ! 112: pattern to control how the instruction is output. ! 113: ! 114: Defined peephole optimizers are run in the last jump optimization pass, so ! 115: the instructions they produce are never combined or rearranged ! 116: automatically in any way. ! 117: ! 118: Here is an example, taken from the 68000 machine description: ! 119: ! 120: (define_peephole ! 121: [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) ! 122: (set (match_operand:DF 0 "register_operand" "f") ! 123: (match_operand:DF 1 "register_operand" "ad"))] ! 124: "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" ! 125: "* ! 126: { ! 127: rtx xoperands[2]; ! 128: xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); ! 129: #ifdef MOTOROLA ! 130: output_asm_insn (\"move.l %1,(sp)\", xoperands); ! 131: output_asm_insn (\"move.l %1,-(sp)\", operands); ! 132: return \"fmove.d (sp)+,%0\"; ! 133: #else ! 134: output_asm_insn (\"movel %1,sp@\", xoperands); ! 135: output_asm_insn (\"movel %1,sp@-\", operands); ! 136: return \"fmoved sp@+,%0\"; ! 137: #endif ! 138: } ! 139: ") ! 140: ! 141: ! 142: The effect of this optimization is to change ! 143: ! 144: jbsr _foobar ! 145: addql #4,sp ! 146: movel d1,sp@- ! 147: movel d0,sp@- ! 148: fmoved sp@+,fp0 ! 149: ! 150: ! 151: into ! 152: ! 153: jbsr _foobar ! 154: movel d1,sp@ ! 155: movel d0,sp@- ! 156: fmoved sp@+,fp0 ! 157: ! 158: ! 159: ! 160: File: internals, Node: Expander Definitions, Prev: Peephole Definitions, Up: Machine Desc ! 161: ! 162: Defining RTL Sequences for Code Generation ! 163: ========================================== ! 164: ! 165: On some target machines, some standard pattern names for RTL generation ! 166: cannot be handled with single insn, but a sequence of RTL insns can ! 167: represent them. For these target machines, you can write a `define_expand' ! 168: to specify how to generate the sequence of RTL. ! 169: ! 170: A `define_expand' is an RTL expression that looks almost like a ! 171: `define_insn'; but, unlike the latter, a `define_expand' is used only for ! 172: RTL generation and it can produce more than one RTL insn. ! 173: ! 174: A `define_expand' RTX has four operands: ! 175: ! 176: * The name. Each `define_expand' must have a name, since the only use ! 177: for it is to refer to it by name. ! 178: ! 179: * The RTL template. This is just like the RTL template for a ! 180: `define_peephole' in that it is a vector of RTL expressions each being ! 181: one insn. ! 182: ! 183: * The condition, a string containing a C expression. This expression is ! 184: used to express how the availability of this pattern depends on ! 185: subclasses of target machine, selected by command-line options when ! 186: GNU CC is run. This is just like the condition of a `define_insn' ! 187: that has a standard name. ! 188: ! 189: * The preparation statements, a string containing zero or more C ! 190: statements which are to be executed before RTL code is generated from ! 191: the RTL template. ! 192: ! 193: Usually these statements prepare temporary registers for use as ! 194: internal operands in the RTL template, but they can also generate RTL ! 195: insns directly by calling routines such as `emit_insn', etc. Any such ! 196: insns precede the ones that come from the RTL template. ! 197: ! 198: The RTL template, in addition to controlling generation of RTL insns, also ! 199: describes the operands that need to be specified when this pattern is used. ! 200: In particular, it gives a predicate for each operand. ! 201: ! 202: A true operand, which need to be specified in order to generate RTL from ! 203: the pattern, should be described with a `match_operand' in its first ! 204: occurrence in the RTL template. This enters information on the operand's ! 205: predicate into the tables that record such things. GNU CC uses the ! 206: information to preload the operand into a register if that is required for ! 207: valid RTL code. If the operand is referred to more than once, subsequent ! 208: references should use `match_dup'. ! 209: ! 210: The RTL template may also refer to internal ``operands'' which are ! 211: temporary registers or labels used only within the sequence made by the ! 212: `define_expand'. Internal operands are substituted into the RTL template ! 213: with `match_dup', never with `match_operand'. The values of the internal ! 214: operands are not passed in as arguments by the compiler when it requests ! 215: use of this pattern. Instead, they are computed within the pattern, in the ! 216: preparation statements. These statements compute the values and store them ! 217: into the appropriate elements of `operands' so that `match_dup' can find ! 218: them. ! 219: ! 220: There are two special macros defined for use in the preparation statements: ! 221: `DONE' and `FAIL'. Use them with a following semicolon, as a statement. ! 222: ! 223: `DONE' ! 224: Use the `DONE' macro to end RTL generation for the pattern. The only ! 225: RTL insns resulting from the pattern on this occasion will be those ! 226: already emitted by explicit calls to `emit_insn' within the ! 227: preparation statements; the RTL template will not be generated. ! 228: ! 229: `FAIL' ! 230: Make the pattern fail on this occasion. When a pattern fails, it ! 231: means that the pattern was not truly available. The calling routines ! 232: in the compiler will try other strategies for code generation using ! 233: other patterns. ! 234: ! 235: Failure is currently supported only for binary operations (addition, ! 236: multiplication, shifting, etc.). ! 237: ! 238: Do not emit any insns explicitly with `emit_insn' before failing. ! 239: ! 240: Here is an example, the definition of left-shift for the SPUR chip: ! 241: ! 242: (define_expand "ashlsi3" ! 243: [(set (match_operand:SI 0 "register_operand" "") ! 244: (ashift:SI ! 245: (match_operand:SI 1 "register_operand" "") ! 246: (match_operand:SI 2 "nonmemory_operand" "")))] ! 247: "" ! 248: " ! 249: { ! 250: if (GET_CODE (operands[2]) != CONST_INT ! 251: || (unsigned) INTVAL (operands[2]) > 3) ! 252: FAIL; ! 253: }") ! 254: ! 255: ! 256: This example uses `define_expand' so that it can generate an RTL insn for ! 257: shifting when the shift-count is in the supported range of 0 to 3 but fail ! 258: in other cases where machine insns aren't available. When it fails, the ! 259: compiler tries another strategy using different patterns (such as, a ! 260: library call). ! 261: ! 262: If the compiler were able to handle nontrivial condition-strings in ! 263: patterns with names, then there would be possible to use a `define_insn' in ! 264: that case. Here is another case (zero-extension on the 68000) which makes ! 265: more use of the power of `define_expand': ! 266: ! 267: (define_expand "zero_extendhisi2" ! 268: [(set (match_operand:SI 0 "general_operand" "") ! 269: (const_int 0)) ! 270: (set (strict_low_part ! 271: (subreg:HI ! 272: (match_operand:SI 0 "general_operand" "") ! 273: 0)) ! 274: (match_operand:HI 1 "general_operand" ""))] ! 275: "" ! 276: "operands[1] = make_safe_from (operands[1], operands[0]);") ! 277: ! 278: ! 279: Here two RTL insns are generated, one to clear the entire output operand ! 280: and the other to copy the input operand into its low half. This sequence ! 281: is incorrect if the input operand refers to [the old value of] the output ! 282: operand, so the preparation statement makes sure this isn't so. The ! 283: function `make_safe_from' copies the `operands[1]' into a temporary ! 284: register if it refers to `operands[0]'. It does this by emitting another ! 285: RTL insn. ! 286: ! 287: Finally, a third example shows the use of an internal operand. ! 288: Zero-extension on the SPUR chip is done by `and'-ing the result against a ! 289: halfword mask. But this mask cannot be represented by a `const_int' ! 290: because the constant value is too large to be legitimate on this machine. ! 291: So it must be copied into a register with `force_reg' and then the register ! 292: used in the `and'. ! 293: ! 294: (define_expand "zero_extendhisi2" ! 295: [(set (match_operand:SI 0 "register_operand" "") ! 296: (and:SI (subreg:SI ! 297: (match_operand:HI 1 "register_operand" "") ! 298: 0) ! 299: (match_dup 2)))] ! 300: "" ! 301: "operands[2] ! 302: = force_reg (SImode, gen_rtx (CONST_INT, ! 303: VOIDmode, 65535)); ") ! 304: ! 305: ! 306: ! 307: File: internals, Node: Machine Macros, Next: Config, Prev: Machine Desc, Up: Top ! 308: ! 309: Machine Description Macros ! 310: ************************** ! 311: ! 312: The other half of the machine description is a C header file conventionally ! 313: given the name `tm-MACHINE.h'. The file `tm.h' should be a link to it. ! 314: The header file `config.h' includes `tm.h' and most compiler source files ! 315: include `config.h'. ! 316: ! 317: ! 318: * Menu: ! 319: ! 320: * Run-time Target:: Defining -m options like -m68000 and -m68020. ! 321: * Storage Layout:: Defining sizes and alignments of data types. ! 322: * Registers:: Naming and describing the hardware registers. ! 323: * Register Classes:: Defining the classes of hardware registers. ! 324: * Stack Layout:: Defining which way the stack grows and by how much. ! 325: * Library Names:: Specifying names of subroutines to call automatically. ! 326: * Addressing Modes:: Defining addressing modes valid for memory operands. ! 327: * Condition Code:: Defining how insns update the condition code. ! 328: * Assembler Format:: Defining how to write insns and pseudo-ops to output. ! 329: * Misc:: Everything else. ! 330: ! 331: ! 332: ! 333: File: internals, Node: Run-time Target, Next: Storage Layout, Prev: Machine Macros, Up: Machine Macros ! 334: ! 335: Run-time Target Specification ! 336: ============================= ! 337: ! 338: `CPP_PREDEFINES' ! 339: Define this to be a string constant containing `-D' options to define ! 340: the predefined macros that identify this machine and system. ! 341: ! 342: For example, on the Sun, one can use the value ! 343: ! 344: "-Dmc68000 -Dsun -Dunix" ! 345: ! 346: ! 347: `extern int target_flags;' ! 348: This declaration should be present. ! 349: ! 350: `TARGET_...' ! 351: This series of macros is to allow compiler command arguments to enable ! 352: or disable the use of optional features of the target machine. For ! 353: example, one machine description serves both the 68000 and the 68020; ! 354: a command argument tells the compiler whether it should use 68020-only ! 355: instructions or not. This command argument works by means of a macro ! 356: `TARGET_68020' that tests a bit in `target_flags'. ! 357: ! 358: Define a macro `TARGET_FEATURENAME' for each such option. Its ! 359: definition should test a bit in `target_flags'; for example: ! 360: ! 361: #define TARGET_68020 (target_flags & 1) ! 362: ! 363: ! 364: One place where these macros are used is in the condition-expressions ! 365: of instruction patterns. Note how `TARGET_68020' appears frequently ! 366: in the 68000 machine description file, `m68k.md'. Another place they ! 367: are used is in the definitions of the other macros in the ! 368: `tm-MACHINE.h' file. ! 369: ! 370: `TARGET_SWITCHES' ! 371: This macro defines names of command options to set and clear bits in ! 372: `target_flags'. Its definition is an initializer with a subgrouping ! 373: for each command option. ! 374: ! 375: Each subgrouping contains a string constant, that defines the option ! 376: name, and a number, which contains the bits to set in `target_flags'. ! 377: A negative number says to clear bits instead; the negative of the ! 378: number is which bits to clear. The actual option name is made by ! 379: appending `-m' to the specified name. ! 380: ! 381: One of the subgroupings should have a null string. The number in this ! 382: grouping is the default value for `target_flags'. Any target options ! 383: act starting with that value. ! 384: ! 385: Here is an example which defines `-m68000' and `-m68020' with opposite ! 386: meanings, and picks the latter as the default: ! 387: ! 388: #define TARGET_SWITCHES \ ! 389: { { "68020", 1}, \ ! 390: { "68000", -1}, \ ! 391: { "", 1}} ! 392: ! 393: ! 394: Sometimes certain combinations of command options do not make sense on a ! 395: particular target machine. You can define a macro `OVERRIDE_OPTIONS' to ! 396: take account of this. This macro, if defined, is executed once just after ! 397: all the command options have been parsed. ! 398: ! 399: ! 400: File: internals, Node: Storage Layout, Next: Registers, Prev: Run-time Target, Up: Machine Macros ! 401: ! 402: Storage Layout ! 403: ============== ! 404: ! 405: Note that the definitions of the macros in this table which are sizes or ! 406: alignments measured in bits do not need to be constant. They can be C ! 407: expressions that refer to static variables, such as the `target_flags'. ! 408: *note Run-time Target::. ! 409: ! 410: `BITS_BIG_ENDIAN' ! 411: Define this macro if the most significant bit in a byte has the lowest ! 412: number. This means that bit-field instructions count from the most ! 413: significant bit. If the machine has no bit-field instructions, this ! 414: macro is irrelevant. ! 415: ! 416: `BYTES_BIG_ENDIAN' ! 417: Define this macro if the most significant byte in a word has the ! 418: lowest number. ! 419: ! 420: `WORDS_BIG_ENDIAN' ! 421: Define this macro if, in a multiword object, the most significant word ! 422: has the lowest number. ! 423: ! 424: `BITS_PER_UNIT' ! 425: Number of bits in an addressable storage unit (byte); normally 8. ! 426: ! 427: `BITS_PER_WORD' ! 428: Number of bits in a word; normally 32. ! 429: ! 430: `UNITS_PER_WORD' ! 431: Number of storage units in a word; normally 4. ! 432: ! 433: `POINTER_SIZE' ! 434: Width of a pointer, in bits. ! 435: ! 436: `PARM_BOUNDARY' ! 437: Alignment required for function parameters on the stack, in bits. ! 438: ! 439: `STACK_BOUNDARY' ! 440: Define this macro if you wish to preserve a certain alignment for the ! 441: stack pointer at all times. The definition is a C expression for the ! 442: desired alignment (measured in bits). ! 443: ! 444: `FUNCTION_BOUNDARY' ! 445: Alignment required for a function entry point, in bits. ! 446: ! 447: `BIGGEST_ALIGNMENT' ! 448: Biggest alignment that any data type can require on this machine, in ! 449: bits. ! 450: ! 451: `EMPTY_FIELD_ALIGNMENT' ! 452: Alignment in bits to be given to a structure bit field that follows an ! 453: empty field such as `int : 0;'. ! 454: ! 455: `STRUCTURE_SIZE_BOUNDARY' ! 456: Number of bits which any structure or union's size must be a multiple ! 457: of. Each structure or union's size is rounded up to a multiple of this. ! 458: ! 459: If you do not define this macro, the default is the same as ! 460: `BITS_PER_UNIT'. ! 461: ! 462: `STRICT_ALIGNMENT' ! 463: Define this if instructions will fail to work if given data not on the ! 464: nominal alignment. If instructions will merely go slower in that ! 465: case, do not define this macro. ! 466: ! 467: ! 468: File: internals, Node: Registers, Next: Register Classes, Prev: Storage Layout, Up: Machine Macros ! 469: ! 470: Register Usage ! 471: ============== ! 472: ! 473: `FIRST_PSEUDO_REGISTER' ! 474: Number of hardware registers known to the compiler. They receive ! 475: numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo ! 476: register's number really is assigned the number `FIRST_PSEUDO_REGISTER'. ! 477: ! 478: `FIXED_REGISTERS' ! 479: An initializer that says which registers are used for fixed purposes ! 480: all throughout the compiled code and are therefore not available for ! 481: general allocation. These would include the stack pointer, the frame ! 482: pointer, the program counter on machines where that is considered one ! 483: of the addressable registers, and any other numbered register with a ! 484: standard use. ! 485: ! 486: This information is expressed as a sequence of numbers, separated by ! 487: commas and surrounded by braces. The Nth number is 1 if register N is ! 488: fixed, 0 otherwise. ! 489: ! 490: The table initialized from this macro, and the table initialized by ! 491: the following one, may be overridden at run time either automatically, ! 492: by the actions of the macro `CONDITIONAL_REGISTER_USAGE', or by the ! 493: user with the command options `-ffixed-REG', `-fcall-used-REG' and ! 494: `-fcall-saved-REG'. ! 495: ! 496: `CALL_USED_REGISTERS' ! 497: Like `FIXED_REGISTERS' but has 1 for each register that is clobbered ! 498: (in general) by function calls as well as for fixed registers. This ! 499: macro therefore identifies the registers that are not available for ! 500: general allocation of values that must live across function calls. ! 501: ! 502: If a register has 0 in `CALL_USED_REGISTERS', the compiler ! 503: automatically saves it on function entry and restores it on function ! 504: exit, if the register is used within the function. ! 505: ! 506: `CONDITIONAL_REGISTER_USAGE' ! 507: Zero or more C statements that may conditionally modify two variables ! 508: `fixed_regs' and `call_used_regs' (both of type `char []') after they ! 509: have been initialized from the two preceding macros. ! 510: ! 511: This is necessary in case the fixed or call-clobbered registers depend ! 512: on target flags. ! 513: ! 514: You need not define this macro if it has no work to do. ! 515: ! 516: `HARD_REGNO_REGS (REGNO, MODE)' ! 517: A C expression for the number of consecutive hard registers, starting ! 518: at register number REGNO, required to hold a value of mode MODE. ! 519: ! 520: On a machine where all registers are exactly one word, a suitable ! 521: definition of this macro is ! 522: ! 523: #define HARD_REGNO_NREGS(REGNO, MODE) \ ! 524: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ ! 525: / UNITS_PER_WORD)) ! 526: ! 527: ! 528: `HARD_REGNO_MODE_OK (REGNO, MODE)' ! 529: A C expression that is nonzero if it is permissible to store a value ! 530: of mode MODE in hard register number REGNO (or in several registers ! 531: starting with that one). For a machine where all registers are ! 532: equivalent, a suitable definition is ! 533: ! 534: #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 ! 535: ! 536: ! 537: It is not necessary for this macro to check for fixed register numbers ! 538: because the allocation mechanism considers them to be always occupied. ! 539: ! 540: Many machines have special registers for floating point arithmetic. ! 541: Often people assume that floating point machine modes are allowed only ! 542: in floating point registers. This is not true. Any registers that ! 543: can hold integers can safely *hold* a floating point machine mode, ! 544: whether or not floating arithmetic can be done on it in those registers. ! 545: ! 546: The true significance of special floating registers is rather than ! 547: non-floating-point machine modes *may not* go in those registers. ! 548: This is true if the floating registers normalize any value stored in ! 549: them, because storing a non-floating value there would garble it. If ! 550: the floating registers do not automatically normalize, if you can ! 551: store any bit pattern in one and retrieve it unchanged without a trap, ! 552: then any machine mode may go in a floating register and this macro ! 553: should say so. ! 554: ! 555: Sometimes there are floating registers that are especially slow to ! 556: access, so that it is better to store a value in a stack frame than in ! 557: such a register if floating point arithmetic is not being done. As ! 558: long as the floating registers are not in class `GENERAL_REGS', they ! 559: will not be used unless some insn's constraint asks for one. ! 560: ! 561: It is obligatory to support floating point `move' instructions into ! 562: and out of general registers, because unions and structures (which ! 563: have modes `SImode' or `DImode') can be in those registers and they ! 564: may have floating point members. ! 565: ! 566: `MODES_TIEABLE_P (MODE1, MODE2)' ! 567: A C expression that is nonzero if it is desirable to choose register ! 568: allocation so as to avoid move instructions between a value of mode ! 569: MODE1 and a value of mode MODE2. ! 570: ! 571: If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)' ! 572: are ever different for any R, then `MODES_TIEABLE_P (MODE1, MODE2)' ! 573: must be zero. ! 574: ! 575: `PC_REGNUM' ! 576: If the program counter has a register number, define this as that ! 577: register number. Otherwise, do not define it. ! 578: ! 579: `STACK_POINTER_REGNUM' ! 580: The register number of the stack pointer register, which must also be ! 581: a fixed register according to `FIXED_REGISTERS'. On many machines, ! 582: the hardware determines which register this is. ! 583: ! 584: `FRAME_POINTER_REGNUM' ! 585: The register number of the frame pointer register, which is used to ! 586: access automatic variables in the stack frame. On some machines, the ! 587: hardware determines which register this is. On other machines, you ! 588: can choose any register you wish for this purpose. ! 589: ! 590: `FRAME_POINTER_REQUIRED' ! 591: A C expression which is nonzero if a function must have and use a ! 592: frame pointer. This expression is evaluated in the reload pass, in ! 593: the function `reload', and it can in principle examine the current ! 594: function and decide according to the facts, but on most machines the ! 595: constant 0 or the constant 1 suffices. Use 0 when the machine allows ! 596: code to be generated with no frame pointer, and doing so saves some ! 597: time or space. Use 1 when there is no possible advantage to avoiding ! 598: a frame pointer. ! 599: ! 600: In certain cases, the compiler does not know how to do without a frame ! 601: pointer. The compiler recognizes those cases and automatically gives ! 602: the function a frame pointer regardless of what ! 603: `FRAME_POINTER_REQUIRED' says. You don't need to worry about them. ! 604: ! 605: In a function that does not require a frame pointer, the frame pointer ! 606: register can be allocated for ordinary usage, provided it is not ! 607: marked as a fixed register. See `FIXED_REGISTERS' for more information. ! 608: ! 609: `ARG_POINTER_REGNUM' ! 610: The register number of the arg pointer register, which is used to ! 611: access the function's argument list. On some machines, this is the ! 612: same as the frame pointer register. On some machines, the hardware ! 613: determines which register this is. On other machines, you can choose ! 614: any register you wish for this purpose. It must in any case be a ! 615: fixed register according to `FIXED_REGISTERS'. ! 616: ! 617: `STATIC_CHAIN_REGNUM' ! 618: The register number used for passing a function's static chain ! 619: pointer. This is needed for languages such as Pascal and Algol where ! 620: functions defined within other functions can access the local ! 621: variables of the outer functions; it is not currently used because C ! 622: does not provide this feature. ! 623: ! 624: The static chain register need not be a fixed register. ! 625: ! 626: `STRUCT_VALUE_REGNUM' ! 627: When a function's value's mode is `BLKmode', the value is not returned ! 628: according to `FUNCTION_VALUE'. Instead, the caller passes the address ! 629: of a block of memory in which the value should be stored. ! 630: `STRUCT_VALUE_REGNUM' is the register in which this address is passed. ! 631: ! 632: ! 633: File: internals, Node: Register Classes, Next: Stack Layout, Prev: Registers, Up: Machine Macros ! 634: ! 635: Register Classes ! 636: ================ ! 637: ! 638: On many machines, the numbered registers are not all equivalent. For ! 639: example, certain registers may not be allowed for indexed addressing; ! 640: certain registers may not be allowed in some instructions. These machine ! 641: restrictions are described to the compiler using "register classes". ! 642: ! 643: You define a number of register classes, giving each one a name and saying ! 644: which of the registers belong to it. Then you can specify register classes ! 645: that are allowed as operands to particular instruction patterns. ! 646: ! 647: In general, each register will belong to several classes. In fact, one ! 648: class must be named `ALL_REGS' and contain all the registers. Another ! 649: class must be named `NO_REGS' and contain no registers. Often the union of ! 650: two classes will be another class; however, this is not required. ! 651: ! 652: One of the classes must be named `GENERAL_REGS'. There is nothing terribly ! 653: special about the name, but the operand constraint letters `r' and `g' ! 654: specify this class. If `GENERAL_REGS' is the same as `ALL_REGS', just ! 655: define it as a macro which expands to `ALL_REGS'. ! 656: ! 657: The way classes other than `GENERAL_REGS' are specified in operand ! 658: constraints is through machine-dependent operand constraint letters. You ! 659: can define such letters to correspond to various classes, then use them in ! 660: operand constraints. ! 661: ! 662: You should define a class for the union of two classes whenever some ! 663: instruction allows both classes. For example, if an instruction allows ! 664: either a floating-point (coprocessor) register or a general register for a ! 665: certain operand, you should define a class `FLOAT_OR_GENERAL_REGS' which ! 666: includes both of them. Otherwise you will get suboptimal code. ! 667: ! 668: You must also specify certain redundant information about the register ! 669: classes: for each class, which classes contain it and which ones are ! 670: contained in it; for each pair of classes, the largest class contained in ! 671: their union. ! 672: ! 673: `enum reg_class' ! 674: An enumeral type that must be defined with all the register class ! 675: names as enumeral values. `NO_REGS' must be first. `ALL_REGS' must ! 676: be the last register class, followed by one more enumeral value, ! 677: `LIM_REG_CLASSES', which is not a register class but rather tells how ! 678: many classes there are. ! 679: ! 680: Each register class has a number, which is the value of casting the ! 681: class name to type `int'. The number serves as an index in many of ! 682: the tables described below. ! 683: ! 684: `REG_CLASS_NAMES' ! 685: An initializer containing the names of the register classes as C ! 686: string constants. These names are used in writing some of the ! 687: debugging dumps. ! 688: ! 689: `REG_CLASS_CONTENTS' ! 690: An initializer containing the contents of the register classes, as ! 691: integers which are bit masks. The Nth integer specifies the contents ! 692: of class N. The way the integer MASK is interpreted is that register ! 693: R is in the class if `MASK & (1 << R)' is 1. ! 694: ! 695: When the machine has more than 32 registers, an integer does not ! 696: suffice. Then the integers are replaced by sub-initializers, braced ! 697: groupings containing several integers. Each sub-initializer must be ! 698: suitable as an initializer for the type `HARD_REG_SET' which is ! 699: defined in `hard-reg-set.h'. ! 700: ! 701: `REGNO_REG_CLASS (REGNO)' ! 702: A C expression whose value is a register class containing hard ! 703: regiSTER REGNO. In general there is more that one such class; choose ! 704: a class which is "minimal", meaning that no smaller class also ! 705: contains the register. ! 706: ! 707: `INDEX_REG_CLASS' ! 708: A macro whose definition is the name of the class to which a valid ! 709: index register must belong. ! 710: ! 711: `REG_CLASS_FROM_LETTER (CHAR)' ! 712: A C expression which defines the machine-dependent operand constraint ! 713: letters for register classes. If CHAR is such a letter, the value ! 714: should be the register class corresponding to it. Otherwise, the ! 715: value should be `NO_REGS'. ! 716: ! 717: `REGNO_OK_FOR_BASE_P (NUM)' ! 718: A C expression which is nonzero if register number NUM is suitable for ! 719: use as a base register in operand addresses. It may be either a ! 720: suitable hard register or a pseudo register that has been allocated ! 721: such a hard register. ! 722: ! 723: `REGNO_OK_FOR_INDEX_P (NUM)' ! 724: A C expression which is nonzero if register number NUM is suitable for ! 725: use as an index register in operand addresses. It may be either a ! 726: suitable hard register or a pseudo register that has been allocated ! 727: such a hard register. ! 728: ! 729: The difference between an index register and a base register is that ! 730: the index register may be scaled. If an address involves the sum of ! 731: two registers, neither one of them scaled, then either one may be ! 732: labeled the ``base'' and the other the ``index''; but whichever ! 733: labeling is used must fit the machine's constraints of which registers ! 734: may serve in each capacity. The compiler will try both labelings, ! 735: looking for one that is valid, and reload one or both registers only ! 736: if neither labeling works. ! 737: ! 738: `PREFERRED_RELOAD_CLASS (X, CLASS)' ! 739: A C expression that places additional restrictions on the register ! 740: class to use when it is necessary to copy value X into a register in ! 741: class CLASS. The value is a register class; perhaps CLASS, or perhaps ! 742: another, smaller class. CLASS is always safe as a value. In fact, ! 743: the definition ! 744: ! 745: #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS ! 746: ! 747: ! 748: is always safe. However, sometimes returning a more restrictive class ! 749: makes better code. For example, on the 68000, when X is an integer ! 750: constant that is in range for a `moveq' instruction, the value of this ! 751: macro is always `DATA_REGS' as long as CLASS includes the data ! 752: registers. Requiring a data register guarantees that a `moveq' will ! 753: be used. ! 754: ! 755: `CLASS_MAX_NREGS (CLASS, MODE)' ! 756: A C expression for the maximum number of consecutive registers of ! 757: cLASS CLASS needed to hold a value of mode MODE. ! 758: ! 759: This is closely related to the macro `HARD_REGNO_NREGS'. In fact, the ! 760: value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be the ! 761: maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO values ! 762: in the class CLASS. ! 763: ! 764: This macro helps control the handling of multiple-word values in the ! 765: reload pass. ! 766: ! 767: Two other special macros describe which constants fit which constraint ! 768: letters. ! 769: ! 770: `CONST_OK_FOR_LETTER_P (VALUE, C)' ! 771: A C expression that defines the machine-dependent operand constraint ! 772: letters that specify particular ranges of integer values. If C is one ! 773: of those letters, the expression should check that VALUE, an integer, ! 774: is in the appropriate range and return 1 if so, 0 otherwise. If C is ! 775: not one of those letters, the value should be 0 regardless of VALUE. ! 776: ! 777: `CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)' ! 778: A C expression that defines the machine-dependent operand constraint ! 779: letters that specify particular ranges of floating values. If C is ! 780: one of those letters, the expression should check that VALUE, an RTX ! 781: of code `const_double', is in the appropriate range and return 1 if ! 782: so, 0 otherwise. If C is not one of those letters, the value should ! 783: be 0 regardless of VALUE. ! 784: ! 785: ! 786: File: internals, Node: Stack Layout, Next: Library Names, Prev: Register Classes, Up: Machine Macros ! 787: ! 788: Describing Stack Layout ! 789: ======================= ! 790: ! 791: `STACK_GROWS_DOWNWARD' ! 792: Define this macro if pushing a word onto the stack moves the stack ! 793: pointer to a smaller address. ! 794: ! 795: When we say, ``define this macro if ...,'' it means that the compiler ! 796: checks this macro only with `#ifdef' so the precise definition used ! 797: does not matter. ! 798: ! 799: `FRAME_GROWS_DOWNWARD' ! 800: Define this macro if the addresses of local variable slots are at ! 801: negative offsets from the frame pointer. ! 802: ! 803: `STARTING_FRAME_OFFSET' ! 804: Offset from the frame pointer to the first local variable slot to be ! 805: allocated. ! 806: ! 807: If `FRAME_GROWS_DOWNWARD', the next slot's offset is found by ! 808: subtracting the length of the first slot from `STARTING_FRAME_OFFSET'. ! 809: Otherwise, it is found by adding the length of the first slot to the ! 810: value `STARTING_FRAME_OFFSET'. ! 811: ! 812: `PUSH_ROUNDING (NPUSHED)' ! 813: A C expression that is the number of bytes actually pushed onto the ! 814: stack when an instruction attempts to push NPUSHED bytes. ! 815: ! 816: If the target machine does not have a push instruction, do not define ! 817: this macro. That directs GNU CC to use an alternate strategy: to ! 818: allocate the entire argument block and then store the arguments into it. ! 819: ! 820: On some machines, the definition ! 821: ! 822: #define PUSH_ROUNDING(BYTES) (BYTES) ! 823: ! 824: ! 825: will suffice. But on other machines, instructions that appear to push ! 826: one byte actually push two bytes in an attempt to maintain alignment. ! 827: Then the definition should be ! 828: ! 829: #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) ! 830: ! 831: ! 832: `FIRST_PARM_OFFSET' ! 833: Offset from the argument pointer register to the first argument's ! 834: address. ! 835: ! 836: `RETURN_POPS_ARGS (FUNTYPE)' ! 837: A C expression that should be 1 if a function pops its own arguments ! 838: on returning, or 0 if the function pops no arguments and the caller ! 839: must therefore pop them all after the function returns. ! 840: ! 841: FUNTYPE is a C variable whose value is a tree node that describes the ! 842: function in question. Normally it is a node of type `FUNCTION_TYPE' ! 843: that describes the data type of the function. From this it is ! 844: possible to obtain the data types of the value and arguments (if known). ! 845: ! 846: When a call to a library function is being considered, FUNTYPE will ! 847: contain an identifier node for the library function. Thus, if you ! 848: need to distinguish among various library functions, you can do so by ! 849: their names. Note that ``library function'' in this context means a ! 850: function used to perform arithmetic, whose name is known specially in ! 851: the compiler and was not mentioned in the C code being compiled. ! 852: ! 853: On the Vax, all functions always pop their arguments, so the ! 854: definition of this macro is 1. On the 68000, using the standard ! 855: calling convention, no functions pop their arguments, so the value of ! 856: the macro is always 0 in this case. But an alternative calling ! 857: convention is available in which functions that take a fixed number of ! 858: arguments pop them but other functions (such as `printf') pop nothing ! 859: (the caller pops all). When this convention is in use, FUNTYPE is ! 860: examined to determine whether a function takes a fixed number of ! 861: arguments. ! 862: ! 863: `FUNCTION_VALUE (VALTYPE, FUNC)' ! 864: A C expression to create an RTX representing the place where a ! 865: function returns a value of data type VALTYPE. VALTYPE is a tree node ! 866: representing a data type. Write `TYPE_MODE (VALTYPE)' to get the ! 867: machine mode used to represent that type. On many machines, only the ! 868: mode is relevant. (Actually, on most machines, scalar values are ! 869: returned in the same place regardless of mode). ! 870: ! 871: If the precise function being called is known, FUNC is a tree node ! 872: (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This ! 873: makes it possible to use a different value-returning convention for ! 874: specific functions when all their calls are known. ! 875: ! 876: `FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)' ! 877: Define this macro if the target machine has ``register windows'' so ! 878: that the register in which a function returns its value is not the ! 879: same as the one in which the caller sees the value. ! 880: ! 881: For such machines, `FUNCTION_VALUE' computes the register in which the ! 882: caller will see the value, and `FUNCTION_OUTGOING_VALUE' should be ! 883: defined in a similar fashion to tell the function where to put the ! 884: value. ! 885: ! 886: If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE' serves ! 887: both purposes. ! 888: ! 889: `LIBCALL_VALUE (MODE)' ! 890: A C expression to create an RTX representing the place where a library ! 891: function returns a value of mode MODE. If the precise function being ! 892: called is known, FUNC is a tree node (`FUNCTION_DECL') for it; ! 893: otherwise, FUNC is a null pointer. This makes it possible to use a ! 894: different value-returning convention for specific functions when all ! 895: their calls are known. ! 896: ! 897: Note that ``library function'' in this context means a compiler ! 898: support routine, used to perform arithmetic, whose name is known ! 899: specially by the compiler and was not mentioned in the C code being ! 900: compiled. ! 901: ! 902: `FUNCTION_VALUE_REGNO_P (REGNO)' ! 903: A C expression that is nonzero if REGNO is the number of a hard ! 904: register in which function values are sometimes returned. ! 905: ! 906: A register whose use for returning values is limited to serving as the ! 907: second of a pair (for a value of type `double', say) need not be ! 908: recognized by this macro. So for most machines, this definition ! 909: suffices: ! 910: ! 911: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) ! 912: ! 913: ! 914: `FUNCTION_ARG (CUM, MODE, TYPE, NAMED)' ! 915: A C expression that controls whether a function argument is passed in ! 916: a register, and which register. ! 917: ! 918: The arguments are CUM, which summarizes all the previous arguments; ! 919: MODE, the machine mode of the argument; TYPE, the data type of the ! 920: argument as a tree node or 0 if that is not known (which happens for C ! 921: support library functions); and NAMED, which is 1 for an ordinary ! 922: argument and 0 for nameless arguments that correspond to `...' in the ! 923: called function's prototype. ! 924: ! 925: The value of the expression should either be a `reg' RTX for the hard ! 926: register in which to pass the argument, or zero to pass the argument ! 927: on the stack. ! 928: ! 929: For the Vax and 68000, where normally all arguments are pushed, zero ! 930: suffices as a definition. ! 931: ! 932: `FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)' ! 933: Define this macro if the target machine has ``register windows'', so ! 934: that the register in which a function sees an arguments is not ! 935: necessarily the same as the one in which the caller passed the argument. ! 936: ! 937: For such machines, `FUNCTION_ARG' computes the register in which the ! 938: caller passes the value, and `FUNCTION_INCOMING_ARG' should be defined ! 939: in a similar fashion to tell the function being called where the ! 940: arguments will arrive. ! 941: ! 942: If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves both ! 943: purposes. ! 944: ! 945: `FUNCTION_ARG_PARTIAL_NREGS (CUM, MODE, TYPE, NAMED)' ! 946: A C expression for the number of words, at the beginning of an ! 947: argument, must be put in registers. The value must be zero for ! 948: arguments that are passed entirely in registers or that are entirely ! 949: pushed on the stack. ! 950: ! 951: On some machines, certain arguments must be passed partially in ! 952: registers and partially in memory. On these machines, typically the ! 953: first N words of arguments are passed in registers, and the rest on ! 954: the stack. If a multi-word argument (a `double' or a structure) ! 955: crosses that boundary, its first few words must be passed in registers ! 956: and the rest must be pushed. This macro tells the compiler when this ! 957: occurs, and how many of the words should go in registers. ! 958: ! 959: `FUNCTION_ARG' for these arguments should return the first register to ! 960: be used by the caller for this argument; likewise ! 961: `FUNCTION_INCOMING_ARG', for the called function. ! 962: ! 963: `CUMULATIVE_ARGS' ! 964: A C type for declaring a variable that is used as the first argument ! 965: of `FUNCTION_ARG' and other related values. For some target machines, ! 966: the type `int' suffices and can hold the number of bytes of argument ! 967: so far. ! 968: ! 969: `INIT_CUMULATIVE_ARGS (CUM)' ! 970: A C statement (sans semicolon) for initializing the variable CUM for ! 971: the state at the beginning of the argument list. The variable has ! 972: type `CUMULATIVE_ARGS'. ! 973: ! 974: `FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)' ! 975: Update the summarizer variable CUM to advance past an argument in the ! 976: argument list. The values MODE, TYPE and NAMED describe that ! 977: argument. Once this is done, the variable CUM is suitable for ! 978: analyzing the *following* argument with `FUNCTION_ARG', etc. ! 979: ! 980: `FUNCTION_ARG_REGNO_P (REGNO)' ! 981: A C expression that is nonzero if REGNO is the number of a hard ! 982: register in which function arguments are sometimes passed. This does ! 983: *not* include implicit arguments such as the static chain and the ! 984: structure-value address. On many machines, no registers can be used ! 985: for this purpose since all function arguments are pushed on the stack. ! 986: ! 987: `FUNCTION_PROLOGUE (FILE, SIZE)' ! 988: A C compound statement that outputs the assembler code for entry to a ! 989: function. The prologue is responsible for setting up the stack frame, ! 990: initializing the frame pointer register, saving registers that must be ! 991: saved, and allocating SIZE additional bytes of storage for the local ! 992: variables. SIZE is an integer. FILE is a stdio stream to which the ! 993: assembler code should be output. ! 994: ! 995: The label for the beginning of the function need not be output by this ! 996: macro. That has already been done when the macro is run. ! 997: ! 998: To determine which registers to save, the macro can refer to the array ! 999: `regs_ever_live': element R is nonzero if hard register R is used ! 1000: anywhere within the function. This implies the function prologue ! 1001: should save register R, but not if it is one of the call-used registers. ! 1002: ! 1003: On machines where functions may or may not have frame-pointers, the ! 1004: function entry code must vary accordingly; it must set up the frame ! 1005: pointer if one is wanted, and not otherwise. To determine whether a ! 1006: frame pointer is in wanted, the macro can refer to the variable ! 1007: `frame_pointer_needed'. The variable's value will be 1 at run time in ! 1008: a function that needs a frame pointer. ! 1009: ! 1010: `FUNCTION_PROFILER (FILE, LABELNO)' ! 1011: A C statement or compound statement to output to FILE some assembler ! 1012: code to call the profiling subroutine `mcount'. Before calling, the ! 1013: assembler code must load the address of a counter variable into a ! 1014: register where `mcount' expects to find the address. The name of this ! 1015: variable is `LP' followed by the number LABELNO, so you would generate ! 1016: the name using `LP%d' in a `fprintf'. ! 1017: ! 1018: The details of how the address should be passed to `mcount' are ! 1019: determined by your operating system environment, not by GNU CC. To ! 1020: figure them out, compile a small program for profiling using the ! 1021: system's installed C compiler and look at the assembler code that ! 1022: results. ! 1023: ! 1024: `EXIT_IGNORES_STACK' ! 1025: Define this macro as a C expression that is nonzero if the return ! 1026: instruction or the function epilogue ignores the value of the stack ! 1027: pointer; in other words, if it is safe to delete an instruction to ! 1028: adjust the stack pointer before a return from the function. ! 1029: ! 1030: Note that this macro's value is relevant only for for which frame ! 1031: pointers are maintained. It is never possible to delete a final stack ! 1032: adjustment in a function that has no frame pointer, and the compiler ! 1033: knows this regardless of `EXIT_IGNORES_STACK'. ! 1034: ! 1035: `FUNCTION_EPILOGUE (FILE, SIZE)' ! 1036: A C compound statement that outputs the assembler code for exit from a ! 1037: function. The epilogue is responsible for restoring the saved ! 1038: registers and stack pointer to their values when the function was ! 1039: called, and returning control to the caller. This macro takes the ! 1040: same arguments as the macro `FUNCTION_PROLOGUE', and the registers to ! 1041: restore are determined from `regs_ever_live' and `CALL_USED_REGISTERS' ! 1042: in the same way. ! 1043: ! 1044: On some machines, there is a single instruction that does all the work ! 1045: of returning from the function. On these machines, give that ! 1046: instruction the name `return' and do not define the macro ! 1047: `FUNCTION_EPILOGUE' at all. ! 1048: ! 1049: On machines where functions may or may not have frame-pointers, the ! 1050: function exit code must vary accordingly. Sometimes the code for ! 1051: these two cases is completely different. To determine whether a frame ! 1052: pointer is in wanted, the macro can refer to the variable ! 1053: `frame_pointer_needed'. The variable's value will be 1 at run time in ! 1054: a function that needs a frame pointer. ! 1055: ! 1056: On some machines, some functions pop their arguments on exit while ! 1057: others leave that for the caller to do. For example, the 68020 when ! 1058: given `-mrtd' pops arguments in functions that take a fixed number of ! 1059: arguments. ! 1060: ! 1061: Your definition of the macro `RETURN_POPS_ARGS' decides which ! 1062: functions pop their own arguments. `FUNCTION_EPILOGUE' needs to know ! 1063: what was decided. The variable `current_function_pops_args' is ! 1064: nonzero if the function should pop its own arguments. If so, use the ! 1065: variable `current_function_args_size' as the number of bytes to pop. ! 1066: ! 1067: `FIX_FRAME_POINTER_ADDRESS (ADDR, DEPTH)' ! 1068: A C compound statement to alter a memory address that uses the frame ! 1069: pointer register so that it uses the stack pointer register instead. ! 1070: This must be done in the instructions that load parameter values into ! 1071: registers, when the reload pass determines that a frame pointer is not ! 1072: necessary for the function. ADDR will be a C variable name, and the ! 1073: updated address should be stored in that variable. DEPTH will be the ! 1074: current depth of stack temporaries (number of bytes of arguments ! 1075: currently pushed). The change in offset between a ! 1076: frame-pointer-relative address and a stack-pointer-relative address ! 1077: must include DEPTH. ! 1078: ! 1079: Even if your machine description specifies there will always be a ! 1080: frame pointer in the frame pointer register, you must still define ! 1081: `FIX_FRAME_POINTER_ADDRESS', but the definition will never be executed ! 1082: at run time, so it may be empty. ! 1083: ! 1084: ! 1085: File: internals, Node: Library Names, Next: Addressing Modes, Prev: Stack Layout, Up: Machine Macros ! 1086: ! 1087: Library Subroutine Names ! 1088: ======================== ! 1089: ! 1090: `UDIVSI3_LIBCALL' ! 1091: A C string constant giving the name of the function to call for ! 1092: division of a full-word by a full-word. If you do not define this ! 1093: macro, the default name is used, which is `_udivsi3', a function ! 1094: defined in `gnulib'. ! 1095: ! 1096: `UMODSI3_LIBCALL' ! 1097: A C string constant giving the name of the function to call for the ! 1098: remainder in division of a full-word by a full-word. If you do not ! 1099: define this macro, the default name is used, which is `_umodsi3', a ! 1100: function defined in `gnulib'. ! 1101: ! 1102: `TARGET_MEM_FUNCTIONS' ! 1103: Define this macro if GNU CC should generate calls to the System V (and ! 1104: ANSI C) library functions `memcpy' and `memset' rather than the BSD ! 1105: functions `bcopy' and `bzero'. ! 1106: ! 1107: ! 1108: File: internals, Node: Addressing Modes, Next: Misc, Prev: Library Names, Up: Machine Macros ! 1109: ! 1110: Addressing Modes ! 1111: ================ ! 1112: ! 1113: `HAVE_POST_INCREMENT' ! 1114: Define this macro if the machine supports post-increment addressing. ! 1115: ! 1116: `HAVE_PRE_INCREMENT' ! 1117: `HAVE_POST_DECREMENT' ! 1118: `HAVE_PRE_DECREMENT' ! 1119: Similar for other kinds of addressing. ! 1120: ! 1121: `CONSTANT_ADDRESS_P (X)' ! 1122: A C expression that is 1 if the RTX X is a constant whose value is an ! 1123: integer. This includes integers whose values are not explicitly ! 1124: known, such as `symbol_ref' and `label_ref' expressions and `const' ! 1125: arithmetic expressions. ! 1126: ! 1127: On most machines, this can be defined as `CONSTANT_P (X)', but a few ! 1128: machines are more restrictive in which constant addresses are supported. ! 1129: ! 1130: `MAX_REGS_PER_ADDRESS' ! 1131: A number, the maximum number of registers that can appear in a valid ! 1132: memory address. ! 1133: ! 1134: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)' ! 1135: A C compound statement with a conditional `goto LABEL;' executed if X ! 1136: (an RTX) is a legitimate memory address on the target machine for a ! 1137: memory operand of mode MODE. ! 1138: ! 1139: It usually pays to define several simpler macros to serve as ! 1140: subroutines for this one. Otherwise it may be too complicated to ! 1141: understand. ! 1142: ! 1143: This macro must exist in two variants: a strict variant and a ! 1144: non-strict one. The strict variant is used in the reload pass. It ! 1145: must be defined so that any pseudo-register that has not been ! 1146: allocated a hard register is considered a memory reference. In ! 1147: contexts where some kind of register is required, a pseudo-register ! 1148: with no hard register must be rejected. ! 1149: ! 1150: The non-strict variant is used in other passes. It must be defined to ! 1151: accept all pseudo-registers in every context where some kind of ! 1152: register is required. ! 1153: ! 1154: Compiler source files that want to use the strict variant of this ! 1155: macro define the macro `REG_OK_STRICT'. You should use an `#ifdef ! 1156: REG_OK_STRICT' conditional to define the strict variant in that case ! 1157: and the non-strict variant otherwise. ! 1158: ! 1159: Typically among the subroutines used to define ! 1160: `GO_IF_LEGITIMATE_ADDRESS' are subroutines to check for acceptable ! 1161: registers for various purposes (one for base registers, one for index ! 1162: registers, and so on). Then only these subroutine macros need have ! 1163: two variants; the higher levels of macros may be the same whether ! 1164: strict or not. ! 1165: ! 1166: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)' ! 1167: A C compound statement that attempts to replace X with a valid memory ! 1168: address for an operand of mode MODE. WIN will be a C statement label ! 1169: elsewhere in the code; the macro definition may use ! 1170: ! 1171: GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); ! 1172: ! 1173: ! 1174: to avoid further processing if the address has become legitimate. ! 1175: ! 1176: X will always be the result of a call to `break_out_memory_refs', and ! 1177: OLDX will be the operand that was given to that function to produce X. ! 1178: ! 1179: The code generated by this macro should not alter the substructure of ! 1180: X. If it transforms X into a more legitimate form, it should assign X ! 1181: (which will always be a C variable) a new value. ! 1182: ! 1183: It is not necessary for this macro to come up with a legitimate ! 1184: address. The compiler has standard ways of doing so in all cases. In ! 1185: fact, it is safe for this macro to do nothing. But often a ! 1186: machine-dependent strategy can generate better code. ! 1187: ! 1188: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)' ! 1189: A C statement or compound statement with a conditional `goto LABEL;' ! 1190: executed if memory address X (an RTX) can have different meanings ! 1191: depending on the machine mode of the memory reference it is used for. ! 1192: ! 1193: Autoincrement and autodecrement addresses typically have ! 1194: mode-dependent effects because the amount of the increment or ! 1195: decrement is the size of the operand being addressed. Some machines ! 1196: have other mode-dependent addresses. Many RISC machines have no ! 1197: mode-dependent addresses. ! 1198: ! 1199: You may assume that ADDR is a valid address for the machine. ! 1200: ! 1201: `LEGITIMATE_CONSTANT_P (X)' ! 1202: A C expression that is nonzero if X is a legitimate constant for an ! 1203: immediate operand on the target machine. You can assume that either X ! 1204: is a `const_double' or it satisfies `CONSTANT_P', so you need not ! 1205: check these things. In fact, `1' is a suitable definition for this ! 1206: macro on machines where any `const_double' is valid and anything ! 1207: `CONSTANT_P' is valid. ! 1208: ! 1209:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.