|
|
1.1 ! root 1: \input texinfo @c -*-texinfo-*- ! 2: ! 3: @settitle Using and Porting GNU CC ! 4: @setfilename gcc.info ! 5: ! 6: @ifinfo ! 7: This file documents the use and the internals of the GNU compiler. ! 8: ! 9: Copyright (C) 1988 Free Software Foundation, Inc. ! 10: ! 11: Permission is granted to make and distribute verbatim copies of ! 12: this manual provided the copyright notice and this permission notice ! 13: are preserved on all copies. ! 14: ! 15: @ignore ! 16: Permission is granted to process this file through Tex and print the ! 17: results, provided the printed document carries copying permission ! 18: notice identical to this one except for the removal of this paragraph ! 19: (this paragraph not being relevant to the printed manual). ! 20: ! 21: @end ignore ! 22: Permission is granted to copy and distribute modified versions of this ! 23: manual under the conditions for verbatim copying, provided also that the ! 24: section entitled ``GNU CC General Public License'' is included exactly as ! 25: in the original, and provided that the entire resulting derived work is ! 26: distributed under the terms of a permission notice identical to this one. ! 27: ! 28: Permission is granted to copy and distribute translations of this manual ! 29: into another language, under the above conditions for modified versions, ! 30: except that the section entitled ``GNU CC General Public License'' and ! 31: this permission notice may be included in translations approved by the ! 32: Free Software Foundation instead of in the original English. ! 33: @end ifinfo ! 34: ! 35: @setchapternewpage odd ! 36: ! 37: @titlepage ! 38: @center @titlefont{Using and Porting GNU CC} ! 39: @sp 2 ! 40: @center Richard M. Stallman ! 41: @sp 3 ! 42: @center last updated 3 October 1988 ! 43: @sp 1 ! 44: @center for version 1.29 ! 45: @page ! 46: @vskip 0pt plus 1filll ! 47: Copyright @copyright{} 1988 Free Software Foundation, Inc. ! 48: ! 49: Permission is granted to make and distribute verbatim copies of ! 50: this manual provided the copyright notice and this permission notice ! 51: are preserved on all copies. ! 52: ! 53: Permission is granted to copy and distribute modified versions of this ! 54: manual under the conditions for verbatim copying, provided also that the ! 55: section entitled ``GNU CC General Public License'' is included exactly as ! 56: in the original, and provided that the entire resulting derived work is ! 57: distributed under the terms of a permission notice identical to this one. ! 58: ! 59: Permission is granted to copy and distribute translations of this manual ! 60: into another language, under the above conditions for modified versions, ! 61: except that the section entitled ``GNU CC General Public License'' and ! 62: this permission notice may be included in translations approved by the ! 63: Free Software Foundation instead of in the original English. ! 64: @end titlepage ! 65: @page ! 66: ! 67: @ifinfo ! 68: @node Top, Copying,, (DIR) ! 69: @ichapter Introduction ! 70: ! 71: This manual documents how to run, install and port the GNU C compiler, as ! 72: well as its new features and incompatibilities, and how to report bugs. ! 73: ! 74: @end ifinfo ! 75: @menu ! 76: * Copying:: GNU CC General Public License says ! 77: how you can copy and share GNU CC. ! 78: * Contributors:: People who have contributed to GNU CC. ! 79: * Options:: Command options supported by @samp{gcc}. ! 80: * Installation:: How to configure, compile and install GNU CC. ! 81: * Trouble:: If you have trouble installing GNU CC. ! 82: * Incompatibilities:: Incompatibilities of GNU CC. ! 83: * Extensions:: GNU extensions to the C language. ! 84: * Bugs:: How to report bugs (if you want to get them fixed). ! 85: * Portability:: Goals of GNU CC's portability features. ! 86: * Interface:: Function-call interface of GNU CC output. ! 87: * Passes:: Order of passes, what they do, and what each file is for. ! 88: * RTL:: The intermediate representation that most passes work on. ! 89: * Machine Desc:: How to write machine description instruction patterns. ! 90: * Machine Macros:: How to write the machine description C macros. ! 91: @end menu ! 92: ! 93: @node Copying, Contributors, Top, Top ! 94: @unnumbered GNU CC GENERAL PUBLIC LICENSE ! 95: @center (Clarified 11 Feb 1988) ! 96: ! 97: The license agreements of most software companies keep you at the ! 98: mercy of those companies. By contrast, our general public license is ! 99: intended to give everyone the right to share GNU CC. To make sure that ! 100: you get the rights we want you to have, we need to make restrictions ! 101: that forbid anyone to deny you these rights or to ask you to surrender ! 102: the rights. Hence this license agreement. ! 103: ! 104: Specifically, we want to make sure that you have the right to give ! 105: away copies of GNU CC, that you receive source code or else can get it ! 106: if you want it, that you can change GNU CC or use pieces of it in new ! 107: free programs, and that you know you can do these things. ! 108: ! 109: To make sure that everyone has such rights, we have to forbid you to ! 110: deprive anyone else of these rights. For example, if you distribute ! 111: copies of GNU CC, you must give the recipients all the rights that you ! 112: have. You must make sure that they, too, receive or can get the ! 113: source code. And you must tell them their rights. ! 114: ! 115: Also, for our own protection, we must make certain that everyone ! 116: finds out that there is no warranty for GNU CC. If GNU CC is modified by ! 117: someone else and passed on, we want its recipients to know that what ! 118: they have is not what we distributed, so that any problems introduced ! 119: by others will not reflect on our reputation. ! 120: ! 121: Therefore we (Richard Stallman and the Free Software Foundation, ! 122: Inc.) make the following terms which say what you must do to be ! 123: allowed to distribute or change GNU CC. ! 124: ! 125: @unnumberedsec COPYING POLICIES ! 126: ! 127: @enumerate ! 128: @item ! 129: You may copy and distribute verbatim copies of GNU CC source code as ! 130: you receive it, in any medium, provided that you conspicuously and ! 131: appropriately publish on each copy a valid copyright notice ! 132: ``Copyright @copyright{} 1988 Free Software Foundation, Inc.'' (or ! 133: with whatever year is appropriate); keep intact the notices on all ! 134: files that refer to this License Agreement and to the absence of any ! 135: warranty; and give any other recipients of the GNU CC program a copy ! 136: of this License Agreement along with the program. You may charge a ! 137: distribution fee for the physical act of transferring a copy. ! 138: ! 139: @item ! 140: You may modify your copy or copies of GNU CC or any portion of it, ! 141: and copy and distribute such modifications under the terms of ! 142: Paragraph 1 above, provided that you also do the following: ! 143: ! 144: @itemize @bullet ! 145: @item ! 146: cause the modified files to carry prominent notices stating ! 147: that you changed the files and the date of any change; and ! 148: ! 149: @item ! 150: cause the whole of any work that you distribute or publish, that ! 151: in whole or in part contains or is a derivative of GNU CC or any ! 152: part thereof, to be licensed at no charge to all third parties on ! 153: terms identical to those contained in this License Agreement ! 154: (except that you may choose to grant more extensive warranty ! 155: protection to some or all third parties, at your option). ! 156: ! 157: @item ! 158: You may charge a distribution fee for the physical act of ! 159: transferring a copy, and you may at your option offer warranty ! 160: protection in exchange for a fee. ! 161: @end itemize ! 162: ! 163: Mere aggregation of another unrelated program with this program (or its ! 164: derivative) on a volume of a storage or distribution medium does not bring ! 165: the other program under the scope of these terms. ! 166: ! 167: @item ! 168: You may copy and distribute GNU CC (or a portion or derivative of it, ! 169: under Paragraph 2) in object code or executable form under the terms ! 170: of Paragraphs 1 and 2 above provided that you also do one of the ! 171: following: ! 172: ! 173: @itemize @bullet ! 174: @item ! 175: accompany it with the complete corresponding machine-readable ! 176: source code, which must be distributed under the terms of ! 177: Paragraphs 1 and 2 above; or, ! 178: ! 179: @item ! 180: accompany it with a written offer, valid for at least three ! 181: years, to give any third party free (except for a nominal ! 182: shipping charge) a complete machine-readable copy of the ! 183: corresponding source code, to be distributed under the terms of ! 184: Paragraphs 1 and 2 above; or, ! 185: ! 186: @item ! 187: accompany it with the information you received as to where the ! 188: corresponding source code may be obtained. (This alternative is ! 189: allowed only for noncommercial distribution and only if you ! 190: received the program in object code or executable form alone.) ! 191: @end itemize ! 192: ! 193: For an executable file, complete source code means all the source code ! 194: for all modules it contains; but, as a special exception, it need not ! 195: include source code for modules which are standard libraries that ! 196: accompany the operating system on which the executable file runs. ! 197: ! 198: @item ! 199: You may not copy, sublicense, distribute or transfer GNU CC except as ! 200: expressly provided under this License Agreement. Any attempt ! 201: otherwise to copy, sublicense, distribute or transfer GNU CC is void ! 202: and your rights to use the program under this License agreement shall ! 203: be automatically terminated. However, parties who have received ! 204: computer software programs from you with this License Agreement will ! 205: not have their licenses terminated so long as such parties remain in ! 206: full compliance. ! 207: ! 208: @item ! 209: If you wish to incorporate parts of GNU CC into other free programs ! 210: whose distribution conditions are different, write to the Free Software ! 211: Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet worked ! 212: out a simple rule that can be stated here, but we will often permit this. ! 213: We will be guided by the two goals of preserving the free status of all ! 214: derivatives of our free software and of promoting the sharing and reuse of ! 215: software. ! 216: @end enumerate ! 217: ! 218: Your comments and suggestions about our licensing policies and our ! 219: software are welcome! Please contact the Free Software Foundation, Inc., ! 220: 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296. ! 221: ! 222: @unnumberedsec NO WARRANTY ! 223: ! 224: BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO ! 225: WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT ! 226: WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, ! 227: RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT ! 228: WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT ! 229: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ! 230: A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND ! 231: PERFORMANCE OF GNU CC IS WITH YOU. SHOULD GNU CC PROVE DEFECTIVE, YOU ! 232: ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ! 233: ! 234: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. ! 235: STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY ! 236: WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO ! 237: YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER ! 238: SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR ! 239: INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA ! 240: BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A ! 241: FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN ! 242: IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ! 243: ANY CLAIM BY ANY OTHER PARTY. ! 244: ! 245: @node Contributors, Options, Copying, Top ! 246: @unnumbered Contributors to GNU CC ! 247: ! 248: In addition to Richard Stallman, several people have written parts ! 249: of GNU CC. ! 250: ! 251: @itemize @bullet ! 252: @item ! 253: The idea of using RTL and some of the optimization ideas came from the ! 254: U. of Arizona Portable Optimizer, written by Jack Davidson and ! 255: Christopher Fraser. See ``Register Allocation and Exhaustive Peephole ! 256: Optimization'', Software Practice and Experience 14 (9), Sept. 1984, ! 257: 857-866. ! 258: ! 259: @item ! 260: Paul Rubin wrote most of the preprocessor. ! 261: ! 262: @item ! 263: Leonard Tower wrote parts of the parser, RTL generator, RTL ! 264: definitions, and of the Vax machine description. ! 265: ! 266: @item ! 267: Ted Lemon wrote parts of the RTL reader and printer. ! 268: ! 269: @item ! 270: Jim Wilson implemented loop strength reduction and some other ! 271: loop optimizations. ! 272: ! 273: @item ! 274: Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed ! 275: the support for the SONY NEWS machine. ! 276: ! 277: @item ! 278: Charles LaBrec contributed the support for the Integrated Solutions ! 279: 68020 system. ! 280: ! 281: @item ! 282: Michael Tiemann of MCC wrote most of the description of the National ! 283: Semiconductor 32000 series cpu. He also wrote the code for inline ! 284: function integration and for the SPARC cpu and Motorola 88000 cpu ! 285: and part of the Sun FPA support. ! 286: ! 287: @item ! 288: Jan Stein of the Chalmers Computer Society provided support for ! 289: Genix, as well as part of the 32000 machine description. ! 290: ! 291: @item ! 292: Randy Smith finished the Sun FPA support. ! 293: ! 294: @item ! 295: Robert Brown implemented the support for Encore 32000 systems. ! 296: ! 297: @item ! 298: David Kashtan of SRI adapted GNU CC to the Vomit-Making System. ! 299: ! 300: @item ! 301: Alex Crain provided changes for the 3b1. ! 302: ! 303: @item ! 304: Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for ! 305: the 9000 series 300. ! 306: ! 307: @item ! 308: William Schelter did most of the work on the Intel 80386 support. ! 309: @end itemize ! 310: ! 311: @node Options, Installation, Contributors, Top ! 312: @chapter GNU CC Command Options ! 313: ! 314: The GNU C compiler uses a command syntax much like the Unix C compiler. ! 315: The @code{gcc} program accepts options and file names as operands. ! 316: Multiple single-letter options may @emph{not} be grouped: @samp{-dr} is ! 317: very different from @samp{-d -r}. ! 318: ! 319: When you invoke GNU CC, it normally does preprocessing, compilation, ! 320: assembly and linking. File names which end in @samp{.c} are taken as C ! 321: source to be preprocessed and compiled; compiler output files plus any ! 322: input files with names ending in @samp{.s} are assembled; then the ! 323: resulting object files, plus any other input files, are linked together to ! 324: produce an executable. ! 325: ! 326: Command options allow you to stop this process at an intermediate stage. ! 327: For example, the @samp{-c} option says not to run the linker. Then the ! 328: output consists of object files output by the assembler. ! 329: ! 330: Other command options are passed on to one stage. Some options control ! 331: the preprocessor and others the compiler itself. Yet other options ! 332: control the assembler and linker; these are not documented here because the ! 333: GNU assembler and linker are not yet released. ! 334: ! 335: Here are the options to control the overall compilation process, including ! 336: those that say whether to link, whether to assemble, and so on. ! 337: ! 338: @table @samp ! 339: @item -o @var{file} ! 340: Place output in file @var{file}. This applies regardless to whatever ! 341: sort of output is being produced, whether it be an executable file, ! 342: an object file, an assembler file or preprocessed C code. ! 343: ! 344: If @samp{-o} is not specified, the default is to put an executable file ! 345: in @file{a.out}, the object file @file{@var{source}.c} in ! 346: @file{@var{source}.o}, an assembler file in @file{@var{source}.s}, and ! 347: preprocessed C on standard output.@refill ! 348: ! 349: @item -c ! 350: Compile or assemble the source files, but do not link. Produce object ! 351: files with names made by replacing @samp{.c} or @samp{.s} with ! 352: @samp{.o} at the end of the input file names. Do nothing at all for ! 353: object files specified as input. ! 354: ! 355: @item -S ! 356: Compile into assembler code but do not assemble. The assembler output ! 357: file name is made by replacing @samp{.c} with @samp{.s} at the end of ! 358: the input file name. Do nothing at all for assembler source files or ! 359: object files specified as input. ! 360: ! 361: @item -E ! 362: Run only the C preprocessor. Preprocess all the C source files ! 363: specified and output the results to standard output. ! 364: ! 365: @item -v ! 366: Compiler driver program prints the commands it executes as it runs ! 367: the preprocessor, compiler proper, assembler and linker. Some of ! 368: these are directed to print their own version numbers. ! 369: ! 370: @item -B@var{prefix} ! 371: Compiler driver program tries @var{prefix} as a prefix for each ! 372: program it tries to run. These programs are @file{cpp}, @file{cc1}, ! 373: @file{as} and @file{ld}. ! 374: ! 375: For each subprogram to be run, the compiler driver first tries the ! 376: @samp{-B} prefix, if any. If that name is not found, or if @samp{-B} ! 377: was not specified, the driver tries two standard prefixes, which are ! 378: @file{/usr/lib/gcc-} and @file{/usr/local/lib/gcc-}. If neither of ! 379: those results in a file name that is found, the unmodified program ! 380: name is searched for using the directories specified in your ! 381: @samp{PATH} environment variable. ! 382: ! 383: The run-time support file @file{gnulib} is also searched for using ! 384: the @samp{-B} prefix, if needed. If it is not found there, the two ! 385: standard prefixes above are tried, and that is all. The file is left ! 386: out of the link if it is not found by those means. Most of the time, ! 387: on most machines, you can do without it. ! 388: @end table ! 389: ! 390: These options control the details of C compilation itself. ! 391: ! 392: @table @samp ! 393: @item -ansi ! 394: Support all ANSI standard C programs. ! 395: ! 396: This turns off certain features of GNU C that are incompatible with ! 397: ANSI C, such as the @code{asm}, @code{inline} and @code{typeof} ! 398: keywords, and predefined macros such as @code{unix} and @code{vax} ! 399: that identify the type of system you are using. It also enables the ! 400: undesirable and rarely used ANSI trigraph feature. ! 401: ! 402: The @samp{-ansi} option does not cause non-ANSI programs to be ! 403: rejected gratuitously. For that, @samp{-pedantic} is required in ! 404: addition to @samp{-ansi}. ! 405: ! 406: The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi} ! 407: option is used. Some header files may notice this macro and refrain ! 408: from declaring certain functions or defining certain macros that the ! 409: ANSI standard doesn't call for; this is to avoid interfering with ! 410: any programs that might use these names for other things. ! 411: ! 412: @item -traditional ! 413: Attempt to support some aspects of traditional C compilers. ! 414: Specifically: ! 415: ! 416: @itemize @bullet ! 417: @item ! 418: All @code{extern} declarations take effect globally even if they ! 419: are written inside of a function definition. This includes implicit ! 420: declarations of functions. ! 421: ! 422: @item ! 423: The keywords @code{typeof}, @code{inline}, @code{signed}, @code{const} ! 424: and @code{volatile} are not recognized.@refill ! 425: ! 426: @item ! 427: Comparisons between pointers and integers are always allowed. ! 428: ! 429: @item ! 430: Integer types @code{unsigned short} and @code{unsigned char} promote ! 431: to @code{unsigned int}. ! 432: ! 433: @item ! 434: Out-of-range floating point literals are not an error. ! 435: ! 436: @item ! 437: In the preprocessor, comments convert to nothing at all, rather than ! 438: to a space. This allows traditional token concatenation. ! 439: ! 440: @item ! 441: In the preprocessor, macro arguments are recognized within string ! 442: constants in a macro definition (and their values are stringified, ! 443: though without additional quote marks, when they appear in such a ! 444: context). The preprocessor always considers a string constant to end ! 445: at a newline. ! 446: ! 447: @item ! 448: The predefined macro @code{__STDC__} is not defined when you use ! 449: @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions ! 450: which @code{__GNUC__} indicates are not affected by ! 451: @samp{-traditional}). If you need to write header files that work ! 452: differently depending on whether @samp{-traditional} is in use, by ! 453: testing both of these predefined macros you can distinguish four ! 454: situations: GNU C, traditional GNU C, other ANSI C compilers, and ! 455: other old C compilers. ! 456: @end itemize ! 457: ! 458: @item -O ! 459: Optimize. Optimizing compilation takes somewhat more time, and a lot ! 460: more memory for a large function. ! 461: ! 462: Without @samp{-O}, the compiler's goal is to reduce the cost of ! 463: compilation and to make debugging produce the expected results. ! 464: Statements are independent: if you stop the program with a breakpoint ! 465: between statements, you can then assign a new value to any variable or ! 466: change the program counter to any other statement in the function and ! 467: get exactly the results you would expect from the source code. ! 468: ! 469: Without @samp{-O}, only variables declared @code{register} are ! 470: allocated in registers. The resulting compiled code is a little worse ! 471: than produced by PCC without @samp{-O}. ! 472: ! 473: With @samp{-O}, the compiler tries to reduce code size and execution ! 474: time. ! 475: ! 476: Some of the @samp{-f} options described below turn specific kinds of ! 477: optimization on or off. ! 478: ! 479: @item -g ! 480: Produce debugging information in the operating system's native format ! 481: (for DBX or SDB). GDB also can work with this debugging information. ! 482: ! 483: Unlike most other C compilers, GNU CC allows you to use @samp{-g} with ! 484: @samp{-O}. The shortcuts taken by optimized code may occasionally ! 485: produce surprising results: some variables you declared may not exist ! 486: at all; flow of control may briefly move where you did not expect it; ! 487: some statements may not be executed because they compute constant ! 488: results or their values were already at hand; some statements may ! 489: execute in different places because they were moved out of loops. ! 490: Nevertheless it proves possible to debug optimized output. This makes ! 491: it reasonable to use the optimizer for programs that might have bugs. ! 492: ! 493: @item -gg ! 494: Produce debugging information in GDB's own format. This requires the ! 495: GNU assembler and linker in order to work. ! 496: ! 497: This feature will probably be eliminated. It was intended to enable ! 498: GDB to read the symbol table faster, but it doesn't result in enough ! 499: of a speedup to be worth the larger object files and executables. We ! 500: are working on other ways of making GDB start faster, which work with ! 501: DBX format debugging information and could be made to work with SDB ! 502: format. ! 503: ! 504: @item -w ! 505: Inhibit all warning messages. ! 506: ! 507: @item -W ! 508: Print extra warning messages for these events: ! 509: ! 510: @itemize @bullet ! 511: @item ! 512: An automatic variable is used without first being initialized. ! 513: ! 514: These warnings are possible only in optimizing compilation, ! 515: because they require data flow information that is computed only ! 516: when optimizing. They occur only for variables that are ! 517: candidates for register allocation. Therefore, they do not occur ! 518: for a variable that is declared @code{volatile}, or whose address ! 519: is taken, or whose size is other than 1, 2, 4 or 8 bytes. Also, ! 520: they do not occur for structures, unions or arrays, even when ! 521: they are in registers. ! 522: ! 523: Note that there may be no warning about a variable that is used ! 524: only to compute a value that itself is never used, because such ! 525: computations may be deleted by the flow analysis pass before the ! 526: warnings are printed. ! 527: ! 528: These warnings are made optional because GNU CC is not smart ! 529: enough to see all the reasons why the code might be correct ! 530: despite appearing to have an error. Here is one example of how ! 531: this can happen: ! 532: ! 533: @example ! 534: @{ ! 535: int x; ! 536: switch (y) ! 537: @{ ! 538: case 1: x = 1; ! 539: break; ! 540: case 2: x = 4; ! 541: break; ! 542: case 3: x = 5; ! 543: @} ! 544: foo (x); ! 545: @} ! 546: @end example ! 547: ! 548: @noindent ! 549: If the value of @code{y} is always 1, 2 or 3, then @code{x} is ! 550: always initialized, but GNU CC doesn't know this. Here is ! 551: another common case: ! 552: ! 553: @example ! 554: @{ ! 555: int save_y; ! 556: if (change_y) save_y = y, y = new_y; ! 557: @dots{} ! 558: if (change_y) y = save_y; ! 559: @} ! 560: @end example ! 561: ! 562: @noindent ! 563: This has no bug because @code{save_y} is used only if it is set. ! 564: ! 565: @item ! 566: A nonvolatile automatic variable might be changed by a call to ! 567: @code{longjmp}. These warnings as well are possible only in ! 568: optimizing compilation. ! 569: ! 570: The compiler sees only the calls to @code{setjmp}. It cannot know ! 571: where @code{longjmp} will be called; in fact, a signal handler could ! 572: call it at any point in the code. As a result, you may get a warning ! 573: even when there is in fact no problem because @code{longjmp} cannot ! 574: in fact be called at the place which would cause a problem. ! 575: ! 576: @item ! 577: A function can return either with or without a value. (Falling ! 578: off the end of the function body is considered returning without ! 579: a value.) For example, this function would inspire such a ! 580: warning: ! 581: ! 582: @example ! 583: foo (a) ! 584: @{ ! 585: if (a > 0) ! 586: return a; ! 587: @} ! 588: @end example ! 589: ! 590: Spurious warnings can occur because GNU CC does not realize that ! 591: certain functions (including @code{abort} and @code{longjmp}) ! 592: will never return. ! 593: @end itemize ! 594: ! 595: In the future, other useful warnings may also be enabled by this ! 596: option. ! 597: ! 598: @item -Wimplicit ! 599: Warn whenever a function is implicitly declared. ! 600: ! 601: @item -Wreturn-type ! 602: Warn whenever a function is defined with a return-type that defaults ! 603: to @code{int}. Also warn about any @code{return} statement with no ! 604: return-value in a function whose return-type is not @code{void}. ! 605: ! 606: @item -Wunused ! 607: Warn whenever a local variable is unused aside from its declaration. ! 608: ! 609: @item -Wcomment ! 610: Warn whenever a comment-start sequence @samp{/*} appears in a comment. ! 611: ! 612: @item -Wall ! 613: All of the above @samp{-W} options combined. ! 614: ! 615: @item -Wwrite-strings ! 616: Give string constants the type @code{const char[@var{length}]} so that ! 617: copying the address of one into a non-@code{const} @code{char *} ! 618: pointer will get a warning. These warnings will help you find at ! 619: compile time code that can try to write into a string constant, but ! 620: only if you have been very careful about using @code{const} in ! 621: declarations and prototypes. Otherwise, it will just be a nuisance; ! 622: this is why we did not make @samp{-Wall} request these warnings. ! 623: ! 624: @item -p ! 625: Generate extra code to write profile information suitable for the ! 626: analysis program @code{prof}. ! 627: ! 628: @item -pg ! 629: Generate extra code to write profile information suitable for the ! 630: analysis program @code{gprof}. ! 631: ! 632: @item -l@var{library} ! 633: Search a standard list of directories for a library named ! 634: @var{library}, which is actually a file named ! 635: @file{lib@var{library}.a}. The linker uses this file as if it ! 636: had been specified precisely by name. ! 637: ! 638: The directories searched include several standard system directories ! 639: plus any that you specify with @samp{-L}. ! 640: ! 641: Normally the files found this way are library files---archive files ! 642: whose members are object files. The linker handles an archive file by ! 643: scanning through it for members which define symbols that have so far ! 644: been referenced but not defined. But if the file that is found is an ! 645: ordinary object file, it is linked in the usual fashion. The only ! 646: difference between using an @samp{-l} option and specifying a file name ! 647: is that @samp{-l} searches several directories. ! 648: ! 649: @item -L@var{dir} ! 650: Add directory @var{dir} to the list of directories to be searched ! 651: for @samp{-l}. ! 652: ! 653: @item -nostdlib ! 654: Don't use the standard system libraries and startup files when ! 655: linking. Only the files you specify (plus @file{gnulib}) will be ! 656: passed to the linker. ! 657: ! 658: @item -m@var{machinespec} ! 659: Machine-dependent option specifying something about the type of target ! 660: machine. These options are defined by the macro ! 661: @code{TARGET_SWITCHES} in the machine description. The default for ! 662: the options is also defined by that macro, which enables you to change ! 663: the defaults.@refill ! 664: ! 665: These are the @samp{-m} options defined in the 68000 machine ! 666: description: ! 667: ! 668: @table @samp ! 669: @item -m68020 ! 670: @itemx -mc68020 ! 671: Generate output for a 68020 (rather than a 68000). This is the ! 672: default if you use the unmodified sources. ! 673: ! 674: @item -m68000 ! 675: @item -mc68000 ! 676: Generate output for a 68000 (rather than a 68020). ! 677: ! 678: @item -m68881 ! 679: Generate output containing 68881 instructions for floating point. ! 680: This is the default if you use the unmodified sources. ! 681: ! 682: @item -mfpa ! 683: Generate output containing Sun FPA instructions for floating point. ! 684: ! 685: @item -msoft-float ! 686: Generate output containing library calls for floating point. ! 687: ! 688: @item -mshort ! 689: Consider type @code{int} to be 16 bits wide, like @code{short int}. ! 690: ! 691: @item -mnobitfield ! 692: Do not use the bit-field instructions. @samp{-m68000} implies ! 693: @samp{-mnobitfield}. ! 694: ! 695: @item -mbitfield ! 696: Do use the bit-field instructions. @samp{-m68020} implies ! 697: @samp{-mbitfield}. This is the default if you use the unmodified ! 698: sources. ! 699: ! 700: @item -mrtd ! 701: Use a different function-calling convention, in which functions ! 702: that take a fixed number of arguments return with the @code{rtd} ! 703: instruction, which pops their arguments while returning. This ! 704: saves one instruction in the caller since there is no need to pop ! 705: the arguments there. ! 706: ! 707: This calling convention is incompatible with the one normally ! 708: used on Unix, so you cannot use it if you need to call libraries ! 709: compiled with the Unix compiler. ! 710: ! 711: Also, you must provide function prototypes for all functions that ! 712: take variable numbers of arguments (including @code{printf}); ! 713: otherwise incorrect code will be generated for calls to those ! 714: functions. ! 715: ! 716: In addition, seriously incorrect code will result if you call a ! 717: function with too many arguments. (Normally, extra arguments are ! 718: harmlessly ignored.) ! 719: ! 720: The @code{rtd} instruction is supported by the 68010 and 68020 ! 721: processors, but not by the 68000. ! 722: @end table ! 723: ! 724: These @samp{-m} options are defined in the Vax machine description: ! 725: ! 726: @table @samp ! 727: @item -munix ! 728: Do not output certain jump instructions (@code{aobleq} and so on) ! 729: that the Unix assembler for the Vax cannot handle across long ! 730: ranges. ! 731: ! 732: @item -mgnu ! 733: Do output those jump instructions, on the assumption that you ! 734: will assemble with the GNU assembler. ! 735: ! 736: @item -mg ! 737: Output code for g-format floating point numbers instead of d-format. ! 738: @end table ! 739: ! 740: @item -f@var{flag} ! 741: Specify machine-independent flags. These are the flags: ! 742: ! 743: @table @samp ! 744: @item -ffloat-store ! 745: Do not store floating-point variables in registers. This ! 746: prevents undesirable excess precision on machines such as the ! 747: 68000 where the floating registers (of the 68881) keep more ! 748: precision than a @code{double} is supposed to have. ! 749: ! 750: For most programs, the excess precision does only good, but a few ! 751: programs rely on the precise definition of IEEE floating point. ! 752: Use @samp{-ffloat-store} for such programs. ! 753: ! 754: @item -fno-asm ! 755: Do not recognize @code{asm}, @code{inline} or @code{typeof} as a ! 756: keyword. These words may then be used as identifiers. ! 757: ! 758: @item -fno-defer-pop ! 759: Always pop the arguments to each function call as soon as that ! 760: function returns. Normally the compiler (when optimizing) lets ! 761: arguments accumulate on the stack for several function calls and ! 762: pops them all at once. ! 763: ! 764: @item -fstrength-reduce ! 765: Perform the optimizations of loop strength reduction and ! 766: elimination of iteration variables. ! 767: ! 768: @item -fcombine-regs ! 769: Allow the combine pass to combine an instruction that copies one ! 770: register into another. This might or might not produce better ! 771: code when used in addition to @samp{-O}. I am interested in ! 772: hearing about the difference this makes. ! 773: ! 774: @item -fforce-mem ! 775: Force memory operands to be copied into registers before doing ! 776: arithmetic on them. This may produce better code by making all ! 777: memory references potential common subexpressions. When they are ! 778: not common subexpressions, instruction combination should ! 779: eliminate the separate register-load. I am interested in hearing ! 780: about the difference this makes. ! 781: ! 782: @item -fforce-addr ! 783: Force memory address constants to be copied into registers before ! 784: doing arithmetic on them. This may produce better code just as ! 785: @samp{-fforce-mem} may. I am interested in hearing about the ! 786: difference this makes. ! 787: ! 788: @item -fomit-frame-pointer ! 789: Don't keep the frame pointer in a register for functions that ! 790: don't need one. This avoids the instructions to save, set up and ! 791: restore frame pointers; it also makes an extra register available ! 792: in many functions. @strong{It also makes debugging impossible.} ! 793: ! 794: On some machines, such as the Vax, this flag has no effect, ! 795: because the standard calling sequence automatically handles the ! 796: frame pointer and nothing is saved by pretending it doesn't ! 797: exist. The machine-description macro ! 798: @code{FRAME_POINTER_REQUIRED} controls whether a target machine ! 799: supports this flag. @xref{Registers}.@refill ! 800: ! 801: @item -finline-functions ! 802: Integrate all simple functions into their callers. The compiler ! 803: heuristically decides which functions are simple enough to be ! 804: worth integrating in this way. ! 805: ! 806: If all calls to a given function are integrated, and the function ! 807: is declared @code{static}, then the function is normally not ! 808: output as assembler code in its own right. ! 809: ! 810: @item -fkeep-inline-functions ! 811: Even if all calls to a given function are integrated, and the ! 812: function is declared @code{static}, nevertheless output a ! 813: separate run-time callable version of the function. ! 814: ! 815: @item -fwritable-strings ! 816: Store string constants in the writable data segment and don't ! 817: uniquize them. This is for compatibility with old programs which ! 818: assume they can write into string constants. Writing into string ! 819: constants is a very bad idea; ``constants'' should be constant. ! 820: ! 821: @item -fno-function-cse ! 822: Do not put function addresses in registers; make each instruction ! 823: that calls a constant function contain the function's address ! 824: explicitly. ! 825: ! 826: This option results in less efficient code, but some strange ! 827: hacks that alter the assembler output may be confused by the ! 828: optimizations performed when this option is not used. ! 829: ! 830: @item -fvolatile ! 831: Consider all memory references through pointers to be volatile. ! 832: ! 833: @item -funsigned-char ! 834: Let the type @code{char} be the unsigned, like @code{unsigned ! 835: char}. ! 836: ! 837: Each kind of machine has a default for what @code{char} should ! 838: be. It is either like @code{unsigned char} by default or like ! 839: @code{signed char} by default. (Actually, at present, the ! 840: default is always signed.) ! 841: ! 842: The type @code{char} is always a distinct type from either ! 843: @code{signed char} or @code{unsigned char}, even though its ! 844: behavior is always just like one of those two. ! 845: ! 846: @item -fsigned-char ! 847: Let the type @code{char} be signed, like @code{signed char}. ! 848: ! 849: @item -ffixed-@var{reg} ! 850: Treat the register named @var{reg} as a fixed register; generated ! 851: code should never refer to it (except perhaps as a stack pointer, ! 852: frame pointer or in some other fixed role). ! 853: ! 854: @var{reg} must be the name of a register. The register names ! 855: accepted are machine-specific and are defined in the ! 856: @code{REGISTER_NAMES} macro in the machine description macro ! 857: file. ! 858: ! 859: @item -fcall-used-@var{reg} ! 860: Treat the register named @var{reg} as an allocatable register ! 861: that is clobbered by function calls. It may be allocated for ! 862: temporaries or variables that do not live across a call. ! 863: Functions compiled this way will not save and restore the ! 864: register @var{reg}. ! 865: ! 866: Use of this flag for a register that has a fixed pervasive role ! 867: in the machine's execution model, such as the stack pointer or ! 868: frame pointer, will produce disastrous results. ! 869: ! 870: @item -fcall-saved-@var{reg} ! 871: Treat the register named @var{reg} as an allocatable register ! 872: saved by functions. It may be allocated even for temporaries or ! 873: variables that live across a call. Functions compiled this way ! 874: will save and restore the register @var{reg} if they use it. ! 875: ! 876: Use of this flag for a register that has a fixed pervasive role ! 877: in the machine's execution model, such as the stack pointer or ! 878: frame pointer, will produce disastrous results. ! 879: ! 880: A different sort of disaster will result from the use of this ! 881: flag for a register in which function values may be returned. ! 882: @end table ! 883: ! 884: @item -d@var{letters} ! 885: Says to make debugging dumps at times specified by @var{letters}. ! 886: Here are the possible letters: ! 887: ! 888: @table @samp ! 889: @item r ! 890: Dump after RTL generation. ! 891: @item j ! 892: Dump after first jump optimization. ! 893: @item J ! 894: Dump after last jump optimization. ! 895: @item s ! 896: Dump after CSE (including the jump optimization that sometimes ! 897: follows CSE). ! 898: @item L ! 899: Dump after loop optimization. ! 900: @item f ! 901: Dump after flow analysis. ! 902: @item c ! 903: Dump after instruction combination. ! 904: @item l ! 905: Dump after local register allocation. ! 906: @item g ! 907: Dump after global register allocation. ! 908: @item m ! 909: Print statistics on memory usage, at the end of the run. ! 910: @end table ! 911: ! 912: @item -pedantic ! 913: Issue all the warnings demanded by strict ANSI standard C; reject ! 914: all programs that use forbidden extensions. ! 915: ! 916: Valid ANSI standard C programs should compile properly with or without ! 917: this option (though a rare few will require @samp{-ansi}). However, ! 918: without this option, certain GNU extensions and traditional C features ! 919: are supported as well. With this option, they are rejected. There is ! 920: no reason to @i{use} this option; it exists only to satisfy pedants. ! 921: @end table ! 922: ! 923: These options control the C preprocessor, which is run on each C source ! 924: file before actual compilation. If you use the @samp{-E} option, nothing ! 925: is done except C preprocessing. Some of these options make sense only ! 926: together with @samp{-E} because they request preprocessor output that is ! 927: not suitable for actual compilation. ! 928: ! 929: @table @samp ! 930: @item -C ! 931: Tell the preprocessor not to discard comments. Used with the ! 932: @samp{-E} option. ! 933: ! 934: @item -I@var{dir} ! 935: Search directory @var{dir} for include files. ! 936: ! 937: @item -I- ! 938: Any directories specified with @samp{-I} options before the @samp{-I-} ! 939: option are searched only for the case of @samp{#include "@var{file}"}; ! 940: they are not searched for @samp{#include <@var{file}>}. ! 941: ! 942: If additional directories are specified with @samp{-I} options after ! 943: the @samp{-I-}, these directories are searched for all @samp{#include} ! 944: directives. (Ordinarily @emph{all} @samp{-I} directories are used ! 945: this way.) ! 946: ! 947: In addition, the @samp{-I-} option inhibits the use of the current ! 948: directory as the first search directory for @samp{#include ! 949: "@var{file}"}. Therefore, the current directory is searched only if ! 950: it is requested explicitly with @samp{-I.}. Specifying both ! 951: @samp{-I-} and @samp{-I.} allows you to control precisely which ! 952: directories are searched before the current one and which are searched ! 953: after. ! 954: ! 955: @item -nostdinc ! 956: Do not search the standard system directories for header files. Only ! 957: the directories you have specified with @samp{-I} options (and the ! 958: current directory, if appropriate) are searched. ! 959: ! 960: Between @samp{-nostdinc} and @samp{-I-}, you can eliminate all ! 961: directories from the search path except those you specify. ! 962: ! 963: @item -M ! 964: Tell the preprocessor to output a rule suitable for @code{make} ! 965: describing the dependencies of each source file. For each source ! 966: file, the preprocessor outputs one @code{make}-rule whose target is ! 967: the object file name for that source file and whose dependencies are ! 968: all the files @samp{#include}d in it. This rule may be a single line ! 969: or may be continued with @samp{\}-newline if it is long. ! 970: ! 971: @samp{-M} implies @samp{-E}. ! 972: ! 973: @item -MM ! 974: Like @samp{-M} but the output mentions only the user-header files ! 975: included with @samp{#include "@var{file}"}. System header files ! 976: included with @samp{#include <@var{file}>} are omitted. ! 977: ! 978: @samp{-MM} implies @samp{-E}. ! 979: ! 980: @item -D@var{macro} ! 981: Define macro @var{macro} with the empty string as its definition. ! 982: ! 983: @item -D@var{macro}=@var{defn} ! 984: Define macro @var{macro} as @var{defn}. ! 985: ! 986: @item -U@var{macro} ! 987: Undefine macro @var{macro}. ! 988: ! 989: @item -T ! 990: Support ANSI C trigraphs. You don't want to know about this ! 991: brain-damage. The @samp{-ansi} option also has this effect. ! 992: @end table ! 993: ! 994: @node Installation, Trouble, Options, Top ! 995: @chapter Installing GNU CC ! 996: ! 997: Here is the procedure for installing GNU CC on a Unix system. ! 998: @menu ! 999: * VMS Install:: See below for installation on VMS. ! 1000: @end menu ! 1001: @iftex ! 1002: (See below for VMS.) ! 1003: @end iftex ! 1004: ! 1005: @enumerate ! 1006: @item ! 1007: Edit @file{Makefile}. If you are using HPUX, or any form of system V, ! 1008: you must make a few changes described in comments at the beginning of ! 1009: the file. ! 1010: ! 1011: @item ! 1012: On a Sequent system, go to the Berkeley universe. ! 1013: ! 1014: @item ! 1015: Choose configuration files. ! 1016: ! 1017: @itemize @bullet ! 1018: @item ! 1019: Make a symbolic link named @file{config.h} to the top-level ! 1020: config file for the machine you are using (@pxref{Config}). This ! 1021: file is responsible for defining information about the host ! 1022: machine. It includes @file{tm.h}. ! 1023: ! 1024: The file's name should be @file{config-@var{machine}.h}, with these ! 1025: exceptions: ! 1026: ! 1027: @table @file ! 1028: @item config-vms.h ! 1029: for vaxen running VMS. ! 1030: @item config-vaxv.h ! 1031: for vaxen running system V. ! 1032: @item config-i386v.h ! 1033: for Intel 80386's running system V. ! 1034: @item config-sun4.h ! 1035: for Suns (model 2, 3 or 4) running @emph{operating system} version 4. ! 1036: @item config-hp9k3.h ! 1037: for the HP 9000 series 300. ! 1038: @item config-gnx.h ! 1039: for the ns32000 running Genix ! 1040: @end table ! 1041: ! 1042: If your system does not support symbolic links, you might want to ! 1043: set up @file{config.h} to contain a @samp{#include} command which ! 1044: refers to the appropriate file. ! 1045: ! 1046: @item ! 1047: Make a symbolic link named @file{tm.h} to the machine-description ! 1048: macro file for your machine (its name should be ! 1049: @file{tm-@var{machine}.h}). ! 1050: ! 1051: If your system is a 68000, don't use the file @file{tm-m68k.h} ! 1052: directly. Instead, use one of these files: ! 1053: ! 1054: @table @file ! 1055: @item tm-sun3.h ! 1056: for Sun 3 machines. ! 1057: @item tm-sun2.h ! 1058: for Sun 2 machines. ! 1059: @item tm-3b1.h ! 1060: for AT&T 3b1 (aka 7300 Unix PC). ! 1061: @item tm-isi68.h ! 1062: for Integrated Solutions systems. ! 1063: @item tm-news800.h ! 1064: for SONY News systems. ! 1065: @item tm-hp9k320.h ! 1066: for HPUX systems, if you are using GNU CC with the system's ! 1067: assembler and linker. ! 1068: @item tm-hp9k320g.h ! 1069: for HPUX systems, if you are using the GNU assembler, linker and ! 1070: other utilities. Not all of the pieces of GNU software needed ! 1071: for this mode of operation are as yet in distribution; full ! 1072: instructions will appear here in the future.@refill ! 1073: @end table ! 1074: ! 1075: For the vax, use @file{tm-vax.h} on BSD Unix, @file{tm-vaxv.h} on ! 1076: system V, or @file{tm-vms.h} on VMS.@refill ! 1077: ! 1078: For the SPARC (Sun 4), use @file{tm-sparc.h}. ! 1079: ! 1080: For the Motorola 88000, use @file{tm-m88k.h}. The support for the ! 1081: 88000 has a few unfinished spots because there was no way to run the ! 1082: output. Bugs are suspected in handling of branch-tables and in ! 1083: the function prologue and epilogue. ! 1084: ! 1085: For the 80386, don't use @file{tm-i386.h} directly. Use ! 1086: @file{tm-i386v.h} if the target machine is running system V, ! 1087: @file{tm-seq386.h} for a Sequent 386 system, or @file{tm-compaq.h} for ! 1088: a Compaq. ! 1089: ! 1090: For the 32000, use @file{tm-sequent.h} if you are using a Sequent ! 1091: machine, or @file{tm-encore.h} for an Encore machine, or ! 1092: @file{tm-gnx.h} if you are using Genix version 3; otherwise, perhaps ! 1093: @file{tm-ns32k.h} will work for you. ! 1094: ! 1095: Note that Genix has bugs in @code{alloca} and @code{malloc}; you must ! 1096: get the compiled versions of these from GNU Emacs and edit GNU CC's ! 1097: @file{Makefile} to use them. ! 1098: ! 1099: Note that Encore systems are supported only under BSD. ! 1100: ! 1101: @item ! 1102: Make a symbolic link named @file{md} to the machine description ! 1103: pattern file (its name should be @file{@var{machine}.md}). ! 1104: ! 1105: @item ! 1106: Make a symbolic link named @file{aux-output.c} to the output ! 1107: subroutine file for your machine (its name should be ! 1108: @file{output-@var{machine}.c}). ! 1109: @end itemize ! 1110: ! 1111: @item ! 1112: Make sure the Bison parser generator is installed. (This is ! 1113: unnecessary if the Bison output files @file{c-parse.tab.c} and ! 1114: @file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y} ! 1115: and you do not plan to change the @samp{.y} files.) ! 1116: ! 1117: Bison versions older that Sept 8, 1988 will produce incorrect output ! 1118: for @file{c-parse.tab.c}. ! 1119: ! 1120: @item ! 1121: If you are using a Sun, make sure the environment variable ! 1122: @code{FLOAT_OPTION} is not set. If this option were set to ! 1123: @code{f68881} when @file{gnulib} is compiled, the resulting code would ! 1124: demand to be linked with a special startup file and will not link ! 1125: properly without special pains. ! 1126: ! 1127: @item ! 1128: Build the compiler. Just type @samp{make} in the compiler directory. ! 1129: ! 1130: @item ! 1131: Move the first-stage object files and executables into a subdirectory ! 1132: with this command: ! 1133: ! 1134: @example ! 1135: make stage1 ! 1136: @end example ! 1137: ! 1138: The files are moved into a subdirectory named @file{stage1}. ! 1139: Once installation is complete, you may wish to delete these files ! 1140: with @code{rm -r stage1}. ! 1141: ! 1142: @item ! 1143: Recompile the compiler with itself, with this command: ! 1144: ! 1145: @example ! 1146: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/" ! 1147: @end example ! 1148: ! 1149: On a 68000 or 68020 system lacking floating point hardware, ! 1150: unless you have selected a @file{tm.h} file that expects by default ! 1151: that there is no such hardware, do this instead: ! 1152: ! 1153: @example ! 1154: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/ -msoft-float" ! 1155: @end example ! 1156: ! 1157: @item ! 1158: If you wish to test the compiler by compiling it with itself one more ! 1159: time, do this: ! 1160: ! 1161: @example ! 1162: make stage2 ! 1163: make CC=stage2/gcc CFLAGS="-g -O -Bstage2/" ! 1164: foreach file (*.o) ! 1165: cmp $file stage2/$file ! 1166: end ! 1167: @end example ! 1168: ! 1169: This will notify you if any of these stage 3 object files differs from ! 1170: those of stage 2. Any difference, no matter how innocuous, indicates ! 1171: that the stage 2 compiler has compiled GNU CC incorrectly, and is ! 1172: therefore a potentially serious bug which you should investigate and ! 1173: report (@pxref{Bugs}). ! 1174: ! 1175: Aside from the @samp{-B} option, the options should be the same as ! 1176: when you made stage 2. ! 1177: ! 1178: @item ! 1179: Install the compiler driver, the compiler's passes and run-time support. ! 1180: You can use the following command: ! 1181: ! 1182: @example ! 1183: make install ! 1184: @end example ! 1185: ! 1186: @noindent ! 1187: This copies the files @file{cc1}, @file{cpp} and @file{gnulib} to ! 1188: files @file{gcc-cc1}, @file{gcc-cpp} and @file{gcc-gnulib} in ! 1189: directory @file{/usr/local/lib}, which is where the compiler driver ! 1190: program looks for them. It also copies the driver program @file{gcc} ! 1191: into the directory @file{/usr/local}, so that it appears in typical ! 1192: execution search paths.@refill ! 1193: ! 1194: @strong{Warning: there is a bug in @code{alloca} in the Sun library. ! 1195: To avoid this bug, install the binaries of GNU CC that were compiled ! 1196: by GNU CC. They use @code{alloca} as a built-in function and never ! 1197: the one in the library.} ! 1198: ! 1199: @strong{Warning: the GNU CPP may not work for @file{ioctl.h}, ! 1200: @file{ttychars.h} and other system header files unless the ! 1201: @samp{-traditional} option is used.} The bug is in the header files: ! 1202: at least on some machines, they rely on behavior that is incompatible ! 1203: with ANSI C. This behavior consists of substituting for macro ! 1204: argument names when they appear inside of character constants. The ! 1205: @samp{-traditional} option tells GNU CC to behave the way these ! 1206: headers expect. ! 1207: ! 1208: Because of this problem, you might prefer to configure GNU CC to use ! 1209: the system's own C preprocessor. To do so, make the file ! 1210: @file{/usr/local/lib/gcc-cpp} a link to @file{/lib/cpp}. ! 1211: ! 1212: Alternatively, on Sun systems and 4.3BSD at least, you can correct the ! 1213: include files by running the shell script @file{fixincludes}. This ! 1214: installs modified, corrected copies of the files @file{ioctl.h}, ! 1215: @file{ttychars.h} and many others, in a special directory where only ! 1216: GNU CC will normally look for them. ! 1217: ! 1218: See the file @file{fixincludes} for a list of all the files we know to ! 1219: require correction. ! 1220: @end enumerate ! 1221: ! 1222: If you cannot install the compiler's passes and run-time support in ! 1223: @file{/usr/local/lib}, you can alternatively use the @samp{-B} option to ! 1224: specify a prefix by which they may be found. The compiler concatenates ! 1225: the prefix with the names @file{cpp}, @file{cc1} and @file{gnulib}. ! 1226: Thus, you can put the files in a directory @file{/usr/foo/gcc} and ! 1227: specify @samp{-B/usr/foo/gcc/} when you run GNU CC. ! 1228: ! 1229: Also, you can specify an alternative default directory for these files ! 1230: by setting the Make variable @code{libdir} when you make GNU CC. ! 1231: ! 1232: @node VMS Install,, Installation, Installation ! 1233: @section Installing GNU CC on VMS ! 1234: ! 1235: The VMS version of GNU CC is distributed in an unusual tape format which ! 1236: consists of several tape files. The first is a command file; the second is ! 1237: an executable program which reads Unix tar format; the third is another ! 1238: command file which uses this program to read the remainder of the tape. ! 1239: ! 1240: To load the tape, it suffices to mount it @samp{/foreign} and then do ! 1241: @samp{@@mta0:} to execute the command file at the beginning of the tape. ! 1242: ! 1243: The tape contains executables and object files as well as sources, so no ! 1244: compilation is necessary unless you change the sources. (This is a good ! 1245: thing, since you probably don't have any other C compiler.) If you must ! 1246: recompile, here is how: ! 1247: ! 1248: @enumerate ! 1249: @item ! 1250: Copy the file @file{tm-vms.h} to @file{tm.h}, @file{config-vms.h} to ! 1251: @file{config.h}, @file{vax.md} to @file{md.} and @file{output-vax.c} ! 1252: to @file{aux-output.c}.@refill ! 1253: ! 1254: @item ! 1255: Type @samp{@@make} to do recompile everything. ! 1256: @end enumerate ! 1257: ! 1258: To install the @samp{GCC} command so you can use the compiler easily, in ! 1259: the same manner as you use the VMS C compiler, you must install the VMS CLD ! 1260: file for GNU CC as follows: ! 1261: ! 1262: @enumerate ! 1263: @item ! 1264: Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE} ! 1265: to point to the directories where the GNU CC executables ! 1266: (@samp{gcc-cpp}, @samp{gcc-cc1}, etc.) and the C include files are ! 1267: kept. This should be done with the commands:@refill ! 1268: ! 1269: @example ! 1270: $ assign /super /system disk:[gcc] gnu_cc ! 1271: $ assign /super /system disk:[gcc.include] gnu_cc_include ! 1272: @end example ! 1273: ! 1274: @noindent ! 1275: with the appropriate disk and directory names. These commands can be ! 1276: placed in your system startup file so they will be executed whenever ! 1277: the machine is rebooted. ! 1278: ! 1279: @item ! 1280: Install the @samp{GCC} command with the command line: ! 1281: ! 1282: @example ! 1283: $ set command /table=sys$library:dcltables gnu_cc:gcc ! 1284: @end example ! 1285: ! 1286: @noindent ! 1287: Now you can invoke the compiler with a command like @samp{gcc /verbose ! 1288: file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in ! 1289: Unix. ! 1290: @end enumerate ! 1291: ! 1292: @node Trouble, Incompatibilities, Installation, Top ! 1293: @chapter Known Causes of Trouble with GNU CC. ! 1294: ! 1295: Here are some of the things that have caused trouble for people installing ! 1296: or using GNU CC. ! 1297: ! 1298: @itemize @bullet ! 1299: @item ! 1300: On certain systems, defining certain environment variables such as ! 1301: @samp{CC} can interfere with the functioning of @code{make}. ! 1302: ! 1303: @item ! 1304: Cross compilation can run into trouble for certain machines because ! 1305: some target machines' assemblers require floating point numbers to be ! 1306: written as @emph{integer} constants in certain contexts. ! 1307: ! 1308: The compiler writes these integer constants by examining the floating ! 1309: point value as an integer and printing that integer, because this is ! 1310: simple to write and independent of the details of the floating point ! 1311: representation. But this does not work if the compiler is running on ! 1312: a different machine with an incompatible floating point format, or ! 1313: even a different byte-ordering. ! 1314: ! 1315: It is possible to fix this by writing machine-independent code which ! 1316: understands the floating point representation of the target machine. ! 1317: I am not interested in doing that much work to compensate for bugs ! 1318: in assemblers. ! 1319: ! 1320: @item ! 1321: DBX rejects some files produced by GNU CC, though it accepts similar ! 1322: constructs in output from PCC. Until someone can supply a coherent ! 1323: description of what is valid DBX input and what is not, there is ! 1324: nothing I can do about these problems. You are on your own. ! 1325: @end itemize ! 1326: ! 1327: @node Incompatibilities, Extensions, Trouble, Top ! 1328: @chapter Incompatibilities of GNU CC ! 1329: ! 1330: There are several noteworthy incompatibilities between GNU C and most ! 1331: existing (non-ANSI) versions of C. ! 1332: ! 1333: Ultimately our intention is that the @samp{-traditional} option will ! 1334: eliminate most of these incompatibilities by telling GNU C to behave ! 1335: like the other C compilers. ! 1336: ! 1337: @itemize @bullet ! 1338: @item ! 1339: GNU CC normally makes string constants read-only. If several ! 1340: identical-looking string constants are used, GNU CC stores only one ! 1341: copy of the string. ! 1342: ! 1343: One consequence is that you cannot call @code{mktemp} with a string ! 1344: constant argument. The function @code{mktemp} always alters the ! 1345: string its argument points to. ! 1346: ! 1347: Another consequence is that @code{sscanf} does not work on some ! 1348: systems when passed a string constant as its format control string. ! 1349: This is because @code{sscanf} incorrectly tries to write into the ! 1350: string constant. ! 1351: ! 1352: The best solution to these problems is to change the program to use ! 1353: @code{char}-array variables with initialization strings for these ! 1354: purposes instead of string constants. But if this is not possible, ! 1355: you can use the @samp{-fwritable-strings} flag, which directs GNU CC ! 1356: to handle string constants the same way most C compilers do. ! 1357: ! 1358: @item ! 1359: GNU CC does not substitute macro arguments when they appear inside of ! 1360: string constants. For example, the following macro in GNU CC ! 1361: ! 1362: @example ! 1363: #define foo(a) "a" ! 1364: @end example ! 1365: ! 1366: @noindent ! 1367: will produce output @samp{"a"} regardless of what the argument @var{a} is. ! 1368: ! 1369: The @samp{-traditional} option directs GNU CC to handle such cases ! 1370: (among others) in the old-fashioned (non-ANSI) fashion. ! 1371: ! 1372: @item ! 1373: When you use @code{setjmp} and @code{longjmp}, the only automatic ! 1374: variables guaranteed to remain valid are those declared ! 1375: @code{volatile}. This is a consequence of automatic register ! 1376: allocation. Consider this function: ! 1377: ! 1378: @example ! 1379: jmp_buf j; ! 1380: ! 1381: foo () ! 1382: @{ ! 1383: int a, b; ! 1384: ! 1385: a = fun1 (); ! 1386: if (setjmp (j)) ! 1387: return a; ! 1388: ! 1389: a = fun2 (); ! 1390: /* @r{@code{longjmp (j)} may be occur in @code{fun3}.} */ ! 1391: return a + fun3 (); ! 1392: @} ! 1393: @end example ! 1394: ! 1395: Here @code{a} may or may not be restored to its first value when the ! 1396: @code{longjmp} occurs. If @code{a} is allocated in a register, then ! 1397: its first value is restored; otherwise, it keeps the last value stored ! 1398: in it. ! 1399: ! 1400: If you use the @samp{-W} option with the @samp{-O} option, you will ! 1401: get a warning when GNU CC thinks such a problem might be possible. ! 1402: ! 1403: @item ! 1404: Declarations of external variables and functions within a block apply ! 1405: only to the block containing the declaration. In other words, they ! 1406: have the same scope as any other declaration in the same place. ! 1407: ! 1408: In some other C compilers, a @code{extern} declaration affects all the ! 1409: rest of the file even if it happens within a block. ! 1410: ! 1411: The @samp{-traditional} option directs GNU C to treat all @code{extern} ! 1412: declarations as global, like traditional compilers. ! 1413: ! 1414: @item ! 1415: In traditional C, you can combine @code{long}, etc., with a typedef name, ! 1416: as shown here: ! 1417: ! 1418: @example ! 1419: typedef int foo; ! 1420: typedef long foo bar; ! 1421: @end example ! 1422: ! 1423: In ANSI C, this is not allowed: @code{long} and other type modifiers ! 1424: require an explicit @code{int}. Because this criterion is expressed ! 1425: by Bison grammar rules rather than C code, the @samp{-traditional} ! 1426: flag cannot alter it. ! 1427: ! 1428: @item ! 1429: PCC allows typedef names to be used as function parameters. The ! 1430: difficulty described immediately above applies here too. ! 1431: ! 1432: @item ! 1433: PCC allows whitespace in the middle of compound assignment operators ! 1434: such as @samp{+=}. GNU CC, following the ANSI standard, does not ! 1435: allow this. The difficulty described immediately above applies here ! 1436: too. ! 1437: ! 1438: @item ! 1439: GNU CC will flag unterminated character constants inside of preprocessor ! 1440: conditionals that fail. Some programs have English comments enclosed in ! 1441: conditionals that are guaranteed to fail; if these comments contain ! 1442: apostrophes, GNU CC will probably report an error. For example, ! 1443: this code would produce an error: ! 1444: ! 1445: @example ! 1446: #if 0 ! 1447: You can't expect this to work. ! 1448: #endif ! 1449: @end example ! 1450: ! 1451: The best solution to such a problem is to put the text into an actual ! 1452: C comment delimited by @samp{/*@dots{}*/}. However, ! 1453: @samp{-traditional} suppresses these error messages. ! 1454: ! 1455: @item ! 1456: When compiling functions that return @code{float}, PCC converts it to ! 1457: a double. GNU CC actually returns a @code{float}. If you are concerned ! 1458: with PCC compatibility, you should declare your functions to return ! 1459: @code{double}; you might as well say what you mean. ! 1460: ! 1461: @item ! 1462: When compiling functions that return structures or unions, GNU CC ! 1463: output code uses a method different from that used on most versions of ! 1464: Unix. As a result, code compiled with GNU CC cannot call a ! 1465: structure-returning function compiled with PCC, and vice versa. ! 1466: ! 1467: The method used by GCC is as follows: a structure or union which is 1, ! 1468: 2, 4 or 8 bytes long is returned like a scalar. A structure or union ! 1469: with any other size is stored into an address supplied by the caller ! 1470: in a special, fixed register. ! 1471: ! 1472: PCC usually handles all sizes of structures and unions by returning ! 1473: the address of a block of static storage containing the value. This ! 1474: method is not used in GCC because it is slower and nonreentrant. ! 1475: ! 1476: On systems where PCC works this way, you may be able to make GCC-compiled ! 1477: code call such functions that were compiled with PCC by declaring them ! 1478: to return a pointer to the structure or union instead of the structure ! 1479: or union itself. For example, instead of this: ! 1480: ! 1481: @example ! 1482: struct foo nextfoo (); ! 1483: @end example ! 1484: ! 1485: @noindent ! 1486: write this: ! 1487: ! 1488: @example ! 1489: struct foo *nextfoo (); ! 1490: #define nextfoo *nextfoo ! 1491: @end example ! 1492: ! 1493: @noindent ! 1494: (Note that this assumes you are using the GNU preprocessor and not ! 1495: @samp{-traditional}, so that the ANSI antirecursion rules for macro ! 1496: expansions are effective.) ! 1497: @end itemize ! 1498: ! 1499: @node Extensions, Bugs, Incompatibilities, Top ! 1500: @chapter GNU Extensions to the C Language ! 1501: ! 1502: GNU C provides several language features not found in ANSI standard C. ! 1503: (The @samp{-pedantic} option directs GNU CC to print a warning message if ! 1504: any of these features is used.) To test for the availability of these ! 1505: features in conditional compilation, check for a predefined macro ! 1506: @code{__GNUC__}, which is always defined under GNU CC. ! 1507: ! 1508: @menu ! 1509: * Statement Exprs:: Putting statements and declarations inside expressions. ! 1510: * Naming Types:: Giving a name to the type of some expression. ! 1511: * Typeof:: @code{typeof}: referring to the type of an expression. ! 1512: * Lvalues:: Using @samp{?:}, @samp{,} and casts in lvalues. ! 1513: * Conditionals:: Omitting the middle operand of a @samp{?:} expression. ! 1514: * Zero-Length:: Zero-length arrays. ! 1515: * Variable-Length:: Arrays whose length is computed at run time. ! 1516: * Subscripting:: Any array can be subscripted, even if not an lvalue. ! 1517: * Pointer Arith:: Arithmetic on @code{void}-pointers and function pointers. ! 1518: * Constructors:: Constructor expressions give structures, unions ! 1519: or arrays as values. ! 1520: * Dollar Signs:: Dollar sign is allowed in identifiers. ! 1521: * Alignment:: Inquiring about the alignment of a type or variable. ! 1522: * Inline:: Defining inline functions (as fast as macros). ! 1523: * Extended Asm:: Assembler instructions with C expressions as operands. ! 1524: (With them you can define ``built-in'' functions.) ! 1525: * Asm Labels:: Specifying the assembler name to use for a C symbol. ! 1526: @end menu ! 1527: ! 1528: @node Statement Exprs, Naming Types, Extensions, Extensions ! 1529: @section Statements and Declarations inside of Expressions ! 1530: ! 1531: A compound statement in parentheses may appear inside an expression in GNU ! 1532: C. This allows you to declare variables within an expression. For ! 1533: example: ! 1534: ! 1535: @example ! 1536: (@{ int y = foo (); int z; ! 1537: if (y > 0) z = y; ! 1538: else z = - y; ! 1539: z; @}) ! 1540: @end example ! 1541: ! 1542: @noindent ! 1543: is a valid (though slightly more complex than necessary) expression ! 1544: for the absolute value of @code{foo ()}. ! 1545: ! 1546: This feature is especially useful in making macro definitions ``safe'' (so ! 1547: that they evaluate each operand exactly once). For example, the ! 1548: ``maximum'' function is commonly defined as a macro in standard C as ! 1549: follows: ! 1550: ! 1551: @example ! 1552: #define max(a,b) ((a) > (b) ? (a) : (b)) ! 1553: @end example ! 1554: ! 1555: @noindent ! 1556: But this definition computes either @var{a} or @var{b} twice, with bad ! 1557: results if the operand has side effects. In GNU C, if you know the ! 1558: type of the operands (here let's assume @code{int}), you can define ! 1559: the macro safely as follows: ! 1560: ! 1561: @example ! 1562: #define maxint(a,b) \ ! 1563: (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @}) ! 1564: @end example ! 1565: ! 1566: Embedded statements are not allowed in constant expressions, such as ! 1567: the value of an enumeration constant, the width of a bit field, or ! 1568: the initial value of a static variable. ! 1569: ! 1570: If you don't know the type of the operand, you can still do this, but you ! 1571: must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming ! 1572: Types}). ! 1573: ! 1574: @node Naming Types, Typeof, Statement Exprs, Extensions ! 1575: @section Naming an Expression's Type ! 1576: ! 1577: You can give a name to the type of an expression using a @code{typedef} ! 1578: declaration with an initializer. Here is how to define @var{name} as a ! 1579: type name for the type of @var{exp}: ! 1580: ! 1581: @example ! 1582: typedef @var{name} = @var{exp}; ! 1583: @end example ! 1584: ! 1585: This is useful in conjunction with the statements-within-expressions ! 1586: feature. Here is how the two together can be used to define a safe ! 1587: ``maximum'' macro that operates on any arithmetic type: ! 1588: ! 1589: @example ! 1590: #define max(a,b) \ ! 1591: (@{typedef _ta = (a), _tb = (b); \ ! 1592: _ta _a = (a); _tb _b = (b); \ ! 1593: _a > _b ? _a : _b; @}) ! 1594: @end example ! 1595: ! 1596: The reason for using names that start with underscores for the local ! 1597: variables is to avoid conflicts with variable names that occur within the ! 1598: expressions that are substituted for @code{a} and @code{b}. Eventually we ! 1599: hope to design a new form of declaration syntax that allows you to declare ! 1600: variables whose scopes start only after their initializers; this will be a ! 1601: more reliable way to prevent such conflicts. ! 1602: ! 1603: @node Typeof, Lvalues, Naming Types, Extensions ! 1604: @section Referring to a Type with @code{typeof} ! 1605: ! 1606: Another way to refer to the type of an expression is with @code{typeof}. ! 1607: The syntax of using of this keyword looks like @code{sizeof}, but the ! 1608: construct acts semantically like a type name defined with @code{typedef}. ! 1609: ! 1610: There are two ways of writing the argument to @code{typeof}: with an ! 1611: expression or with a type. Here is an example with an expression: ! 1612: ! 1613: @example ! 1614: typeof (x[0](1)) ! 1615: @end example ! 1616: ! 1617: @noindent ! 1618: This assumes that @code{x} is an array of functions; the type described ! 1619: is that of the values of the functions. ! 1620: ! 1621: Here is an example with a typename as the argument: ! 1622: ! 1623: @example ! 1624: typeof (int *) ! 1625: @end example ! 1626: ! 1627: @noindent ! 1628: Here the type described is that of pointers to @code{int}. ! 1629: ! 1630: A @code{typeof}-construct can be used anywhere a typedef name could be ! 1631: used. For example, you can use it in a declaration, in a cast, or inside ! 1632: of @code{sizeof} or @code{typeof}. ! 1633: ! 1634: @itemize @bullet ! 1635: @item ! 1636: This declares @code{y} with the type of what @code{x} points to. ! 1637: ! 1638: @example ! 1639: typeof (*x) y; ! 1640: @end example ! 1641: ! 1642: @item ! 1643: This declares @code{y} as an array of such values. ! 1644: ! 1645: @example ! 1646: typeof (*x) y[4]; ! 1647: @end example ! 1648: ! 1649: @item ! 1650: This declares @code{y} as an array of pointers to characters: ! 1651: ! 1652: @example ! 1653: typeof (typeof (char *)[4]) y; ! 1654: @end example ! 1655: ! 1656: @noindent ! 1657: It is equivalent to the following traditional C declaration: ! 1658: ! 1659: @example ! 1660: char *y[4]; ! 1661: @end example ! 1662: ! 1663: To see the meaning of the declaration using @code{typeof}, and why it ! 1664: might be a useful way to write, let's rewrite it with these macros: ! 1665: ! 1666: @example ! 1667: #define pointer(T) typeof(T *) ! 1668: #define array(T, N) typeof(T [N]) ! 1669: @end example ! 1670: ! 1671: @noindent ! 1672: Now the declaration can be rewritten this way: ! 1673: ! 1674: @example ! 1675: array (pointer (char), 4) y; ! 1676: @end example ! 1677: ! 1678: @noindent ! 1679: Thus, @samp{array (pointer (char), 4)} is the type of arrays of 4 ! 1680: pointers to @code{char}. ! 1681: @end itemize ! 1682: ! 1683: @node Lvalues, Conditionals, Typeof, Extensions ! 1684: @section Generalized Lvalues ! 1685: ! 1686: Compound expressions, conditional expressions and casts are allowed as ! 1687: lvalues provided their operands are lvalues. This means that you can take ! 1688: their addresses or store values into them. ! 1689: ! 1690: For example, a compound expression can be assigned, provided the last ! 1691: expression in the sequence is an lvalue. These two expressions are ! 1692: equivalent: ! 1693: ! 1694: @example ! 1695: (a, b) += 5 ! 1696: a, (b += 5) ! 1697: @end example ! 1698: ! 1699: Similarly, the address of the compound expression can be taken. These two ! 1700: expressions are equivalent: ! 1701: ! 1702: @example ! 1703: &(a, b) ! 1704: a, &b ! 1705: @end example ! 1706: ! 1707: A conditional expression is a valid lvalue if its type is not void and the ! 1708: true and false branches are both valid lvalues. For example, these two ! 1709: expressions are equivalent: ! 1710: ! 1711: @example ! 1712: (a ? b : c) = 5 ! 1713: (a ? b = 5 : (c = 5)) ! 1714: @end example ! 1715: ! 1716: A cast is a valid lvalue if its operand is valid. Taking the address of ! 1717: the cast is the same as taking the address without a cast, except for the ! 1718: type of the result. For example, these two expressions are equivalent (but ! 1719: the second may be valid when the type of @samp{a} does not permit a cast to ! 1720: @samp{int *}). ! 1721: ! 1722: @example ! 1723: &(int *)a ! 1724: (int **)&a ! 1725: @end example ! 1726: ! 1727: A simple assignment whose left-hand side is a cast works by converting the ! 1728: right-hand side first to the specified type, then to the type of the inner ! 1729: left-hand side expression. After this is stored, the value is converter ! 1730: back to the specified type to become the value of the assignment. Thus, if ! 1731: @samp{a} has type @samp{char *}, the following two expressions are ! 1732: equivalent: ! 1733: ! 1734: @example ! 1735: (int)a = 5 ! 1736: (int)(a = (char *)5) ! 1737: @end example ! 1738: ! 1739: An assignment-with-arithmetic operation such as @samp{+=} applied to a cast ! 1740: performs the arithmetic using the type resulting from the cast, and then ! 1741: continues as in the previous case. Therefore, these two expressions are ! 1742: equivalent: ! 1743: ! 1744: @example ! 1745: (int)a += 5 ! 1746: (int)(a = (char *) ((int)a + 5)) ! 1747: @end example ! 1748: ! 1749: @node Conditionals, Zero-Length, Lvalues, Extensions ! 1750: @section Conditional Expressions with Omitted Middle-Operands ! 1751: ! 1752: The middle operand in a conditional expression may be omitted. Then ! 1753: if the first operand is nonzero, its value is the value of the conditional ! 1754: expression. ! 1755: ! 1756: Therefore, the expression ! 1757: ! 1758: @example ! 1759: x ? : y ! 1760: @end example ! 1761: ! 1762: @noindent ! 1763: has the value of @code{x} if that is nonzero; otherwise, the value of ! 1764: @code{y}. ! 1765: ! 1766: This example is perfectly equivalent to ! 1767: ! 1768: @example ! 1769: x ? x : y ! 1770: @end example ! 1771: ! 1772: @noindent ! 1773: In this simple case, the ability to omit the middle operand is not ! 1774: especially useful. When it becomes useful is when the first operand does, ! 1775: or may (if it is a macro argument), contain a side effect. Then repeating ! 1776: the operand in the middle would perform the side effect twice. Omitting ! 1777: the middle operand uses the value already computed without the undesirable ! 1778: effects of recomputing it. ! 1779: ! 1780: @node Zero-Length, Variable-Length, Conditionals, Extensions ! 1781: @section Arrays of Length Zero ! 1782: ! 1783: Zero-length arrays are allowed in GNU C. They are very useful as the last ! 1784: element of a structure which is really a header for a variable-length ! 1785: object: ! 1786: ! 1787: @example ! 1788: struct line @{ ! 1789: int length; ! 1790: char contents[0]; ! 1791: @}; ! 1792: ! 1793: @{ ! 1794: struct line *thisline ! 1795: = (struct line *) malloc (sizeof (struct line) + this_length); ! 1796: thisline->length = this_length; ! 1797: @} ! 1798: @end example ! 1799: ! 1800: In standard C, you would have to give @code{contents} a length of 1, which ! 1801: means either you waste space or complicate the argument to @code{malloc}. ! 1802: ! 1803: @node Variable-Length, Subscripting, Zero-Length, Extensions ! 1804: @section Arrays of Variable Length ! 1805: ! 1806: Variable-length automatic arrays are allowed in GNU C. These arrays are ! 1807: declared like any other automatic arrays, but with a length that is not a ! 1808: constant expression. The storage is allocated at that time and ! 1809: deallocated when the brace-level is exited. For example: ! 1810: ! 1811: @example ! 1812: FILE *concat_fopen (char *s1, char *s2, char *mode) ! 1813: @{ ! 1814: char str[strlen (s1) + strlen (s2) + 1]; ! 1815: strcpy (str, s1); ! 1816: strcat (str, s2); ! 1817: return fopen (str, mode); ! 1818: @} ! 1819: @end example ! 1820: ! 1821: You can also define structure types containing variable-length arrays, and ! 1822: use them even for arguments or function values, as shown here: ! 1823: ! 1824: @example ! 1825: int foo; ! 1826: ! 1827: struct entry ! 1828: @{ ! 1829: char data[foo]; ! 1830: @}; ! 1831: ! 1832: struct entry ! 1833: tester (struct entry arg) ! 1834: @{ ! 1835: struct entry new; ! 1836: int i; ! 1837: for (i = 0; i < foo; i++) ! 1838: new.data[i] = arg.data[i] + 1; ! 1839: return new; ! 1840: @} ! 1841: @end example ! 1842: ! 1843: @noindent ! 1844: (Eventually there will be a way to say that the size of the array is ! 1845: another member of the same structure.) ! 1846: ! 1847: The length of an array is computed on entry to the brace-level where the ! 1848: array is declared and is remembered for the scope of the array in case you ! 1849: access it with @code{sizeof}. ! 1850: ! 1851: Jumping or breaking out of the scope of the array name will also deallocate ! 1852: the storage. Jumping into the scope is not allowed; you will get an error ! 1853: message for it. ! 1854: ! 1855: You can use the function @code{alloca} to get an effect much like ! 1856: variable-length arrays. The function @code{alloca} is available in ! 1857: many other C implementations (but not in all). On the other hand, ! 1858: variable-length arrays are more elegant. ! 1859: ! 1860: There are other differences between these two methods. Space allocated ! 1861: with @code{alloca} exists until the containing @emph{function} returns. ! 1862: The space for a variable-length array is deallocated as soon as the array ! 1863: name's scope ends. (If you use both variable-length arrays and ! 1864: @code{alloca} in the same function, deallocation of a variable-length array ! 1865: will also deallocate anything more recently allocated with @code{alloca}.) ! 1866: ! 1867: @node Subscripting, Pointer Arith, Variable-Length, Extensions ! 1868: @section Non-Lvalue Arrays May Have Subscripts ! 1869: ! 1870: Subscripting is allowed on arrays that are not lvalues, even though the ! 1871: unary @samp{&} operator is not. For example, this is valid in GNU C though ! 1872: not valid in other C dialects: ! 1873: ! 1874: @example ! 1875: struct foo @{int a[4];@}; ! 1876: ! 1877: struct foo f(); ! 1878: ! 1879: bar (int index) ! 1880: @{ ! 1881: return f().a[index]; ! 1882: @} ! 1883: @end example ! 1884: ! 1885: @node Pointer Arith, Initializers, Subscripting, Extensions ! 1886: @section Arithmetic on @code{void}-Pointers and Function Pointers ! 1887: ! 1888: In GNU C, addition and subtraction operations are supported on pointers to ! 1889: @code{void} and on pointers to functions. This is done by treating the ! 1890: size of a @code{void} or of a function as 1. ! 1891: ! 1892: A consequence of this is that @code{sizeof} is also allowed on @code{void} ! 1893: and on function types, and returns 1. ! 1894: ! 1895: @node Initializers, Constructors, Pointer Arith, Extensions ! 1896: @section Non-Constant Initializers ! 1897: ! 1898: The elements of an aggregate initializer are not required to be constant ! 1899: expressions in GNU C. Here is an example of an initializer with run-time ! 1900: varying elements: ! 1901: ! 1902: @example ! 1903: foo (float f, float g) ! 1904: @{ ! 1905: float beat_freqs[2] = @{ f-g, f+g @}; ! 1906: @dots{} ! 1907: @} ! 1908: @end example ! 1909: ! 1910: @node Constructors, Dollar Signs, Initializers, Extensions ! 1911: @section Constructor Expressions ! 1912: ! 1913: GNU C supports constructor expressions. A constructor looks like a cast ! 1914: containing an initializer. Its value is an object of the type specified in ! 1915: the cast, containing the elements specified in the initializer. The type ! 1916: must be a structure, union or array type. ! 1917: ! 1918: Assume that @code{struct foo} and @code{structure} are declared as shown: ! 1919: ! 1920: @example ! 1921: struct foo @{int a; char b[2];@} structure; ! 1922: @end example ! 1923: ! 1924: @noindent ! 1925: Here is an example of constructing a @samp{struct foo} with a constructor: ! 1926: ! 1927: @example ! 1928: structure = ((struct foo) @{x + y, 'a', 0@}); ! 1929: @end example ! 1930: ! 1931: @noindent ! 1932: This is equivalent to writing the following: ! 1933: ! 1934: @example ! 1935: @{ ! 1936: struct foo temp = @{x + y, 'a', 0@}; ! 1937: structure = temp; ! 1938: @} ! 1939: @end example ! 1940: ! 1941: You can also construct an array. If all the elements of the constructor ! 1942: are (made up of) simple constant expressions, suitable for use in ! 1943: initializers, then the constructor is an lvalue and can be coerced to a ! 1944: pointer to its first element, as shown here: ! 1945: ! 1946: @example ! 1947: char **foo = (char *[]) @{ "x", "y", "z" @}; ! 1948: @end example ! 1949: ! 1950: Array constructors whose elements are not simple constants are not very ! 1951: useful, because the constructor is not an lvalue. There are only two valid ! 1952: ways to use it: to subscript it, or initialize an array variable with it. ! 1953: The former is probably slower than a @code{switch} statement, while the ! 1954: latter does the same thing an ordinary C initializer would do. ! 1955: ! 1956: @example ! 1957: output = ((int[]) @{ 2, x, 28 @}) [input]; ! 1958: @end example ! 1959: ! 1960: @node Dollar Signs, Alignment, Constructors, Extensions ! 1961: @section Dollar Signs in Identifier Names ! 1962: ! 1963: In GNU C, you may use dollar signs in identifier names. This is because ! 1964: many traditional C implementations allow such identifiers. ! 1965: ! 1966: @node Alignment, Inline, Dollar Signs, Extensions ! 1967: @section Inquiring about the Alignment of a Type or Variable ! 1968: ! 1969: The keyword @code{__alignof} allows you to inquire about how an object ! 1970: is aligned, or the minimum alignment usually required by a type. Its ! 1971: syntax is just like @code{sizeof}. ! 1972: ! 1973: For example, if the target machine requires a @code{double} value to be ! 1974: aligned on an 8-byte boundary, then @code{__alignof (double)} is 8. This ! 1975: is true on many RISC machines. On more traditional machine designs, ! 1976: @code{__alignof (double)} is 4 or even 2. ! 1977: ! 1978: Some machines never actually require alignment; they allow reference to any ! 1979: data type even at an odd addresses. For these machines, @code{__alignof} ! 1980: reports the @emph{recommended} alignment of a type. ! 1981: ! 1982: When the operand of @code{__alignof} is an lvalue rather than a type, the ! 1983: value is the largest alignment that the lvalue is known to have. It may ! 1984: have this alignment as a result of its data type, or because it is part of ! 1985: a structure and inherits alignment from that structure. For example, after ! 1986: this declaration: ! 1987: ! 1988: @example ! 1989: struct foo @{ int x; char y; @} foo1; ! 1990: @end example ! 1991: ! 1992: @noindent ! 1993: the value of @code{__alignof (foo1.y)} is probably 2 or 4, the same as ! 1994: @code{__alignof (int)}, even though the data type of @code{foo1.y} does not ! 1995: itself demand any alignment.@refill ! 1996: ! 1997: @node Inline, Extended Asm, Alignment, Extensions ! 1998: @section An Inline Function is As Fast As a Macro ! 1999: ! 2000: By declaring a function @code{inline}, you can direct GNU CC to integrate ! 2001: that function's code into the code for its callers. This makes execution ! 2002: faster by eliminating the function-call overhead; in addition, if any of ! 2003: the actual argument values are constant, their known values may permit ! 2004: simplifications at compile time so that not all of the inline function's ! 2005: code needs to be included. ! 2006: ! 2007: To declare a function inline, use the @code{inline} keyword in its ! 2008: declaration, like this: ! 2009: ! 2010: @example ! 2011: inline int ! 2012: inc (int *a) ! 2013: @{ ! 2014: (*a)++; ! 2015: @} ! 2016: @end example ! 2017: ! 2018: You can also make all ``simple enough'' functions inline with the ! 2019: option @samp{-finline-functions}. Note that certain usages in a ! 2020: function definition can make it unsuitable for inline substitution. ! 2021: ! 2022: When a function is both inline and @code{static}, if all calls to the ! 2023: function are integrated into the caller, then the function's own assembler ! 2024: code is never referenced. In this case, GNU CC does not actually output ! 2025: assembler code for the function, unless you specify the option ! 2026: @samp{-fkeep-inline-functions}. Some calls cannot be integrated for ! 2027: various reasons (in particular, calls that precede the function's ! 2028: definition cannot be integrated, and neither can recursive calls within the ! 2029: definition). If there is a nonintegrated call, then the function is ! 2030: compiled to assembler code as usual. ! 2031: ! 2032: When an inline function is not @code{static}, then the compiler must assume ! 2033: that there may be calls from other source files; since a global symbol can ! 2034: be defined only once in any program, the function must not be defined in ! 2035: the other source files, so the calls therein cannot be integrated. ! 2036: Therefore, a non-@code{static} inline function is always compiled on its ! 2037: own in the usual fashion. ! 2038: ! 2039: @node Extended Asm, Asm Labels, Inline, Extensions ! 2040: @section Assembler Instructions with C Expression Operands ! 2041: ! 2042: In an assembler instruction using @code{asm}, you can now specify the ! 2043: operands of the instruction using C expressions. This means no more ! 2044: guessing which registers or memory locations will contain the data you want ! 2045: to use. ! 2046: ! 2047: You must specify an assembler instruction template much like what appears ! 2048: in a machine description, plus an operand constraint string for each ! 2049: operand. ! 2050: ! 2051: For example, here is how to use the 68881's @code{fsinx} instruction: ! 2052: ! 2053: @example ! 2054: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); ! 2055: @end example ! 2056: ! 2057: @noindent ! 2058: Here @code{angle} is the C expression for the input operand while ! 2059: @code{result} is that of the output operand. Each has @samp{"f"} as its ! 2060: operand constraint, saying that a floating-point register is required. The ! 2061: constraints use the same language used in the machine description ! 2062: (@pxref{Constraints}). ! 2063: ! 2064: Each operand is described by an operand-constraint string followed by the C ! 2065: expression in parentheses. A colon separates the assembler template from ! 2066: the first output operand, and another separates the last output operand ! 2067: from the first input, if any. Commas separate output operands and separate ! 2068: inputs. The number of operands is limited to the maximum number of ! 2069: operands in any instruction pattern in the machine description. ! 2070: ! 2071: Output operand expressions must be lvalues; the compiler can check this. ! 2072: The input operands need not be lvalues. The compiler cannot check whether ! 2073: the operands have data types that are reasonable for the instruction being ! 2074: executed. It does not parse the assembler instruction template and does ! 2075: not know what it means, or whether it is valid assembler input. The ! 2076: extended @code{asm} feature is most often used for machine instructions ! 2077: that the compiler itself does not know exist. ! 2078: ! 2079: If there are no output operands, and there are input operands, then you ! 2080: should write two colons in a row where the output operands would go. ! 2081: ! 2082: The output operands must be write-only; GNU CC will assume that the values ! 2083: in these operands before the instruction are dead and need not be ! 2084: generated. For an operand that is read-write, or in which not all bits are ! 2085: written and the other bits contain useful information, you must logically ! 2086: split its function into two separate operands, one input operand and one ! 2087: write-only output operand. The connection between them is expressed by ! 2088: constraints which say they need to be in the same location when the ! 2089: instruction executes. You can use the same C expression for both operands, ! 2090: or different expressions. For example, here we write the (fictitious) ! 2091: @samp{combine} instruction with @code{bar} as its read-only source operand ! 2092: and @code{foo} as its read-write destination: ! 2093: ! 2094: @example ! 2095: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); ! 2096: @end example ! 2097: ! 2098: @noindent ! 2099: The constraint @samp{"0"} for operand 1 says that it must occupy the same ! 2100: location as operand 0. ! 2101: ! 2102: Only a digit in the constraint can guarantee that one operand will be in ! 2103: the same place as another. The mere fact that @code{foo} is the value of ! 2104: both operands is not enough to guarantee that they will be in the same ! 2105: place in the generated assembler code. The following would not work: ! 2106: ! 2107: @example ! 2108: asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); ! 2109: @end example ! 2110: ! 2111: Various optimizations or reloading could cause operands 0 and 1 to be in ! 2112: different registers; GNU CC knows no reason not to do so. For example, the ! 2113: compiler might find a copy of the value of @code{foo} in one register and ! 2114: use it for operand 1, but generate the output operand 0 in a different ! 2115: register (copying it afterward to @code{foo}'s own address). Of course, ! 2116: since the register for operand 1 is not even mentioned in the assembler ! 2117: code, the result will not work, but GNU CC can't tell that. ! 2118: ! 2119: Unless an output operand has the @samp{&} constraint modifier, GNU CC may ! 2120: allocate it in the same register as an unrelated input operand, on the ! 2121: assumption that the inputs are consumed before the outputs are produced. ! 2122: This assumption may be false if the assembler code actually consists of ! 2123: more than one instruction. In such a case, use @samp{&} for each output ! 2124: operand that may not overlap an input. @xref{Modifiers}. ! 2125: ! 2126: Some instructions clobber specific hard registers. To describe this, ! 2127: write a third colon after the input operands, followed by the names of ! 2128: the clobbered hard registers (given as strings). For example, on the vax, ! 2129: ! 2130: @example ! 2131: asm volatile ("movc3 %0,%1,%2" ! 2132: : /* no outputs */ ! 2133: : "g" (from), "g" (to), "g" (count) ! 2134: : "r0", "r1", "r2", "r3", "r4", "r5"); ! 2135: @end example ! 2136: ! 2137: Usually the most convenient way to use these @code{asm} instructions is to ! 2138: encapsulate them in macros that look like functions. For example, ! 2139: ! 2140: @example ! 2141: #define sin(x) \ ! 2142: (@{ double __value, __arg = (x); \ ! 2143: asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ ! 2144: __value; @}) ! 2145: @end example ! 2146: ! 2147: @noindent ! 2148: Here the variable @code{__arg} is used to make sure that the instruction ! 2149: operates on a proper @code{double} value, and to accept only those ! 2150: arguments @code{x} which can convert automatically to a @code{double}. ! 2151: ! 2152: Another way to make sure the instruction operates on the correct data type ! 2153: is to use a cast in the @code{asm}. This is different from using a ! 2154: variable @code{__arg} in that it converts more different types. For ! 2155: example, if the desired type were @code{int}, casting the argument to ! 2156: @code{int} would accept a pointer with no complaint, while assigning the ! 2157: argument to an @code{int} variable named @code{__arg} would warn about ! 2158: using a pointer unless the caller explicitly casts it. ! 2159: ! 2160: GNU CC assumes for optimization purposes that these instructions have no ! 2161: side effects except to change the output operands. This does not mean that ! 2162: instructions with a side effect cannot be used, but you must be careful, ! 2163: because the compiler may eliminate them if the output operands aren't used, ! 2164: or move them out of loops, or replace two with one if they constitute a ! 2165: common subexpression. Also, if your instruction does have a side effect on ! 2166: a variable that otherwise appears not to change, the old value of the ! 2167: variable may be reused later if it happens to be found in a register. ! 2168: ! 2169: You can prevent an @code{asm} instruction from being deleted, moved or ! 2170: combined by writing the keyword @code{volatile} after the @code{asm}. For ! 2171: example: ! 2172: ! 2173: @example ! 2174: #define set_priority(x) \ ! 2175: asm volatile ("set_priority %0": /* no outputs */ : "g" (x)) ! 2176: @end example ! 2177: ! 2178: It is a natural idea to look for a way to give access to the condition ! 2179: code left by the assembler instruction. However, when we attempted to ! 2180: implement this, we found no way to make it work reliably. The problem ! 2181: is that output operands might need reloading, which would result in ! 2182: additional following ``store'' instructions. On most machines, these ! 2183: instructions would alter the condition code before there was time to ! 2184: test it. This problem doesn't arise for ordinary ``test'' and ! 2185: ``compare'' instructions because they don't have any output operands. ! 2186: ! 2187: @node Asm Labels,,Extended Asm, Extensions ! 2188: @section Controlling Names Used in Assembler Code ! 2189: ! 2190: You can specify the name to be used in the assembler code for a C function ! 2191: or variable by writing the @code{asm} keyword after the declarator as ! 2192: follows: ! 2193: ! 2194: @example ! 2195: int foo asm ("myfoo") = 2; ! 2196: @end example ! 2197: ! 2198: @noindent ! 2199: This specifies that the name to be used for the variable @code{foo} in ! 2200: the assembler code should be @samp{myfoo} rather than the usual ! 2201: @samp{_foo}. ! 2202: ! 2203: On systems where an underscore is normally prepended to the name of a C ! 2204: function or variable, this feature allows you to define names for the ! 2205: linker that do not start with an underscore. ! 2206: ! 2207: You cannot use @code{asm} in this way in a function @emph{definition}; but ! 2208: you can get the same effect by writing a declaration for the function ! 2209: before its definition and putting @code{asm} there, like this: ! 2210: ! 2211: @example ! 2212: extern func () asm ("FUNC"); ! 2213: ! 2214: func (x, y) ! 2215: int x, y; ! 2216: @dots{} ! 2217: @end example ! 2218: ! 2219: It is up to you to make sure that the assembler names you choose do not ! 2220: conflict with any other assembler symbols. Also, you must not use a ! 2221: register name; that would produce completely invalid assembler code. GNU ! 2222: CC does not as yet have the ability to store static variables in registers. ! 2223: Perhaps that will be added. ! 2224: ! 2225: @node Bugs, Portability, Extensions, Top ! 2226: @chapter Reporting Bugs ! 2227: ! 2228: Your bug reports play an essential role in making GNU CC reliable. ! 2229: ! 2230: Reporting a bug may help you by bringing a solution to your problem, or it ! 2231: may not. But in any case the important function of a bug report is to help ! 2232: the entire community by making the next version of GNU CC work better. Bug ! 2233: reports are your contribution to the maintenance of GNU CC. ! 2234: ! 2235: In order for a bug report to serve its purpose, you must include the ! 2236: information that makes for fixing the bug. ! 2237: ! 2238: @menu ! 2239: * Criteria: Bug Criteria. Have you really found a bug? ! 2240: * Reporting: Bug Reporting. How to report a bug effectively. ! 2241: @end menu ! 2242: ! 2243: @node Bug Criteria, Bug Reporting, Bugs, Bugs ! 2244: @section Have You Found a Bug? ! 2245: ! 2246: If you are not sure whether you have found a bug, here are some guidelines: ! 2247: ! 2248: @itemize @bullet ! 2249: @item ! 2250: If the compiler gets a fatal signal, for any input whatever, that is a ! 2251: compiler bug. Reliable compilers never crash. ! 2252: ! 2253: @item ! 2254: If the compiler produces invalid assembly code, for any input whatever ! 2255: (except an @code{asm} statement), that is a compiler bug, unless the ! 2256: compiler reports errors (not just warnings) which would ordinarily ! 2257: prevent the assembler from being run. ! 2258: ! 2259: @item ! 2260: If the compiler produces valid assembly code that does not correctly ! 2261: execute the input source code, that is a compiler bug. ! 2262: ! 2263: However, you must double-check to make sure, because you may have run ! 2264: into an incompatibility between GNU C and traditional C ! 2265: (@pxref{Incompatibilities}). These incompatibilities might be considered ! 2266: bugs, but they are inescapable consequences of valuable features. ! 2267: ! 2268: Or you may have a program whose behavior is undefined, which happened ! 2269: by chance to give the desired results with another C compiler. ! 2270: ! 2271: For example, in many nonoptimizing compilers, you can write @samp{x;} ! 2272: at the end of a function instead of @samp{return x;}, with the same ! 2273: results. But the value of the function is undefined if @samp{return} ! 2274: is omitted; it is not a bug when GNU CC produces different results. ! 2275: ! 2276: Problems often result from expressions with two increment operators, ! 2277: as in @samp{f (*p++, *p++)}. Your previous compiler might have ! 2278: interpreted that expression the way you intended; GNU CC might ! 2279: interpret it another way; neither compiler is wrong. ! 2280: ! 2281: After you have localized the error to a single source line, it should ! 2282: be easy to check for these things. If your program is correct and ! 2283: well defined, you have found a compiler bug. ! 2284: ! 2285: @item ! 2286: If the compiler produces an error message for valid input, that is a ! 2287: compiler bug. ! 2288: ! 2289: Note that the following is not valid input, and the error message for ! 2290: it is not a bug: ! 2291: ! 2292: @example ! 2293: int foo (char); ! 2294: ! 2295: int ! 2296: foo (x) ! 2297: char x; ! 2298: @{ @dots{} @} ! 2299: @end example ! 2300: ! 2301: @noindent ! 2302: The prototype says to pass a @code{char}, while the definition says to ! 2303: pass an @code{int} and treat the value as a @code{char}. This is what ! 2304: the ANSI standard says, and it makes sense. ! 2305: ! 2306: @item ! 2307: If the compiler does not produce an error message for invalid input, ! 2308: that is a compiler bug. However, you should note that your idea of ! 2309: ``invalid input'' might be my idea of ``an extension'' or ``support ! 2310: for traditional practice''. ! 2311: ! 2312: @item ! 2313: If you are an experienced user of C compilers, your suggestions ! 2314: for improvement of GNU CC are welcome in any case. ! 2315: @end itemize ! 2316: ! 2317: @node Bug Reporting,, Bug Criteria, Bugs ! 2318: @section How to Report Bugs ! 2319: ! 2320: Send bug reports for GNU C to one of these addresses: ! 2321: ! 2322: @example ! 2323: bug-gcc@@prep.ai.mit.edu ! 2324: @{ucbvax|mit-eddie|uunet@}!prep.ai.mit.edu!bug-gcc ! 2325: @end example ! 2326: ! 2327: As a last resort, snail them to: ! 2328: ! 2329: @example ! 2330: GNU Compiler Bugs ! 2331: 545 Tech Sq ! 2332: Cambridge, MA 02139 ! 2333: @end example ! 2334: ! 2335: The fundamental principle of reporting bugs usefully is this: ! 2336: @strong{report all the facts}. If you are not sure whether to mention a ! 2337: fact or leave it out, mention it! ! 2338: ! 2339: Often people omit facts because they think they know what causes the ! 2340: problem and they conclude that some details don't matter. Thus, you might ! 2341: assume that the name of the variable you use in an example does not matter. ! 2342: Well, probably it doesn't, but one cannot be sure. Perhaps the bug is a ! 2343: stray memory reference which happens to fetch from the location where that ! 2344: name is stored in memory; perhaps, if the name were different, the contents ! 2345: of that location would fool the compiler into doing the right thing despite ! 2346: the bug. Play it safe and give an exact example. ! 2347: ! 2348: If you want to enable me to fix the bug, you should include all these ! 2349: things: ! 2350: ! 2351: @itemize @bullet ! 2352: @item ! 2353: The version of GNU CC. You can get this by running it with the ! 2354: @samp{-v} option. ! 2355: ! 2356: Without this, I won't know whether there is any point in looking for ! 2357: the bug in the current version of GNU CC. ! 2358: ! 2359: @item ! 2360: A complete input file that will reproduce the bug. If the bug is in ! 2361: the C preprocessor, send me a source file and any header files that it ! 2362: requires. If the bug is in the compiler proper (@file{cc1}), run your ! 2363: source file through the C preprocessor by doing @samp{gcc -E ! 2364: @var{sourcefile} > @var{outfile}}, then include the contents of ! 2365: @var{outfile} in the bug report. (Any @samp{-I}, @samp{-D} or ! 2366: @samp{-U} options that you used in actual compilation should also be ! 2367: used when doing this.) ! 2368: ! 2369: A single statement is not enough of an example. In order to compile ! 2370: it, it must be embedded in a function definition; and the bug might ! 2371: depend on the details of how this is done. ! 2372: ! 2373: Without a real example I can compile, all I can do about your bug ! 2374: report is wish you luck. It would be futile to try to guess how to ! 2375: provoke the bug. For example, bugs in register allocation and ! 2376: reloading frequently depend on every little detail of the function ! 2377: they happen in. ! 2378: ! 2379: @item ! 2380: The command arguments you gave GNU CC to compile that example and ! 2381: observe the bug. For example, did you use @samp{-O}? To guarantee ! 2382: you won't omit something important, list them all. ! 2383: ! 2384: If I were to try to guess the arguments, I would probably guess wrong ! 2385: and then I would not encounter the bug. ! 2386: ! 2387: @item ! 2388: The names of the files that you used for @file{tm.h} and @file{md} ! 2389: when you installed the compiler. ! 2390: ! 2391: @item ! 2392: The type of machine you are using, and the operating system name and ! 2393: version number. ! 2394: ! 2395: @item ! 2396: A description of what behavior you observe that you believe is ! 2397: incorrect. For example, ``It gets a fatal signal,'' or, ``There is an ! 2398: incorrect assembler instruction in the output.'' ! 2399: ! 2400: Of course, if the bug is that the compiler gets a fatal signal, then I ! 2401: will certainly notice it. But if the bug is incorrect output, I might ! 2402: not notice unless it is glaringly wrong. I won't study all the ! 2403: assembler code from a 50-line C program just on the off chance that it ! 2404: might be wrong. ! 2405: ! 2406: Even if the problem you experience is a fatal signal, you should still ! 2407: say so explicitly. Suppose something strange is going on, such as, ! 2408: your copy of the compiler is out of synch, or you have encountered a ! 2409: bug in the C library on your system. (This has happened!) Your copy ! 2410: might crash and mine would not. If you @i{told} me to expect a crash, ! 2411: then when mine fails to crash, I would know that the bug was not ! 2412: happening for me. If you had not told me to expect a crash, then I ! 2413: would not be able to draw any conclusion from my observations. ! 2414: ! 2415: In cases where GNU CC generates incorrect code, if you send me a small ! 2416: complete sample program I will find the error myself by running the ! 2417: program under a debugger. If you send me a large example or a part of ! 2418: a larger program, I cannot do this; you must debug the compiled ! 2419: program and narrow the problem down to one source line. Tell me which ! 2420: source line it is, and what you believe is incorrect about the code ! 2421: generated for that line. ! 2422: ! 2423: @item ! 2424: If you send me examples of output from GNU CC, please use @samp{-g} ! 2425: when you make them. The debugging information includes source line ! 2426: numbers which are essential for correlating the output with the input. ! 2427: ! 2428: @item ! 2429: If you wish to suggest changes to the GNU CC source, send me context ! 2430: diffs. If you even discuss something in the GNU CC source, refer to ! 2431: it by context, not by line number. ! 2432: ! 2433: The line numbers in my development sources don't match those in your ! 2434: sources. Your line numbers would convey no useful information to me. ! 2435: ! 2436: @item ! 2437: Additional information from a debugger might enable me to find ! 2438: a problem on a machine which I do not have available myself. ! 2439: However, you need to think when you collect this information if ! 2440: you want it to have any chance of being useful. ! 2441: ! 2442: For example, many people send just a backtrace, but that is never ! 2443: useful by itself. A simple backtrace with arguments conveys little ! 2444: about GNU CC because the compiler is largely data-driven; the same ! 2445: functions are called over and over for different RTL insns, doing ! 2446: different things depending on the details of the insn. ! 2447: ! 2448: Most of the arguments listed in the backtrace are useless because they ! 2449: are pointers to RTL list structure. The numeric values of the ! 2450: pointers, which the debugger prints in the backtrace, have no ! 2451: significance whatever; all that matters is the contents of the objects ! 2452: they point to (and most of the contents are other such pointers). ! 2453: ! 2454: In addition, most compiler passes consist of one or more loops that ! 2455: scan the RTL insn sequence. The most vital piece of information about ! 2456: such a loop--which insn it has reached--is usually in a local variable, ! 2457: not in an argument. ! 2458: ! 2459: What you need to provide in addition to a backtrace are the values of ! 2460: the local variables for several stack frames up. When a local ! 2461: variable or an argument is an RTX, first print its value and then use ! 2462: the GDB command @code{pr} to print the RTL expression that it points ! 2463: to. (If GDB doesn't run on your machine, use your debugger to call ! 2464: the function @code{debug_rtx} with the RTX as an argument.) In ! 2465: general, whenever a variable is a pointer, its value is no use ! 2466: without the data it points to. ! 2467: ! 2468: In addition, include a debugging dump from just before the pass ! 2469: in which the crash happens. Most bugs involve a series of insns, ! 2470: not just one. ! 2471: @end itemize ! 2472: ! 2473: Here are some things that are not necessary: ! 2474: ! 2475: @itemize @bullet ! 2476: @item ! 2477: A description of the envelope of the bug. ! 2478: ! 2479: Often people who encounter a bug spend a lot of time investigating ! 2480: which changes to the input file will make the bug go away and which ! 2481: changes will not affect it. ! 2482: ! 2483: This is often time consuming and not very useful, because the way I ! 2484: will find the bug is by running a single example under the debugger ! 2485: with breakpoints, not by pure deduction from a series of examples. ! 2486: ! 2487: Of course, if you can find a simpler example to report @emph{instead} ! 2488: of the original one, that is a convenience for me. Errors in the ! 2489: output will be easier to spot, running under the debugger will take ! 2490: less time, etc. Most GNU CC bugs involve just one function, so the ! 2491: most straightforward way to simplify an example is to delete all the ! 2492: function definitions except the one where the bug occurs. Those ! 2493: earlier in the file may be replaced by external declarations if the ! 2494: crucial function depends on them. ! 2495: ! 2496: However, simplification is not vital; if you don't want to do this, ! 2497: report the bug anyway. ! 2498: ! 2499: @item ! 2500: A patch for the bug. ! 2501: ! 2502: A patch for the bug does help me if it is a good one. But don't omit ! 2503: the necessary information, such as the test case, because I might see ! 2504: problems with your patch and decide to fix the problem another way. ! 2505: ! 2506: Sometimes with a program as complicated as GNU CC it is very hard to ! 2507: construct an example that will make the program follow a certain path ! 2508: through the code. If you don't send me the example, I won't be able ! 2509: to construct one, so I won't be able to verify that the bug is fixed. ! 2510: ! 2511: @item ! 2512: A guess about what the bug is or what it depends on. ! 2513: ! 2514: Such guesses are usually wrong. Even I can't guess right about such ! 2515: things without using the debugger to find the facts. ! 2516: @end itemize ! 2517: ! 2518: @node Portability, Interface, Bugs, Top ! 2519: @chapter GNU CC and Portability ! 2520: ! 2521: The main goal of GNU CC was to make a good, fast compiler for machines in ! 2522: the class that the GNU system aims to run on: 32-bit machines that address ! 2523: 8-bit bytes and have several general registers. Elegance, theoretical ! 2524: power and simplicity are only secondary. ! 2525: ! 2526: GNU CC gets most of the information about the target machine from a machine ! 2527: description which gives an algebraic formula for each of the machine's ! 2528: instructions. This is a very clean way to describe the target. But when ! 2529: the compiler needs information that is difficult to express in this ! 2530: fashion, I have not hesitated to define an ad-hoc parameter to the machine ! 2531: description. The purpose of portability is to reduce the total work needed ! 2532: on the compiler; it was not of interest for its own sake. ! 2533: ! 2534: GNU CC does not contain machine dependent code, but it does contain code ! 2535: that depends on machine parameters such as endianness (whether the most ! 2536: significant byte has the highest or lowest address of the bytes in a word) ! 2537: and the availability of autoincrement addressing. In the RTL-generation ! 2538: pass, it is often necessary to have multiple strategies for generating code ! 2539: for a particular kind of syntax tree, strategies that are usable for different ! 2540: combinations of parameters. Often I have not tried to address all possible ! 2541: cases, but only the common ones or only the ones that I have encountered. ! 2542: As a result, a new target may require additional strategies. You will know ! 2543: if this happens because the compiler will call @code{abort}. Fortunately, ! 2544: the new strategies can be added in a machine-independent fashion, and will ! 2545: affect only the target machines that need them. ! 2546: ! 2547: @node Interface, Passes, Portability, Top ! 2548: @chapter Interfacing to GNU CC Output ! 2549: ! 2550: GNU CC is normally configured to use the same function calling convention ! 2551: normally in use on the target system. This is done with the ! 2552: machine-description macros described (@pxref{Machine Macros}). ! 2553: ! 2554: However, returning of structure and union values is done differently on ! 2555: some target machines. As a result, functions compiled with PCC ! 2556: returning such types cannot be called from code compiled with GNU CC, ! 2557: and vice versa. This does not cause trouble often because few Unix ! 2558: library routines return structures or unions. ! 2559: ! 2560: GNU CC code returns structures and unions that are 1, 2, 4 or 8 bytes ! 2561: long in the same registers used for @code{int} or @code{double} return ! 2562: values. (GNU CC typically allocates variables of such types in ! 2563: registers also.) Structures and unions of other sizes are returned by ! 2564: storing them into an address passed by the caller (usually in a ! 2565: register). The machine-description macros @code{STRUCT_VALUE} and ! 2566: @code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address. ! 2567: ! 2568: By contrast, PCC on most target machines returns structures and unions ! 2569: of any size by copying the data into an area of static storage, and then ! 2570: returning the address of that storage as if it were a pointer value. ! 2571: The caller must copy the data from that memory area to the place where ! 2572: the value is wanted. This is slower than the method used by GNU CC, and ! 2573: fails to be reentrant. ! 2574: ! 2575: On some target machines, such as RISC machines and the 80386, the ! 2576: standard system convention is to pass to the subroutine the address of ! 2577: where to return the value. On these machines, GNU CC has been ! 2578: configured to be compatible with the standard compiler, when this method ! 2579: is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes. ! 2580: ! 2581: GNU CC uses the system's standard convention for passing arguments. On ! 2582: some machines, the first few arguments are passed in registers; in ! 2583: others, all are passed on the stack. It would be possible to use ! 2584: registers for argument passing on any machine, and this would probably ! 2585: result in a significant speedup. But the result would be complete ! 2586: incompatibility with code that follows the standard convention. So this ! 2587: change is practical only if you are switching to GNU CC as the sole C ! 2588: compiler for the system. We may implement register argument passing on ! 2589: certain machines once we have a complete GNU system so that we can ! 2590: compile the libraries with GNU CC. ! 2591: ! 2592: If you use @code{longjmp}, beware of automatic variables. ANSI C says that ! 2593: automatic variables that are not declared @code{volatile} have undefined ! 2594: values after a @code{longjmp}. And this is all GNU CC promises to do, ! 2595: because it is very difficult to restore register variables correctly, and ! 2596: one of GNU CC's features is that it can put variables in registers without ! 2597: your asking it to. ! 2598: ! 2599: If you want a variable to be unaltered by @code{longjmp}, and you don't ! 2600: want to write @code{volatile} because old C compilers don't accept it, ! 2601: just take the address of the variable. If a variable's address is ever ! 2602: taken, even if just to compute it and ignore it, then the variable cannot ! 2603: go in a register: ! 2604: ! 2605: @example ! 2606: @{ ! 2607: int careful; ! 2608: &careful; ! 2609: @dots{} ! 2610: @} ! 2611: @end example ! 2612: ! 2613: Code compiled with GNU CC may call certain library routines. Most of ! 2614: them handle arithmetic for which there are no instructions. This ! 2615: includes multiply and divide on some machines, and floating point ! 2616: operations on any machine for which floating point support is disabled ! 2617: with @samp{-msoft-float}. Some standard parts of the C library, such as ! 2618: @code{bcopy} or @code{memcpy}, are also called automatically. The usual ! 2619: function call interface is used for calling the library routines. ! 2620: ! 2621: These library routines should be defined in the library @file{gnulib}, ! 2622: which GNU CC automatically searches whenever it links a program. On ! 2623: machines that have multiply and divide instructions, if hardware ! 2624: floating point is in use, normally @file{gnulib} is not needed, but it ! 2625: is searched just in case. ! 2626: ! 2627: Each arithmetic function is defined in @file{gnulib.c} to use the ! 2628: corresponding C arithmetic operator. As long as the file is compiled ! 2629: with another C compiler, which supports all the C arithmetic operators, ! 2630: this file will work portably. However, @file{gnulib.c} does not work if ! 2631: compiled with GNU CC, because each arithmetic function would compile ! 2632: into a call to itself! ! 2633: ! 2634: @node Passes, RTL, Interface, Top ! 2635: @chapter Passes and Files of the Compiler ! 2636: ! 2637: The overall control structure of the compiler is in @file{toplev.c}. This ! 2638: file is responsible for initialization, decoding arguments, opening and ! 2639: closing files, and sequencing the passes. ! 2640: ! 2641: The parsing pass is invoked only once, to parse the entire input. The RTL ! 2642: intermediate code for a function is generated as the function is parsed, a ! 2643: statement at a time. Each statement is read in as a syntax tree and then ! 2644: converted to RTL; then the storage for the tree for the statement is ! 2645: reclaimed. Storage for types (and the expressions for their sizes), ! 2646: declarations, and a representation of the binding contours and how they nest, ! 2647: remains until the function is finished being compiled; these are all needed ! 2648: to output the debugging information. ! 2649: ! 2650: Each time the parsing pass reads a complete function definition or ! 2651: top-level declaration, it calls the function ! 2652: @code{rest_of_compilation} or @code{rest_of_decl_compilation} in ! 2653: @file{toplev.c}, which are responsible for all further processing ! 2654: necessary, ending with output of the assembler language. All other ! 2655: compiler passes run, in sequence, within @code{rest_of_compilation}. ! 2656: When that function returns from compiling a function definition, the ! 2657: storage used for that function definition's compilation is entirely ! 2658: freed, unless it is an inline function (@pxref{Inline}). ! 2659: ! 2660: Here is a list of all the passes of the compiler and their source files. ! 2661: Also included is a description of where debugging dumps can be requested ! 2662: with @samp{-d} options. ! 2663: ! 2664: @itemize @bullet ! 2665: @item ! 2666: Parsing. This pass reads the entire text of a function definition, ! 2667: constructing partial syntax trees. This and RTL generation are no longer ! 2668: truly separate passes (formerly they were), but it is easier to think ! 2669: of them as separate. ! 2670: ! 2671: The tree representation does not entirely follow C syntax, because it is ! 2672: intended to support other languages as well. ! 2673: ! 2674: C data type analysis is also done in this pass, and every tree node ! 2675: that represents an expression has a data type attached. Variables are ! 2676: represented as declaration nodes. ! 2677: ! 2678: Constant folding and associative-law simplifications are also done ! 2679: during this pass. ! 2680: ! 2681: The source files for parsing are @file{c-parse.y}, @file{c-decl.c}, ! 2682: @file{c-typeck.c}, @file{c-convert.c}, @file{stor-layout.c}, ! 2683: @file{fold-const.c}, and @file{tree.c}. The last three files are ! 2684: intended to be language-independent. There are also header files ! 2685: @file{c-parse.h}, @file{c-tree.h}, @file{tree.h} and @file{tree.def}. ! 2686: The last two define the format of the tree representation.@refill ! 2687: ! 2688: @item ! 2689: RTL generation. This is the conversion of syntax tree into RTL code. ! 2690: It is actually done statement-by-statement during parsing, but for ! 2691: most purposes it can be thought of as a separate pass. ! 2692: ! 2693: This is where the bulk of target-parameter-dependent code is found, ! 2694: since often it is necessary for strategies to apply only when certain ! 2695: standard kinds of instructions are available. The purpose of named ! 2696: instruction patterns is to provide this information to the RTL ! 2697: generation pass. ! 2698: ! 2699: Optimization is done in this pass for @code{if}-conditions that are ! 2700: comparisons, boolean operations or conditional expressions. Tail ! 2701: recursion is detected at this time also. Decisions are made about how ! 2702: best to arrange loops and how to output @code{switch} statements. ! 2703: ! 2704: The source files for RTL generation are @file{stmt.c}, @file{expr.c}, ! 2705: @file{explow.c}, @file{expmed.c}, @file{optabs.c} and @file{emit-rtl.c}. ! 2706: Also, the file @file{insn-emit.c}, generated from the machine description ! 2707: by the program @code{genemit}, is used in this pass. The header files ! 2708: @file{expr.h} is used for communication within this pass.@refill ! 2709: ! 2710: The header files @file{insn-flags.h} and @file{insn-codes.h}, ! 2711: generated from the machine description by the programs @code{genflags} ! 2712: and @code{gencodes}, tell this pass which standard names are available ! 2713: for use and which patterns correspond to them.@refill ! 2714: ! 2715: Aside from debugging information output, none of the following passes ! 2716: refers to the tree structure representation of the function (only ! 2717: part of which is saved). ! 2718: ! 2719: The decision of whether the function can and should be expanded inline ! 2720: in its subsequent callers is made at the end of rtl generation. The ! 2721: function must meet certain criteria, currently related to the size of ! 2722: the function and the types and number of parameters it has. Note that ! 2723: this function may contain loops, recursive calls to itself ! 2724: (tail-recursive functions can be inlined!), gotos, in short, all ! 2725: constructs supported by GNU CC. ! 2726: ! 2727: The option @samp{-dr} causes a debugging dump of the RTL code after ! 2728: this pass. This dump file's name is made by appending @samp{.rtl} to ! 2729: the input file name. ! 2730: ! 2731: @item ! 2732: Jump optimization. This pass simplifies jumps to the following ! 2733: instruction, jumps across jumps, and jumps to jumps. It deletes ! 2734: unreferenced labels and unreachable code, except that unreachable code ! 2735: that contains a loop is not recognized as unreachable in this pass. ! 2736: (Such loops are deleted later in the basic block analysis.) ! 2737: ! 2738: Jump optimization is performed two or three times. The first time is ! 2739: immediately following RTL generation. The second time is after CSE, ! 2740: but only if CSE says repeated jump optimization is needed. The ! 2741: last time is right before the final pass. That time, cross-jumping ! 2742: and deletion of no-op move instructions are done together with the ! 2743: optimizations described above. ! 2744: ! 2745: The source file of this pass is @file{jump.c}. ! 2746: ! 2747: The option @samp{-dj} causes a debugging dump of the RTL code after ! 2748: this pass is run for the first time. This dump file's name is made by ! 2749: appending @samp{.jump} to the input file name. ! 2750: ! 2751: @item ! 2752: Register scan. This pass finds the first and last use of each ! 2753: register, as a guide for common subexpression elimination. Its source ! 2754: is in @file{regclass.c}. ! 2755: ! 2756: @item ! 2757: Common subexpression elimination. This pass also does constant ! 2758: propagation. Its source file is @file{cse.c}. If constant ! 2759: propagation causes conditional jumps to become unconditional or to ! 2760: become no-ops, jump optimization is run again when CSE is finished. ! 2761: ! 2762: The option @samp{-ds} causes a debugging dump of the RTL code after ! 2763: this pass. This dump file's name is made by appending @samp{.cse} to ! 2764: the input file name. ! 2765: ! 2766: @item ! 2767: Loop optimization. This pass moves constant expressions out of loops. ! 2768: Its source file is @file{loop.c}. ! 2769: ! 2770: The option @samp{-dL} causes a debugging dump of the RTL code after ! 2771: this pass. This dump file's name is made by appending @samp{.loop} to ! 2772: the input file name. ! 2773: ! 2774: @item ! 2775: Stupid register allocation is performed at this point in a ! 2776: nonoptimizing compilation. It does a little data flow analysis as ! 2777: well. When stupid register allocation is in use, the next pass ! 2778: executed is the reloading pass; the others in between are skipped. ! 2779: The source file is @file{stupid.c}. ! 2780: ! 2781: @item ! 2782: Data flow analysis (@file{flow.c}). This pass divides the program ! 2783: into basic blocks (and in the process deletes unreachable loops); then ! 2784: it computes which pseudo-registers are live at each point in the ! 2785: program, and makes the first instruction that uses a value point at ! 2786: the instruction that computed the value. ! 2787: ! 2788: This pass also deletes computations whose results are never used, and ! 2789: combines memory references with add or subtract instructions to make ! 2790: autoincrement or autodecrement addressing. ! 2791: ! 2792: The option @samp{-df} causes a debugging dump of the RTL code after ! 2793: this pass. This dump file's name is made by appending @samp{.flow} to ! 2794: the input file name. If stupid register allocation is in use, this ! 2795: dump file reflects the full results of such allocation. ! 2796: ! 2797: @item ! 2798: Instruction combination (@file{combine.c}). This pass attempts to ! 2799: combine groups of two or three instructions that are related by data ! 2800: flow into single instructions. It combines the RTL expressions for ! 2801: the instructions by substitution, simplifies the result using algebra, ! 2802: and then attempts to match the result against the machine description. ! 2803: ! 2804: The option @samp{-dc} causes a debugging dump of the RTL code after ! 2805: this pass. This dump file's name is made by appending @samp{.combine} ! 2806: to the input file name. ! 2807: ! 2808: @item ! 2809: Register class preferencing. The RTL code is scanned to find out ! 2810: which register class is best for each pseudo register. The source ! 2811: file is @file{regclass.c}. ! 2812: ! 2813: @item ! 2814: Local register allocation (@file{local-alloc.c}). This pass allocates ! 2815: hard registers to pseudo registers that are used only within one basic ! 2816: block. Because the basic block is linear, it can use fast and ! 2817: powerful techniques to do a very good job. ! 2818: ! 2819: The option @samp{-dl} causes a debugging dump of the RTL code after ! 2820: this pass. This dump file's name is made by appending @samp{.lreg} to ! 2821: the input file name. ! 2822: ! 2823: @item ! 2824: Global register allocation (@file{global-alloc.c}). This pass ! 2825: allocates hard registers for the remaining pseudo registers (those ! 2826: whose life spans are not contained in one basic block). ! 2827: ! 2828: @item ! 2829: Reloading. This pass renumbers pseudo registers with the hardware ! 2830: registers numbers they were allocated. Pseudo registers that did not ! 2831: get hard registers are replaced with stack slots. Then it finds ! 2832: instructions that are invalid because a value has failed to end up in ! 2833: a register, or has ended up in a register of the wrong kind. It fixes ! 2834: up these instructions by reloading the problematical values ! 2835: temporarily into registers. Additional instructions are generated to ! 2836: do the copying. ! 2837: ! 2838: Source files are @file{reload.c} and @file{reload1.c}, plus the header ! 2839: @file{reload.h} used for communication between them. ! 2840: ! 2841: The option @samp{-dg} causes a debugging dump of the RTL code after ! 2842: this pass. This dump file's name is made by appending @samp{.greg} to ! 2843: the input file name. ! 2844: ! 2845: @item ! 2846: Jump optimization is repeated, this time including cross-jumping ! 2847: and deletion of no-op move instructions. Machine-specific peephole ! 2848: optimizations are performed at the same time. ! 2849: ! 2850: The option @samp{-dJ} causes a debugging dump of the RTL code after ! 2851: this pass. This dump file's name is made by appending @samp{.jump2} ! 2852: to the input file name. ! 2853: ! 2854: @item ! 2855: Final. This pass outputs the assembler code for the function. It is ! 2856: also responsible for identifying spurious test and compare ! 2857: instructions. The function entry and exit sequences are generated ! 2858: directly as assembler code in this pass; they never exist as RTL. ! 2859: ! 2860: The source files are @file{final.c} plus @file{insn-output.c}; the ! 2861: latter is generated automatically from the machine description by the ! 2862: tool @file{genoutput}. The header file @file{conditions.h} is used ! 2863: for communication between these files. ! 2864: ! 2865: @item ! 2866: Debugging information output. This is run after final because it must ! 2867: output the stack slot offsets for pseudo registers that did not get ! 2868: hard registers. Source files are @file{dbxout.c} for DBX symbol table ! 2869: format and @file{symout.c} for GDB's own symbol table format. ! 2870: @end itemize ! 2871: ! 2872: Some additional files are used by all or many passes: ! 2873: ! 2874: @itemize @bullet ! 2875: @item ! 2876: Every pass uses @file{machmode.def}, which defines the machine modes. ! 2877: ! 2878: @item ! 2879: All the passes that work with RTL use the header files @file{rtl.h} ! 2880: and @file{rtl.def}, and subroutines in file @file{rtl.c}. The tools ! 2881: @code{gen*} also use these files to read and work with the machine ! 2882: description RTL. ! 2883: ! 2884: @item ! 2885: Several passes refer to the header file @file{insn-config.h} which ! 2886: contains a few parameters (C macro definitions) generated ! 2887: automatically from the machine description RTL by the tool ! 2888: @code{genconfig}. ! 2889: ! 2890: @item ! 2891: Several passes use the instruction recognizer, which consists of ! 2892: @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c} ! 2893: and @file{insn-extract.c} that are generated automatically from the ! 2894: machine description by the tools @file{genrecog} and ! 2895: @file{genextract}.@refill ! 2896: ! 2897: @item ! 2898: Several passes use the header files @file{regs.h} which defines the ! 2899: information recorded about pseudo register usage, and @file{basic-block.h} ! 2900: which defines the information recorded about basic blocks. ! 2901: ! 2902: @item ! 2903: @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector ! 2904: with a bit for each hard register, and some macros to manipulate it. ! 2905: This type is just @code{int} if the machine has few enough hard registers; ! 2906: otherwise it is an array of @code{int} and some of the macros expand ! 2907: into loops. ! 2908: @end itemize ! 2909: ! 2910: @node RTL, Machine Desc, Passes, Top ! 2911: @chapter RTL Representation ! 2912: ! 2913: Most of the work of the compiler is done on an intermediate representation ! 2914: called register transfer language. In this language, the instructions to be ! 2915: output are described, pretty much one by one, in an algebraic form that ! 2916: describes what the instruction does. ! 2917: ! 2918: RTL is inspired by Lisp lists. It has both an internal form, made up of ! 2919: structures that point at other structures, and a textual form that is used ! 2920: in the machine description and in printed debugging dumps. The textual ! 2921: form uses nested parentheses to indicate the pointers in the internal form. ! 2922: ! 2923: @menu ! 2924: * RTL Objects:: Expressions vs vectors vs strings vs integers. ! 2925: * Accessors:: Macros to access expression operands or vector elts. ! 2926: * Flags:: Other flags in an RTL expression. ! 2927: * Machine Modes:: Describing the size and format of a datum. ! 2928: * Constants:: Expressions with constant values. ! 2929: * Regs and Memory:: Expressions representing register contents or memory. ! 2930: * Arithmetic:: Expressions representing arithmetic on other expressions. ! 2931: * Comparisons:: Expressions representing comparison of expressions. ! 2932: * Bit Fields:: Expressions representing bit-fields in memory or reg. ! 2933: * Conversions:: Extending, truncating, floating or fixing. ! 2934: * RTL Declarations:: Declaring volatility, constancy, etc. ! 2935: * Side Effects:: Expressions for storing in registers, etc. ! 2936: * Incdec:: Embedded side-effects for autoincrement addressing. ! 2937: * Assembler:: Representing @code{asm} with operands. ! 2938: * Insns:: Expression types for entire insns. ! 2939: * Calls:: RTL representation of function call insns. ! 2940: * Sharing:: Some expressions are unique; others *must* be copied. ! 2941: @end menu ! 2942: ! 2943: @node RTL Objects, Accessors, RTL, RTL ! 2944: @section RTL Object Types ! 2945: ! 2946: RTL uses four kinds of objects: expressions, integers, strings and vectors. ! 2947: Expressions are the most important ones. An RTL expression (``RTX'', for ! 2948: short) is a C structure, but it is usually referred to with a pointer; a ! 2949: type that is given the typedef name @code{rtx}. ! 2950: ! 2951: An integer is simply an @code{int}, and a string is a @code{char *}. ! 2952: Within RTL code, strings appear only inside @samp{symbol_ref} expressions, ! 2953: but they appear in other contexts in the RTL expressions that make up ! 2954: machine descriptions. Their written form uses decimal digits. ! 2955: ! 2956: A string is a sequence of characters. In core it is represented as a ! 2957: @code{char *} in usual C fashion, and it is written in C syntax as well. ! 2958: However, strings in RTL may never be null. If you write an empty string in ! 2959: a machine description, it is represented in core as a null pointer rather ! 2960: than as a pointer to a null character. In certain contexts, these null ! 2961: pointers instead of strings are valid. ! 2962: ! 2963: A vector contains an arbitrary, specified number of pointers to ! 2964: expressions. The number of elements in the vector is explicitly present in ! 2965: the vector. The written form of a vector consists of square brackets ! 2966: (@samp{[@dots{}]}) surrounding the elements, in sequence and with ! 2967: whitespace separating them. Vectors of length zero are not created; null ! 2968: pointers are used instead. ! 2969: ! 2970: Expressions are classified by @dfn{expression codes} (also called RTX ! 2971: codes). The expression code is a name defined in @file{rtl.def}, which is ! 2972: also (in upper case) a C enumeration constant. The possible expression ! 2973: codes and their meanings are machine-independent. The code of an RTX can ! 2974: be extracted with the macro @code{GET_CODE (@var{x})} and altered with ! 2975: @code{PUT_CODE (@var{x}, @var{newcode})}. ! 2976: ! 2977: The expression code determines how many operands the expression contains, ! 2978: and what kinds of objects they are. In RTL, unlike Lisp, you cannot tell ! 2979: by looking at an operand what kind of object it is. Instead, you must know ! 2980: from its context---from the expression code of the containing expression. ! 2981: For example, in an expression of code @samp{subreg}, the first operand is ! 2982: to be regarded as an expression and the second operand as an integer. In ! 2983: an expression of code @samp{plus}, there are two operands, both of which ! 2984: are to be regarded as expressions. In a @samp{symbol_ref} expression, ! 2985: there is one operand, which is to be regarded as a string. ! 2986: ! 2987: Expressions are written as parentheses containing the name of the ! 2988: expression type, its flags and machine mode if any, and then the operands ! 2989: of the expression (separated by spaces). ! 2990: ! 2991: Expression code names in the @samp{md} file are written in lower case, ! 2992: but when they appear in C code they are written in upper case. In this ! 2993: manual, they are shown as follows: @samp{const_int}. ! 2994: ! 2995: In a few contexts a null pointer is valid where an expression is normally ! 2996: wanted. The written form of this is @samp{(nil)}. ! 2997: ! 2998: @node Accessors, Flags, RTL Objects, RTL ! 2999: @section Access to Operands ! 3000: ! 3001: For each expression type @file{rtl.def} specifies the number of contained ! 3002: objects and their kinds, with four possibilities: @samp{e} for expression ! 3003: (actually a pointer to an expression), @samp{i} for integer, @samp{s} for ! 3004: string, and @samp{E} for vector of expressions. The sequence of letters ! 3005: for an expression code is called its @dfn{format}. Thus, the format of ! 3006: @samp{subreg} is @samp{ei}.@refill ! 3007: ! 3008: Two other format characters are used occasionally: @samp{u} and @samp{0}. ! 3009: @samp{u} is equivalent to @samp{e} except that it is printed differently in ! 3010: debugging dumps, and @samp{0} means a slot whose contents do not fit any ! 3011: normal category. @samp{0} slots are not printed at all in dumps, and are ! 3012: often used in special ways by small parts of the compiler.@refill ! 3013: ! 3014: There are macros to get the number of operands and the format of an ! 3015: expression code: ! 3016: ! 3017: @table @code ! 3018: @item GET_RTX_LENGTH (@var{code}) ! 3019: Number of operands of an RTX of code @var{code}. ! 3020: ! 3021: @item GET_RTX_FORMAT (@var{code}) ! 3022: The format of an RTX of code @var{code}, as a C string. ! 3023: @end table ! 3024: ! 3025: Operands of expressions are accessed using the macros @code{XEXP}, ! 3026: @code{XINT} and @code{XSTR}. Each of these macros takes two arguments: an ! 3027: expression-pointer (RTX) and an operand number (counting from zero). ! 3028: Thus,@refill ! 3029: ! 3030: @example ! 3031: XEXP (@var{x}, 2) ! 3032: @end example ! 3033: ! 3034: @noindent ! 3035: accesses operand 2 of expression @var{x}, as an expression. ! 3036: ! 3037: @example ! 3038: XINT (@var{x}, 2) ! 3039: @end example ! 3040: ! 3041: @noindent ! 3042: accesses the same operand as an integer. @code{XSTR}, used in the same ! 3043: fashion, would access it as a string. ! 3044: ! 3045: Any operand can be accessed as an integer, as an expression or as a string. ! 3046: You must choose the correct method of access for the kind of value actually ! 3047: stored in the operand. You would do this based on the expression code of ! 3048: the containing expression. That is also how you would know how many ! 3049: operands there are. ! 3050: ! 3051: For example, if @var{x} is a @samp{subreg} expression, you know that it has ! 3052: two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)} ! 3053: and @code{XINT (@var{x}, 1)}. If you did @code{XINT (@var{x}, 0)}, you ! 3054: would get the address of the expression operand but cast as an integer; ! 3055: that might occasionally be useful, but it would be cleaner to write ! 3056: @code{(int) XEXP (@var{x}, 0)}. @code{XEXP (@var{x}, 1)} would also ! 3057: compile without error, and would return the second, integer operand cast as ! 3058: an expression pointer, which would probably result in a crash when ! 3059: accessed. Nothing stops you from writing @code{XEXP (@var{x}, 28)} either, ! 3060: but this will access memory past the end of the expression with ! 3061: unpredictable results.@refill ! 3062: ! 3063: Access to operands which are vectors is more complicated. You can use the ! 3064: macro @code{XVEC} to get the vector-pointer itself, or the macros ! 3065: @code{XVECEXP} and @code{XVECLEN} to access the elements and length of a ! 3066: vector. ! 3067: ! 3068: @table @code ! 3069: @item XVEC (@var{exp}, @var{idx}) ! 3070: Access the vector-pointer which is operand number @var{idx} in @var{exp}. ! 3071: ! 3072: @item XVECLEN (@var{exp}, @var{idx}) ! 3073: Access the length (number of elements) in the vector which is ! 3074: in operand number @var{idx} in @var{exp}. This value is an @code{int}. ! 3075: ! 3076: @item XVECEXP (@var{exp}, @var{idx}, @var{eltnum}) ! 3077: Access element number @var{eltnum} in the vector which is ! 3078: in operand number @var{idx} in @var{exp}. This value is an RTX. ! 3079: ! 3080: It is up to you to make sure that @var{eltnum} is not negative ! 3081: and is less than @code{XVECLEN (@var{exp}, @var{idx})}. ! 3082: @end table ! 3083: ! 3084: All the macros defined in this section expand into lvalues and therefore ! 3085: can be used to assign the operands, lengths and vector elements as well as ! 3086: to access them. ! 3087: ! 3088: @node Flags, Machine Modes, Accessors, RTL ! 3089: @section Flags in an RTL Expression ! 3090: ! 3091: RTL expressions contain several flags (one-bit bit-fields) that are used ! 3092: in certain types of expression. Most often they are accessed with the ! 3093: following macros: ! 3094: ! 3095: @table @code ! 3096: @item MEM_VOLATILE_P (@var{x}) ! 3097: In @samp{mem} expressions, nonzero for volatile memory references. ! 3098: Stored in the @code{volatil} field and printed as @samp{/v}. ! 3099: ! 3100: @item MEM_IN_STRUCT_P (@var{x}) ! 3101: In @samp{mem} expressions, nonzero for reference to an entire ! 3102: structure, union or array, or to a component of one. Zero for ! 3103: references to a scalar variable or through a pointer to a scalar. ! 3104: Stored in the @code{in_struct} field and printed as @samp{/s}. ! 3105: ! 3106: @item REG_USER_VAR_P (@var{x}) ! 3107: In a @samp{reg}, nonzero if it corresponds to a variable present in ! 3108: the user's source code. Zero for temporaries generated internally by ! 3109: the compiler. Stored in the @code{volatil} field and printed as ! 3110: @samp{/v}. ! 3111: ! 3112: @item REG_FUNCTION_VALUE_P (@var{x}) ! 3113: Nonzero in a @samp{reg} if it is the place in which this function's ! 3114: value is going to be returned. (This happens only in a hard ! 3115: register.) Stored in the @code{integrated} field and printed as ! 3116: @samp{/i}. ! 3117: ! 3118: The same hard register may be used also for collecting the values of ! 3119: functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero ! 3120: in this kind of use. ! 3121: ! 3122: @item RTX_UNCHANGING_P (@var{x}) ! 3123: Nonzero in a @samp{reg} or @samp{mem} if the value is not changed ! 3124: explicitly by the current function. (If it is a memory reference then ! 3125: it may be changed by other functions or by aliasing.) Stored in the ! 3126: @code{unchanging} field and printed as @samp{/u}. ! 3127: ! 3128: @item RTX_INTEGRATED_P (@var{insn}) ! 3129: Nonzero in an insn if it resulted from an in-line function call. ! 3130: Stored in the @code{integrated} field and printed as @samp{/i}. This ! 3131: may be deleted; nothing currently depends on it. ! 3132: ! 3133: @item INSN_DELETED_P (@var{insn}) ! 3134: In an insn, nonzero if the insn has been deleted. Stored in the ! 3135: @code{volatil} field and printed as @samp{/v}. ! 3136: ! 3137: @item CONSTANT_POOL_ADDRESS_P (@var{x}) ! 3138: Nonzero in a @samp{symbol_ref} if it refers to part of the current ! 3139: function's ``constants pool''. These are addresses close to the ! 3140: beginning of the function, and GNU CC assumes they can be addressed ! 3141: directly (perhaps with the help of base registers). Stored in the ! 3142: @code{unchanging} field and printed as @samp{/u}. ! 3143: @end table ! 3144: ! 3145: These are the fields which the above macros refer to: ! 3146: ! 3147: @table @code ! 3148: @item used ! 3149: This flag is used only momentarily, at the end of RTL generation for a ! 3150: function, to count the number of times an expression appears in insns. ! 3151: Expressions that appear more than once are copied, according to the ! 3152: rules for shared structure (@pxref{Sharing}). ! 3153: ! 3154: @item volatil ! 3155: This flag is used in @samp{mem} and @samp{reg} expressions and in insns. ! 3156: In RTL dump files, it is printed as @samp{/v}. ! 3157: ! 3158: In a @samp{mem} expression, it is 1 if the memory reference is volatile. ! 3159: Volatile memory references may not be deleted, reordered or combined. ! 3160: ! 3161: In a @samp{reg} expression, it is 1 if the value is a user-level variable. ! 3162: 0 indicates an internal compiler temporary. ! 3163: ! 3164: In an insn, 1 means the insn has been deleted. ! 3165: ! 3166: @item in_struct ! 3167: This flag is used in @samp{mem} expressions. It is 1 if the memory ! 3168: datum referred to is all or part of a structure or array; 0 if it is (or ! 3169: might be) a scalar variable. A reference through a C pointer has 0 ! 3170: because the pointer might point to a scalar variable. ! 3171: ! 3172: This information allows the compiler to determine something about possible ! 3173: cases of aliasing. ! 3174: ! 3175: In an RTL dump, this flag is represented as @samp{/s}. ! 3176: ! 3177: @item unchanging ! 3178: This flag is used in @samp{reg} and @samp{mem} expressions. 1 means ! 3179: that the value of the expression never changes (at least within the ! 3180: current function). ! 3181: ! 3182: In an RTL dump, this flag is represented as @samp{/u}. ! 3183: ! 3184: @item integrated ! 3185: In some kinds of expressions, including insns, this flag means the ! 3186: rtl was produced by procedure integration. ! 3187: ! 3188: In a @samp{reg} expression, this flag indicates the register ! 3189: containing the value to be returned by the current function. On ! 3190: machines that pass parameters in registers, the same register number ! 3191: may be used for parameters as well, but this flag is not set on such ! 3192: uses. ! 3193: @end table ! 3194: ! 3195: @node Machine Modes, Constants, Flags, RTL ! 3196: @section Machine Modes ! 3197: ! 3198: A machine mode describes a size of data object and the representation used ! 3199: for it. In the C code, machine modes are represented by an enumeration ! 3200: type, @code{enum machine_mode}, defined in @file{machmode.def}. Each RTL ! 3201: expression has room for a machine mode and so do certain kinds of tree ! 3202: expressions (declarations and types, to be precise). ! 3203: ! 3204: In debugging dumps and machine descriptions, the machine mode of an RTL ! 3205: expression is written after the expression code with a colon to separate ! 3206: them. The letters @samp{mode} which appear at the end of each machine mode ! 3207: name are omitted. For example, @code{(reg:SI 38)} is a @samp{reg} ! 3208: expression with machine mode @code{SImode}. If the mode is ! 3209: @code{VOIDmode}, it is not written at all. ! 3210: ! 3211: Here is a table of machine modes. ! 3212: ! 3213: @table @code ! 3214: @item QImode ! 3215: ``Quarter-Integer'' mode represents a single byte treated as an integer. ! 3216: ! 3217: @item HImode ! 3218: ``Half-Integer'' mode represents a two-byte integer. ! 3219: ! 3220: @item SImode ! 3221: ``Single Integer'' mode represents a four-byte integer. ! 3222: ! 3223: @item DImode ! 3224: ``Double Integer'' mode represents an eight-byte integer. ! 3225: ! 3226: @item TImode ! 3227: ``Tetra Integer'' (?) mode represents a sixteen-byte integer. ! 3228: ! 3229: @item SFmode ! 3230: ``Single Floating'' mode represents a single-precision (four byte) floating ! 3231: point number. ! 3232: ! 3233: @item DFmode ! 3234: ``Double Floating'' mode represents a double-precision (eight byte) floating ! 3235: point number. ! 3236: ! 3237: @item TFmode ! 3238: ``Tetra Floating'' mode represents a quadruple-precision (sixteen byte) ! 3239: floating point number. ! 3240: ! 3241: @item BLKmode ! 3242: ``Block'' mode represents values that are aggregates to which none of ! 3243: the other modes apply. In RTL, only memory references can have this mode, ! 3244: and only if they appear in string-move or vector instructions. On machines ! 3245: which have no such instructions, @code{BLKmode} will not appear in RTL. ! 3246: ! 3247: @item VOIDmode ! 3248: Void mode means the absence of a mode or an unspecified mode. ! 3249: For example, RTL expressions of code @samp{const_int} have mode ! 3250: @code{VOIDmode} because they can be taken to have whatever mode the context ! 3251: requires. In debugging dumps of RTL, @code{VOIDmode} is expressed by ! 3252: the absence of any mode. ! 3253: ! 3254: @item EPmode ! 3255: ``Entry Pointer'' mode is intended to be used for function variables in ! 3256: Pascal and other block structured languages. Such values contain ! 3257: both a function address and a static chain pointer for access to ! 3258: automatic variables of outer levels. This mode is only partially ! 3259: implemented since C does not use it. ! 3260: ! 3261: @item CSImode@r{, @dots{}} ! 3262: ``Complex Single Integer'' mode stands for a complex number represented ! 3263: as a pair of @code{SImode} integers. Any of the integer and floating modes ! 3264: may have @samp{C} prefixed to its name to obtain a complex number mode. ! 3265: For example, there are @code{CQImode}, @code{CSFmode}, and @code{CDFmode}. ! 3266: Since C does not support complex numbers, these machine modes are only ! 3267: partially implemented. ! 3268: ! 3269: @item BImode ! 3270: This is the machine mode of a bit-field in a structure. It is used ! 3271: only in the syntax tree, never in RTL, and in the syntax tree it appears ! 3272: only in declaration nodes. In C, it appears only in @code{FIELD_DECL} ! 3273: nodes for structure fields defined with a bit size. ! 3274: @end table ! 3275: ! 3276: The machine description defines @code{Pmode} as a C macro which expands ! 3277: into the machine mode used for addresses. Normally this is @code{SImode}. ! 3278: ! 3279: The only modes which a machine description @i{must} support are ! 3280: @code{QImode}, @code{SImode}, @code{SFmode} and @code{DFmode}. The ! 3281: compiler will attempt to use @code{DImode} for two-word structures and ! 3282: unions, but it would not be hard to program it to avoid this. Likewise, ! 3283: you can arrange for the C type @code{short int} to avoid using ! 3284: @code{HImode}. In the long term it would be desirable to make the set of ! 3285: available machine modes machine-dependent and eliminate all assumptions ! 3286: about specific machine modes or their uses from the machine-independent ! 3287: code of the compiler. ! 3288: ! 3289: Here are some C macros that relate to machine modes: ! 3290: ! 3291: @table @code ! 3292: @item GET_MODE (@var{x}) ! 3293: Returns the machine mode of the RTX @var{x}. ! 3294: ! 3295: @item PUT_MODE (@var{x}, @var{newmode}) ! 3296: Alters the machine mode of the RTX @var{x} to be @var{newmode}. ! 3297: ! 3298: @item GET_MODE_SIZE (@var{m}) ! 3299: Returns the size in bytes of a datum of mode @var{m}. ! 3300: ! 3301: @item GET_MODE_BITSIZE (@var{m}) ! 3302: Returns the size in bits of a datum of mode @var{m}. ! 3303: ! 3304: @item GET_MODE_UNIT_SIZE (@var{m}) ! 3305: Returns the size in bits of the subunits of a datum of mode @var{m}. ! 3306: This is the same as @code{GET_MODE_SIZE} except in the case of ! 3307: complex modes and @code{EPmode}. For them, the unit size is the ! 3308: size of the real or imaginary part, or the size of the function ! 3309: pointer or the context pointer. ! 3310: @end table ! 3311: ! 3312: @node Constants, Regs and Memory, Machine Modes, RTL ! 3313: @section Constant Expression Types ! 3314: ! 3315: The simplest RTL expressions are those that represent constant values. ! 3316: ! 3317: @table @code ! 3318: @item (const_int @var{i}) ! 3319: This type of expression represents the integer value @var{i}. @var{i} ! 3320: is customarily accessed with the macro @code{INTVAL} as in ! 3321: @code{INTVAL (@var{exp})}, which is equivalent to @code{XINT (@var{exp}, 0)}. ! 3322: ! 3323: There is only one expression object for the integer value zero; ! 3324: it is the value of the variable @code{const0_rtx}. Likewise, the ! 3325: only expression for integer value one is found in @code{const1_rtx}. ! 3326: Any attempt to create an expression of code @samp{const_int} and ! 3327: value zero or one will return @code{const0_rtx} or @code{const1_rtx} ! 3328: as appropriate. ! 3329: ! 3330: @item (const_double:@var{m} @var{i0} @var{i1}) ! 3331: Represents a 64-bit constant or mode @var{m}. All floating point ! 3332: constants are represented in this way, and so are 64-bit @code{DImode} ! 3333: integer constants. ! 3334: ! 3335: The two integers @var{i0} and @var{i1} together contain the bits of ! 3336: the value. If the constant is floating point (either single or double ! 3337: precision), then they represent a @code{double}. To convert them to a ! 3338: @code{double}, do ! 3339: ! 3340: @example ! 3341: union @{ double d; int i[2];@} u; ! 3342: u.i[0] = XINT (x, 0); ! 3343: u.i[1] = XINT (x, 1); ! 3344: @end example ! 3345: ! 3346: @noindent ! 3347: and then refer to @code{u.d}. ! 3348: ! 3349: The global variables @code{dconst0_rtx} and @code{fconst0_rtx} hold ! 3350: @samp{const_double} expressions with value 0, in modes @code{DFmode} and ! 3351: @code{SFmode}, respectively. ! 3352: ! 3353: @item (symbol_ref @var{symbol}) ! 3354: Represents the value of an assembler label for data. @var{symbol} is ! 3355: a string that describes the name of the assembler label. If it starts ! 3356: with a @samp{*}, the label is the rest of @var{symbol} not including ! 3357: the @samp{*}. Otherwise, the label is @var{symbol}, prefixed with ! 3358: @samp{_}. ! 3359: ! 3360: @item (label_ref @var{label}) ! 3361: Represents the value of an assembler label for code. It contains one ! 3362: operand, an expression, which must be a @samp{code_label} that appears ! 3363: in the instruction sequence to identify the place where the label ! 3364: should go. ! 3365: ! 3366: The reason for using a distinct expression type for code label ! 3367: references is so that jump optimization can distinguish them. ! 3368: ! 3369: @item (const @var{exp}) ! 3370: Represents a constant that is the result of an assembly-time ! 3371: arithmetic computation. The operand, @var{exp}, is an expression that ! 3372: contains only constants (@samp{const_int}, @samp{symbol_ref} and ! 3373: @samp{label_ref} expressions) combined with @samp{plus} and ! 3374: @samp{minus}. However, not all combinations are valid, since the ! 3375: assembler cannot do arbitrary arithmetic on relocatable symbols. ! 3376: @end table ! 3377: ! 3378: @node Regs and Memory, Arithmetic, Constants, RTL ! 3379: @section Registers and Memory ! 3380: ! 3381: Here are the RTL expression types for describing access to machine ! 3382: registers and to main memory. ! 3383: ! 3384: @table @code ! 3385: @item (reg:@var{m} @var{n}) ! 3386: For small values of the integer @var{n} (less than ! 3387: @code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine ! 3388: register number @var{n}: a @dfn{hard register}. For larger values of ! 3389: @var{n}, it stands for a temporary value or @dfn{pseudo register}. ! 3390: The compiler's strategy is to generate code assuming an unlimited ! 3391: number of such pseudo registers, and later convert them into hard ! 3392: registers or into memory references. ! 3393: ! 3394: The symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine ! 3395: description, since the number of hard registers on the machine is an ! 3396: invariant characteristic of the machine. Note, however, that not ! 3397: all of the machine registers must be general registers. All the ! 3398: machine registers that can be used for storage of data are given ! 3399: hard register numbers, even those that can be used only in certain ! 3400: instructions or can hold only certain types of data. ! 3401: ! 3402: Each pseudo register number used in a function's RTL code is ! 3403: represented by a unique @samp{reg} expression. ! 3404: ! 3405: @var{m} is the machine mode of the reference. It is necessary because ! 3406: machines can generally refer to each register in more than one mode. ! 3407: For example, a register may contain a full word but there may be ! 3408: instructions to refer to it as a half word or as a single byte, as ! 3409: well as instructions to refer to it as a floating point number of ! 3410: various precisions. ! 3411: ! 3412: Even for a register that the machine can access in only one mode, ! 3413: the mode must always be specified. ! 3414: ! 3415: A hard register may be accessed in various modes throughout one ! 3416: function, but each pseudo register is given a natural mode ! 3417: and is accessed only in that mode. When it is necessary to describe ! 3418: an access to a pseudo register using a nonnatural mode, a @samp{subreg} ! 3419: expression is used. ! 3420: ! 3421: A @samp{reg} expression with a machine mode that specifies more than ! 3422: one word of data may actually stand for several consecutive registers. ! 3423: If in addition the register number specifies a hardware register, then ! 3424: it actually represents several consecutive hardware registers starting ! 3425: with the specified one. ! 3426: ! 3427: Such multi-word hardware register @samp{reg} expressions may not be live ! 3428: across the boundary of a basic block. The lifetime analysis pass does not ! 3429: know how to record properly that several consecutive registers are ! 3430: actually live there, and therefore register allocation would be confused. ! 3431: The CSE pass must go out of its way to make sure the situation does ! 3432: not arise. ! 3433: ! 3434: @item (subreg:@var{m} @var{reg} @var{wordnum}) ! 3435: @samp{subreg} expressions are used to refer to a register in a machine ! 3436: mode other than its natural one, or to refer to one register of ! 3437: a multi-word @samp{reg} that actually refers to several registers. ! 3438: ! 3439: Each pseudo-register has a natural mode. If it is necessary to ! 3440: operate on it in a different mode---for example, to perform a fullword ! 3441: move instruction on a pseudo-register that contains a single byte--- ! 3442: the pseudo-register must be enclosed in a @samp{subreg}. In such ! 3443: a case, @var{wordnum} is zero. ! 3444: ! 3445: The other use of @samp{subreg} is to extract the individual registers ! 3446: of a multi-register value. Machine modes such as @code{DImode} and ! 3447: @code{EPmode} indicate values longer than a word, values which usually ! 3448: require two consecutive registers. To access one of the registers, ! 3449: use a @samp{subreg} with mode @code{SImode} and a @var{wordnum} that ! 3450: says which register. ! 3451: ! 3452: The compilation parameter @code{WORDS_BIG_ENDIAN}, if defined, says ! 3453: that word number zero is the most significant part; otherwise, it is ! 3454: the least significant part. ! 3455: ! 3456: Between the combiner pass and the reload pass, it is possible to have ! 3457: a @samp{subreg} which contains a @samp{mem} instead of a @samp{reg} as ! 3458: its first operand. The reload pass eliminates these cases by ! 3459: reloading the @samp{mem} into a suitable register. ! 3460: ! 3461: Note that it is not valid to access a @code{DFmode} value in @code{SFmode} ! 3462: using a @samp{subreg}. On some machines the most significant part of a ! 3463: @code{DFmode} value does not have the same format as a single-precision ! 3464: floating value. ! 3465: ! 3466: @item (cc0) ! 3467: This refers to the machine's condition code register. It has no ! 3468: operands and may not have a machine mode. It may be validly used in ! 3469: only two contexts: as the destination of an assignment (in test and ! 3470: compare instructions) and in comparison operators comparing against ! 3471: zero (@samp{const_int} with value zero; that is to say, ! 3472: @code{const0_rtx}). ! 3473: ! 3474: There is only one expression object of code @samp{cc0}; it is the ! 3475: value of the variable @code{cc0_rtx}. Any attempt to create an ! 3476: expression of code @samp{cc0} will return @code{cc0_rtx}. ! 3477: ! 3478: One special thing about the condition code register is that ! 3479: instructions can set it implicitly. On many machines, nearly all ! 3480: instructions set the condition code based on the value that they ! 3481: compute or store. It is not necessary to record these actions ! 3482: explicitly in the RTL because the machine description includes a ! 3483: prescription for recognizing the instructions that do so (by means of ! 3484: the macro @code{NOTICE_UPDATE_CC}). Only instructions whose sole ! 3485: purpose is to set the condition code, and instructions that use the ! 3486: condition code, need mention @code{(cc0)}. ! 3487: ! 3488: @item (pc) ! 3489: This represents the machine's program counter. It has no operands and ! 3490: may not have a machine mode. @code{(pc)} may be validly used only in ! 3491: certain specific contexts in jump instructions. ! 3492: ! 3493: There is only one expression object of code @samp{pc}; it is the value ! 3494: of the variable @code{pc_rtx}. Any attempt to create an expression of ! 3495: code @samp{pc} will return @code{pc_rtx}. ! 3496: ! 3497: All instructions that do not jump alter the program counter implicitly ! 3498: by incrementing it, but there is no need to mention this in the RTL. ! 3499: ! 3500: @item (mem:@var{m} @var{addr}) ! 3501: This RTX represents a reference to main memory at an address ! 3502: represented by the expression @var{addr}. @var{m} specifies how large ! 3503: a unit of memory is accessed. ! 3504: @end table ! 3505: ! 3506: @node Arithmetic, Comparisons, Regs and Memory, RTL ! 3507: @section RTL Expressions for Arithmetic ! 3508: ! 3509: @table @code ! 3510: @item (plus:@var{m} @var{x} @var{y}) ! 3511: Represents the sum of the values represented by @var{x} and @var{y} ! 3512: carried out in machine mode @var{m}. This is valid only if ! 3513: @var{x} and @var{y} both are valid for mode @var{m}. ! 3514: ! 3515: @item (minus:@var{m} @var{x} @var{y}) ! 3516: Like @samp{plus} but represents subtraction. ! 3517: ! 3518: @item (minus @var{x} @var{y}) ! 3519: Represents the result of subtracting @var{y} from @var{x} ! 3520: for purposes of comparison. The absence of a machine mode ! 3521: in the @samp{minus} expression indicates that the result is ! 3522: computed without overflow, as if with infinite precision. ! 3523: ! 3524: Of course, machines can't really subtract with infinite precision. ! 3525: However, they can pretend to do so when only the sign of the ! 3526: result will be used, which is the case when the result is stored ! 3527: in @code{(cc0)}. And that is the only way this kind of expression ! 3528: may validly be used: as a value to be stored in the condition codes. ! 3529: ! 3530: @item (neg:@var{m} @var{x}) ! 3531: Represents the negation (subtraction from zero) of the value ! 3532: represented by @var{x}, carried out in mode @var{m}. @var{x} must be ! 3533: valid for mode @var{m}. ! 3534: ! 3535: @item (mult:@var{m} @var{x} @var{y}) ! 3536: Represents the signed product of the values represented by @var{x} and ! 3537: @var{y} carried out in machine mode @var{m}. If ! 3538: @var{x} and @var{y} are both valid for mode @var{m}, this is ordinary ! 3539: size-preserving multiplication. Alternatively, both @var{x} and @var{y} ! 3540: may be valid for a different, narrower mode. This represents the ! 3541: kind of multiplication that generates a product wider than the operands. ! 3542: Widening multiplication and same-size multiplication are completely ! 3543: distinct and supported by different machine instructions; machines may ! 3544: support one but not the other.@refill ! 3545: ! 3546: @samp{mult} may be used for floating point division as well. ! 3547: Then @var{m} is a floating point machine mode. ! 3548: ! 3549: @item (umult:@var{m} @var{x} @var{y}) ! 3550: Like @samp{mult} but represents unsigned multiplication. It may be ! 3551: used in both same-size and widening forms, like @samp{mult}. ! 3552: @samp{umult} is used only for fixed-point multiplication. ! 3553: ! 3554: @item (div:@var{m} @var{x} @var{y}) ! 3555: Represents the quotient in signed division of @var{x} by @var{y}, ! 3556: carried out in machine mode @var{m}. If @var{m} is a floating-point ! 3557: mode, it represents the exact quotient; otherwise, the integerized ! 3558: quotient. If @var{x} and @var{y} are both valid for mode @var{m}, ! 3559: this is ordinary size-preserving division. Some machines have ! 3560: division instructions in which the operands and quotient widths are ! 3561: not all the same; such instructions are represented by @samp{div} ! 3562: expressions in which the machine modes are not all the same. ! 3563: ! 3564: @item (udiv:@var{m} @var{x} @var{y}) ! 3565: Like @samp{div} but represents unsigned division. ! 3566: ! 3567: @item (mod:@var{m} @var{x} @var{y}) ! 3568: @itemx (umod:@var{m} @var{x} @var{y}) ! 3569: Like @samp{div} and @samp{udiv} but represent the remainder instead of ! 3570: the quotient. ! 3571: ! 3572: @item (not:@var{m} @var{x}) ! 3573: Represents the bitwise complement of the value represented by @var{x}, ! 3574: carried out in mode @var{m}, which must be a fixed-point machine mode. ! 3575: @var{x} must be valid for mode @var{m}, which must be a fixed-point mode. ! 3576: ! 3577: @item (and:@var{m} @var{x} @var{y}) ! 3578: Represents the bitwise logical-and of the values represented by ! 3579: @var{x} and @var{y}, carried out in machine mode @var{m}. This is ! 3580: valid only if @var{x} and @var{y} both are valid for mode @var{m}, ! 3581: which must be a fixed-point mode. ! 3582: ! 3583: @item (ior:@var{m} @var{x} @var{y}) ! 3584: Represents the bitwise inclusive-or of the values represented by ! 3585: @var{x} and @var{y}, carried out in machine mode @var{m}. This is ! 3586: valid only if @var{x} and @var{y} both are valid for mode @var{m}, ! 3587: which must be a fixed-point mode. ! 3588: ! 3589: @item (xor:@var{m} @var{x} @var{y}) ! 3590: Represents the bitwise exclusive-or of the values represented by ! 3591: @var{x} and @var{y}, carried out in machine mode @var{m}. This is ! 3592: valid only if @var{x} and @var{y} both are valid for mode @var{m}, ! 3593: which must be a fixed-point mode. ! 3594: ! 3595: @item (lshift:@var{m} @var{x} @var{c}) ! 3596: Represents the result of logically shifting @var{x} left by @var{c} ! 3597: places. @var{x} must be valid for the mode @var{m}, a fixed-point ! 3598: machine mode. @var{c} must be valid for a fixed-point mode; ! 3599: which mode is determined by the mode called for in the machine ! 3600: description entry for the left-shift instruction. For example, ! 3601: on the Vax, the mode of @var{c} is @code{QImode} regardless of @var{m}. ! 3602: ! 3603: On some machines, negative values of @var{c} may be meaningful; this ! 3604: is why logical left shift and arithmetic left shift are distinguished. ! 3605: For example, Vaxes have no right-shift instructions, and right shifts ! 3606: are represented as left-shift instructions whose counts happen ! 3607: to be negative constants or else computed (in a previous instruction) ! 3608: by negation. ! 3609: ! 3610: @item (ashift:@var{m} @var{x} @var{c}) ! 3611: Like @samp{lshift} but for arithmetic left shift. ! 3612: ! 3613: @item (lshiftrt:@var{m} @var{x} @var{c}) ! 3614: @itemx (ashiftrt:@var{m} @var{x} @var{c}) ! 3615: Like @samp{lshift} and @samp{ashift} but for right shift. ! 3616: ! 3617: @item (rotate:@var{m} @var{x} @var{c}) ! 3618: @itemx (rotatert:@var{m} @var{x} @var{c}) ! 3619: Similar but represent left and right rotate. ! 3620: ! 3621: @item (abs:@var{m} @var{x}) ! 3622: Represents the absolute value of @var{x}, computed in mode @var{m}. ! 3623: @var{x} must be valid for @var{m}. ! 3624: ! 3625: @item (sqrt:@var{m} @var{x}) ! 3626: Represents the square root of @var{x}, computed in mode @var{m}. ! 3627: @var{x} must be valid for @var{m}. Most often @var{m} will be ! 3628: a floating point mode. ! 3629: ! 3630: @item (ffs:@var{m} @var{x}) ! 3631: Represents the one plus the index of the least significant 1-bit in ! 3632: @var{x}, represented as an integer of mode @var{m}. (The value is ! 3633: zero if @var{x} is zero.) The mode of @var{x} need not be @var{m}; ! 3634: depending on the target machine, various mode combinations may be ! 3635: valid. ! 3636: @end table ! 3637: ! 3638: @node Comparisons, Bit Fields, Arithmetic, RTL ! 3639: @section Comparison Operations ! 3640: ! 3641: Comparison operators test a relation on two operands and are considered to ! 3642: represent the value 1 if the relation holds, or zero if it does not. The ! 3643: mode of the comparison is determined by the operands; they must both be ! 3644: valid for a common machine mode. A comparison with both operands constant ! 3645: would be invalid as the machine mode could not be deduced from it, but such ! 3646: a comparison should never exist in RTL due to constant folding. ! 3647: ! 3648: Inequality comparisons come in two flavors, signed and unsigned. Thus, ! 3649: there are distinct expression codes @samp{gt} and @samp{gtu} for signed and ! 3650: unsigned greater-than. These can produce different results for the same ! 3651: pair of integer values: for example, 1 is signed greater-than -1 but not ! 3652: unsigned greater-than, because -1 when regarded as unsigned is actually ! 3653: @code{0xffffffff} which is greater than 1. ! 3654: ! 3655: The signed comparisons are also used for floating point values. Floating ! 3656: point comparisons are distinguished by the machine modes of the operands. ! 3657: ! 3658: The comparison operators may be used to compare the condition codes ! 3659: @code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}. Such a ! 3660: construct actually refers to the result of the preceding instruction in ! 3661: which the condition codes were set. The above example stands for 1 if the ! 3662: condition codes were set to say ``zero'' or ``equal'', 0 otherwise. ! 3663: Although the same comparison operators are used for this as may be used in ! 3664: other contexts on actual data, no confusion can result since the machine ! 3665: description would never allow both kinds of uses in the same context. ! 3666: ! 3667: @table @code ! 3668: @item (eq @var{x} @var{y}) ! 3669: 1 if the values represented by @var{x} and @var{y} are equal, ! 3670: otherwise 0. ! 3671: ! 3672: @item (ne @var{x} @var{y}) ! 3673: 1 if the values represented by @var{x} and @var{y} are not equal, ! 3674: otherwise 0. ! 3675: ! 3676: @item (gt @var{x} @var{y}) ! 3677: 1 if the @var{x} is greater than @var{y}. If they are fixed-point, ! 3678: the comparison is done in a signed sense. ! 3679: ! 3680: @item (gtu @var{x} @var{y}) ! 3681: Like @samp{gt} but does unsigned comparison, on fixed-point numbers only. ! 3682: ! 3683: @item (lt @var{x} @var{y}) ! 3684: @item (ltu @var{x} @var{y}) ! 3685: Like @samp{gt} and @samp{gtu} but test for ``less than''. ! 3686: ! 3687: @item (ge @var{x} @var{y}) ! 3688: @item (geu @var{x} @var{y}) ! 3689: Like @samp{gt} and @samp{gtu} but test for ``greater than or equal''. ! 3690: ! 3691: @item (le @var{x} @var{y}) ! 3692: @item (leu @var{x} @var{y}) ! 3693: Like @samp{gt} and @samp{gtu} but test for ``less than or equal''. ! 3694: ! 3695: @item (if_then_else @var{cond} @var{then} @var{else}) ! 3696: This is not a comparison operation but is listed here because it is ! 3697: always used in conjunction with a comparison operation. To be ! 3698: precise, @var{cond} is a comparison expression. This expression ! 3699: represents a choice, according to @var{cond}, between the value ! 3700: represented by @var{then} and the one represented by @var{else}. ! 3701: ! 3702: On most machines, @samp{if_then_else} expressions are valid only ! 3703: to express conditional jumps. ! 3704: @end table ! 3705: ! 3706: @node Bit Fields, Conversions, Comparisons, RTL ! 3707: @section Bit-fields ! 3708: ! 3709: Special expression codes exist to represent bit-field instructions. ! 3710: These types of expressions are lvalues in RTL; they may appear ! 3711: on the left side of a assignment, indicating insertion of a value ! 3712: into the specified bit field. ! 3713: ! 3714: @table @code ! 3715: @item (sign_extract:SI @var{loc} @var{size} @var{pos}) ! 3716: This represents a reference to a sign-extended bit-field contained or ! 3717: starting in @var{loc} (a memory or register reference). The bit field ! 3718: is @var{size} bits wide and starts at bit @var{pos}. The compilation ! 3719: option @code{BITS_BIG_ENDIAN} says which end of the memory unit ! 3720: @var{pos} counts from. ! 3721: ! 3722: Which machine modes are valid for @var{loc} depends on the machine, ! 3723: but typically @var{loc} should be a single byte when in memory ! 3724: or a full word in a register. ! 3725: ! 3726: @item (zero_extract:SI @var{loc} @var{size} @var{pos}) ! 3727: Like @samp{sign_extract} but refers to an unsigned or zero-extended ! 3728: bit field. The same sequence of bits are extracted, but they ! 3729: are filled to an entire word with zeros instead of by sign-extension. ! 3730: @end table ! 3731: ! 3732: @node Conversions, RTL Declarations, Bit Fields, RTL ! 3733: @section Conversions ! 3734: ! 3735: All conversions between machine modes must be represented by ! 3736: explicit conversion operations. For example, an expression ! 3737: which is the sum of a byte and a full word cannot be written as ! 3738: @code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @samp{plus} ! 3739: operation requires two operands of the same machine mode. ! 3740: Therefore, the byte-sized operand is enclosed in a conversion ! 3741: operation, as in ! 3742: ! 3743: @example ! 3744: (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) ! 3745: @end example ! 3746: ! 3747: The conversion operation is not a mere placeholder, because there ! 3748: may be more than one way of converting from a given starting mode ! 3749: to the desired final mode. The conversion operation code says how ! 3750: to do it. ! 3751: ! 3752: @table @code ! 3753: @item (sign_extend:@var{m} @var{x}) ! 3754: Represents the result of sign-extending the value @var{x} ! 3755: to machine mode @var{m}. @var{m} must be a fixed-point mode ! 3756: and @var{x} a fixed-point value of a mode narrower than @var{m}. ! 3757: ! 3758: @item (zero_extend:@var{m} @var{x}) ! 3759: Represents the result of zero-extending the value @var{x} ! 3760: to machine mode @var{m}. @var{m} must be a fixed-point mode ! 3761: and @var{x} a fixed-point value of a mode narrower than @var{m}. ! 3762: ! 3763: @item (float_extend:@var{m} @var{x}) ! 3764: Represents the result of extending the value @var{x} ! 3765: to machine mode @var{m}. @var{m} must be a floating point mode ! 3766: and @var{x} a floating point value of a mode narrower than @var{m}. ! 3767: ! 3768: @item (truncate:@var{m} @var{x}) ! 3769: Represents the result of truncating the value @var{x} ! 3770: to machine mode @var{m}. @var{m} must be a fixed-point mode ! 3771: and @var{x} a fixed-point value of a mode wider than @var{m}. ! 3772: ! 3773: @item (float_truncate:@var{m} @var{x}) ! 3774: Represents the result of truncating the value @var{x} ! 3775: to machine mode @var{m}. @var{m} must be a floating point mode ! 3776: and @var{x} a floating point value of a mode wider than @var{m}. ! 3777: ! 3778: @item (float:@var{m} @var{x}) ! 3779: Represents the result of converting fixed point value @var{x}, ! 3780: regarded as signed, to floating point mode @var{m}. ! 3781: ! 3782: @item (unsigned_float:@var{m} @var{x}) ! 3783: Represents the result of converting fixed point value @var{x}, ! 3784: regarded as unsigned, to floating point mode @var{m}. ! 3785: ! 3786: @item (fix:@var{m} @var{x}) ! 3787: When @var{m} is a fixed point mode, represents the result of ! 3788: converting floating point value @var{x} to mode @var{m}, regarded as ! 3789: signed. How rounding is done is not specified, so this operation may ! 3790: be used validly in compiling C code only for integer-valued operands. ! 3791: ! 3792: @item (unsigned_fix:@var{m} @var{x}) ! 3793: Represents the result of converting floating point value @var{x} to ! 3794: fixed point mode @var{m}, regarded as unsigned. How rounding is done ! 3795: is not specified. ! 3796: ! 3797: @item (fix:@var{m} @var{x}) ! 3798: When @var{m} is a floating point mode, represents the result of ! 3799: converting floating point value @var{x} (valid for mode @var{m}) to an ! 3800: integer, still represented in floating point mode @var{m}, by rounding ! 3801: towards zero. ! 3802: @end table ! 3803: ! 3804: @node RTL Declarations, Side Effects, Conversions, RTL ! 3805: @section Declarations ! 3806: ! 3807: Declaration expression codes do not represent arithmetic operations ! 3808: but rather state assertions about their operands. ! 3809: ! 3810: @table @code ! 3811: @item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0)) ! 3812: This expression code is used in only one context: operand 0 of a ! 3813: @samp{set} expression. In addition, the operand of this expression ! 3814: must be a @samp{subreg} expression. ! 3815: ! 3816: The presence of @samp{strict_low_part} says that the part of the ! 3817: register which is meaningful in mode @var{n}, but is not part of ! 3818: mode @var{m}, is not to be altered. Normally, an assignment to such ! 3819: a subreg is allowed to have undefined effects on the rest of the ! 3820: register when @var{m} is less than a word. ! 3821: @end table ! 3822: ! 3823: @node Side Effects, Incdec, RTL Declarations, RTL ! 3824: @section Side Effect Expressions ! 3825: ! 3826: The expression codes described so far represent values, not actions. ! 3827: But machine instructions never produce values; they are meaningful ! 3828: only for their side effects on the state of the machine. Special ! 3829: expression codes are used to represent side effects. ! 3830: ! 3831: The body of an instruction is always one of these side effect codes; ! 3832: the codes described above, which represent values, appear only as ! 3833: the operands of these. ! 3834: ! 3835: @table @code ! 3836: @item (set @var{lval} @var{x}) ! 3837: Represents the action of storing the value of @var{x} into the place ! 3838: represented by @var{lval}. @var{lval} must be an expression ! 3839: representing a place that can be stored in: @samp{reg} (or ! 3840: @samp{subreg} or @samp{strict_low_part}), @samp{mem}, @samp{pc} or ! 3841: @samp{cc0}.@refill ! 3842: ! 3843: If @var{lval} is a @samp{reg}, @samp{subreg} or @samp{mem}, it has a ! 3844: machine mode; then @var{x} must be valid for that mode.@refill ! 3845: ! 3846: If @var{lval} is a @samp{reg} whose machine mode is less than the full ! 3847: width of the register, then it means that the part of the register ! 3848: specified by the machine mode is given the specified value and the ! 3849: rest of the register receives an undefined value. Likewise, if ! 3850: @var{lval} is a @samp{subreg} whose machine mode is narrower than ! 3851: @code{SImode}, the rest of the register can be changed in an undefined way. ! 3852: ! 3853: If @var{lval} is a @samp{strict_low_part} of a @samp{subreg}, then the ! 3854: part of the register specified by the machine mode of the ! 3855: @samp{subreg} is given the value @var{x} and the rest of the register ! 3856: is not changed.@refill ! 3857: ! 3858: If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may ! 3859: have any mode. This represents a ``test'' or ``compare'' instruction.@refill ! 3860: ! 3861: If @var{lval} is @code{(pc)}, we have a jump instruction, and the ! 3862: possibilities for @var{x} are very limited. It may be a ! 3863: @samp{label_ref} expression (unconditional jump). It may be an ! 3864: @samp{if_then_else} (conditional jump), in which case either the ! 3865: second or the third operand must be @code{(pc)} (for the case which ! 3866: does not jump) and the other of the two must be a @samp{label_ref} ! 3867: (for the case which does jump). @var{x} may also be a @samp{mem} or ! 3868: @code{(plus:SI (pc) @var{y})}, where @var{y} may be a @samp{reg} or a ! 3869: @samp{mem}; these unusual patterns are used to represent jumps through ! 3870: branch tables.@refill ! 3871: ! 3872: @item (return) ! 3873: Represents a return from the current function, on machines where this ! 3874: can be done with one instruction, such as Vaxes. On machines where a ! 3875: multi-instruction ``epilogue'' must be executed in order to return ! 3876: from the function, returning is done by jumping to a label which ! 3877: precedes the epilogue, and the @samp{return} expression code is never ! 3878: used. ! 3879: ! 3880: @item (call @var{function} @var{nargs}) ! 3881: Represents a function call. @var{function} is a @samp{mem} expression ! 3882: whose address is the address of the function to be called. ! 3883: @var{nargs} is an expression which can be used for two purposes: on ! 3884: some machines it represents the number of bytes of stack argument; on ! 3885: others, it represents the number of argument registers. ! 3886: ! 3887: Each machine has a standard machine mode which @var{function} must ! 3888: have. The machine description defines macro @code{FUNCTION_MODE} to ! 3889: expand into the requisite mode name. The purpose of this mode is to ! 3890: specify what kind of addressing is allowed, on machines where the ! 3891: allowed kinds of addressing depend on the machine mode being ! 3892: addressed. ! 3893: ! 3894: @item (clobber @var{x}) ! 3895: Represents the storing or possible storing of an unpredictable, ! 3896: undescribed value into @var{x}, which must be a @samp{reg} or ! 3897: @samp{mem} expression. ! 3898: ! 3899: One place this is used is in string instructions that store standard ! 3900: values into particular hard registers. It may not be worth the ! 3901: trouble to describe the values that are stored, but it is essential to ! 3902: inform the compiler that the registers will be altered, lest it ! 3903: attempt to keep data in them across the string instruction. ! 3904: ! 3905: @var{x} may also be null---a null C pointer, no expression at all. ! 3906: Such a @code{(clobber (null))} expression means that all memory ! 3907: locations must be presumed clobbered. ! 3908: ! 3909: Note that the machine description classifies certain hard registers as ! 3910: ``call-clobbered''. All function call instructions are assumed by ! 3911: default to clobber these registers, so there is no need to use ! 3912: @samp{clobber} expressions to indicate this fact. Also, each function ! 3913: call is assumed to have the potential to alter any memory location. ! 3914: ! 3915: @item (use @var{x}) ! 3916: Represents the use of the value of @var{x}. It indicates that the ! 3917: value in @var{x} at this point in the program is needed, even though ! 3918: it may not be apparent why this is so. Therefore, the compiler will ! 3919: not attempt to delete instructions whose only effect is to store a ! 3920: value in @var{x}. @var{x} must be a @samp{reg} expression. ! 3921: ! 3922: @item (parallel [@var{x0} @var{x1} @dots{}]) ! 3923: Represents several side effects performed in parallel. The square ! 3924: brackets stand for a vector; the operand of @samp{parallel} is a ! 3925: vector of expressions. @var{x0}, @var{x1} and so on are individual ! 3926: side effects---expressions of code @samp{set}, @samp{call}, ! 3927: @samp{return}, @samp{clobber} or @samp{use}.@refill ! 3928: ! 3929: ``In parallel'' means that first all the values used in the individual ! 3930: side-effects are computed, and second all the actual side-effects are ! 3931: performed. For example, ! 3932: ! 3933: @example ! 3934: (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) ! 3935: (set (mem:SI (reg:SI 1)) (reg:SI 1))]) ! 3936: @end example ! 3937: ! 3938: @noindent ! 3939: says unambiguously that the values of hard register 1 and the memory ! 3940: location addressed by it are interchanged. In both places where ! 3941: @code{(reg:SI 1)} appears as a memory address it refers to the value ! 3942: in register 1 @emph{before} the execution of the instruction. ! 3943: ! 3944: Peephole optimization, which takes place in the last jump-optimization ! 3945: pass, can produce insns whose patterns consist of a @samp{parallel} ! 3946: whose elements are the operands needed to output the resulting ! 3947: assembler code--often @samp{reg}, @samp{mem} or constant expressions. ! 3948: This would not be well-formed RTL at any other stage in compilation, ! 3949: but it is ok then because no further optimization remains to be done. ! 3950: However, the definition of the macro @code{NOTICE_UPDATE_CC} may need ! 3951: to deal with such insns. ! 3952: ! 3953: @item (sequence [@var{insns} @dots{}]) ! 3954: Represents a sequence of insns. Each of the @var{insns} that appears ! 3955: in the vector is suitable for appearing in the chain of insns, so it ! 3956: must be an @samp{insn}, @samp{jump_insn}, @samp{call_insn}, ! 3957: @samp{code_label}, @samp{barrier} or @samp{note}. ! 3958: ! 3959: A @samp{sequence} RTX never appears in an actual insn. It represents ! 3960: the sequence of insns that result from a @samp{define_expand} ! 3961: @emph{before} those insns are passed to @code{emit_insn} to insert ! 3962: them in the chain of insns. When actually inserted, the individual ! 3963: sub-insns are separated out and the @samp{sequence} is forgotten. ! 3964: @end table ! 3965: ! 3966: Three expression codes appear in place of a side effect, as the body of an ! 3967: insn, though strictly speaking they do not describe side effects as such: ! 3968: ! 3969: @table @code ! 3970: @item (asm_input @var{s}) ! 3971: Represents literal assembler code as described by the string @var{s}. ! 3972: ! 3973: @item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}]) ! 3974: Represents a table of jump addresses. The vector elements @var{lr0}, ! 3975: etc., are @samp{label_ref} expressions. The mode @var{m} specifies ! 3976: how much space is given to each address; normally @var{m} would be ! 3977: @code{Pmode}. ! 3978: ! 3979: @item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}]) ! 3980: Represents a table of jump addresses expressed as offsets from ! 3981: @var{base}. The vector elements @var{lr0}, etc., are @samp{label_ref} ! 3982: expressions and so is @var{base}. The mode @var{m} specifies how much ! 3983: space is given to each address-difference.@refill ! 3984: @end table ! 3985: ! 3986: @node Incdec, Assembler, Side Effects, RTL ! 3987: @section Embedded Side-Effects on Addresses ! 3988: ! 3989: Four special side-effect expression codes appear as memory addresses. ! 3990: ! 3991: @table @code ! 3992: @item (pre_dec:@var{m} @var{x}) ! 3993: Represents the side effect of decrementing @var{x} by a standard ! 3994: amount and represents also the value that @var{x} has after being ! 3995: decremented. @var{x} must be a @samp{reg} or @samp{mem}, but most ! 3996: machines allow only a @samp{reg}. @var{m} must be the machine mode ! 3997: for pointers on the machine in use. The amount @var{x} is decremented ! 3998: by is the length in bytes of the machine mode of the containing memory ! 3999: reference of which this expression serves as the address. Here is an ! 4000: example of its use:@refill ! 4001: ! 4002: @example ! 4003: (mem:DF (pre_dec:SI (reg:SI 39))) ! 4004: @end example ! 4005: ! 4006: @noindent ! 4007: This says to decrement pseudo register 39 by the length of a @code{DFmode} ! 4008: value and use the result to address a @code{DFmode} value. ! 4009: ! 4010: @item (pre_inc:@var{m} @var{x}) ! 4011: Similar, but specifies incrementing @var{x} instead of decrementing it. ! 4012: ! 4013: @item (post_dec:@var{m} @var{x}) ! 4014: Represents the same side effect as @samp{pre_decrement} but a different ! 4015: value. The value represented here is the value @var{x} has @i{before} ! 4016: being decremented. ! 4017: ! 4018: @item (post_inc:@var{m} @var{x}) ! 4019: Similar, but specifies incrementing @var{x} instead of decrementing it. ! 4020: @end table ! 4021: ! 4022: These embedded side effect expressions must be used with care. Instruction ! 4023: patterns may not use them. Until the @samp{flow} pass of the compiler, ! 4024: they may occur only to represent pushes onto the stack. The @samp{flow} ! 4025: pass finds cases where registers are incremented or decremented in one ! 4026: instruction and used as an address shortly before or after; these cases are ! 4027: then transformed to use pre- or post-increment or -decrement. ! 4028: ! 4029: Explicit popping of the stack could be represented with these embedded ! 4030: side effect operators, but that would not be safe; the instruction ! 4031: combination pass could move the popping past pushes, thus changing ! 4032: the meaning of the code. ! 4033: ! 4034: An instruction that can be represented with an embedded side effect ! 4035: could also be represented using @samp{parallel} containing an additional ! 4036: @samp{set} to describe how the address register is altered. This is not ! 4037: done because machines that allow these operations at all typically ! 4038: allow them wherever a memory address is called for. Describing them as ! 4039: additional parallel stores would require doubling the number of entries ! 4040: in the machine description. ! 4041: ! 4042: @node Assembler, Insns, IncDec, RTL ! 4043: @section Assembler Instructions as Expressions ! 4044: ! 4045: The RTX code @samp{asm_operands} represents a value produced by a ! 4046: user-specified assembler instruction. It is used to represent ! 4047: an @code{asm} statement with arguments. An @code{asm} statement with ! 4048: a single output operand, like this: ! 4049: ! 4050: @example ! 4051: asm ("foo %1,%2,%0" : "a" (outputvar) : "g" (x + y), "di" (*z)); ! 4052: @end example ! 4053: ! 4054: @noindent ! 4055: is represented using a single @samp{asm_operands} RTX which represents ! 4056: the value that is stored in @code{outputvar}: ! 4057: ! 4058: @example ! 4059: (set @var{rtx-for-outputvar} ! 4060: (asm_operands "foo %1,%2,%0" "a" 0 ! 4061: [@var{rtx-for-addition-result} @var{rtx-for-*z}] ! 4062: [(asm_input:@var{m1} "g") ! 4063: (asm_input:@var{m2} "di")])) ! 4064: @end example ! 4065: ! 4066: @noindent ! 4067: Here the operands of the @samp{asm_operands} RTX are the assembler ! 4068: template string, the output-operand's constraint, the index-number of the ! 4069: output operand among the output operands specified, a vector of input ! 4070: operand RTX's, and a vector of input-operand modes and constraints. The ! 4071: mode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of ! 4072: @code{*z}. ! 4073: ! 4074: When an @code{asm} statement has multiple output values, its insn has ! 4075: several such @samp{set} RTX's inside of a @samp{parallel}. Each @samp{set} ! 4076: contains a @samp{asm_operands}; all of these share the same assembler ! 4077: template and vectors, but each contains the constraint for the respective ! 4078: output operand. They are also distinguished by the output-operand index ! 4079: number, which is 0, 1, @dots{} for successive output operands. ! 4080: ! 4081: @node Insns, Calls, Assembler, RTL ! 4082: @section Insns ! 4083: ! 4084: The RTL representation of the code for a function is a doubly-linked ! 4085: chain of objects called @dfn{insns}. Insns are expressions with ! 4086: special codes that are used for no other purpose. Some insns are ! 4087: actual instructions; others represent dispatch tables for @code{switch} ! 4088: statements; others represent labels to jump to or various sorts of ! 4089: declarative information. ! 4090: ! 4091: In addition to its own specific data, each insn must have a unique id-number ! 4092: that distinguishes it from all other insns in the current function, and ! 4093: chain pointers to the preceding and following insns. These three fields ! 4094: occupy the same position in every insn, independent of the expression code ! 4095: of the insn. They could be accessed with @code{XEXP} and @code{XINT}, ! 4096: but instead three special macros are always used: ! 4097: ! 4098: @table @code ! 4099: @item INSN_UID (@var{i}) ! 4100: Accesses the unique id of insn @var{i}. ! 4101: ! 4102: @item PREV_INSN (@var{i}) ! 4103: Accesses the chain pointer to the insn preceding @var{i}. ! 4104: If @var{i} is the first insn, this is a null pointer. ! 4105: ! 4106: @item NEXT_INSN (@var{i}) ! 4107: Accesses the chain pointer to the insn following @var{i}. ! 4108: If @var{i} is the last insn, this is a null pointer. ! 4109: @end table ! 4110: ! 4111: The @code{NEXT_INSN} and @code{PREV_INSN} pointers must always ! 4112: correspond: if @var{i} is not the first insn, ! 4113: ! 4114: @example ! 4115: NEXT_INSN (PREV_INSN (@var{insn})) == @var{insn} ! 4116: @end example ! 4117: ! 4118: @noindent ! 4119: is always true. ! 4120: ! 4121: Every insn has one of the following six expression codes: ! 4122: ! 4123: @table @samp ! 4124: @item insn ! 4125: The expression code @samp{insn} is used for instructions that do not jump ! 4126: and do not do function calls. Insns with code @samp{insn} have four ! 4127: additional fields beyond the three mandatory ones listed above. ! 4128: These four are described in a table below. ! 4129: ! 4130: @item jump_insn ! 4131: The expression code @samp{jump_insn} is used for instructions that may jump ! 4132: (or, more generally, may contain @samp{label_ref} expressions). ! 4133: @samp{jump_insn} insns have the same extra fields as @samp{insn} insns, ! 4134: accessed in the same way. ! 4135: ! 4136: @item call_insn ! 4137: The expression code @samp{call_insn} is used for instructions that may do ! 4138: function calls. It is important to distinguish these instructions because ! 4139: they imply that certain registers and memory locations may be altered ! 4140: unpredictably. ! 4141: ! 4142: @samp{call_insn} insns have the same extra fields as @samp{insn} insns, ! 4143: accessed in the same way. ! 4144: ! 4145: @item code_label ! 4146: A @samp{code_label} insn represents a label that a jump insn can jump to. ! 4147: It contains one special field of data in addition to the three standard ones. ! 4148: It is used to hold the @dfn{label number}, a number that identifies this ! 4149: label uniquely among all the labels in the compilation (not just in the ! 4150: current function). Ultimately, the label is represented in the assembler ! 4151: output as an assembler label @samp{L@var{n}} where @var{n} is the label number. ! 4152: ! 4153: @item barrier ! 4154: Barriers are placed in the instruction stream after unconditional ! 4155: jump instructions to indicate that the jumps are unconditional. ! 4156: They contain no information beyond the three standard fields. ! 4157: ! 4158: @item note ! 4159: @samp{note} insns are used to represent additional debugging and ! 4160: declarative information. They contain two nonstandard fields, an ! 4161: integer which is accessed with the macro @code{NOTE_LINE_NUMBER} and a ! 4162: string accessed with @code{NOTE_SOURCE_FILE}. ! 4163: ! 4164: If @code{NOTE_LINE_NUMBER} is positive, the note represents the ! 4165: position of a source line and @code{NOTE_SOURCE_FILE} is the source file name ! 4166: that the line came from. These notes control generation of line ! 4167: number data in the assembler output. ! 4168: ! 4169: Otherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a ! 4170: code with one of the following values (and @code{NOTE_SOURCE_FILE} ! 4171: must contain a null pointer): ! 4172: ! 4173: @table @code ! 4174: @item NOTE_INSN_DELETED ! 4175: Such a note is completely ignorable. Some passes of the compiler ! 4176: delete insns by altering them into notes of this kind. ! 4177: ! 4178: @item NOTE_INSN_BLOCK_BEG ! 4179: @itemx NOTE_INSN_BLOCK_END ! 4180: These types of notes indicate the position of the beginning and end ! 4181: of a level of scoping of variable names. They control the output ! 4182: of debugging information. ! 4183: ! 4184: @item NOTE_INSN_LOOP_BEG ! 4185: @itemx NOTE_INSN_LOOP_END ! 4186: These types of notes indicate the position of the beginning and end ! 4187: of a @code{while} or @code{for} loop. They enable the loop optimizer ! 4188: to find loops quickly. ! 4189: @end table ! 4190: @end table ! 4191: ! 4192: Here is a table of the extra fields of @samp{insn}, @samp{jump_insn} ! 4193: and @samp{call_insn} insns: ! 4194: ! 4195: @table @code ! 4196: @item PATTERN (@var{i}) ! 4197: An expression for the side effect performed by this insn. ! 4198: ! 4199: @item REG_NOTES (@var{i}) ! 4200: A list (chain of @samp{expr_list} expressions) giving information ! 4201: about the usage of registers in this insn. This list is set up by the ! 4202: flow analysis pass; it is a null pointer until then. ! 4203: ! 4204: @item LOG_LINKS (@var{i}) ! 4205: A list (chain of @samp{insn_list} expressions) of previous ``related'' ! 4206: insns: insns which store into registers values that are used for the ! 4207: first time in this insn. (An additional constraint is that neither a ! 4208: jump nor a label may come between the related insns). This list is ! 4209: set up by the flow analysis pass; it is a null pointer until then. ! 4210: ! 4211: @item INSN_CODE (@var{i}) ! 4212: An integer that says which pattern in the machine description matches ! 4213: this insn, or -1 if the matching has not yet been attempted. ! 4214: ! 4215: Such matching is never attempted and this field is not used on an insn ! 4216: whose pattern consists of a single @samp{use}, @samp{clobber}, ! 4217: @samp{asm}, @samp{addr_vec} or @samp{addr_diff_vec} expression. ! 4218: @end table ! 4219: ! 4220: The @code{LOG_LINKS} field of an insn is a chain of @samp{insn_list} ! 4221: expressions. Each of these has two operands: the first is an insn, ! 4222: and the second is another @samp{insn_list} expression (the next one in ! 4223: the chain). The last @samp{insn_list} in the chain has a null pointer ! 4224: as second operand. The significant thing about the chain is which ! 4225: insns appear in it (as first operands of @samp{insn_list} ! 4226: expressions). Their order is not significant. ! 4227: ! 4228: The @code{REG_NOTES} field of an insn is a similar chain but of ! 4229: @samp{expr_list} expressions instead of @samp{insn_list}. There are four ! 4230: kinds of register notes, which are distinguished by the machine mode of the ! 4231: @samp{expr_list}, which a register note is really understood as being an ! 4232: @code{enum reg_note}. The first operand @var{op} of the @samp{expr_list} ! 4233: is data whose meaning depends on the kind of note. Here are the four ! 4234: kinds: ! 4235: ! 4236: @table @code ! 4237: @item REG_DEAD ! 4238: The register @var{op} dies in this insn; that is to say, altering the ! 4239: value immediately after this insn would not affect the future behavior ! 4240: of the program. ! 4241: ! 4242: @item REG_INC ! 4243: The register @var{op} is incremented (or decremented; at this level ! 4244: there is no distinction) by an embedded side effect inside this insn. ! 4245: This means it appears in a @code{POST_INC}, @code{PRE_INC}, ! 4246: @code{POST_DEC} or @code{PRE_DEC} RTX. ! 4247: ! 4248: @item REG_EQUIV ! 4249: The register that is set by this insn will be equal to @var{op} at run ! 4250: time, and could validly be replaced in all its occurrences by ! 4251: @var{op}. (``Validly'' here refers to the data flow of the program; ! 4252: simple replacement may make some insns invalid.) ! 4253: ! 4254: The value which the insn explicitly copies into the register may look ! 4255: different from @var{op}, but they will be equal at run time. ! 4256: ! 4257: For example, when a constant is loaded into a register that is never ! 4258: assigned any other value, this kind of note is used. ! 4259: ! 4260: When a parameter is copied into a pseudo-register at entry to a function, ! 4261: a note of this kind records that the register is equivalent to the stack ! 4262: slot where the parameter was passed. Although in this case the register ! 4263: may be set by other insns, it is still valid to replace the register ! 4264: by the stack slot throughout the function. ! 4265: ! 4266: @item REG_EQUAL ! 4267: The register that is set by this insn will be equal to @var{op} at run ! 4268: time at the end of this insn (but not necessarily elsewhere in the ! 4269: function). ! 4270: ! 4271: The RTX @var{op} is typically an arithmetic expression. For example, ! 4272: when a sequence of insns such as a library call is used to perform an ! 4273: arithmetic operation, this kind of note is attached to the insn that ! 4274: produces or copies the final value. It tells the CSE pass how to ! 4275: think of that value. ! 4276: ! 4277: @item REG_RETVAL ! 4278: This insn copies the value of a library call, and @var{op} is the ! 4279: first insn that was generated to set up the arguments for the library ! 4280: call. ! 4281: ! 4282: Flow analysis uses this note to delete all of a library call whose ! 4283: result is dead. ! 4284: ! 4285: @item REG_WAS_0 ! 4286: The register @var{op} contained zero before this insn. You can rely ! 4287: on this note if it is present; its absence implies nothing. ! 4288: ! 4289: @item REG_LIBCALL ! 4290: This is the inverse of @code{REG_RETVAL}: it is placed on the first ! 4291: insn of a library call, and it points to the last one. ! 4292: ! 4293: Loop optimization uses this note to move an entire library call out ! 4294: of a loop when its value is constant. ! 4295: ! 4296: @item REG_NONNEG ! 4297: The register @var{op} is known to have nonnegative value when this ! 4298: insn is reached. ! 4299: @end table ! 4300: ! 4301: (The only difference between the expression codes @samp{insn_list} and ! 4302: @samp{expr_list} is that the first operand of an @samp{insn_list} is ! 4303: assumed to be an insn and is printed in debugging dumps as the insn's ! 4304: unique id; the first operand of an @samp{expr_list} is printed in the ! 4305: ordinary way as an expression.) ! 4306: ! 4307: @node Calls, Sharing, Insns, RTL ! 4308: @section RTL Representation of Function-Call Insns ! 4309: ! 4310: Insns that call subroutines have the RTL expression code @samp{call_insn}. ! 4311: These insns must satisfy special rules, and their bodies must use a special ! 4312: RTL expression code, @samp{call}. ! 4313: ! 4314: A @samp{call} expression has two operands, as follows: ! 4315: ! 4316: @example ! 4317: (call @var{nbytes} (mem:@var{fm} @var{addr})) ! 4318: @end example ! 4319: ! 4320: @noindent ! 4321: Here @var{nbytes} is an operand that represents the number of bytes of ! 4322: argument data being passed to the subroutine, @var{fm} is a machine mode ! 4323: (which must equal as the definition of the @code{FUNCTION_MODE} macro in ! 4324: the machine description) and @var{addr} represents the address of the ! 4325: subroutine. ! 4326: ! 4327: For a subroutine that returns no value, the @samp{call} RTX as shown above ! 4328: is the entire body of the insn. ! 4329: ! 4330: For a subroutine that returns a value whose mode is not @code{BLKmode}, ! 4331: the value is returned in a hard register. If this register's number is ! 4332: @var{r}, then the body of the call insn looks like this: ! 4333: ! 4334: @example ! 4335: (set (reg:@var{m} @var{r}) ! 4336: (call @var{nbytes} (mem:@var{fm} @var{addr}))) ! 4337: @end example ! 4338: ! 4339: @noindent ! 4340: This RTL expression makes it clear (to the optimizer passes) that the ! 4341: appropriate register receives a useful value in this insn. ! 4342: ! 4343: Immediately after RTL generation, if the value of the subroutine is ! 4344: actually used, this call insn is always followed closely by an insn which ! 4345: refers to the register @var{r}. This remains true through all the ! 4346: optimizer passes until cross jumping occurs. ! 4347: ! 4348: The following insn has one of two forms. Either it copies the value into a ! 4349: pseudo-register, like this: ! 4350: ! 4351: @example ! 4352: (set (reg:@var{m} @var{p}) (reg:@var{m} @var{r})) ! 4353: @end example ! 4354: ! 4355: @noindent ! 4356: or (in the case where the calling function will simply return whatever ! 4357: value the call produced, and no operation is needed to do this): ! 4358: ! 4359: @example ! 4360: (use (reg:@var{m} @var{r})) ! 4361: @end example ! 4362: ! 4363: @noindent ! 4364: Between the call insn and this following insn there may intervene only a ! 4365: stack-adjustment insn (and perhaps some @samp{note} insns). ! 4366: ! 4367: When a subroutine returns a @code{BLKmode} value, it is handled by ! 4368: passing to the subroutine the address of a place to store the value. ! 4369: So the call insn itself does not ``return'' any value, and it has the ! 4370: same RTL form as a call that returns nothing. ! 4371: ! 4372: @node Sharing,, Calls, RTL ! 4373: @section Structure Sharing Assumptions ! 4374: ! 4375: The compiler assumes that certain kinds of RTL expressions are unique; ! 4376: there do not exist two distinct objects representing the same value. ! 4377: In other cases, it makes an opposite assumption: that no RTL expression ! 4378: object of a certain kind appears in more than one place in the ! 4379: containing structure. ! 4380: ! 4381: These assumptions refer to a single function; except for the RTL ! 4382: objects that describe global variables and external functions, ! 4383: no RTL objects are common to two functions. ! 4384: ! 4385: @itemize @bullet ! 4386: @item ! 4387: Each pseudo-register has only a single @samp{reg} object to represent it, ! 4388: and therefore only a single machine mode. ! 4389: ! 4390: @item ! 4391: For any symbolic label, there is only one @samp{symbol_ref} object ! 4392: referring to it. ! 4393: ! 4394: @item ! 4395: There is only one @samp{const_int} expression with value zero, ! 4396: and only one with value one. ! 4397: ! 4398: @item ! 4399: There is only one @samp{pc} expression. ! 4400: ! 4401: @item ! 4402: There is only one @samp{cc0} expression. ! 4403: ! 4404: @item ! 4405: There is only one @samp{const_double} expression with mode ! 4406: @code{SFmode} and value zero, and only one with mode @code{DFmode} and ! 4407: value zero. ! 4408: ! 4409: @item ! 4410: No @samp{label_ref} appears in more than one place in the RTL ! 4411: structure; in other words, it is safe to do a tree-walk of all the ! 4412: insns in the function and assume that each time a @samp{label_ref} is ! 4413: seen it is distinct from all others that are seen. ! 4414: ! 4415: @item ! 4416: Only one @samp{mem} object is normally created for each static ! 4417: variable or stack slot, so these objects are frequently shared in all ! 4418: the places they appear. However, separate but equal objects for these ! 4419: variables are occasionally made. ! 4420: ! 4421: @item ! 4422: No RTL object appears in more than one place in the RTL structure ! 4423: except as described above. Many passes of the compiler rely on this ! 4424: by assuming that they can modify RTL objects in place without unwanted ! 4425: side-effects on other insns. ! 4426: ! 4427: @item ! 4428: During initial RTL generation, shared structure is freely introduced. ! 4429: After all the RTL for a function has been generated, all shared ! 4430: structure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c}, ! 4431: after which the above rules are guaranteed to be followed. ! 4432: ! 4433: @item ! 4434: During the combiner pass, shared structure with an insn can exist ! 4435: temporarily. However, the shared structure is copied before the ! 4436: combiner is finished with the insn. This is done by ! 4437: @code{copy_substitutions} in @samp{combine.c}. ! 4438: @end itemize ! 4439: ! 4440: @node Machine Desc, Machine Macros, RTL, Top ! 4441: @chapter Machine Descriptions ! 4442: ! 4443: A machine description has two parts: a file of instruction patterns ! 4444: (@file{.md} file) and a C header file of macro definitions. ! 4445: ! 4446: The @file{.md} file for a target machine contains a pattern for each ! 4447: instruction that the target machine supports (or at least each instruction ! 4448: that is worth telling the compiler about). It may also contain comments. ! 4449: A semicolon causes the rest of the line to be a comment, unless the semicolon ! 4450: is inside a quoted string. ! 4451: ! 4452: See the next chapter for information on the C header file. ! 4453: ! 4454: @menu ! 4455: * Patterns:: How to write instruction patterns. ! 4456: * Example:: An explained example of a @samp{define_insn} pattern. ! 4457: * RTL Template:: The RTL template defines what insns match a pattern. ! 4458: * Output Template:: The output template says how to make assembler code ! 4459: from such an insn. ! 4460: * Output Statement:: For more generality, write C code to output ! 4461: the assembler code. ! 4462: * Constraints:: When not all operands are general operands. ! 4463: * Standard Names:: Names mark patterns to use for code generation. ! 4464: * Pattern Ordering:: When the order of patterns makes a difference. ! 4465: * Dependent Patterns:: Having one pattern may make you need another. ! 4466: * Jump Patterns:: Special considerations for patterns for jump insns. ! 4467: * Peephole Definitions::Defining machine-specific peephole optimizations. ! 4468: * Expander Definitions::Generating a sequence of several RTL insns ! 4469: for a standard operation. ! 4470: @end menu ! 4471: ! 4472: @node Patterns, Example, Machine Desc, Machine Desc ! 4473: @section Everything about Instruction Patterns ! 4474: ! 4475: Each instruction pattern contains an incomplete RTL expression, with pieces ! 4476: to be filled in later, operand constraints that restrict how the pieces can ! 4477: be filled in, and an output pattern or C code to generate the assembler ! 4478: output, all wrapped up in a @samp{define_insn} expression. ! 4479: ! 4480: A @samp{define_insn} is an RTL expression containing four or five operands: ! 4481: ! 4482: @enumerate ! 4483: @item ! 4484: An optional name. The presence of a name indicate that this instruction ! 4485: pattern can perform a certain standard job for the RTL-generation ! 4486: pass of the compiler. This pass knows certain names and will use ! 4487: the instruction patterns with those names, if the names are defined ! 4488: in the machine description. ! 4489: ! 4490: The absence of a name is indicated by writing an empty string ! 4491: where the name should go. Nameless instruction patterns are never ! 4492: used for generating RTL code, but they may permit several simpler insns ! 4493: to be combined later on. ! 4494: ! 4495: Names that are not thus known and used in RTL-generation have no ! 4496: effect; they are equivalent to no name at all. ! 4497: ! 4498: @item ! 4499: The @dfn{RTL template} (@pxref{RTL Template}) is a vector of ! 4500: incomplete RTL expressions which show what the instruction should look ! 4501: like. It is incomplete because it may contain @samp{match_operand} ! 4502: and @samp{match_dup} expressions that stand for operands of the ! 4503: instruction. ! 4504: ! 4505: If the vector has only one element, that element is what the ! 4506: instruction should look like. If the vector has multiple elements, ! 4507: then the instruction looks like a @samp{parallel} expression ! 4508: containing that many elements as described. ! 4509: ! 4510: @item ! 4511: A condition. This is a string which contains a C expression that is ! 4512: the final test to decide whether an insn body matches this pattern. ! 4513: ! 4514: For a named pattern, the condition (if present) may not depend on ! 4515: the data in the insn being matched, but only the target-machine-type ! 4516: flags. The compiler needs to test these conditions during ! 4517: initialization in order to learn exactly which named instructions are ! 4518: available in a particular run. ! 4519: ! 4520: For nameless patterns, the condition is applied only when matching an ! 4521: individual insn, and only after the insn has matched the pattern's ! 4522: recognition template. The insn's operands may be found in the vector ! 4523: @code{operands}. ! 4524: ! 4525: @item ! 4526: The @dfn{output template}: a string that says how to output matching ! 4527: insns as assembler code. @samp{%} in this string specifies where ! 4528: to substitute the value of an operand. @xref{Output Template}. ! 4529: ! 4530: When simple substitution isn't general enough, you can specify a piece ! 4531: of C code to compute the output. @xref{Output Statement}. ! 4532: ! 4533: @item ! 4534: Optionally, some @dfn{machine-specific information}. The meaning ! 4535: of this information is defined only by an individual machine description; ! 4536: typically it might say whether this insn alters the condition codes, ! 4537: or how many bytes of output it generates. ! 4538: ! 4539: This operand is written as a string containing a C initializer ! 4540: (complete with braces) for the structure type @code{INSN_MACHINE_INFO}, ! 4541: whose definition is up to you (@pxref{Misc}). ! 4542: @end enumerate ! 4543: ! 4544: @node Example, RTL Template, Patterns, Machine Desc ! 4545: @section Example of @samp{define_insn} ! 4546: ! 4547: Here is an actual example of an instruction pattern, for the 68000/68020. ! 4548: ! 4549: @example ! 4550: (define_insn "tstsi" ! 4551: [(set (cc0) ! 4552: (match_operand:SI 0 "general_operand" "rm"))] ! 4553: "" ! 4554: "* ! 4555: @{ if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) ! 4556: return \"tstl %0\"; ! 4557: return \"cmpl #0,%0\"; @}") ! 4558: @end example ! 4559: ! 4560: This is an instruction that sets the condition codes based on the value of ! 4561: a general operand. It has no condition, so any insn whose RTL description ! 4562: has the form shown may be handled according to this pattern. The name ! 4563: @samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL generation ! 4564: pass that, when it is necessary to test such a value, an insn to do so ! 4565: can be constructed using this pattern. ! 4566: ! 4567: The output control string is a piece of C code which chooses which ! 4568: output template to return based on the kind of operand and the specific ! 4569: type of CPU for which code is being generated. ! 4570: ! 4571: @samp{"rm"} is an operand constraint. Its meaning is explained below. ! 4572: ! 4573: @node RTL Template, Output Template, Example, Machine Desc ! 4574: @section RTL Template for Generating and Recognizing Insns ! 4575: ! 4576: The RTL template is used to define which insns match the particular pattern ! 4577: and how to find their operands. For named patterns, the RTL template also ! 4578: says how to construct an insn from specified operands. ! 4579: ! 4580: Construction involves substituting specified operands into a copy of the ! 4581: template. Matching involves determining the values that serve as the ! 4582: operands in the insn being matched. Both of these activities are ! 4583: controlled by special expression types that direct matching and ! 4584: substitution of the operands. ! 4585: ! 4586: @table @code ! 4587: @item (match_operand:@var{m} @var{n} @var{testfn} @var{constraint}) ! 4588: This expression is a placeholder for operand number @var{n} of ! 4589: the insn. When constructing an insn, operand number @var{n} ! 4590: will be substituted at this point. When matching an insn, whatever ! 4591: appears at this position in the insn will be taken as operand ! 4592: number @var{n}; but it must satisfy @var{testfn} or this instruction ! 4593: pattern will not match at all. ! 4594: ! 4595: Operand numbers must be chosen consecutively counting from zero in ! 4596: each instruction pattern. There may be only one @samp{match_operand} ! 4597: expression in the pattern for each operand number. Usually operands ! 4598: are numbered in the order of appearance in @samp{match_operand} ! 4599: expressions. ! 4600: ! 4601: @var{testfn} is a string that is the name of a C function that accepts ! 4602: two arguments, a machine mode and an expression. During matching, ! 4603: the function will be called with @var{m} as the mode argument ! 4604: and the putative operand as the other argument. If it returns zero, ! 4605: this instruction pattern fails to match. @var{testfn} may be ! 4606: an empty string; then it means no test is to be done on the operand. ! 4607: ! 4608: @var{constraint} is explained later (@pxref{Constraints}). ! 4609: ! 4610: Most often, @var{testfn} is @code{"general_operand"}. It checks ! 4611: that the putative operand is either a constant, a register or a ! 4612: memory reference, and that it is valid for mode @var{m}. ! 4613: ! 4614: For an operand that must be a register, @var{testfn} should be ! 4615: @code{"register_operand"}. It would be valid to use ! 4616: @code{"general_operand"}, since the reload pass would copy any ! 4617: non-register operands through registers, but this would make GNU CC do ! 4618: extra work, and it would prevent the register allocator from doing the ! 4619: best possible job. ! 4620: ! 4621: For an operand that must be a constant, either @var{testfn} should be ! 4622: @code{"immediate_operand"}, or the instruction pattern's extra ! 4623: condition should check for constants, or both. You cannot expect the ! 4624: constraints to do this work! If the constraints allow only constants, ! 4625: but the predicate allows something else, the compiler will crash when ! 4626: that case arises. ! 4627: ! 4628: @item (match_dup @var{n}) ! 4629: This expression is also a placeholder for operand number @var{n}. ! 4630: It is used when the operand needs to appear more than once in the ! 4631: insn. ! 4632: ! 4633: In construction, @samp{match_dup} behaves exactly like ! 4634: @samp{match_operand}: the operand is substituted into the insn being ! 4635: constructed. But in matching, @samp{match_dup} behaves differently. ! 4636: It assumes that operand number @var{n} has already been determined by ! 4637: a @samp{match_operand} appearing earlier in the recognition template, ! 4638: and it matches only an identical-looking expression. ! 4639: ! 4640: @item (address (match_operand:@var{m} @var{n} "address_operand" "")) ! 4641: This complex of expressions is a placeholder for an operand number ! 4642: @var{n} in a ``load address'' instruction: an operand which specifies ! 4643: a memory location in the usual way, but for which the actual operand ! 4644: value used is the address of the location, not the contents of the ! 4645: location. ! 4646: ! 4647: @samp{address} expressions never appear in RTL code, only in machine ! 4648: descriptions. And they are used only in machine descriptions that do ! 4649: not use the operand constraint feature. When operand constraints are ! 4650: in use, the letter @samp{p} in the constraint serves this purpose. ! 4651: ! 4652: @var{m} is the machine mode of the @emph{memory location being ! 4653: addressed}, not the machine mode of the address itself. That mode is ! 4654: always the same on a given target machine (it is @code{Pmode}, which ! 4655: normally is @code{SImode}), so there is no point in mentioning it; ! 4656: thus, no machine mode is written in the @samp{address} expression. If ! 4657: some day support is added for machines in which addresses of different ! 4658: kinds of objects appear differently or are used differently (such as ! 4659: the PDP-10), different formats would perhaps need different machine ! 4660: modes and these modes might be written in the @samp{address} ! 4661: expression. ! 4662: @end table ! 4663: ! 4664: @node Output Template, Output Statement, RTL Template, Machine Desc ! 4665: @section Output Templates and Operand Substitution ! 4666: ! 4667: The @dfn{output template} is a string which specifies how to output ! 4668: the assembler code for an instruction pattern. Most of the template ! 4669: is a fixed string which is output literally. The character @samp{%} ! 4670: is used to specify where to substitute an operand; it can also be ! 4671: used to identify places different variants of the assembler require ! 4672: different syntax. ! 4673: ! 4674: In the simplest case, a @samp{%} followed by a digit @var{n} says to output ! 4675: operand @var{n} at that point in the string. ! 4676: ! 4677: @samp{%} followed by a letter and a digit says to output an operand in an ! 4678: alternate fashion. Four letters have standard, built-in meanings described ! 4679: below. The machine description macro @code{PRINT_OPERAND} can define ! 4680: additional letters with nonstandard meanings. ! 4681: ! 4682: @samp{%c@var{digit}} can be used to substitute an operand that is a ! 4683: constant value without the syntax that normally indicates an immediate ! 4684: operand. ! 4685: ! 4686: @samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of ! 4687: the constant is negated before printing. ! 4688: ! 4689: @samp{%a@var{digit}} can be used to substitute an operand as if it were a ! 4690: memory reference, with the actual operand treated as the address. This may ! 4691: be useful when outputting a ``load address'' instruction, because often the ! 4692: assembler syntax for such an instruction requires you to write the operand ! 4693: as if it were a memory reference. ! 4694: ! 4695: @samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump ! 4696: instruction. ! 4697: ! 4698: @samp{%} followed by a punctuation character specifies a substitution that ! 4699: does not use an operand. Only one case is standard: @samp{%%} outputs a ! 4700: @samp{%} into the assembler code. Other nonstandard cases can be ! 4701: defined in the @code{PRINT_OPERAND} macro. ! 4702: ! 4703: The template may generate multiple assembler instructions. Write the text ! 4704: for the instructions, with @samp{\;} between them. ! 4705: ! 4706: When the RTL contains two operand which are required by constraint to match ! 4707: each other, the output template must refer only to the lower-numbered operand. ! 4708: Matching operands are not always identical, and the rest of the compiler ! 4709: arranges to put the proper RTL expression for printing into the lower-numbered ! 4710: operand. ! 4711: ! 4712: One use of nonstandard letters or punctuation following @samp{%} is to ! 4713: distinguish between different assembler languages for the same machine; for ! 4714: example, Motorola syntax versus MIT syntax for the 68000. Motorola syntax ! 4715: requires periods in most opcode names, while MIT syntax does not. For ! 4716: example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola ! 4717: syntax. The same file of patterns is used for both kinds of output syntax, ! 4718: but the character sequence @samp{%.} is used in each place where Motorola ! 4719: syntax wants a period. The @code{PRINT_OPERAND} macro for Motorola syntax ! 4720: defines the sequence to output a period; the macro for MIT syntax defines ! 4721: it to do nothing. ! 4722: ! 4723: @node Output Statement, Constraints, Output Template, Machine Desc ! 4724: @section C Statements for Generating Assembler Output ! 4725: ! 4726: Often a single fixed template string cannot produce correct and efficient ! 4727: assembler code for all the cases that are recognized by a single ! 4728: instruction pattern. For example, the opcodes may depend on the kinds of ! 4729: operands; or some unfortunate combinations of operands may require extra ! 4730: machine instructions. ! 4731: ! 4732: If the output control string starts with a @samp{*}, then it is not an ! 4733: output template but rather a piece of C program that should compute a ! 4734: template. It should execute a @code{return} statement to return the ! 4735: template-string you want. Most such templates use C string literals, which ! 4736: require doublequote characters to delimit them. To include these ! 4737: doublequote characters in the string, prefix each one with @samp{\}. ! 4738: ! 4739: The operands may be found in the array @code{operands}, whose C data type ! 4740: is @code{rtx []}. ! 4741: ! 4742: It is possible to output an assembler instruction and then go on to output ! 4743: or compute more of them, using the subroutine @code{output_asm_insn}. This ! 4744: receives two arguments: a template-string and a vector of operands. The ! 4745: vector may be @code{operands}, or it may be another array of @code{rtx} ! 4746: that you declare locally and initialize yourself. ! 4747: ! 4748: When an insn pattern has multiple alternatives in its constraints, often ! 4749: the appearance of the assembler code determined mostly by which alternative ! 4750: was matched. When this is so, the C code can test the variable ! 4751: @code{which_alternative}, which is the ordinal number of the alternative ! 4752: that was actually satisfied (0 for the first, 1 for the second alternative, ! 4753: etc.). ! 4754: ! 4755: For example, suppose there are two opcodes for storing zero, @samp{clrreg} ! 4756: for registers and @samp{clrmem} for memory locations. Here is how ! 4757: a pattern could use @code{which_alternative} to choose between them: ! 4758: ! 4759: @example ! 4760: (define_insn "" ! 4761: [(set (match_operand:SI 0 "general_operand" "r,m") ! 4762: (const_int 0))] ! 4763: "" ! 4764: "* ! 4765: return (which_alternative == 0 ! 4766: ? \"clrreg %0\" : \"clrmem %0\"); ! 4767: ") ! 4768: @end example ! 4769: ! 4770: @node Constraints, Standard Names, Output Statement, Machine Desc ! 4771: @section Operand Constraints ! 4772: ! 4773: Each @samp{match_operand} in an instruction pattern can specify a ! 4774: constraint for the type of operands allowed. Constraints can say whether ! 4775: an operand may be in a register, and which kinds of register; whether the ! 4776: operand can be a memory reference, and which kinds of address; whether the ! 4777: operand may be an immediate constant, and which possible values it may ! 4778: have. Constraints can also require two operands to match. ! 4779: ! 4780: @menu ! 4781: * Simple Constraints:: Basic use of constraints. ! 4782: * Multi-Alternative:: When an insn has two alternative constraint-patterns. ! 4783: * Class Preferences:: Constraints guide which hard register to put things in. ! 4784: * Modifiers:: More precise control over effects of constraints. ! 4785: * No Constraints:: Describing a clean machine without constraints. ! 4786: @end menu ! 4787: ! 4788: @node Simple Constraints, Multi-Alternative, Constraints, Constraints ! 4789: @subsection Simple Constraints ! 4790: ! 4791: The simplest kind of constraint is a string full of letters, each of ! 4792: which describes one kind of operand that is permitted. Here are ! 4793: the letters that are allowed: ! 4794: ! 4795: @table @asis ! 4796: @item @samp{m} ! 4797: A memory operand is allowed, with any kind of address that the machine ! 4798: supports in general. ! 4799: ! 4800: @item @samp{o} ! 4801: A memory operand is allowed, but only if the address is ! 4802: @dfn{offsetable}. This means that adding a small integer (actually, ! 4803: the width in bytes of the operand, as determined by its machine mode) ! 4804: may be added to the address and the result is also a valid memory ! 4805: address. ! 4806: ! 4807: For example, an address which is constant is offsetable; so is an ! 4808: address that is the sum of a register and a constant (as long as a ! 4809: slightly larger constant is also within the range of address-offsets ! 4810: supported by the machine); but an autoincrement or autodecrement ! 4811: address is not offsetable. More complicated indirect/indexed ! 4812: addresses may or may not be offsetable depending on the other ! 4813: addressing modes that the machine supports. ! 4814: ! 4815: Note that in an output operand which can be matched by another ! 4816: operand, the constraint letter @samp{o} is valid only when accompanied ! 4817: by both @samp{<} (if the target machine has predecrement addressing) ! 4818: and @samp{>} (if the target machine has preincrement addressing). ! 4819: ! 4820: When the constraint letter @samp{o} is used, the reload pass may ! 4821: generate instructions which copy a nonoffsetable address into an index ! 4822: register. The idea is that the register can be used as a replacement ! 4823: offsetable address. But this method requires that there be patterns ! 4824: to copy any kind of address into a register. Auto-increment ! 4825: and auto-decrement addresses are an exception; there need not be an ! 4826: instruction that can copy such an address into a register, because ! 4827: reload handles these cases specially. ! 4828: ! 4829: Most older machine designs have ``load address'' instructions which do ! 4830: just what is needed here. Some RISC machines do not advertise such ! 4831: instructions, but the possible addresses on these machines are very ! 4832: limited, so it is easy to fake them. ! 4833: ! 4834: @item @samp{<} ! 4835: A memory operand with autodecrement addressing (either predecrement or ! 4836: postdecrement) is allowed. ! 4837: ! 4838: @item @samp{>} ! 4839: A memory operand with autoincrement addressing (either preincrement or ! 4840: postincrement) is allowed. ! 4841: ! 4842: @item @samp{r} ! 4843: A register operand is allowed provided that it is in a general ! 4844: register. ! 4845: ! 4846: @item @samp{d}, @samp{a}, @samp{f}, @dots{} ! 4847: Other letters can be defined in machine-dependent fashion to stand for ! 4848: particular classes of registers. @samp{d}, @samp{a} and @samp{f} are ! 4849: defined on the 68000/68020 to stand for data, address and floating ! 4850: point registers. ! 4851: ! 4852: @item @samp{i} ! 4853: An immediate integer operand (one with constant value) is allowed. ! 4854: This includes symbolic constants whose values will be known only at ! 4855: assembly time. ! 4856: ! 4857: @item @samp{n} ! 4858: An immediate integer operand with a known numeric value is allowed. ! 4859: Many systems cannot support assembly-time constants for operands less ! 4860: than a word wide. Constraints for these operands should use @samp{n} ! 4861: rather than @samp{i}. ! 4862: ! 4863: @item @samp{I}, @samp{J}, @samp{K}, @dots{} ! 4864: Other letters in the range @samp{I} through @samp{M} may be defined in ! 4865: a machine-dependent fashion to permit immediate integer operands with ! 4866: explicit integer values in specified ranges. For example, on the ! 4867: 68000, @samp{I} is defined to stand for the range of values 1 to 8. ! 4868: This is the range permitted as a shift count in the shift ! 4869: instructions. ! 4870: ! 4871: @item @samp{F} ! 4872: An immediate floating operand (expression code @samp{const_double}) is ! 4873: allowed. ! 4874: ! 4875: @item @samp{G}, @samp{H} ! 4876: @samp{G} and @samp{H} may be defined in a machine-dependent fashion to ! 4877: permit immediate floating operands in particular ranges of values. ! 4878: ! 4879: @item @samp{s} ! 4880: An immediate integer operand whose value is not an explicit integer is ! 4881: allowed. ! 4882: ! 4883: This might appear strange; if an insn allows a constant operand with a ! 4884: value not known at compile time, it certainly must allow any known ! 4885: value. So why use @samp{s} instead of @samp{i}? Sometimes it allows ! 4886: better code to be generated. ! 4887: ! 4888: For example, on the 68000 in a fullword instruction it is possible to ! 4889: use an immediate operand; but if the immediate value is between -32 ! 4890: and 31, better code results from loading the value into a register and ! 4891: using the register. This is because the load into the register can be ! 4892: done with a @samp{moveq} instruction. We arrange for this to happen ! 4893: by defining the letter @samp{K} to mean ``any integer outside the ! 4894: range -32 to 31'', and then specifying @samp{Ks} in the operand ! 4895: constraints. ! 4896: ! 4897: @item @samp{g} ! 4898: Any register, memory or immediate integer operand is allowed, except for ! 4899: registers that are not general registers. ! 4900: ! 4901: @item @samp{@var{n}} (a digit) ! 4902: An operand that matches operand number @var{n} is allowed. ! 4903: If a digit is used together with letters, the digit should come last. ! 4904: ! 4905: This is called a @dfn{matching constraint} and what it really means is ! 4906: that the assembler has only a single operand that fills two roles ! 4907: considered separate in the RTL insn. For example, an add insn has two ! 4908: input operands and one output operand in the RTL, but on most machines ! 4909: an add instruction really has only two operands, one of them an ! 4910: input-output operand. ! 4911: ! 4912: Matching constraints work only in circumstances like that add insn. ! 4913: More precisely, the matching constraint must appear in an input-only ! 4914: operand and the operand that it matches must be an output-only operand ! 4915: with a lower number. ! 4916: ! 4917: For operands to match in a particular case usually means that they ! 4918: are identical-looking RTL expressions. But in a few special cases ! 4919: specific kinds of dissimilarity are allowed. For example, @code{*x} ! 4920: as an input operand will match @code{*x++} as an output operand. ! 4921: For proper results in such cases, the output template should always ! 4922: use the output-operand's number when printing the operand. ! 4923: ! 4924: @item @samp{p} ! 4925: An operand that is a valid memory address is allowed. This is ! 4926: for ``load address'' and ``push address'' instructions. ! 4927: ! 4928: If @samp{p} is used in the constraint, the test-function in the ! 4929: @samp{match_operand} must be @code{address_operand}. ! 4930: @end table ! 4931: ! 4932: In order to have valid assembler code, each operand must satisfy ! 4933: its constraint. But a failure to do so does not prevent the pattern ! 4934: from applying to an insn. Instead, it directs the compiler to modify ! 4935: the code so that the constraint will be satisfied. Usually this is ! 4936: done by copying an operand into a register. ! 4937: ! 4938: Contrast, therefore, the two instruction patterns that follow: ! 4939: ! 4940: @example ! 4941: (define_insn "" ! 4942: [(set (match_operand:SI 0 "general_operand" "r") ! 4943: (plus:SI (match_dup 0) ! 4944: (match_operand:SI 1 "general_operand" "r")))] ! 4945: "" ! 4946: "@dots{}") ! 4947: @end example ! 4948: ! 4949: @noindent ! 4950: which has two operands, one of which must appear in two places, and ! 4951: ! 4952: @example ! 4953: (define_insn "" ! 4954: [(set (match_operand:SI 0 "general_operand" "r") ! 4955: (plus:SI (match_operand:SI 1 "general_operand" "0") ! 4956: (match_operand:SI 2 "general_operand" "r")))] ! 4957: "" ! 4958: "@dots{}") ! 4959: @end example ! 4960: ! 4961: @noindent ! 4962: which has three operands, two of which are required by a constraint to be ! 4963: identical. If we are considering an insn of the form ! 4964: ! 4965: @example ! 4966: (insn @var{n} @var{prev} @var{next} ! 4967: (set (reg:SI 3) ! 4968: (plus:SI (reg:SI 6) (reg:SI 109))) ! 4969: @dots{}) ! 4970: @end example ! 4971: ! 4972: @noindent ! 4973: the first pattern would not apply at all, because this insn does not ! 4974: contain two identical subexpressions in the right place. The pattern would ! 4975: say, ``That does not look like an add instruction; try other patterns.'' ! 4976: The second pattern would say, ``Yes, that's an add instruction, but there ! 4977: is something wrong with it.'' It would direct the reload pass of the ! 4978: compiler to generate additional insns to make the constraint true. The ! 4979: results might look like this: ! 4980: ! 4981: @example ! 4982: (insn @var{n2} @var{prev} @var{n} ! 4983: (set (reg:SI 3) (reg:SI 6)) ! 4984: @dots{}) ! 4985: ! 4986: (insn @var{n} @var{n2} @var{next} ! 4987: (set (reg:SI 3) ! 4988: (plus:SI (reg:SI 3) (reg:SI 109))) ! 4989: @dots{}) ! 4990: @end example ! 4991: ! 4992: It is up to you to make sure that each operand, in each pattern, has ! 4993: constraints that can handle any RTL expression that could be present for ! 4994: that operand. (When multiple alternatives are in use, each pattern must, ! 4995: for each possible combination of operand expressions, have at least one ! 4996: alternative which can handle that combination of operands.) The ! 4997: constraints don't need to @emph{allow} any possible operand---when this is ! 4998: the case, they do not constrain---but they must at least point the way to ! 4999: reloading any possible operand so that it will fit. ! 5000: ! 5001: @itemize @bullet ! 5002: @item ! 5003: If the constraint accepts whatever operands the predicate permits, ! 5004: there is no problem: reloading is never necessary for this operand. ! 5005: ! 5006: For example, an operand whose constraints permit everything except ! 5007: registers is safe provided its predicate rejects registers. ! 5008: ! 5009: An operand whose predicate accepts only constant values is safe ! 5010: provided its constraints include the letter @samp{i}. If any possible ! 5011: constant value is accepted, then nothing less than @samp{i} will do; ! 5012: if the predicate is more selective, than the constraints may also be ! 5013: more selective. ! 5014: ! 5015: @item ! 5016: Any operand expression can be reloaded by copying it into a register. ! 5017: So if an operand's constraints allow some kind of register, it is ! 5018: certain to be safe. It need not permit all classes of registers; the ! 5019: compiler knows how to copy a register into another register of the ! 5020: proper class in order to make an instruction valid. ! 5021: ! 5022: @item ! 5023: A nonoffsetable memory reference can be reloaded by copying the ! 5024: address into a register. So if the constraint uses the letter ! 5025: @samp{o}, all memory references are taken care of. ! 5026: ! 5027: @item ! 5028: A constant operand can be reloaded by storing it in memory; it then ! 5029: becomes an offsetable memory reference. So if the constraint uses the ! 5030: letters @samp{o} or @samp{m}, constant operands are not a problem. ! 5031: @end itemize ! 5032: ! 5033: If the operand's predicate can recognize registers, but the constraint does ! 5034: not permit them, it can make the compiler crash. When this operand happens ! 5035: to be a register, the reload pass will be stymied, because it does not know ! 5036: how to copy a register temporarily into memory. ! 5037: ! 5038: @node Multi-Alternative, Class Preferences, Simple Constraints, Constraints ! 5039: @subsection Multiple Alternative Constraints ! 5040: ! 5041: Sometimes a single instruction has multiple alternative sets of possible ! 5042: operands. For example, on the 68000, a logical-or instruction can combine ! 5043: register or an immediate value into memory, or it can combine any kind of ! 5044: operand into a register; but it cannot combine one memory location into ! 5045: another. ! 5046: ! 5047: These constraints are represented as multiple alternatives. An alternative ! 5048: can be described by a series of letters for each operand. The overall ! 5049: constraint for an operand is made from the letters for this operand ! 5050: from the first alternative, a comma, the letters for this operand from ! 5051: the second alternative, a comma, and so on until the last alternative. ! 5052: Here is how it is done for fullword logical-or on the 68000: ! 5053: ! 5054: @example ! 5055: (define_insn "iorsi3" ! 5056: [(set (match_operand:SI 0 "general_operand" "=%m,d") ! 5057: (ior:SI (match_operand:SI 1 "general_operand" "0,0") ! 5058: (match_operand:SI 2 "general_operand" "dKs,dmKs")))] ! 5059: @dots{}) ! 5060: @end example ! 5061: ! 5062: The first alternative has @samp{m} (memory) for operand 0, @samp{0} for ! 5063: operand 1 (meaning it must match operand 0), and @samp{dKs} for operand 2. ! 5064: The second alternative has @samp{d} (data register) for operand 0, @samp{0} ! 5065: for operand 1, and @samp{dmKs} for operand 2. The @samp{=} and @samp{%} in ! 5066: the constraint for operand 0 are not part of any alternative; their meaning ! 5067: is explained in the next section. ! 5068: ! 5069: If all the operands fit any one alternative, the instruction is valid. ! 5070: Otherwise, for each alternative, the compiler counts how many instructions ! 5071: must be added to copy the operands so that that alternative applies. ! 5072: The alternative requiring the least copying is chosen. If two alternatives ! 5073: need the same amount of copying, the one that comes first is chosen. ! 5074: These choices can be altered with the @samp{?} and @samp{!} characters: ! 5075: ! 5076: @table @samp ! 5077: @item ? ! 5078: Disparage slightly the alternative that the @samp{?} appears in, ! 5079: as a choice when no alternative applies exactly. The compiler regards ! 5080: this alternative as one unit more costly for each @samp{?} that appears ! 5081: in it. ! 5082: ! 5083: @item ! ! 5084: Disparage severely the alternative that the @samp{!} appears in. ! 5085: When operands must be copied into registers, the compiler will ! 5086: never choose this alternative as the one to strive for. ! 5087: @end table ! 5088: ! 5089: When an insn pattern has multiple alternatives in its constraints, ! 5090: often the appearance of the assembler code determined mostly by which ! 5091: alternative was matched. When this is so, the C code for writing the ! 5092: assembler code can use the variable @code{which_alternative}, which is ! 5093: the ordinal number of the alternative that was actually satisfied ! 5094: (0 for the first, 1 for the second alternative, etc.). For example: ! 5095: ! 5096: @example ! 5097: (define_insn "" ! 5098: [(set (match_operand:SI 0 "general_operand" "r,m") ! 5099: (const_int 0))] ! 5100: "" ! 5101: "* ! 5102: return (which_alternative == 0 ! 5103: ? \"clrreg %0\" : \"clrmem %0\"); ! 5104: ") ! 5105: @end example ! 5106: ! 5107: @node Class Preferences, Modifiers, Multi-Alternative, Constraints ! 5108: @subsection Register Class Preferences ! 5109: ! 5110: The operand constraints have another function: they enable the compiler ! 5111: to decide which kind of hardware register a pseudo register is best ! 5112: allocated to. The compiler examines the constraints that apply to the ! 5113: insns that use the pseudo register, looking for the machine-dependent ! 5114: letters such as @samp{d} and @samp{a} that specify classes of registers. ! 5115: The pseudo register is put in whichever class gets the most ``votes''. ! 5116: The constraint letters @samp{g} and @samp{r} also vote: they vote in ! 5117: favor of a general register. The machine description says which registers ! 5118: are considered general. ! 5119: ! 5120: Of course, on some machines all registers are equivalent, and no register ! 5121: classes are defined. Then none of this complexity is relevant. ! 5122: ! 5123: @node Modifiers, No Constraints, Class Preferences, Constraints ! 5124: @subsection Constraint Modifier Characters ! 5125: ! 5126: @table @samp ! 5127: @item = ! 5128: Means that this operand is write-only for this instruction: the previous ! 5129: value is discarded and replaced by output data. ! 5130: ! 5131: @item + ! 5132: Means that this operand is both read and written by the instruction. ! 5133: ! 5134: When the compiler fixes up the operands to satisfy the constraints, ! 5135: it needs to know which operands are inputs to the instruction and ! 5136: which are outputs from it. @samp{=} identifies an output; @samp{+} ! 5137: identifies an operand that is both input and output; all other operands ! 5138: are assumed to be input only. ! 5139: ! 5140: @item & ! 5141: Means (in a particular alternative) that this operand is written ! 5142: before the instruction is finished using the input operands. ! 5143: Therefore, this operand may not lie in a register that is used as an ! 5144: input operand or as part of any memory address. ! 5145: ! 5146: @samp{&} applies only to the alternative in which it is written. In ! 5147: constraints with multiple alternatives, sometimes one alternative ! 5148: requires @samp{&} while others do not. See, for example, the ! 5149: @samp{movdf} insn of the 68000. ! 5150: ! 5151: @samp{&} does not obviate the need to write @samp{=}. ! 5152: ! 5153: @item % ! 5154: Declares the instruction to be commutative for this operand and the ! 5155: following operand. This means that the compiler may interchange the ! 5156: two operands if that is the cheapest way to make all operands fit the ! 5157: constraints. This is often used in patterns for addition instructions ! 5158: that really have only two operands: the result must go in one of the ! 5159: arguments. Here for example, is how the 68000 halfword-add ! 5160: instruction is defined: ! 5161: ! 5162: @example ! 5163: (define_insn "addhi3" ! 5164: [(set (match_operand:HI 0 "general_operand" "=m,r") ! 5165: (plus:HI (match_operand:HI 1 "general_operand" "%0,0") ! 5166: (match_operand:HI 2 "general_operand" "di,g")))] ! 5167: @dots{}) ! 5168: @end example ! 5169: ! 5170: Note that in previous versions of GNU CC the @samp{%} constraint ! 5171: modifier always applied to operands 1 and 2 regardless of which ! 5172: operand it was written in. The usual custom was to write it in ! 5173: operand 0. Now it must be in operand 1 if the operands to be ! 5174: exchanged are 1 and 2. ! 5175: ! 5176: @item # ! 5177: Says that all following characters, up to the next comma, are to be ! 5178: ignored as a constraint. They are significant only for choosing ! 5179: register preferences. ! 5180: ! 5181: @item * ! 5182: Says that the following character should be ignored when choosing ! 5183: register preferences. @samp{*} has no effect on the meaning of the ! 5184: constraint as a constraint. ! 5185: ! 5186: Here is an example: the 68000 has an instruction to sign-extend a ! 5187: halfword in a data register, and can also sign-extend a value by ! 5188: copying it into an address register. While either kind of register is ! 5189: acceptable, the constraints on an address-register destination are ! 5190: less strict, so it is best if register allocation makes an address ! 5191: register its goal. Therefore, @samp{*} is used so that the @samp{d} ! 5192: constraint letter (for data register) is ignored when computing ! 5193: register preferences. ! 5194: ! 5195: @example ! 5196: (define_insn "extendhisi2" ! 5197: [(set (match_operand:SI 0 "general_operand" "=*d,a") ! 5198: (sign_extend:SI ! 5199: (match_operand:HI 1 "general_operand" "0,g")))] ! 5200: @dots{}) ! 5201: @end example ! 5202: @end table ! 5203: ! 5204: @node No Constraints,, Modifiers, Constraints ! 5205: @subsection Not Using Constraints ! 5206: ! 5207: Some machines are so clean that operand constraints are not required. For ! 5208: example, on the Vax, an operand valid in one context is valid in any other ! 5209: context. On such a machine, every operand constraint would be @samp{g}, ! 5210: excepting only operands of ``load address'' instructions which are ! 5211: written as if they referred to a memory location's contents but actual ! 5212: refer to its address. They would have constraint @samp{p}. ! 5213: ! 5214: For such machines, instead of writing @samp{g} and @samp{p} for all ! 5215: the constraints, you can choose to write a description with empty constraints. ! 5216: Then you write @samp{""} for the constraint in every @samp{match_operand}. ! 5217: Address operands are identified by writing an @samp{address} expression ! 5218: around the @samp{match_operand}, not by their constraints. ! 5219: ! 5220: When the machine description has just empty constraints, certain parts ! 5221: of compilation are skipped, making the compiler faster. ! 5222: ! 5223: @node Standard Names, Pattern Ordering, Constraints, Machine Desc ! 5224: @section Standard Names for Patterns Used in Generation ! 5225: ! 5226: Here is a table of the instruction names that are meaningful in the RTL ! 5227: generation pass of the compiler. Giving one of these names to an ! 5228: instruction pattern tells the RTL generation pass that it can use the ! 5229: pattern in to accomplish a certain task. ! 5230: ! 5231: @table @asis ! 5232: @item @samp{mov@var{m}} ! 5233: Here @var{m} is a two-letter machine mode name, in lower case. This ! 5234: instruction pattern moves data with that machine mode from operand 1 to ! 5235: operand 0. For example, @samp{movsi} moves full-word data. ! 5236: ! 5237: If operand 0 is a @samp{subreg} with mode @var{m} of a register whose ! 5238: natural mode is wider than @var{m}, the effect of this instruction is ! 5239: to store the specified value in the part of the register that corresponds ! 5240: to mode @var{m}. The effect on the rest of the register is undefined. ! 5241: ! 5242: This class of patterns is special in several ways. First of all, each ! 5243: of these names @emph{must} be defined, because there is no other way ! 5244: to copy a datum from one place to another. ! 5245: ! 5246: Second, these patterns are not used solely in the RTL generation pass. ! 5247: Even the reload pass can generate move insns to copy values from stack ! 5248: slots into temporary registers. When it does so, one of the operands ! 5249: is a hard register and the other is an operand that can have a reload. ! 5250: ! 5251: Therefore, when given such a pair of operands, the pattern must ! 5252: generate RTL which needs no temporary registers---no registers other ! 5253: than the operands. For example, if you support the pattern with a ! 5254: @code{define_expand}, then in such a case you mustn't call ! 5255: @code{force_reg} or any other such function which might generate new ! 5256: pseudo registers. ! 5257: ! 5258: This requirement exists even for subword modes on a RISC machine where ! 5259: fetching those modes from memory normally requires several insns and ! 5260: some temporary registers. Look in @file{spur.md} to see how the ! 5261: requirement is satisfied. ! 5262: ! 5263: The variety of operands that have reloads depends on the rest of the ! 5264: machine description, but typically on a RISC machine these can only be ! 5265: pseudo registers that did not get hard registers, while on other ! 5266: machines explicit memory references will get optional reloads. ! 5267: ! 5268: In addition, the constraints must allow any hard register to be moved ! 5269: to any other hard register (provided that @code{HARD_REGNO_MODE_OK} ! 5270: permits mode @var{m} in each of the registers). ! 5271: ! 5272: @item @samp{movstrict@var{m}} ! 5273: Like @samp{mov@var{m}} except that if operand 0 is a @samp{subreg} ! 5274: with mode @var{m} of a register whose natural mode is wider, ! 5275: the @samp{movstrict@var{m}} instruction is guaranteed not to alter ! 5276: any of the register except the part which belongs to mode @var{m}. ! 5277: ! 5278: @item @samp{add@var{m}3} ! 5279: Add operand 2 and operand 1, storing the result in operand 0. All operands ! 5280: must have mode @var{m}. This can be used even on two-address machines, by ! 5281: means of constraints requiring operands 1 and 0 to be the same location. ! 5282: ! 5283: @item @samp{sub@var{m}3}, @samp{mul@var{m}3}, @samp{umul@var{m}3}, @samp{div@var{m}3}, @samp{udiv@var{m}3}, @samp{mod@var{m}3}, @samp{umod@var{m}3}, @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3} ! 5284: Similar, for other arithmetic operations. ! 5285: ! 5286: There are special considerations for register classes for logical-and ! 5287: instructions, affecting also the macro @code{PREFERRED_RELOAD_CLASS}. ! 5288: They apply not only to the patterns with these standard names, but to ! 5289: any patterns that will match such an instruction. @xref{Register ! 5290: Classes}. ! 5291: ! 5292: @item @samp{mulhisi3} ! 5293: Multiply operands 1 and 2, which have mode @code{HImode}, and store ! 5294: a @code{SImode} product in operand 0. ! 5295: ! 5296: @item @samp{mulqihi3}, @samp{mulsidi3} ! 5297: Similar widening-multiplication instructions of other widths. ! 5298: ! 5299: @item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3} ! 5300: Similar widening-multiplication instructions that do unsigned ! 5301: multiplication. ! 5302: ! 5303: @item @samp{divmod@var{m}4} ! 5304: Signed division that produces both a quotient and a remainder. ! 5305: Operand 1 is divided by operand 2 to produce a quotient stored ! 5306: in operand 0 and a remainder stored in operand 3. ! 5307: ! 5308: @item @samp{udivmod@var{m}4} ! 5309: Similar, but does unsigned division. ! 5310: ! 5311: @item @samp{divmod@var{m}@var{n}4} ! 5312: Like @samp{divmod@var{m}4} except that only the dividend has mode ! 5313: @var{m}; the divisor, quotient and remainder have mode @var{n}. ! 5314: For example, the Vax has a @samp{divmoddisi4} instruction ! 5315: (but it is omitted from the machine description, because it ! 5316: is so slow that it is faster to compute remainders by the ! 5317: circumlocution that the compiler will use if this instruction is ! 5318: not available). ! 5319: ! 5320: @item @samp{ashl@var{m}3} ! 5321: Arithmetic-shift operand 1 left by a number of bits specified by ! 5322: operand 2, and store the result in operand 0. Operand 2 has ! 5323: mode @code{SImode}, not mode @var{m}. ! 5324: ! 5325: @item @samp{ashr@var{m}3}, @samp{lshl@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3} ! 5326: Other shift and rotate instructions. ! 5327: ! 5328: Logical and arithmetic left shift are the same. Machines that do not ! 5329: allow negative shift counts often have only one instruction for ! 5330: shifting left. On such machines, you should define a pattern named ! 5331: @samp{ashl@var{m}3} and leave @samp{lshl@var{m}3} undefined. ! 5332: ! 5333: There are special considerations for register classes for shift ! 5334: instructions, affecting also the macro @code{PREFERRED_RELOAD_CLASS}. ! 5335: They apply not only to the patterns with these standard names, but to ! 5336: any patterns that will match such an instruction. @xref{Register ! 5337: Classes}. ! 5338: ! 5339: @item @samp{neg@var{m}2} ! 5340: Negate operand 1 and store the result in operand 0. ! 5341: ! 5342: @item @samp{abs@var{m}2} ! 5343: Store the absolute value of operand 1 into operand 0. ! 5344: ! 5345: @item @samp{sqrt@var{m}2} ! 5346: Store the square root of operand 1 into operand 0. ! 5347: ! 5348: @item @samp{ffs@var{m}2} ! 5349: Store into operand 0 one plus the index of the least significant 1-bit ! 5350: of operand 1. If operand 1 is zero, store zero. @var{m} is the mode ! 5351: of operand 0; operand 1's mode is specified by the instruction ! 5352: pattern, and the compiler will convert the operand to that mode before ! 5353: generating the instruction. ! 5354: ! 5355: @item @samp{one_cmpl@var{m}2} ! 5356: Store the bitwise-complement of operand 1 into operand 0. ! 5357: ! 5358: @item @samp{cmp@var{m}} ! 5359: Compare operand 0 and operand 1, and set the condition codes. ! 5360: The RTL pattern should look like this: ! 5361: ! 5362: @example ! 5363: (set (cc0) (minus (match_operand:@var{m} 0 @dots{}) ! 5364: (match_operand:@var{m} 1 @dots{}))) ! 5365: @end example ! 5366: ! 5367: Each such definition in the machine description, for integer mode ! 5368: @var{m}, must have a corresponding @samp{tst@var{m}} pattern, because ! 5369: optimization can simplify the compare into a test when operand 1 is ! 5370: zero. ! 5371: ! 5372: @item @samp{tst@var{m}} ! 5373: Compare operand 0 against zero, and set the condition codes. ! 5374: The RTL pattern should look like this: ! 5375: ! 5376: @example ! 5377: (set (cc0) (match_operand:@var{m} 0 @dots{})) ! 5378: @end example ! 5379: ! 5380: @item @samp{movstr@var{m}} ! 5381: Block move instruction. The addresses of the destination and source ! 5382: strings are the first two operands, and both are in mode @code{Pmode}. ! 5383: The number of bytes to move is the third operand, in mode @var{m}. ! 5384: ! 5385: @item @samp{cmpstr@var{m}} ! 5386: Block compare instruction, with operands like @samp{movstr@var{m}} ! 5387: except that the two memory blocks are compared byte by byte ! 5388: in lexicographic order. The effect of the instruction is to set ! 5389: the condition codes. ! 5390: ! 5391: @item @samp{float@var{m}@var{n}2} ! 5392: Convert operand 1 (valid for fixed point mode @var{m}) to floating ! 5393: point mode @var{n} and store in operand 0 (which has mode @var{n}). ! 5394: ! 5395: @item @samp{fix@var{m}@var{n}2} ! 5396: Convert operand 1 (valid for floating point mode @var{m}) to fixed ! 5397: point mode @var{n} as a signed number and store in operand 0 (which ! 5398: has mode @var{n}). This instruction's result is defined only when ! 5399: the value of operand 1 is an integer. ! 5400: ! 5401: @item @samp{fixuns@var{m}@var{n}2} ! 5402: Convert operand 1 (valid for floating point mode @var{m}) to fixed ! 5403: point mode @var{n} as an unsigned number and store in operand 0 (which ! 5404: has mode @var{n}). This instruction's result is defined only when the ! 5405: value of operand 1 is an integer. ! 5406: ! 5407: @item @samp{ftrunc@var{m}2} ! 5408: Convert operand 1 (valid for floating point mode @var{m}) to an ! 5409: integer value, still represented in floating point mode @var{m}, and ! 5410: store it in operand 0 (valid for floating point mode @var{m}). ! 5411: ! 5412: @item @samp{fix_trunc@var{m}@var{n}2} ! 5413: Like @samp{fix@var{m}@var{n}2} but works for any floating point value ! 5414: of mode @var{m} by converting the value to an integer. ! 5415: ! 5416: @item @samp{fixuns_trunc@var{m}@var{n}2} ! 5417: Like @samp{fixuns@var{m}@var{n}2} but works for any floating point ! 5418: value of mode @var{m} by converting the value to an integer. ! 5419: ! 5420: @item @samp{trunc@var{m}@var{n}} ! 5421: Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and ! 5422: store in operand 0 (which has mode @var{n}). Both modes must be fixed ! 5423: point or both floating point. ! 5424: ! 5425: @item @samp{extend@var{m}@var{n}} ! 5426: Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and ! 5427: store in operand 0 (which has mode @var{n}). Both modes must be fixed ! 5428: point or both floating point. ! 5429: ! 5430: @item @samp{zero_extend@var{m}@var{n}} ! 5431: Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and ! 5432: store in operand 0 (which has mode @var{n}). Both modes must be fixed ! 5433: point. ! 5434: ! 5435: @item @samp{extv} ! 5436: Extract a bit-field from operand 1 (a register or memory operand), ! 5437: where operand 2 specifies the width in bits and operand 3 the starting ! 5438: bit, and store it in operand 0. Operand 0 must have @code{Simode}. ! 5439: Operand 1 may have mode @code{QImode} or @code{SImode}; often ! 5440: @code{SImode} is allowed only for registers. Operands 2 and 3 must be ! 5441: valid for @code{SImode}. ! 5442: ! 5443: The RTL generation pass generates this instruction only with constants ! 5444: for operands 2 and 3. ! 5445: ! 5446: The bit-field value is sign-extended to a full word integer ! 5447: before it is stored in operand 0. ! 5448: ! 5449: @item @samp{extzv} ! 5450: Like @samp{extv} except that the bit-field value is zero-extended. ! 5451: ! 5452: @item @samp{insv} ! 5453: Store operand 3 (which must be valid for @code{SImode}) into a ! 5454: bit-field in operand 0, where operand 1 specifies the width in bits ! 5455: and operand 2 the starting bit. Operand 0 may have mode @code{QImode} ! 5456: or @code{SImode}; often @code{SImode} is allowed only for registers. ! 5457: Operands 1 and 2 must be valid for @code{SImode}. ! 5458: ! 5459: The RTL generation pass generates this instruction only with constants ! 5460: for operands 1 and 2. ! 5461: ! 5462: @item @samp{s@var{cond}} ! 5463: Store zero or nonzero in the operand according to the condition codes. ! 5464: Value stored is nonzero iff the condition @var{cond} is true. ! 5465: @var{cond} is the name of a comparison operation expression code, such ! 5466: as @samp{eq}, @samp{lt} or @samp{leu}. ! 5467: ! 5468: You specify the mode that the operand must have when you write the ! 5469: @code{match_operand} expression. The compiler automatically sees ! 5470: which mode you have used and supplies an operand of that mode. ! 5471: ! 5472: The value stored for a true condition must have 1 as its low bit. ! 5473: Otherwise the instruction is not suitable and must be omitted from the ! 5474: machine description. You must tell the compiler exactly which value ! 5475: is stored by defining the macro @code{STORE_FLAG_VALUE}. ! 5476: ! 5477: @item @samp{b@var{cond}} ! 5478: Conditional branch instruction. Operand 0 is a @samp{label_ref} ! 5479: that refers to the label to jump to. Jump if the condition codes ! 5480: meet condition @var{cond}. ! 5481: ! 5482: @item @samp{call} ! 5483: Subroutine call instruction returning no value. Operand 0 is the ! 5484: function to call; operand 1 is the number of bytes of arguments pushed ! 5485: (in mode @code{SImode}, except it is normally a @samp{const_int}); ! 5486: operand 2 is the number of registers used as operands. ! 5487: ! 5488: On most machines, operand 2 is not actually stored into the RTL ! 5489: pattern. It is supplied for the sake of some RISC machines which need ! 5490: to put this information into the assembler code; they can put it in ! 5491: the RTL instead of operand 1. ! 5492: ! 5493: Operand 0 should be a @samp{mem} RTX whose address is the address of ! 5494: the function. ! 5495: ! 5496: @item @samp{call_value} ! 5497: Subroutine call instruction returning a value. Operand 0 is the hard ! 5498: register in which the value is returned. There are three more ! 5499: operands, the same as the three operands of the @samp{call} ! 5500: instruction (but with numbers increased by one). ! 5501: ! 5502: Subroutines that return @code{BLKmode} objects use the @samp{call} ! 5503: insn. ! 5504: ! 5505: @item @samp{return} ! 5506: Subroutine return instruction. This instruction pattern name should be ! 5507: defined only if a single instruction can do all the work of returning ! 5508: from a function. ! 5509: ! 5510: @item @samp{casesi} ! 5511: Instruction to jump through a dispatch table, including bounds checking. ! 5512: This instruction takes five operands: ! 5513: ! 5514: @enumerate ! 5515: @item ! 5516: The index to dispatch on, which has mode @code{SImode}. ! 5517: ! 5518: @item ! 5519: The lower bound for indices in the table, an integer constant. ! 5520: ! 5521: @item ! 5522: The upper bound for indices in the table, an integer constant. ! 5523: ! 5524: @item ! 5525: A label to jump to if the index has a value outside the bounds. ! 5526: (If the machine-description macro @code{CASE_DROPS_THROUGH} is defined, ! 5527: then an out-of-bounds index drops through to the code following ! 5528: the jump table instead of jumping to this label. In that case, ! 5529: this label is not actually used by the @samp{casesi} instruction, ! 5530: but it is always provided as an operand.) ! 5531: ! 5532: @item ! 5533: A label that precedes the table itself. ! 5534: @end enumerate ! 5535: ! 5536: The table is a @samp{addr_vec} or @samp{addr_diff_vec} inside of a ! 5537: @samp{jump_insn}. The number of elements in the table is one plus the ! 5538: difference between the upper bound and the lower bound. ! 5539: ! 5540: @item @samp{tablejump} ! 5541: Instruction to jump to a variable address. This is a low-level ! 5542: capability which can be used to implement a dispatch table when there ! 5543: is no @samp{casesi} pattern. ! 5544: ! 5545: This pattern requires two operands: the address or offset, and a label ! 5546: which should immediately precede the jump table. If the macro ! 5547: @code{CASE_VECTOR_PC_RELATIVE} is defined then the first operand is an ! 5548: absolute address to jump to; otherwise, it is an offset which counts ! 5549: from the address of the table. ! 5550: ! 5551: The @samp{tablejump} insn is always the last insn before the jump ! 5552: table it uses. Its assembler code normally has no need to use the ! 5553: second operand, but you should incorporate it in the RTL pattern so ! 5554: that the jump optimizer will not delete the table as unreachable code. ! 5555: @end table ! 5556: ! 5557: @node Pattern Ordering, Dependent Patterns, Standard Names, Machine Desc ! 5558: @section When the Order of Patterns Matters ! 5559: ! 5560: Sometimes an insn can match more than one instruction pattern. Then the ! 5561: pattern that appears first in the machine description is the one used. ! 5562: Therefore, more specific patterns (patterns that will match fewer things) ! 5563: and faster instructions (those that will produce better code when they ! 5564: do match) should usually go first in the description. ! 5565: ! 5566: In some cases the effect of ordering the patterns can be used to hide ! 5567: a pattern when it is not valid. For example, the 68000 has an ! 5568: instruction for converting a fullword to floating point and another ! 5569: for converting a byte to floating point. An instruction converting ! 5570: an integer to floating point could match either one. We put the ! 5571: pattern to convert the fullword first to make sure that one will ! 5572: be used rather than the other. (Otherwise a large integer might ! 5573: be generated as a single-byte immediate quantity, which would not work.) ! 5574: Instead of using this pattern ordering it would be possible to make the ! 5575: pattern for convert-a-byte smart enough to deal properly with any ! 5576: constant value. ! 5577: ! 5578: @node Dependent Patterns, Jump Patterns, Pattern Ordering, Machine Desc ! 5579: @section Interdependence of Patterns ! 5580: ! 5581: Every machine description must have a named pattern for each of the ! 5582: conditional branch names @samp{b@var{cond}}. The recognition template ! 5583: must always have the form ! 5584: ! 5585: @example ! 5586: (set (pc) ! 5587: (if_then_else (@var{cond} (cc0) (const_int 0)) ! 5588: (label_ref (match_operand 0 "" "")) ! 5589: (pc))) ! 5590: @end example ! 5591: ! 5592: @noindent ! 5593: In addition, every machine description must have an anonymous pattern ! 5594: for each of the possible reverse-conditional branches. These patterns ! 5595: look like ! 5596: ! 5597: @example ! 5598: (set (pc) ! 5599: (if_then_else (@var{cond} (cc0) (const_int 0)) ! 5600: (pc) ! 5601: (label_ref (match_operand 0 "" "")))) ! 5602: @end example ! 5603: ! 5604: @noindent ! 5605: They are necessary because jump optimization can turn direct-conditional ! 5606: branches into reverse-conditional branches. ! 5607: ! 5608: The compiler does more with RTL than just create it from patterns ! 5609: and recognize the patterns: it can perform arithmetic expression codes ! 5610: when constant values for their operands can be determined. As a result, ! 5611: sometimes having one pattern can require other patterns. For example, the ! 5612: Vax has no `and' instruction, but it has `and not' instructions. Here ! 5613: is the definition of one of them: ! 5614: ! 5615: @example ! 5616: (define_insn "andcbsi2" ! 5617: [(set (match_operand:SI 0 "general_operand" "") ! 5618: (and:SI (match_dup 0) ! 5619: (not:SI (match_operand:SI ! 5620: 1 "general_operand" ""))))] ! 5621: "" ! 5622: "bicl2 %1,%0") ! 5623: @end example ! 5624: ! 5625: @noindent ! 5626: If operand 1 is an explicit integer constant, an instruction constructed ! 5627: using that pattern can be simplified into an `and' like this: ! 5628: ! 5629: @example ! 5630: (set (reg:SI 41) ! 5631: (and:SI (reg:SI 41) ! 5632: (const_int 0xffff7fff))) ! 5633: @end example ! 5634: ! 5635: @noindent ! 5636: (where the integer constant is the one's complement of what ! 5637: appeared in the original instruction). ! 5638: ! 5639: To avoid a fatal error, the compiler must have a pattern that recognizes ! 5640: such an instruction. Here is what is used: ! 5641: ! 5642: @example ! 5643: (define_insn "" ! 5644: [(set (match_operand:SI 0 "general_operand" "") ! 5645: (and:SI (match_dup 0) ! 5646: (match_operand:SI 1 "general_operand" "")))] ! 5647: "GET_CODE (operands[1]) == CONST_INT" ! 5648: "* ! 5649: @{ operands[1] ! 5650: = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1])); ! 5651: return \"bicl2 %1,%0\"; ! 5652: @}") ! 5653: @end example ! 5654: ! 5655: @noindent ! 5656: Whereas a pattern to match a general `and' instruction is impossible to ! 5657: support on the Vax, this pattern is possible because it matches only a ! 5658: constant second argument: a special case that can be output as an `and not' ! 5659: instruction. ! 5660: ! 5661: A ``compare'' instruction whose RTL looks like this: ! 5662: ! 5663: @example ! 5664: (set (cc0) (minus @var{operand} (const_int 0))) ! 5665: @end example ! 5666: ! 5667: @noindent ! 5668: may be simplified by optimization into a ``test'' like this: ! 5669: ! 5670: @example ! 5671: (set (cc0) @var{operand}) ! 5672: @end example ! 5673: ! 5674: @noindent ! 5675: So in the machine description, each ``compare'' pattern for an integer ! 5676: mode must have a corresponding ``test'' pattern that will match the ! 5677: result of such simplification. ! 5678: ! 5679: In some cases machines support instructions identical except for the ! 5680: machine mode of one or more operands. For example, there may be ! 5681: ``sign-extend halfword'' and ``sign-extend byte'' instructions whose ! 5682: patterns are ! 5683: ! 5684: @example ! 5685: (set (match_operand:SI 0 @dots{}) ! 5686: (extend:SI (match_operand:HI 1 @dots{}))) ! 5687: ! 5688: (set (match_operand:SI 0 @dots{}) ! 5689: (extend:SI (match_operand:QI 1 @dots{}))) ! 5690: @end example ! 5691: ! 5692: @noindent ! 5693: Constant integers do not specify a machine mode, so an instruction to ! 5694: extend a constant value could match either pattern. The pattern it ! 5695: actually will match is the one that appears first in the file. For correct ! 5696: results, this must be the one for the widest possible mode (@code{HImode}, ! 5697: here). If the pattern matches the @code{QImode} instruction, the results ! 5698: will be incorrect if the constant value does not actually fit that mode. ! 5699: ! 5700: Such instructions to extend constants are rarely generated because they are ! 5701: optimized away, but they do occasionally happen in nonoptimized ! 5702: compilations. ! 5703: ! 5704: When an instruction has the constraint letter @samp{o}, the reload ! 5705: pass may generate instructions which copy a nonoffsetable address into ! 5706: an index register. The idea is that the register can be used as a ! 5707: replacement offsetable address. In order for these generated ! 5708: instructions to work, there must be patterns to copy any kind of valid ! 5709: address into a register. ! 5710: ! 5711: Most older machine designs have ``load address'' instructions which do ! 5712: just what is needed here. Some RISC machines do not advertise such ! 5713: instructions, but the possible addresses on these machines are very ! 5714: limited, so it is easy to fake them. ! 5715: ! 5716: Auto-increment and auto-decrement addresses are an exception; there ! 5717: need not be an instruction that can copy such an address into a ! 5718: register, because reload handles these cases in a different manner. ! 5719: ! 5720: @node Jump Patterns, Peephole Definitions, Dependent Patterns, Machine Desc ! 5721: @section Defining Jump Instruction Patterns ! 5722: ! 5723: GNU CC assumes that the machine has a condition code. A comparison insn ! 5724: sets the condition code, recording the results of both signed and unsigned ! 5725: comparison of the given operands. A separate branch insn tests the ! 5726: condition code and branches or not according its value. The branch insns ! 5727: come in distinct signed and unsigned flavors. Many common machines, such ! 5728: as the Vax, the 68000 and the 32000, work this way. ! 5729: ! 5730: Some machines have distinct signed and unsigned compare instructions, and ! 5731: only one set of conditional branch instructions. The easiest way to handle ! 5732: these machines is to treat them just like the others until the final stage ! 5733: where assembly code is written. At this time, when outputting code for the ! 5734: compare instruction, peek ahead at the following branch using ! 5735: @code{NEXT_INSN (insn)}. (The variable @code{insn} refers to the insn ! 5736: being output, in the output-writing code in an instruction pattern.) If ! 5737: the RTL says that is an unsigned branch, output an unsigned compare; ! 5738: otherwise output a signed compare. When the branch itself is output, you ! 5739: can treat signed and unsigned branches identically. ! 5740: ! 5741: The reason you can do this is that GNU CC always generates a pair of ! 5742: consecutive RTL insns, one to set the condition code and one to test it, ! 5743: and keeps the pair inviolate until the end. ! 5744: ! 5745: To go with this technique, you must define the machine-description macro ! 5746: @code{NOTICE_UPDATE_CC} to do @code{CC_STATUS_INIT}; in other words, no ! 5747: compare instruction is superfluous. ! 5748: ! 5749: Some machines have compare-and-branch instructions and no condition code. ! 5750: A similar technique works for them. When it is time to ``output'' a ! 5751: compare instruction, record its operands in two static variables. When ! 5752: outputting the branch-on-condition-code instruction that follows, actually ! 5753: output a compare-and-branch instruction that uses the remembered operands. ! 5754: ! 5755: It also works to define patterns for compare-and-branch instructions. ! 5756: In optimizing compilation, the pair of compare and branch instructions ! 5757: will be combined accoprding to these patterns. But this does not happen ! 5758: if optimization is not requested. So you must use one of the solutions ! 5759: above in addition to any special patterns you define. ! 5760: ! 5761: @node Peephole Definitions, Expander Definitions, Jump Patterns, Machine Desc ! 5762: @section Defining Machine-Specific Peephole Optimizers ! 5763: ! 5764: In addition to instruction patterns the @file{md} file may contain ! 5765: definitions of machine-specific peephole optimizations. ! 5766: ! 5767: The combiner does not notice certain peephole optimizations when the data ! 5768: flow in the program does not suggest that it should try them. For example, ! 5769: sometimes two consecutive insns related in purpose can be combined even ! 5770: though the second one does not appear to use a register computed in the ! 5771: first one. A machine-specific peephole optimizer can detect such ! 5772: opportunities. ! 5773: ! 5774: A definition looks like this: ! 5775: ! 5776: @example ! 5777: (define_peephole ! 5778: [@var{insn-pattern-1} ! 5779: @var{insn-pattern-2} ! 5780: @dots{}] ! 5781: "@var{condition}" ! 5782: "@var{template}" ! 5783: "@var{machine-specific info}") ! 5784: @end example ! 5785: ! 5786: @noindent ! 5787: The last string operand may be omitted if you are not using any ! 5788: machine-specific information in this machine description. If present, ! 5789: it must obey the same rules as in a @samp{define_insn}. ! 5790: ! 5791: In this skeleton, @var{insn-pattern-1} and so on are patterns to match ! 5792: consecutive instructions. The optimization applies to a sequence of ! 5793: instructions when @var{insn-pattern-1} matches the first one, ! 5794: @var{insn-pattern-2} matches the next, and so on.@refill ! 5795: ! 5796: @var{insn-pattern-1} and so on look @emph{almost} like the second operand ! 5797: of @code{define_insn}. There is one important difference: this pattern is ! 5798: an RTX, not a vector. If the @code{define_insn} pattern would be a vector ! 5799: of one element, the @var{insn-pattern} should be just that element, no ! 5800: vector. If the @code{define_insn} pattern would have multiple elements ! 5801: then the @var{insn-pattern} must place the vector inside an explicit ! 5802: @code{parallel} RTX.@refill ! 5803: ! 5804: The operands of the instructions are matched with @code{match_operands} and ! 5805: @code{match_dup}, as usual). What is not usual is that the operand numbers ! 5806: apply to all the instruction patterns in the definition. So, you can check ! 5807: for identical operands in two instructions by using @code{match_operand} ! 5808: in one instruction and @code{match_dup} in the other. ! 5809: ! 5810: The operand constraints used in @code{match_operand} patterns do not have ! 5811: any direct effect on the applicability of the optimization, but they will ! 5812: be validated afterward, so write constraints that are sure to fit whenever ! 5813: the optimization is applied. It is safe to use @code{"g"} for each ! 5814: operand. ! 5815: ! 5816: Once a sequence of instructions matches the patterns, the @var{condition} ! 5817: is checked. This is a C expression which makes the final decision whether ! 5818: to perform the optimization (do so if the expression is nonzero). If ! 5819: @var{condition} is omitted (in other words, the string is empty) then the ! 5820: optimization is applied to every sequence of instructions that matches the ! 5821: patterns. ! 5822: ! 5823: The defined peephole optimizations are applied after register allocation is ! 5824: complete. Therefore, the optimizer can check which operands have ended up ! 5825: in which kinds of registers, just by looking at the operands. ! 5826: ! 5827: The way to refer to the operands in @var{condition} is to write ! 5828: @code{operands[@var{i}]} for operand number @var{i} (as matched by ! 5829: @code{(match_operand @var{i} @dots{})}). Use the variable @code{insn} to ! 5830: refer to the last of the insns being matched; use @code{PREV_INSN} to find ! 5831: the preceding insns (but be careful to skip over any @samp{note} insns that ! 5832: intervene).@refill ! 5833: ! 5834: When optimizing computations with intermediate results, you can use ! 5835: @var{condition} to match only when the intermediate results are not used ! 5836: elsewhere. Use the C expression @code{dead_or_set_p (@var{insn}, ! 5837: @var{op})}, where @var{insn} is the insn in which you expect the value to ! 5838: be used for the last time (from the value of @code{insn}, together with use ! 5839: of @code{PREV_INSN}), and @var{op} is the intermediate value (from ! 5840: @code{operands[@var{i}]}).@refill ! 5841: ! 5842: Applying the optimization means replacing the sequence of instructions with ! 5843: one new instruction. The @var{template} controls ultimate output of ! 5844: assembler code for this combined instruction. It works exactly like the ! 5845: template of a @code{define_insn}. Operand numbers in this template are the ! 5846: same ones used in matching the original sequence of instructions. ! 5847: ! 5848: The result of a defined peephole optimizer does not need to match any of ! 5849: the instruction patterns, and it does not have an opportunity to match ! 5850: them. The peephole optimizer definition itself serves as the instruction ! 5851: pattern to control how the instruction is output. ! 5852: ! 5853: Defined peephole optimizers are run in the last jump optimization pass, so ! 5854: the instructions they produce are never combined or rearranged ! 5855: automatically in any way. ! 5856: ! 5857: Here is an example, taken from the 68000 machine description: ! 5858: ! 5859: @example ! 5860: (define_peephole ! 5861: [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) ! 5862: (set (match_operand:DF 0 "register_operand" "f") ! 5863: (match_operand:DF 1 "register_operand" "ad"))] ! 5864: "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" ! 5865: "* ! 5866: @{ ! 5867: rtx xoperands[2]; ! 5868: xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); ! 5869: #ifdef MOTOROLA ! 5870: output_asm_insn (\"move.l %1,(sp)\", xoperands); ! 5871: output_asm_insn (\"move.l %1,-(sp)\", operands); ! 5872: return \"fmove.d (sp)+,%0\"; ! 5873: #else ! 5874: output_asm_insn (\"movel %1,sp@@\", xoperands); ! 5875: output_asm_insn (\"movel %1,sp@@-\", operands); ! 5876: return \"fmoved sp@@+,%0\"; ! 5877: #endif ! 5878: @} ! 5879: ") ! 5880: @end example ! 5881: ! 5882: The effect of this optimization is to change ! 5883: ! 5884: @example ! 5885: jbsr _foobar ! 5886: addql #4,sp ! 5887: movel d1,sp@@- ! 5888: movel d0,sp@@- ! 5889: fmoved sp@@+,fp0 ! 5890: @end example ! 5891: ! 5892: @noindent ! 5893: into ! 5894: ! 5895: @example ! 5896: jbsr _foobar ! 5897: movel d1,sp@@ ! 5898: movel d0,sp@@- ! 5899: fmoved sp@@+,fp0 ! 5900: @end example ! 5901: ! 5902: @node Expander Definitions,, Peephole Definitions, Machine Desc ! 5903: @section Defining RTL Sequences for Code Generation ! 5904: ! 5905: On some target machines, some standard pattern names for RTL generation ! 5906: cannot be handled with single insn, but a sequence of RTL insns can ! 5907: represent them. For these target machines, you can write a ! 5908: @samp{define_expand} to specify how to generate the sequence of RTL. ! 5909: ! 5910: A @samp{define_expand} is an RTL expression that looks almost like a ! 5911: @samp{define_insn}; but, unlike the latter, a @samp{define_expand} is used ! 5912: only for RTL generation and it can produce more than one RTL insn. ! 5913: ! 5914: A @samp{define_expand} RTX has four operands: ! 5915: ! 5916: @itemize @bullet ! 5917: @item ! 5918: The name. Each @samp{define_expand} must have a name, since the only ! 5919: use for it is to refer to it by name. ! 5920: ! 5921: @item ! 5922: The RTL template. This is just like the RTL template for a ! 5923: @samp{define_peephole} in that it is a vector of RTL expressions ! 5924: each being one insn. ! 5925: ! 5926: @item ! 5927: The condition, a string containing a C expression. This expression is ! 5928: used to express how the availability of this pattern depends on ! 5929: subclasses of target machine, selected by command-line options when ! 5930: GNU CC is run. This is just like the condition of a ! 5931: @samp{define_insn} that has a standard name. ! 5932: ! 5933: @item ! 5934: The preparation statements, a string containing zero or more C ! 5935: statements which are to be executed before RTL code is generated from ! 5936: the RTL template. ! 5937: ! 5938: Usually these statements prepare temporary registers for use as ! 5939: internal operands in the RTL template, but they can also generate RTL ! 5940: insns directly by calling routines such as @samp{emit_insn}, etc. ! 5941: Any such insns precede the ones that come from the RTL template. ! 5942: @end itemize ! 5943: ! 5944: The RTL template, in addition to controlling generation of RTL insns, ! 5945: also describes the operands that need to be specified when this pattern ! 5946: is used. In particular, it gives a predicate for each operand. ! 5947: ! 5948: A true operand, which need to be specified in order to generate RTL from ! 5949: the pattern, should be described with a @samp{match_operand} in its first ! 5950: occurrence in the RTL template. This enters information on the operand's ! 5951: predicate into the tables that record such things. GNU CC uses the ! 5952: information to preload the operand into a register if that is required for ! 5953: valid RTL code. If the operand is referred to more than once, subsequent ! 5954: references should use @samp{match_dup}. ! 5955: ! 5956: The RTL template may also refer to internal ``operands'' which are ! 5957: temporary registers or labels used only within the sequence made by the ! 5958: @samp{define_expand}. Internal operands are substituted into the RTL ! 5959: template with @samp{match_dup}, never with @samp{match_operand}. The ! 5960: values of the internal operands are not passed in as arguments by the ! 5961: compiler when it requests use of this pattern. Instead, they are computed ! 5962: within the pattern, in the preparation statements. These statements ! 5963: compute the values and store them into the appropriate elements of ! 5964: @code{operands} so that @samp{match_dup} can find them. ! 5965: ! 5966: There are two special macros defined for use in the preparation statements: ! 5967: @code{DONE} and @code{FAIL}. Use them with a following semicolon, ! 5968: as a statement. ! 5969: ! 5970: @table @code ! 5971: @item DONE ! 5972: Use the @code{DONE} macro to end RTL generation for the pattern. The ! 5973: only RTL insns resulting from the pattern on this occasion will be ! 5974: those already emitted by explicit calls to @code{emit_insn} within the ! 5975: preparation statements; the RTL template will not be generated. ! 5976: ! 5977: @item FAIL ! 5978: Make the pattern fail on this occasion. When a pattern fails, it means ! 5979: that the pattern was not truly available. The calling routines in the ! 5980: compiler will try other strategies for code generation using other patterns. ! 5981: ! 5982: Failure is currently supported only for binary operations (addition, ! 5983: multiplication, shifting, etc.). ! 5984: ! 5985: Do not emit any insns explicitly with @code{emit_insn} before failing. ! 5986: @end table ! 5987: ! 5988: Here is an example, the definition of left-shift for the SPUR chip: ! 5989: ! 5990: @example ! 5991: (define_expand "ashlsi3" ! 5992: [(set (match_operand:SI 0 "register_operand" "") ! 5993: (ashift:SI ! 5994: (match_operand:SI 1 "register_operand" "") ! 5995: (match_operand:SI 2 "nonmemory_operand" "")))] ! 5996: "" ! 5997: " ! 5998: @{ ! 5999: if (GET_CODE (operands[2]) != CONST_INT ! 6000: || (unsigned) INTVAL (operands[2]) > 3) ! 6001: FAIL; ! 6002: @}") ! 6003: @end example ! 6004: ! 6005: @noindent ! 6006: This example uses @samp{define_expand} so that it can generate an RTL insn ! 6007: for shifting when the shift-count is in the supported range of 0 to 3 but ! 6008: fail in other cases where machine insns aren't available. When it fails, ! 6009: the compiler tries another strategy using different patterns (such as, a ! 6010: library call). ! 6011: ! 6012: If the compiler were able to handle nontrivial condition-strings in ! 6013: patterns with names, then there would be possible to use a ! 6014: @samp{define_insn} in that case. Here is another case (zero-extension on ! 6015: the 68000) which makes more use of the power of @samp{define_expand}: ! 6016: ! 6017: @example ! 6018: (define_expand "zero_extendhisi2" ! 6019: [(set (match_operand:SI 0 "general_operand" "") ! 6020: (const_int 0)) ! 6021: (set (strict_low_part ! 6022: (subreg:HI ! 6023: (match_operand:SI 0 "general_operand" "") ! 6024: 0)) ! 6025: (match_operand:HI 1 "general_operand" ""))] ! 6026: "" ! 6027: "operands[1] = make_safe_from (operands[1], operands[0]);") ! 6028: @end example ! 6029: ! 6030: @noindent ! 6031: Here two RTL insns are generated, one to clear the entire output operand ! 6032: and the other to copy the input operand into its low half. This sequence ! 6033: is incorrect if the input operand refers to [the old value of] the output ! 6034: operand, so the preparation statement makes sure this isn't so. The ! 6035: function @code{make_safe_from} copies the @code{operands[1]} into a ! 6036: temporary register if it refers to @code{operands[0]}. It does this ! 6037: by emitting another RTL insn. ! 6038: ! 6039: Finally, a third example shows the use of an internal operand. ! 6040: Zero-extension on the SPUR chip is done by @samp{and}-ing the result ! 6041: against a halfword mask. But this mask cannot be represented by a ! 6042: @samp{const_int} because the constant value is too large to be legitimate ! 6043: on this machine. So it must be copied into a register with ! 6044: @code{force_reg} and then the register used in the @samp{and}. ! 6045: ! 6046: @example ! 6047: (define_expand "zero_extendhisi2" ! 6048: [(set (match_operand:SI 0 "register_operand" "") ! 6049: (and:SI (subreg:SI ! 6050: (match_operand:HI 1 "register_operand" "") ! 6051: 0) ! 6052: (match_dup 2)))] ! 6053: "" ! 6054: "operands[2] ! 6055: = force_reg (SImode, gen_rtx (CONST_INT, ! 6056: VOIDmode, 65535)); ") ! 6057: @end example ! 6058: ! 6059: @node Machine Macros, Config, Machine Desc, Top ! 6060: @chapter Machine Description Macros ! 6061: ! 6062: The other half of the machine description is a C header file conventionally ! 6063: given the name @file{tm-@var{machine}.h}. The file @file{tm.h} should be a ! 6064: link to it. The header file @file{config.h} includes @file{tm.h} and most ! 6065: compiler source files include @file{config.h}. ! 6066: ! 6067: @menu ! 6068: * Run-time Target:: Defining -m options like -m68000 and -m68020. ! 6069: * Storage Layout:: Defining sizes and alignments of data types. ! 6070: * Registers:: Naming and describing the hardware registers. ! 6071: * Register Classes:: Defining the classes of hardware registers. ! 6072: * Stack Layout:: Defining which way the stack grows and by how much. ! 6073: * Library Names:: Specifying names of subroutines to call automatically. ! 6074: * Addressing Modes:: Defining addressing modes valid for memory operands. ! 6075: * Condition Code:: Defining how insns update the condition code. ! 6076: * Assembler Format:: Defining how to write insns and pseudo-ops to output. ! 6077: * Misc:: Everything else. ! 6078: @end menu ! 6079: ! 6080: @node Run-time Target, Storage Layout, Machine Macros, Machine Macros ! 6081: @section Run-time Target Specification ! 6082: ! 6083: @table @code ! 6084: @item CPP_PREDEFINES ! 6085: Define this to be a string constant containing @samp{-D} options to ! 6086: define the predefined macros that identify this machine and system. ! 6087: These macros will be predefined unless the @samp{-ansi} option is ! 6088: specified. ! 6089: ! 6090: For example, on the Sun, one can use the value ! 6091: ! 6092: @example ! 6093: "-Dmc68000 -Dsun -Dunix" ! 6094: @end example ! 6095: ! 6096: @item CPP_SPEC ! 6097: A C string constant that tells the GNU CC driver program options to ! 6098: pass to CPP. It can also specify how to translate options you ! 6099: give to GNU CC into options for GNU CC to pass to the CPP. ! 6100: ! 6101: Do not define this macro if it does not need to do anything. ! 6102: ! 6103: @item CC1_SPEC ! 6104: A C string constant that tells the GNU CC driver program options to ! 6105: pass to CC1. It can also specify how to translate options you ! 6106: give to GNU CC into options for GNU CC to pass to the CC1. ! 6107: ! 6108: Do not define this macro if it does not need to do anything. ! 6109: ! 6110: @item extern int target_flags; ! 6111: This declaration should be present. ! 6112: ! 6113: @item TARGET_@dots{} ! 6114: This series of macros is to allow compiler command arguments to ! 6115: enable or disable the use of optional features of the target machine. ! 6116: For example, one machine description serves both the 68000 and ! 6117: the 68020; a command argument tells the compiler whether it should ! 6118: use 68020-only instructions or not. This command argument works ! 6119: by means of a macro @code{TARGET_68020} that tests a bit in ! 6120: @code{target_flags}. ! 6121: ! 6122: Define a macro @code{TARGET_@var{featurename}} for each such option. ! 6123: Its definition should test a bit in @code{target_flags}; for example: ! 6124: ! 6125: @example ! 6126: #define TARGET_68020 (target_flags & 1) ! 6127: @end example ! 6128: ! 6129: One place where these macros are used is in the condition-expressions ! 6130: of instruction patterns. Note how @code{TARGET_68020} appears ! 6131: frequently in the 68000 machine description file, @file{m68k.md}. ! 6132: Another place they are used is in the definitions of the other ! 6133: macros in the @file{tm-@var{machine}.h} file. ! 6134: ! 6135: @item TARGET_SWITCHES ! 6136: This macro defines names of command options to set and clear ! 6137: bits in @code{target_flags}. Its definition is an initializer ! 6138: with a subgrouping for each command option. ! 6139: ! 6140: Each subgrouping contains a string constant, that defines the option ! 6141: name, and a number, which contains the bits to set in ! 6142: @code{target_flags}. A negative number says to clear bits instead; ! 6143: the negative of the number is which bits to clear. The actual option ! 6144: name is made by appending @samp{-m} to the specified name. ! 6145: ! 6146: One of the subgroupings should have a null string. The number in ! 6147: this grouping is the default value for @code{target_flags}. Any ! 6148: target options act starting with that value. ! 6149: ! 6150: Here is an example which defines @samp{-m68000} and @samp{-m68020} ! 6151: with opposite meanings, and picks the latter as the default: ! 6152: ! 6153: @example ! 6154: #define TARGET_SWITCHES \ ! 6155: @{ @{ "68020", 1@}, \ ! 6156: @{ "68000", -1@}, \ ! 6157: @{ "", 1@}@} ! 6158: @end example ! 6159: ! 6160: @item OVERRIDE_OPTIONS ! 6161: Sometimes certain combinations of command options do not make sense on ! 6162: a particular target machine. You can define a macro ! 6163: @code{OVERRIDE_OPTIONS} to take account of this. This macro, if ! 6164: defined, is executed once just after all the command options have been ! 6165: parsed. ! 6166: @end table ! 6167: ! 6168: @node Storage Layout, Registers, Run-time Target, Machine Macros ! 6169: @section Storage Layout ! 6170: ! 6171: Note that the definitions of the macros in this table which are sizes or ! 6172: alignments measured in bits do not need to be constant. They can be C ! 6173: expressions that refer to static variables, such as the @code{target_flags}. ! 6174: @xref{Run-time Target}. ! 6175: ! 6176: @table @code ! 6177: @item BITS_BIG_ENDIAN ! 6178: Define this macro if the most significant bit in a byte has the lowest ! 6179: number. This means that bit-field instructions count from the most ! 6180: significant bit. If the machine has no bit-field instructions, this ! 6181: macro is irrelevant. ! 6182: ! 6183: @item BYTES_BIG_ENDIAN ! 6184: Define this macro if the most significant byte in a word has the ! 6185: lowest number. ! 6186: ! 6187: @item WORDS_BIG_ENDIAN ! 6188: Define this macro if, in a multiword object, the most significant ! 6189: word has the lowest number. ! 6190: ! 6191: @item BITS_PER_UNIT ! 6192: Number of bits in an addressable storage unit (byte); normally 8. ! 6193: ! 6194: @item BITS_PER_WORD ! 6195: Number of bits in a word; normally 32. ! 6196: ! 6197: @item UNITS_PER_WORD ! 6198: Number of storage units in a word; normally 4. ! 6199: ! 6200: @item POINTER_SIZE ! 6201: Width of a pointer, in bits. ! 6202: ! 6203: @item POINTER_BOUNDARY ! 6204: Alignment required for pointers stored in memory, in bits. ! 6205: ! 6206: @item PARM_BOUNDARY ! 6207: Alignment required for function parameters on the stack, in bits. ! 6208: ! 6209: @item STACK_BOUNDARY ! 6210: Define this macro if you wish to preserve a certain alignment for ! 6211: the stack pointer at all times. The definition is a C expression ! 6212: for the desired alignment (measured in bits). ! 6213: ! 6214: @item FUNCTION_BOUNDARY ! 6215: Alignment required for a function entry point, in bits. ! 6216: ! 6217: @item BIGGEST_ALIGNMENT ! 6218: Biggest alignment that any data type can require on this machine, in bits. ! 6219: ! 6220: @item EMPTY_FIELD_BOUNDARY ! 6221: Alignment in bits to be given to a structure bit field that follows an ! 6222: empty field such as @code{int : 0;}. ! 6223: ! 6224: @item STRUCTURE_SIZE_BOUNDARY ! 6225: Number of bits which any structure or union's size must be a multiple of. ! 6226: Each structure or union's size is rounded up to a multiple of this. ! 6227: ! 6228: If you do not define this macro, the default is the same as ! 6229: @code{BITS_PER_UNIT}. ! 6230: ! 6231: @item STRICT_ALIGNMENT ! 6232: Define this if instructions will fail to work if given data not ! 6233: on the nominal alignment. If instructions will merely go slower ! 6234: in that case, do not define this macro. ! 6235: ! 6236: @item PCC_BITFIELD_TYPE_MATTERS ! 6237: Define this if you wish to imitate a certain bizarre behavior pattern ! 6238: of some instances of PCC: a bit field whose declared type is ! 6239: @code{int} has the same effect on the size and alignment of a ! 6240: structure as an actual @code{int} would have. ! 6241: ! 6242: Just what effect that is in GNU CC depends on other parameters, but on ! 6243: most machines it would force the structure's alignment and size to a ! 6244: multiple of 32 or @code{BIGGEST_ALIGNMENT} bits. ! 6245: ! 6246: @item CHECK_FLOAT_VALUE (@var{mode}, @var{value}) ! 6247: A C statement to validate the value @var{value} (or type ! 6248: @code{double}) for mode @var{mode}. This means that you check whether ! 6249: @var{value} fits within the possible range of values for mode ! 6250: @var{mode} on this target machine. The mode @var{mode} is always ! 6251: @code{SFmode} or @code{DFmode}. ! 6252: ! 6253: If @var{value} is not valid, you should call @code{error} to print an ! 6254: error message and then assign some valid value to @var{value}. ! 6255: Allowing an invalid value to go through the compiler can produce ! 6256: incorrect assembler code which may even cause Unix assemblers to ! 6257: crash. ! 6258: ! 6259: This macro need not be defined if there is no work for it to do. ! 6260: @end table ! 6261: ! 6262: @node Registers, Register Classes, Storage Layout, Machine Macros ! 6263: @section Register Usage ! 6264: ! 6265: @table @code ! 6266: @item FIRST_PSEUDO_REGISTER ! 6267: Number of hardware registers known to the compiler. They receive ! 6268: numbers 0 through @code{FIRST_PSEUDO_REGISTER-1}; thus, the first ! 6269: pseudo register's number really is assigned the number ! 6270: @code{FIRST_PSEUDO_REGISTER}. ! 6271: ! 6272: @item FIXED_REGISTERS ! 6273: An initializer that says which registers are used for fixed purposes ! 6274: all throughout the compiled code and are therefore not available for ! 6275: general allocation. These would include the stack pointer, the frame ! 6276: pointer (except on machines where that can be used as a general ! 6277: register when no frame pointer is needed), the program counter on ! 6278: machines where that is considered one of the addressable registers, ! 6279: and any other numbered register with a standard use. ! 6280: ! 6281: This information is expressed as a sequence of numbers, separated by ! 6282: commas and surrounded by braces. The @var{n}th number is 1 if ! 6283: register @var{n} is fixed, 0 otherwise. ! 6284: ! 6285: The table initialized from this macro, and the table initialized by ! 6286: the following one, may be overridden at run time either automatically, ! 6287: by the actions of the macro @code{CONDITIONAL_REGISTER_USAGE}, or by ! 6288: the user with the command options @samp{-ffixed-@var{reg}}, ! 6289: @samp{-fcall-used-@var{reg}} and @samp{-fcall-saved-@var{reg}}. ! 6290: ! 6291: @item CALL_USED_REGISTERS ! 6292: Like @code{FIXED_REGISTERS} but has 1 for each register that is ! 6293: clobbered (in general) by function calls as well as for fixed ! 6294: registers. This macro therefore identifies the registers that are not ! 6295: available for general allocation of values that must live across ! 6296: function calls. ! 6297: ! 6298: If a register has 0 in @code{CALL_USED_REGISTERS}, the compiler ! 6299: automatically saves it on function entry and restores it on function ! 6300: exit, if the register is used within the function. ! 6301: ! 6302: @item CONDITIONAL_REGISTER_USAGE ! 6303: Zero or more C statements that may conditionally modify two variables ! 6304: @code{fixed_regs} and @code{call_used_regs} (both of type @code{char ! 6305: []}) after they have been initialized from the two preceding macros. ! 6306: ! 6307: This is necessary in case the fixed or call-clobbered registers depend ! 6308: on target flags. ! 6309: ! 6310: You need not define this macro if it has no work to do. ! 6311: ! 6312: If the usage of an entire class of registers depends on the target ! 6313: flags, you may indicate this to gcc by using this macro to modify ! 6314: @code{fixed_regs} and @code{call_used_regs} to 1 for each of the ! 6315: registers in the classes which should not be used by gcc. Also define ! 6316: the macro @code{REG_CLASS_FROM_LETTER} to return @code{NO_REGS} if it ! 6317: is called with a letter for a class that shouldn't be used. ! 6318: ! 6319: (However, if this class is not included in @code{GENERAL_REGS} and all ! 6320: of the insn patterns whose constraints permit this class are ! 6321: controlled by target switches, then GCC will automatically avoid using ! 6322: these registers when the target switches are opposed to them.) ! 6323: ! 6324: @item OVERLAPPING_REGNO_P (@var{regno}) ! 6325: If defined, this is a C expression whose value is @var{regno} is ! 6326: nonzero if hard register number @var{regno} is an overlapping ! 6327: register. This means a hard register which overlaps a hard register ! 6328: with a different number. (Such overlap is undesirable, but ! 6329: occasionally it allows a machine to be supported which otherwise could ! 6330: not be.) This macro must return nonzero for @emph{all} the registers ! 6331: which overlap each other. GNU CC can use an overlapping register only ! 6332: in certain limited ways. It can be used for allocation within a basic ! 6333: block, and may be spilled for reloading; that is all. ! 6334: ! 6335: If this macro is not defined, it means that none of the hard registers ! 6336: overlap each other. This is the usual situation. ! 6337: ! 6338: @item INSN_CLOBBERS_REGNO_P (@var{insn}, @var{regno}) ! 6339: If defined, this is a C expression whose value should be nonzero if ! 6340: the insn @var{insn} has the effect of mysteriously clobbering the ! 6341: contents of hard register number @var{regno}. By ``mysterious'' we ! 6342: mean that the insn's RTL expression doesn't describe such an effect. ! 6343: ! 6344: If this macro is not defined, it means that no insn clobbers registers ! 6345: mysteriously. This is the usual situation; all else being equal, ! 6346: it is best for the RTL expression to show all the activity. ! 6347: ! 6348: @item PRESERVE_DEATH_INFO_REGNO_P (@var{regno}) ! 6349: If defined, this is a C expression whose value is nonzero if accurate ! 6350: @code{REG_DEAD} notes are needed for hard register number @var{regno} ! 6351: at the time of outputting the assembler code. When this is so, a few ! 6352: optimizations that take place after register allocation and could ! 6353: invalidate the death notes are not done when this register is ! 6354: involved. ! 6355: ! 6356: You would arrange to preserve death info for a register when some ! 6357: of the code in the machine description which is executed to write ! 6358: the assembler code looks at the the death notes. This is ! 6359: necessary only when the actual hardware feature which GNU CC ! 6360: thinks of as a register is not actually a register of the usual sort. ! 6361: (It might, for example, be a hardware stack.) ! 6362: ! 6363: If this macro is not defined, it means that no death notes need to be ! 6364: preserved. This is the usual situation. ! 6365: ! 6366: @item HARD_REGNO_REGS (@var{regno}, @var{mode}) ! 6367: A C expression for the number of consecutive hard registers, starting ! 6368: at register number @var{regno}, required to hold a value of mode ! 6369: @var{mode}. ! 6370: ! 6371: On a machine where all registers are exactly one word, a suitable ! 6372: definition of this macro is ! 6373: ! 6374: @example ! 6375: #define HARD_REGNO_NREGS(REGNO, MODE) \ ! 6376: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ ! 6377: / UNITS_PER_WORD)) ! 6378: @end example ! 6379: ! 6380: @item HARD_REGNO_MODE_OK (@var{regno}, @var{mode}) ! 6381: A C expression that is nonzero if it is permissible to store a value ! 6382: of mode @var{mode} in hard register number @var{regno} (or in several ! 6383: registers starting with that one). For a machine where all registers ! 6384: are equivalent, a suitable definition is ! 6385: ! 6386: @example ! 6387: #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 ! 6388: @end example ! 6389: ! 6390: It is not necessary for this macro to check for fixed register numbers ! 6391: because the allocation mechanism considers them to be always occupied. ! 6392: ! 6393: Many machines have special registers for floating point arithmetic. ! 6394: Often people assume that floating point machine modes are allowed only ! 6395: in floating point registers. This is not true. Any registers that ! 6396: can hold integers can safely @emph{hold} a floating point machine ! 6397: mode, whether or not floating arithmetic can be done on it in those ! 6398: registers. ! 6399: ! 6400: The true significance of special floating registers is rather than ! 6401: non-floating-point machine modes @emph{may not} go in those registers. ! 6402: This is true if the floating registers normalize any value stored in ! 6403: them, because storing a non-floating value there would garble it. If ! 6404: the floating registers do not automatically normalize, if you can ! 6405: store any bit pattern in one and retrieve it unchanged without a trap, ! 6406: then any machine mode may go in a floating register and this macro ! 6407: should say so. ! 6408: ! 6409: Sometimes there are floating registers that are especially slow to ! 6410: access, so that it is better to store a value in a stack frame than in ! 6411: such a register if floating point arithmetic is not being done. As long ! 6412: as the floating registers are not in class @code{GENERAL_REGS}, they ! 6413: will not be used unless some insn's constraint asks for one. ! 6414: ! 6415: It is obligatory to support floating point `move' instructions into ! 6416: and out of any registers that can hold fixed point values, because ! 6417: unions and structures (which have modes @samp{SImode} or ! 6418: @samp{DImode}) can be in those registers and they may have floating ! 6419: point members. ! 6420: ! 6421: There may also be a need to support fixed point `move' instructions in ! 6422: and out of floating point registers. Unfortunately, I have forgotten ! 6423: why this was so, and I don't know whether it is still true. If ! 6424: @code{HARD_REGNO_MODE_OK} rejects fixed point values in floating point ! 6425: registers, then the constraints of the fixed point `move' instructions ! 6426: must be designed to avoid ever trying to reload into a floating point ! 6427: register. ! 6428: ! 6429: @item MODES_TIEABLE_P (@var{mode1}, @var{mode2}) ! 6430: A C expression that is nonzero if it is desirable to choose register ! 6431: allocation so as to avoid move instructions between a value of mode ! 6432: @var{mode1} and a value of mode @var{mode2}. ! 6433: ! 6434: If @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode1})} and ! 6435: @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are ever different ! 6436: for any @var{r}, then @code{MODES_TIEABLE_P (@var{mode1}, ! 6437: @var{mode2})} must be zero. ! 6438: ! 6439: @item PC_REGNUM ! 6440: If the program counter has a register number, define this as that ! 6441: register number. Otherwise, do not define it. ! 6442: ! 6443: @item STACK_POINTER_REGNUM ! 6444: The register number of the stack pointer register, which must also be ! 6445: a fixed register according to @code{FIXED_REGISTERS}. On many ! 6446: machines, the hardware determines which register this is. ! 6447: ! 6448: @item FRAME_POINTER_REGNUM ! 6449: The register number of the frame pointer register, which is used to ! 6450: access automatic variables in the stack frame. On some machines, the ! 6451: hardware determines which register this is. On other machines, you ! 6452: can choose any register you wish for this purpose. ! 6453: ! 6454: @item FRAME_POINTER_REQUIRED ! 6455: A C expression which is nonzero if a function must have and use a ! 6456: frame pointer. This expression is evaluated in the reload pass, in ! 6457: the function @code{reload}, and it can in principle examine the ! 6458: current function and decide according to the facts, but on most ! 6459: machines the constant 0 or the constant 1 suffices. Use 0 when the ! 6460: machine allows code to be generated with no frame pointer, and doing ! 6461: so saves some time or space. Use 1 when there is no possible ! 6462: advantage to avoiding a frame pointer. ! 6463: ! 6464: In certain cases, the compiler does not know how to do without a frame ! 6465: pointer. The compiler recognizes those cases and automatically gives ! 6466: the function a frame pointer regardless of what ! 6467: @code{FRAME_POINTER_REQUIRED} says. You don't need to worry about ! 6468: them.@refill ! 6469: ! 6470: In a function that does not require a frame pointer, the frame pointer ! 6471: register can be allocated for ordinary usage, unless you mark it as a ! 6472: fixed register. See @code{FIXED_REGISTERS} for more information. ! 6473: ! 6474: @item ARG_POINTER_REGNUM ! 6475: The register number of the arg pointer register, which is used to ! 6476: access the function's argument list. On some machines, this is the ! 6477: same as the frame pointer register. On some machines, the hardware ! 6478: determines which register this is. On other machines, you can choose ! 6479: any register you wish for this purpose. If this is not the same ! 6480: register as the frame pointer register, then you must mark it as a ! 6481: fixed register according to @code{FIXED_REGISTERS}. ! 6482: ! 6483: @item STATIC_CHAIN_REGNUM ! 6484: The register number used for passing a function's static chain ! 6485: pointer. This is needed for languages such as Pascal and Algol where ! 6486: functions defined within other functions can access the local ! 6487: variables of the outer functions; it is not currently used because C ! 6488: does not provide this feature, but you must define the macro. ! 6489: ! 6490: The static chain register need not be a fixed register. ! 6491: ! 6492: @item STRUCT_VALUE_REGNUM ! 6493: When a function's value's mode is @code{BLKmode}, the value is not ! 6494: returned according to @code{FUNCTION_VALUE}. Instead, the caller ! 6495: passes the address of a block of memory in which the value should be ! 6496: stored. ! 6497: ! 6498: If this value is passed in a register, then @code{STRUCT_VALUE_REGNUM} ! 6499: should be the number of that register. ! 6500: ! 6501: @item STRUCT_VALUE ! 6502: If the structure value address is not passed in a register, define ! 6503: @code{STRUCT_VALUE} as an expression returning an RTX for the place ! 6504: where the address is passed. If it returns a @samp{mem} RTX, the ! 6505: address is passed as an ``invisible'' first argument. ! 6506: ! 6507: @item STRUCT_VALUE_INCOMING_REGNUM ! 6508: On some architectures the place where the structure value address ! 6509: is found by the called function is not the same place that the ! 6510: caller put it. This can be due to register windows, or it could ! 6511: be because the function prologue moves it to a different place. ! 6512: ! 6513: If the incoming location of the structure value address is in a ! 6514: register, define this macro as the register number. ! 6515: ! 6516: @item STRUCT_VALUE_INCOMING ! 6517: If the incoming location is not a register, define ! 6518: @code{STRUCT_VALUE_INCOMING} as an expression for an RTX for where the ! 6519: called function should find the value. If it should find the value on ! 6520: the stack, define this to create a @samp{mem} which refers to the ! 6521: frame pointer. If the value is a @samp{mem}, the compiler assumes it ! 6522: is for an invisible first argument, and leaves space for it when ! 6523: finding the first real argument. ! 6524: ! 6525: @item REG_ALLOC_ORDER ! 6526: If defined, an initializer for a vector of integers, containing the ! 6527: numbers of hard registers in the order in which the GNU CC should ! 6528: prefer to use them (from most preferred to least). ! 6529: ! 6530: If this macro is not defined, registers are used lowest numbered first ! 6531: (all else being equal). ! 6532: ! 6533: One use of this macro is on the 360, where the highest numbered ! 6534: registers must always be saved and the save-multiple-registers ! 6535: instruction supports only sequences of consecutive registers. This ! 6536: macro is defined to cause the highest numbered allocatable registers ! 6537: to be used first. ! 6538: @end table ! 6539: ! 6540: @node Register Classes, Stack Layout, Registers, Machine Macros ! 6541: @section Register Classes ! 6542: ! 6543: On many machines, the numbered registers are not all equivalent. ! 6544: For example, certain registers may not be allowed for indexed addressing; ! 6545: certain registers may not be allowed in some instructions. These machine ! 6546: restrictions are described to the compiler using @dfn{register classes}. ! 6547: ! 6548: You define a number of register classes, giving each one a name and saying ! 6549: which of the registers belong to it. Then you can specify register classes ! 6550: that are allowed as operands to particular instruction patterns. ! 6551: ! 6552: In general, each register will belong to several classes. In fact, one ! 6553: class must be named @code{ALL_REGS} and contain all the registers. Another ! 6554: class must be named @code{NO_REGS} and contain no registers. Often the ! 6555: union of two classes will be another class; however, this is not required. ! 6556: ! 6557: One of the classes must be named @code{GENERAL_REGS}. There is nothing ! 6558: terribly special about the name, but the operand constraint letters ! 6559: @samp{r} and @samp{g} specify this class. If @code{GENERAL_REGS} is ! 6560: the same as @code{ALL_REGS}, just define it as a macro which expands ! 6561: to @code{ALL_REGS}. ! 6562: ! 6563: The way classes other than @code{GENERAL_REGS} are specified in operand ! 6564: constraints is through machine-dependent operand constraint letters. ! 6565: You can define such letters to correspond to various classes, then use ! 6566: them in operand constraints. ! 6567: ! 6568: You should define a class for the union of two classes whenever some ! 6569: instruction allows both classes. For example, if an instruction allows ! 6570: either a floating-point (coprocessor) register or a general register for a ! 6571: certain operand, you should define a class @code{FLOAT_OR_GENERAL_REGS} ! 6572: which includes both of them. Otherwise you will get suboptimal code. ! 6573: ! 6574: You must also specify certain redundant information about the register ! 6575: classes: for each class, which classes contain it and which ones are ! 6576: contained in it; for each pair of classes, the largest class contained ! 6577: in their union. ! 6578: ! 6579: Register classes used for input-operands of bitwise-and or shift ! 6580: instructions have a special requirement: each such class must have, for ! 6581: each fixed-point machine mode, a subclass whose registers can transfer that ! 6582: mode to or from memory. For example, on some machines, the operations for ! 6583: single-byte values (@code{QImode}) are limited to certain registers. When ! 6584: this is so, each register class that is used in a bitwise-and or shift ! 6585: instruction must have a subclass consisting of registers from which ! 6586: single-byte values can be loaded or stored. This is so that ! 6587: @code{PREFERRED_RELOAD_CLASS} can always have a possible value to return. ! 6588: ! 6589: @table @code ! 6590: @item enum reg_class ! 6591: An enumeral type that must be defined with all the register class names ! 6592: as enumeral values. @code{NO_REGS} must be first. @code{ALL_REGS} ! 6593: must be the last register class, followed by one more enumeral value, ! 6594: @code{LIM_REG_CLASSES}, which is not a register class but rather ! 6595: tells how many classes there are. ! 6596: ! 6597: Each register class has a number, which is the value of casting ! 6598: the class name to type @code{int}. The number serves as an index ! 6599: in many of the tables described below. ! 6600: ! 6601: @item N_REG_CLASSES ! 6602: The number of distinct register classes, defined as follows: ! 6603: ! 6604: @example ! 6605: #define N_REG_CLASSES (int) LIM_REG_CLASSES ! 6606: @end example ! 6607: ! 6608: @item REG_CLASS_NAMES ! 6609: An initializer containing the names of the register classes as C string ! 6610: constants. These names are used in writing some of the debugging dumps. ! 6611: ! 6612: @item REG_CLASS_CONTENTS ! 6613: An initializer containing the contents of the register classes, as integers ! 6614: which are bit masks. The @var{n}th integer specifies the contents of class ! 6615: @var{n}. The way the integer @var{mask} is interpreted is that ! 6616: register @var{r} is in the class if @code{@var{mask} & (1 << @var{r})} is 1. ! 6617: ! 6618: When the machine has more than 32 registers, an integer does not suffice. ! 6619: Then the integers are replaced by sub-initializers, braced groupings containing ! 6620: several integers. Each sub-initializer must be suitable as an initializer ! 6621: for the type @code{HARD_REG_SET} which is defined in @file{hard-reg-set.h}. ! 6622: ! 6623: @item REGNO_REG_CLASS (@var{regno}) ! 6624: A C expression whose value is a register class containing hard register ! 6625: @var{regno}. In general there is more that one such class; choose a class ! 6626: which is @dfn{minimal}, meaning that no smaller class also contains the ! 6627: register. ! 6628: ! 6629: @item BASE_REG_CLASS ! 6630: A macro whose definition is the name of the class to which a valid ! 6631: base register must belong. A base register is one used in an address ! 6632: which is the register value plus a displacement. ! 6633: ! 6634: @item INDEX_REG_CLASS ! 6635: A macro whose definition is the name of the class to which a valid ! 6636: index register must belong. An index register is one used in an ! 6637: address where its value is either multiplied by a scale factor or ! 6638: added to another register (as well as added to a displacement). ! 6639: ! 6640: @item REG_CLASS_FROM_LETTER (@var{char}) ! 6641: A C expression which defines the machine-dependent operand constraint ! 6642: letters for register classes. If @var{char} is such a letter, the ! 6643: value should be the register class corresponding to it. Otherwise, ! 6644: the value should be @code{NO_REGS}. ! 6645: ! 6646: @item REGNO_OK_FOR_BASE_P (@var{num}) ! 6647: A C expression which is nonzero if register number @var{num} is ! 6648: suitable for use as a base register in operand addresses. It may be ! 6649: either a suitable hard register or a pseudo register that has been ! 6650: allocated such a hard register. ! 6651: ! 6652: @item REGNO_OK_FOR_INDEX_P (@var{num}) ! 6653: A C expression which is nonzero if register number @var{num} is ! 6654: suitable for use as an index register in operand addresses. It may be ! 6655: either a suitable hard register or a pseudo register that has been ! 6656: allocated such a hard register. ! 6657: ! 6658: The difference between an index register and a base register is that ! 6659: the index register may be scaled. If an address involves the sum of ! 6660: two registers, neither one of them scaled, then either one may be ! 6661: labeled the ``base'' and the other the ``index''; but whichever ! 6662: labeling is used must fit the machine's constraints of which registers ! 6663: may serve in each capacity. The compiler will try both labelings, ! 6664: looking for one that is valid, and will reload one or both registers ! 6665: only if neither labeling works. ! 6666: ! 6667: @item PREFERRED_RELOAD_CLASS (@var{x}, @var{class}) ! 6668: A C expression that places additional restrictions on the register class ! 6669: to use when it is necessary to copy value @var{x} into a register in class ! 6670: @var{class}. The value is a register class; perhaps @var{class}, or perhaps ! 6671: another, smaller class. On many machines, the definition ! 6672: ! 6673: @example ! 6674: #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS ! 6675: @end example ! 6676: ! 6677: @noindent ! 6678: is safe. ! 6679: ! 6680: Sometimes returning a more restrictive class makes better code. For ! 6681: example, on the 68000, when @var{x} is an integer constant that is in range ! 6682: for a @samp{moveq} instruction, the value of this macro is always ! 6683: @code{DATA_REGS} as long as @var{class} includes the data registers. ! 6684: Requiring a data register guarantees that a @samp{moveq} will be used. ! 6685: ! 6686: If @var{x} is a @samp{const_double}, by returning @code{NO_REGS} ! 6687: you can force @var{x} into a memory constant. This is useful on ! 6688: certain machines where immediate floating values cannot be loaded into ! 6689: certain kinds of registers. ! 6690: ! 6691: In a shift instruction or a bitwise-and instruction, the mode of @var{x}, ! 6692: the value being reloaded, may not be the same as the mode of the ! 6693: instruction's operand. (They will both be fixed-point modes, however.) In ! 6694: such a case, @var{class} may not be a safe value to return. @var{class} is ! 6695: certainly valid for the instruction, but it may not be valid for reloading ! 6696: @var{x}. This problem can occur on machines such as the 68000 and 80386 ! 6697: where some registers can handle full-word values but cannot handle ! 6698: single-byte values. ! 6699: ! 6700: On such machines, this macro must examine the mode of @var{x} and return a ! 6701: subclass of @var{class} which can handle loads and stores of that mode. On ! 6702: the 68000, where address registers cannot handle @code{QImode}, if @var{x} ! 6703: has @code{QImode} then you must return @code{DATA_REGS}. If @var{class} is ! 6704: @code{ADDR_REGS}, then there is no correct value to return; but the shift ! 6705: and bitwise-and instructions don't use @code{ADDR_REGS}, so this fatal case ! 6706: never arises. ! 6707: ! 6708: @item CLASS_MAX_NREGS (@var{class}, @var{mode}) ! 6709: A C expression for the maximum number of consecutive registers ! 6710: of class @var{class} needed to hold a value of mode @var{mode}. ! 6711: ! 6712: This is closely related to the macro @code{HARD_REGNO_NREGS}. ! 6713: In fact, the value of the macro @code{CLASS_MAX_NREGS (@var{class}, @var{mode})} ! 6714: should be the maximum value of @code{HARD_REGNO_NREGS (@var{regno}, @var{mode})} ! 6715: for all @var{regno} values in the class @var{class}. ! 6716: ! 6717: This macro helps control the handling of multiple-word values ! 6718: in the reload pass. ! 6719: @end table ! 6720: ! 6721: Two other special macros describe which constants fit which constraint ! 6722: letters. ! 6723: ! 6724: @table @code ! 6725: @item CONST_OK_FOR_LETTER_P (@var{value}, @var{c}) ! 6726: A C expression that defines the machine-dependent operand constraint letters ! 6727: that specify particular ranges of integer values. If @var{c} is one ! 6728: of those letters, the expression should check that @var{value}, an integer, ! 6729: is in the appropriate range and return 1 if so, 0 otherwise. If @var{c} is ! 6730: not one of those letters, the value should be 0 regardless of @var{value}. ! 6731: ! 6732: @item CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c}) ! 6733: A C expression that defines the machine-dependent operand constraint ! 6734: letters that specify particular ranges of floating values. If @var{c} is ! 6735: one of those letters, the expression should check that @var{value}, an RTX ! 6736: of code @samp{const_double}, is in the appropriate range and return 1 if ! 6737: so, 0 otherwise. If @var{c} is not one of those letters, the value should ! 6738: be 0 regardless of @var{value}. ! 6739: @end table ! 6740: ! 6741: @node Stack Layout, Library Names, Register Classes, Machine Macros ! 6742: @section Describing Stack Layout ! 6743: ! 6744: @table @code ! 6745: @item STACK_GROWS_DOWNWARD ! 6746: Define this macro if pushing a word onto the stack moves the stack ! 6747: pointer to a smaller address. ! 6748: ! 6749: When we say, ``define this macro if @dots{},'' it means that the ! 6750: compiler checks this macro only with @code{#ifdef} so the precise ! 6751: definition used does not matter. ! 6752: ! 6753: @item FRAME_GROWS_DOWNWARD ! 6754: Define this macro if the addresses of local variable slots are at negative ! 6755: offsets from the frame pointer. ! 6756: ! 6757: @item STARTING_FRAME_OFFSET ! 6758: Offset from the frame pointer to the first local variable slot to be allocated. ! 6759: ! 6760: If @code{FRAME_GROWS_DOWNWARD}, the next slot's offset is found by ! 6761: subtracting the length of the first slot from @code{STARTING_FRAME_OFFSET}. ! 6762: Otherwise, it is found by adding the length of the first slot to ! 6763: the value @code{STARTING_FRAME_OFFSET}. ! 6764: ! 6765: @item PUSH_ROUNDING (@var{npushed}) ! 6766: A C expression that is the number of bytes actually pushed onto the ! 6767: stack when an instruction attempts to push @var{npushed} bytes. ! 6768: ! 6769: If the target machine does not have a push instruction, do not define ! 6770: this macro. That directs GNU CC to use an alternate strategy: to ! 6771: allocate the entire argument block and then store the arguments into ! 6772: it. ! 6773: ! 6774: On some machines, the definition ! 6775: ! 6776: @example ! 6777: #define PUSH_ROUNDING(BYTES) (BYTES) ! 6778: @end example ! 6779: ! 6780: @noindent ! 6781: will suffice. But on other machines, instructions that appear ! 6782: to push one byte actually push two bytes in an attempt to maintain ! 6783: alignment. Then the definition should be ! 6784: ! 6785: @example ! 6786: #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) ! 6787: @end example ! 6788: ! 6789: @item FIRST_PARM_OFFSET (@var{fundecl}) ! 6790: Offset from the argument pointer register to the first argument's ! 6791: address. On some machines it may depend on the data type of the ! 6792: function. (In the next version of GNU CC, the argument will be ! 6793: changed to the function data type rather than its declaration.) ! 6794: ! 6795: @item FIRST_PARM_CALLER_OFFSET (@var{fundecl}) ! 6796: Define this macro on machines where register parameters have shadow ! 6797: locations on the stack, at addresses below the nominal parameter. ! 6798: This matters because certain arguments cannot be passed on the stack. ! 6799: On these machines, such arguments must be stored into the shadow ! 6800: locations. ! 6801: ! 6802: This macro should expand into a C expression whose value is the offset ! 6803: of the first parameter's shadow location from the nominal stack ! 6804: pointer value. (That value is itself computed by adding the value of ! 6805: @code{STACK_POINTER_OFFSET} to the stack pointer register.) ! 6806: ! 6807: @item RETURN_POPS_ARGS (@var{funtype}) ! 6808: A C expression that should be 1 if a function pops its own arguments ! 6809: on returning, or 0 if the function pops no arguments and the caller ! 6810: must therefore pop them all after the function returns. ! 6811: ! 6812: @var{funtype} is a C variable whose value is a tree node that ! 6813: describes the function in question. Normally it is a node of type ! 6814: @code{FUNCTION_TYPE} that describes the data type of the function. ! 6815: From this it is possible to obtain the data types of the value and ! 6816: arguments (if known). ! 6817: ! 6818: When a call to a library function is being considered, @var{funtype} ! 6819: will contain an identifier node for the library function. Thus, if ! 6820: you need to distinguish among various library functions, you can do so ! 6821: by their names. Note that ``library function'' in this context means ! 6822: a function used to perform arithmetic, whose name is known specially ! 6823: in the compiler and was not mentioned in the C code being compiled. ! 6824: ! 6825: On the Vax, all functions always pop their arguments, so the ! 6826: definition of this macro is 1. On the 68000, using the standard ! 6827: calling convention, no functions pop their arguments, so the value of ! 6828: the macro is always 0 in this case. But an alternative calling ! 6829: convention is available in which functions that take a fixed number of ! 6830: arguments pop them but other functions (such as @code{printf}) pop ! 6831: nothing (the caller pops all). When this convention is in use, ! 6832: @var{funtype} is examined to determine whether a function takes a ! 6833: fixed number of arguments. ! 6834: ! 6835: @item FUNCTION_VALUE (@var{valtype}, @var{func}) ! 6836: A C expression to create an RTX representing the place where a ! 6837: function returns a value of data type @var{valtype}. @var{valtype} is ! 6838: a tree node representing a data type. Write @code{TYPE_MODE ! 6839: (@var{valtype})} to get the machine mode used to represent that type. ! 6840: On many machines, only the mode is relevant. (Actually, on most ! 6841: machines, scalar values are returned in the same place regardless of ! 6842: mode).@refill ! 6843: ! 6844: If the precise function being called is known, @var{func} is a tree ! 6845: node (@code{FUNCTION_DECL}) for it; otherwise, @var{func} is a null ! 6846: pointer. This makes it possible to use a different value-returning ! 6847: convention for specific functions when all their calls are ! 6848: known.@refill ! 6849: ! 6850: @item FUNCTION_OUTGOING_VALUE (@var{valtype}, @var{func}) ! 6851: Define this macro if the target machine has ``register windows'' ! 6852: so that the register in which a function returns its value is not ! 6853: the same as the one in which the caller sees the value. ! 6854: ! 6855: For such machines, @code{FUNCTION_VALUE} computes the register in ! 6856: which the caller will see the value, and ! 6857: @code{FUNCTION_OUTGOING_VALUE} should be defined in a similar fashion ! 6858: to tell the function where to put the value.@refill ! 6859: ! 6860: If @code{FUNCTION_OUTGOING_VALUE} is not defined, ! 6861: @code{FUNCTION_VALUE} serves both purposes.@refill ! 6862: ! 6863: @item LIBCALL_VALUE (@var{mode}) ! 6864: A C expression to create an RTX representing the place where a library ! 6865: function returns a value of mode @var{mode}. If the precise function ! 6866: being called is known, @var{func} is a tree node ! 6867: (@code{FUNCTION_DECL}) for it; otherwise, @var{func} is a null ! 6868: pointer. This makes it possible to use a different value-returning ! 6869: convention for specific functions when all their calls are ! 6870: known.@refill ! 6871: ! 6872: Note that ``library function'' in this context means a compiler ! 6873: support routine, used to perform arithmetic, whose name is known ! 6874: specially by the compiler and was not mentioned in the C code being ! 6875: compiled. ! 6876: ! 6877: @item FUNCTION_VALUE_REGNO_P (@var{regno}) ! 6878: A C expression that is nonzero if @var{regno} is the number of a hard ! 6879: register in which the values of called function may come back. ! 6880: ! 6881: A register whose use for returning values is limited to serving as the ! 6882: second of a pair (for a value of type @code{double}, say) need not be ! 6883: recognized by this macro. So for most machines, this definition ! 6884: suffices: ! 6885: ! 6886: @example ! 6887: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) ! 6888: @end example ! 6889: ! 6890: If the machine has register windows, so that the caller and the called ! 6891: function use different registers for the return value, this macro ! 6892: should recognize only the caller's register numbers. ! 6893: ! 6894: @item FUNCTION_ARG (@var{cum}, @var{mode}, @var{type}, @var{named}) ! 6895: A C expression that controls whether a function argument is passed ! 6896: in a register, and which register. ! 6897: ! 6898: The arguments are @var{cum}, which summarizes all the previous ! 6899: arguments; @var{mode}, the machine mode of the argument; @var{type}, ! 6900: the data type of the argument as a tree node or 0 if that is not known ! 6901: (which happens for C support library functions); and @var{named}, ! 6902: which is 1 for an ordinary argument and 0 for nameless arguments that ! 6903: correspond to @samp{...} in the called function's prototype. ! 6904: ! 6905: The value of the expression should either be a @samp{reg} RTX for the ! 6906: hard register in which to pass the argument, or zero to pass the ! 6907: argument on the stack. ! 6908: ! 6909: For the Vax and 68000, where normally all arguments are pushed, zero ! 6910: suffices as a definition. ! 6911: ! 6912: @item FUNCTION_INCOMING_ARG (@var{cum}, @var{mode}, @var{type}, @var{named}) ! 6913: Define this macro if the target machine has ``register windows'', so ! 6914: that the register in which a function sees an arguments is not ! 6915: necessarily the same as the one in which the caller passed the ! 6916: argument. ! 6917: ! 6918: For such machines, @code{FUNCTION_ARG} computes the register in which ! 6919: the caller passes the value, and @code{FUNCTION_INCOMING_ARG} should ! 6920: be defined in a similar fashion to tell the function being called ! 6921: where the arguments will arrive. ! 6922: ! 6923: If @code{FUNCTION_INCOMING_ARG} is not defined, @code{FUNCTION_ARG} ! 6924: serves both purposes.@refill ! 6925: ! 6926: @item FUNCTION_ARG_PARTIAL_NREGS (@var{cum}, @var{mode}, @var{type}, @var{named}) ! 6927: A C expression for the number of words, at the beginning of an ! 6928: argument, must be put in registers. The value must be zero for ! 6929: arguments that are passed entirely in registers or that are entirely ! 6930: pushed on the stack. ! 6931: ! 6932: On some machines, certain arguments must be passed partially in ! 6933: registers and partially in memory. On these machines, typically the ! 6934: first @var{n} words of arguments are passed in registers, and the rest ! 6935: on the stack. If a multi-word argument (a @code{double} or a ! 6936: structure) crosses that boundary, its first few words must be passed ! 6937: in registers and the rest must be pushed. This macro tells the ! 6938: compiler when this occurs, and how many of the words should go in ! 6939: registers. ! 6940: ! 6941: @code{FUNCTION_ARG} for these arguments should return the first ! 6942: register to be used by the caller for this argument; likewise ! 6943: @code{FUNCTION_INCOMING_ARG}, for the called function. ! 6944: ! 6945: @item CUMULATIVE_ARGS ! 6946: A C type for declaring a variable that is used as the first argument ! 6947: of @code{FUNCTION_ARG} and other related values. For some target ! 6948: machines, the type @code{int} suffices and can hold the number of ! 6949: bytes of argument so far. ! 6950: ! 6951: @item INIT_CUMULATIVE_ARGS (@var{cum}, @var{fntype}) ! 6952: A C statement (sans semicolon) for initializing the variable @var{cum} ! 6953: for the state at the beginning of the argument list. The variable has ! 6954: type @code{CUMULATIVE_ARGS}. The value of @var{fntype} is the tree node ! 6955: for the data type of the function which will receive the args, or 0 ! 6956: if the args are to a compiler support library function. ! 6957: ! 6958: @item FUNCTION_ARG_ADVANCE (@var{cum}, @var{mode}, @var{type}, @var{named}) ! 6959: Update the summarizer variable @var{cum} to advance past an argument ! 6960: in the argument list. The values @var{mode}, @var{type} and ! 6961: @var{named} describe that argument. Once this is done, the variable ! 6962: @var{cum} is suitable for analyzing the @emph{following} argument ! 6963: with @code{FUNCTION_ARG}, etc.@refill ! 6964: ! 6965: @item FUNCTION_ARG_REGNO_P (@var{regno}) ! 6966: A C expression that is nonzero if @var{regno} is the number of a hard ! 6967: register in which function arguments are sometimes passed. This does ! 6968: @emph{not} include implicit arguments such as the static chain and ! 6969: the structure-value address. On many machines, no registers can be ! 6970: used for this purpose since all function arguments are pushed on the ! 6971: stack. ! 6972: ! 6973: @item FUNCTION_ARG_PADDING (@var{mode}, @var{size}) ! 6974: If defined, a C expression which determines whether, and in which direction, ! 6975: to pad out an argument with extra space. The value should be of type ! 6976: @code{enum direction}: either @code{upward} to pad above the argument, ! 6977: @code{downward} to pad below, or @code{none} to inhibit padding. ! 6978: ! 6979: The argument @var{size} is an RTX which describes the size of the ! 6980: argument, in bytes. It should be used only if @var{mode} is ! 6981: @code{BLKmode}. Otherwise, @var{size} is 0. ! 6982: ! 6983: This macro does not control the @emph{amount} of padding; that is ! 6984: always just enough to reach the next multiple of @code{PARM_BOUNDARY}. ! 6985: ! 6986: This macro has a default definition which is right for most systems. ! 6987: For little-endian machines, the default is to pad upward. For ! 6988: big-endian machines, the default is to pad downward for an argument of ! 6989: constant size shorter than an @code{int}, and upward otherwise. ! 6990: ! 6991: @item FUNCTION_PROLOGUE (@var{file}, @var{size}) ! 6992: A C compound statement that outputs the assembler code for entry to a ! 6993: function. The prologue is responsible for setting up the stack frame, ! 6994: initializing the frame pointer register, saving registers that must be ! 6995: saved, and allocating @var{size} additional bytes of storage for the ! 6996: local variables. @var{size} is an integer. @var{file} is a stdio ! 6997: stream to which the assembler code should be output. ! 6998: ! 6999: The label for the beginning of the function need not be output by this ! 7000: macro. That has already been done when the macro is run. ! 7001: ! 7002: To determine which registers to save, the macro can refer to the array ! 7003: @code{regs_ever_live}: element @var{r} is nonzero if hard register ! 7004: @var{r} is used anywhere within the function. This implies the ! 7005: function prologue should save register @var{r}, but not if it is one ! 7006: of the call-used registers. ! 7007: ! 7008: On machines where functions may or may not have frame-pointers, the ! 7009: function entry code must vary accordingly; it must set up the frame ! 7010: pointer if one is wanted, and not otherwise. To determine whether a ! 7011: frame pointer is in wanted, the macro can refer to the variable ! 7012: @code{frame_pointer_needed}. The variable's value will be 1 at run ! 7013: time in a function that needs a frame pointer. ! 7014: ! 7015: @item FUNCTION_PROFILER (@var{file}, @var{labelno}) ! 7016: A C statement or compound statement to output to @var{file} some ! 7017: assembler code to call the profiling subroutine @code{mcount}. ! 7018: Before calling, the assembler code must load the address of a ! 7019: counter variable into a register where @code{mcount} expects to ! 7020: find the address. The name of this variable is @samp{LP} followed ! 7021: by the number @var{labelno}, so you would generate the name using ! 7022: @samp{LP%d} in a @code{fprintf}. ! 7023: ! 7024: The details of how the address should be passed to @code{mcount} are ! 7025: determined by your operating system environment, not by GNU CC. To ! 7026: figure them out, compile a small program for profiling using the ! 7027: system's installed C compiler and look at the assembler code that ! 7028: results. ! 7029: ! 7030: @item EXIT_IGNORES_STACK ! 7031: Define this macro as a C expression that is nonzero if the return ! 7032: instruction or the function epilogue ignores the value of the stack ! 7033: pointer; in other words, if it is safe to delete an instruction to ! 7034: adjust the stack pointer before a return from the function. ! 7035: ! 7036: Note that this macro's value is relevant only for for which frame ! 7037: pointers are maintained. It is never possible to delete a final stack ! 7038: adjustment in a function that has no frame pointer, and the compiler ! 7039: knows this regardless of @code{EXIT_IGNORES_STACK}. ! 7040: ! 7041: @item FUNCTION_EPILOGUE (@var{file}, @var{size}) ! 7042: A C compound statement that outputs the assembler code for exit from a ! 7043: function. The epilogue is responsible for restoring the saved ! 7044: registers and stack pointer to their values when the function was ! 7045: called, and returning control to the caller. This macro takes the ! 7046: same arguments as the macro @code{FUNCTION_PROLOGUE}, and the ! 7047: registers to restore are determined from @code{regs_ever_live} and ! 7048: @code{CALL_USED_REGISTERS} in the same way. ! 7049: ! 7050: On some machines, there is a single instruction that does all the work ! 7051: of returning from the function. On these machines, give that ! 7052: instruction the name @samp{return} and do not define the macro ! 7053: @code{FUNCTION_EPILOGUE} at all. ! 7054: ! 7055: Do not define a pattern named @samp{return} if you want the ! 7056: @code{FUNCTION_EPILOGUE} to be used. If you want the target switches ! 7057: to control whether return instructions or epilogues are used, define a ! 7058: @samp{return} pattern with a validity condition that tests the target ! 7059: switches appropriately. If the @samp{return} pattern's validity ! 7060: condition is false, epilogues will be used. ! 7061: ! 7062: On machines where functions may or may not have frame-pointers, the ! 7063: function exit code must vary accordingly. Sometimes the code for ! 7064: these two cases is completely different. To determine whether a frame ! 7065: pointer is in wanted, the macro can refer to the variable ! 7066: @code{frame_pointer_needed}. The variable's value will be 1 at run ! 7067: time in a function that needs a frame pointer. ! 7068: ! 7069: On some machines, some functions pop their arguments on exit while ! 7070: others leave that for the caller to do. For example, the 68020 when ! 7071: given @samp{-mrtd} pops arguments in functions that take a fixed ! 7072: number of arguments. ! 7073: ! 7074: Your definition of the macro @code{RETURN_POPS_ARGS} decides which ! 7075: functions pop their own arguments. @code{FUNCTION_EPILOGUE} needs to ! 7076: know what was decided. The variable @code{current_function_pops_args} ! 7077: is nonzero if the function should pop its own arguments. If so, use ! 7078: the variable @code{current_function_args_size} as the number of bytes ! 7079: to pop. ! 7080: ! 7081: @item FIX_FRAME_POINTER_ADDRESS (@var{addr}, @var{depth}) ! 7082: A C compound statement to alter a memory address that uses the frame ! 7083: pointer register so that it uses the stack pointer register instead. ! 7084: This must be done in the instructions that load parameter values into ! 7085: registers, when the reload pass determines that a frame pointer is not ! 7086: necessary for the function. @var{addr} will be a C variable name, and ! 7087: the updated address should be stored in that variable. @var{depth} ! 7088: will be the current depth of stack temporaries (number of bytes of ! 7089: arguments currently pushed). The change in offset between a ! 7090: frame-pointer-relative address and a stack-pointer-relative address ! 7091: must include @var{depth}. ! 7092: ! 7093: Even if your machine description specifies there will always be a ! 7094: frame pointer in the frame pointer register, you must still define ! 7095: @code{FIX_FRAME_POINTER_ADDRESS}, but the definition will never be ! 7096: executed at run time, so it may be empty. ! 7097: @end table ! 7098: ! 7099: @node Library Names, Addressing Modes, Stack Layout, Machine Macros ! 7100: @section Library Subroutine Names ! 7101: ! 7102: @table @code ! 7103: @item UDIVSI3_LIBCALL ! 7104: A C string constant giving the name of the function to call for ! 7105: division of a full-word by a full-word. If you do not define this ! 7106: macro, the default name is used, which is @code{_udivsi3}, a function ! 7107: defined in @file{gnulib}. ! 7108: ! 7109: @item UMODSI3_LIBCALL ! 7110: A C string constant giving the name of the function to call for the ! 7111: remainder in division of a full-word by a full-word. If you do not ! 7112: define this macro, the default name is used, which is @code{_umodsi3}, ! 7113: a function defined in @file{gnulib}. ! 7114: ! 7115: @item TARGET_MEM_FUNCTIONS ! 7116: Define this macro if GNU CC should generate calls to the System V ! 7117: (and ANSI C) library functions @code{memcpy} and @code{memset} ! 7118: rather than the BSD functions @code{bcopy} and @code{bzero}. ! 7119: @end table ! 7120: ! 7121: @node Addressing Modes, Misc, Library Names, Machine Macros ! 7122: @section Addressing Modes ! 7123: ! 7124: @table @code ! 7125: @item HAVE_POST_INCREMENT ! 7126: Define this macro if the machine supports post-increment addressing. ! 7127: ! 7128: @item HAVE_PRE_INCREMENT ! 7129: @itemx HAVE_POST_DECREMENT ! 7130: @itemx HAVE_PRE_DECREMENT ! 7131: Similar for other kinds of addressing. ! 7132: ! 7133: @item CONSTANT_ADDRESS_P (@var{x}) ! 7134: A C expression that is 1 if the RTX @var{x} is a constant whose value ! 7135: is an integer. This includes integers whose values are not explicitly ! 7136: known, such as @samp{symbol_ref} and @samp{label_ref} expressions and ! 7137: @samp{const} arithmetic expressions. ! 7138: ! 7139: On most machines, this can be defined as @code{CONSTANT_P (@var{x})}, ! 7140: but a few machines are more restrictive in which constant addresses ! 7141: are supported. ! 7142: ! 7143: @item MAX_REGS_PER_ADDRESS ! 7144: A number, the maximum number of registers that can appear in a valid ! 7145: memory address. ! 7146: ! 7147: @item GO_IF_LEGITIMATE_ADDRESS (@var{mode}, @var{x}, @var{label}) ! 7148: A C compound statement with a conditional @code{goto @var{label};} ! 7149: executed if @var{x} (an RTX) is a legitimate memory address on the ! 7150: target machine for a memory operand of mode @var{mode}. ! 7151: ! 7152: It usually pays to define several simpler macros to serve as ! 7153: subroutines for this one. Otherwise it may be too complicated to ! 7154: understand. ! 7155: ! 7156: This macro must exist in two variants: a strict variant and a ! 7157: non-strict one. The strict variant is used in the reload pass. It ! 7158: must be defined so that any pseudo-register that has not been ! 7159: allocated a hard register is considered a memory reference. In ! 7160: contexts where some kind of register is required, a pseudo-register ! 7161: with no hard register must be rejected. ! 7162: ! 7163: The non-strict variant is used in other passes. It must be defined to ! 7164: accept all pseudo-registers in every context where some kind of ! 7165: register is required. ! 7166: ! 7167: Compiler source files that want to use the strict variant of this ! 7168: macro define the macro @code{REG_OK_STRICT}. You should use an ! 7169: @code{#ifdef REG_OK_STRICT} conditional to define the strict variant ! 7170: in that case and the non-strict variant otherwise. ! 7171: ! 7172: Typically among the subroutines used to define ! 7173: @code{GO_IF_LEGITIMATE_ADDRESS} are subroutines to check for ! 7174: acceptable registers for various purposes (one for base registers, one ! 7175: for index registers, and so on). Then only these subroutine macros ! 7176: need have two variants; the higher levels of macros may be the same ! 7177: whether strict or not.@refill ! 7178: ! 7179: @item REG_OK_FOR_BASE_P (@var{x}) ! 7180: A C expression that is nonzero if @var{x} (asumed to be a @code{reg} ! 7181: RTX) is valid for use as a base register. For hard registers, it ! 7182: should always accept those which the hardware permits and reject the ! 7183: others. Whether the macro accepts or rejects pseudo registers must be ! 7184: controlled by @code{REG_OK_STRICT} as described above. This usually ! 7185: requires two variant definitions, of which @code{REG_OK_STRICT} ! 7186: controls the one actually used. ! 7187: ! 7188: @item REG_OK_FOR_INDEX_P (@var{x}) ! 7189: A C expression that is nonzero if @var{x} (asumed to be a @code{reg} ! 7190: RTX) is valid for use as an index register. ! 7191: ! 7192: The difference between an index register and a base register is that ! 7193: the index register may be scaled. If an address involves the sum of ! 7194: two registers, neither one of them scaled, then either one may be ! 7195: labeled the ``base'' and the other the ``index''; but whichever ! 7196: labeling is used must fit the machine's constraints of which registers ! 7197: may serve in each capacity. The compiler will try both labelings, ! 7198: looking for one that is valid, and will reload one or both registers ! 7199: only if neither labeling works. ! 7200: ! 7201: @item LEGITIMIZE_ADDRESS (@var{x}, @var{oldx}, @var{mode}, @var{win}) ! 7202: A C compound statement that attempts to replace @var{x} with a valid ! 7203: memory address for an operand of mode @var{mode}. @var{win} will be a ! 7204: C statement label elsewhere in the code; the macro definition may use ! 7205: ! 7206: @example ! 7207: GO_IF_LEGITIMATE_ADDRESS (@var{mode}, @var{x}, @var{win}); ! 7208: @end example ! 7209: ! 7210: @noindent ! 7211: to avoid further processing if the address has become legitimate. ! 7212: ! 7213: @var{x} will always be the result of a call to @code{break_out_memory_refs}, ! 7214: and @var{oldx} will be the operand that was given to that function to produce ! 7215: @var{x}. ! 7216: ! 7217: The code generated by this macro should not alter the substructure of ! 7218: @var{x}. If it transforms @var{x} into a more legitimate form, it ! 7219: should assign @var{x} (which will always be a C variable) a new value. ! 7220: ! 7221: It is not necessary for this macro to come up with a legitimate ! 7222: address. The compiler has standard ways of doing so in all cases. In ! 7223: fact, it is safe for this macro to do nothing. But often a ! 7224: machine-dependent strategy can generate better code. ! 7225: ! 7226: @item GO_IF_MODE_DEPENDENT_ADDRESS (@var{addr}, @var{label}) ! 7227: A C statement or compound statement with a conditional @code{goto ! 7228: @var{label};} executed if memory address @var{x} (an RTX) can have ! 7229: different meanings depending on the machine mode of the memory ! 7230: reference it is used for. ! 7231: ! 7232: Autoincrement and autodecrement addresses typically have mode-dependent ! 7233: effects because the amount of the increment or decrement is the size ! 7234: of the operand being addressed. Some machines have other mode-dependent ! 7235: addresses. Many RISC machines have no mode-dependent addresses. ! 7236: ! 7237: You may assume that @var{addr} is a valid address for the machine. ! 7238: ! 7239: @item LEGITIMATE_CONSTANT_P (@var{x}) ! 7240: A C expression that is nonzero if @var{x} is a legitimate constant for ! 7241: an immediate operand on the target machine. You can assume that ! 7242: either @var{x} is a @samp{const_double} or it satisfies ! 7243: @code{CONSTANT_P}, so you need not check these things. In fact, ! 7244: @samp{1} is a suitable definition for this macro on machines where any ! 7245: @samp{const_double} is valid and anything @code{CONSTANT_P} is valid.@refill ! 7246: @end table ! 7247: ! 7248: @node Misc, Condition Code, Addressing Modes, Machine Macros ! 7249: @section Miscellaneous Parameters ! 7250: ! 7251: @table @code ! 7252: @item CASE_VECTOR_MODE ! 7253: An alias for a machine mode name. This is the machine mode that ! 7254: elements of a jump-table should have. ! 7255: ! 7256: @item CASE_VECTOR_PC_RELATIVE ! 7257: Define this macro if jump-tables should contain relative addresses. ! 7258: ! 7259: @item CASE_DROPS_THROUGH ! 7260: Define this if control falls through a @code{case} insn when the index ! 7261: value is out of range. This means the specified default-label is ! 7262: actually ignored by the @code{case} insn proper. ! 7263: ! 7264: @item IMPLICIT_FIX_EXPR ! 7265: An alias for a tree code that should be used by default for conversion ! 7266: of floating point values to fixed point. Normally, ! 7267: @code{FIX_ROUND_EXPR} is used.@refill ! 7268: ! 7269: @item FIXUNS_TRUNC_LIKE_FIX_TRUNC ! 7270: Define this macro if the same instructions that convert a floating ! 7271: point number to a signed fixed point number also convert validly to an ! 7272: unsigned one. ! 7273: ! 7274: @item EASY_DIV_EXPR ! 7275: An alias for a tree code that is the easiest kind of division to ! 7276: compile code for in the general case. It may be ! 7277: @code{TRUNC_DIV_EXPR}, @code{FLOOR_DIV_EXPR}, @code{CEIL_DIV_EXPR} or ! 7278: @code{ROUND_DIV_EXPR}. These four division operators differ in how ! 7279: they round the result to an integer. @code{EASY_DIV_EXPR} is used ! 7280: when it is permissible to use any of those kinds of division and the ! 7281: choice should be made on the basis of efficiency.@refill ! 7282: ! 7283: @item DEFAULT_SIGNED_CHAR ! 7284: An expression whose value is 1 or 0, according to whether the type ! 7285: @code{char} should be signed or unsigned by default. The user can ! 7286: always override this default with the options @samp{-fsigned-char} ! 7287: and @samp{-funsigned-char}. ! 7288: ! 7289: @item SCCS_DIRECTIVE ! 7290: Define this if the preprocessor should ignore @code{#sccs} directives ! 7291: and print no error message. ! 7292: ! 7293: @item IDENT_DIRECTIVE ! 7294: Define this if the preprocessor should ignore @code{#ident} directives ! 7295: and print no error message. ! 7296: ! 7297: @item MOVE_MAX ! 7298: The maximum number of bytes that a single instruction can move quickly ! 7299: from memory to memory. ! 7300: ! 7301: @item INT_TYPE_SIZE ! 7302: A C expression for the size in bits of the type @code{int} on the ! 7303: target machine. ! 7304: ! 7305: @item SLOW_BYTE_ACCESS ! 7306: Define this macro as a C expression which is nonzero if accessing less ! 7307: than a word of memory (i.e. a @code{char} or a @code{short}) is slow ! 7308: (requires more than one instruction). ! 7309: ! 7310: @item SLOW_ZERO_EXTEND ! 7311: Define this macro if zero-extension (of a @code{char} or @code{short} ! 7312: to an @code{int}) can be done faster if the destination is a register ! 7313: that is known to be zero. ! 7314: ! 7315: If you define this macro, you must have instruction patterns that ! 7316: recognize RTL structures like this: ! 7317: ! 7318: @example ! 7319: (set (strict-low-part (subreg:QI (reg:SI @dots{}) 0)) @dots{}) ! 7320: @end example ! 7321: ! 7322: @noindent ! 7323: and likewise for @code{HImode}. ! 7324: ! 7325: @item SHIFT_COUNT_TRUNCATED ! 7326: Define this macro if shift instructions ignore all but the lowest few ! 7327: bits of the shift count. It implies that a sign-extend or zero-extend ! 7328: instruction for the shift count can be omitted. ! 7329: ! 7330: @item TRULY_NOOP_TRUNCATION (@var{outprec}, @var{inprec}) ! 7331: A C expression which is nonzero if on this machine it is safe to ! 7332: ``convert'' an integer of @var{inprec} bits to one of @var{outprec} ! 7333: bits (where @var{outprec} is smaller than @var{inprec}) by merely ! 7334: operating on it as if it had only @var{outprec} bits. ! 7335: ! 7336: On many machines, this expression can be 1. ! 7337: ! 7338: @item NO_FUNCTION_CSE ! 7339: Define this macro if it is as good or better to call a constant ! 7340: function address than to call an address kept in a register. ! 7341: ! 7342: @item PROMOTE_PROTOTYPES ! 7343: Define this macro if an argument declared as @code{char} or ! 7344: @code{short} in a prototype should actually be passed as an ! 7345: @code{int}. In addition to avoiding errors in certain cases of ! 7346: mismatch, it also makes for better code on certain machines. ! 7347: ! 7348: @item STORE_FLAG_VALUE ! 7349: A C expression for the value stored by a store-flag instruction ! 7350: (@code{s@var{cond}}) when the condition is true. This is usually 1 or ! 7351: -1; it is required to be an odd number. ! 7352: ! 7353: Do not define @code{STORE_FLAG_VALUE} if the machine has no store-flag ! 7354: instructions. ! 7355: ! 7356: @item Pmode ! 7357: An alias for the machine mode for pointers. Normally the definition ! 7358: can be ! 7359: ! 7360: @example ! 7361: #define Pmode SImode ! 7362: @end example ! 7363: ! 7364: @item FUNCTION_MODE ! 7365: An alias for the machine mode used for memory references to functions ! 7366: being called, in @samp{call} RTL expressions. On most machines this ! 7367: should be @code{QImode}. ! 7368: ! 7369: @item INSN_MACHINE_INFO ! 7370: This macro should expand into a C structure type to use for the ! 7371: machine-dependent info field specified with the optional last argument ! 7372: in @samp{define_insn} and @samp{define_peephole} patterns. For example, ! 7373: it might expand into @samp{struct machine_info}; then it would be up ! 7374: to you to define this structure in the @file{tm.h} file. ! 7375: ! 7376: You do not need to define this macro if you do not write the optional ! 7377: last argument in any of the patterns in the machine description. ! 7378: ! 7379: @item CONST_COSTS (@var{x}, @var{code}) ! 7380: A part of a C @code{switch} statement that describes the relative ! 7381: costs of constant RTL expressions. It must contain @code{case} labels ! 7382: for expression codes @samp{const_int}, @samp{const}, @samp{symbol_ref}, @samp{label_ref} ! 7383: and @samp{const_double}. Each case must ultimately reach a ! 7384: @code{return} statement to return the relative cost of the use of that ! 7385: kind of constant value in an expression. The cost may depend on the ! 7386: precise value of the constant, which is available for examination in ! 7387: @var{x}. ! 7388: ! 7389: @var{code} is the expression code---redundant, since it can be ! 7390: obtained with @code{GET_CODE (@var{x})}. ! 7391: ! 7392: @item DOLLARS_IN_IDENTIFIERS ! 7393: Define this to be nonzero if the character @samp{$} should be allowed ! 7394: by default in identifier names. ! 7395: @end table ! 7396: ! 7397: @node Condition Code, Assembler Format, Misc, Machine Macros ! 7398: @section Condition Code Information ! 7399: ! 7400: The file @file{conditions.h} defines a variable @code{cc_status} to ! 7401: describe how the condition code was computed (in case the interpretation of ! 7402: the condition code depends on the instruction that it was set by). This ! 7403: variable contains the RTL expressions on which the condition code is ! 7404: currently based, and several standard flags. ! 7405: ! 7406: Sometimes additional machine-specific flags must be defined in the machine ! 7407: description header file. It can also add additional machine-specific ! 7408: information by defining @code{CC_STATUS_MDEP}. ! 7409: ! 7410: @table @code ! 7411: @item CC_STATUS_MDEP ! 7412: C code for a data type which is used for declaring the @code{mdep} ! 7413: component of @code{cc_status}. It defaults to @code{int}. ! 7414: ! 7415: @item CC_STATUS_MDEP_INIT ! 7416: A C expression for the initial value of the @code{mdep} field. It ! 7417: defaults to 0. ! 7418: ! 7419: @item NOTICE_UPDATE_CC (@var{exp}, @var{insn}) ! 7420: A C compound statement to set the components of @code{cc_status} ! 7421: appropriately for an insn @var{insn} whose body is @var{exp}. It is ! 7422: this macro's responsibility to recognize insns that set the condition ! 7423: code as a byproduct of other activity as well as those that explicitly ! 7424: set @code{(cc0)}. ! 7425: ! 7426: If there are insn that do not set the condition code but do alter ! 7427: other machine registers, this macro must check to see whether they ! 7428: invalidate the expressions that the condition code is recorded as ! 7429: reflecting. For example, on the 68000, insns that store in address ! 7430: registers do not set the condition code, which means that usually ! 7431: @code{NOTICE_UPDATE_CC} can leave @code{cc_status} unaltered for such ! 7432: insns. But suppose that the previous insn set the condition code ! 7433: based on location @samp{a4@@(102)} and the current insn stores a new ! 7434: value in @samp{a4}. Although the condition code is not changed by ! 7435: this, it will no longer be true that it reflects the contents of ! 7436: @samp{a4@@(102)}. Therefore, @code{NOTICE_UPDATE_CC} must alter ! 7437: @code{cc_status} in this case to say that nothing is known about the ! 7438: condition code value. ! 7439: ! 7440: The definition of @code{NOTICE_UPDATE_CC} must be prepared to deal ! 7441: with the results of peephole optimization: insns whose patterns are ! 7442: @samp{parallel} RTXs containing various @samp{reg}, @samp{mem} or ! 7443: constants which are just the operands. The RTL structure of these ! 7444: insns is not sufficient to indicate what the insns actually do. What ! 7445: @code{NOTICE_UPDATE_CC} should do when it sees one is just to run ! 7446: @code{CC_STATUS_INIT}. ! 7447: @end table ! 7448: ! 7449: @node Assembler Format,, Condition Code, Machine Macros ! 7450: @section Output of Assembler Code ! 7451: ! 7452: @table @code ! 7453: @item ASM_SPEC ! 7454: A C string constant that tells the GNU CC driver program options to ! 7455: pass to the assembler. It can also specify how to translate options ! 7456: you give to GNU CC into options for GNU CC to pass to the assembler. ! 7457: See the file @file{tm-sun3.h} for an example of this. ! 7458: ! 7459: Do not define this macro if it does not need to do anything. ! 7460: ! 7461: @item LINK_SPEC ! 7462: A C string constant that tells the GNU CC driver program options to ! 7463: pass to the linker. It can also specify how to translate options you ! 7464: give to GNU CC into options for GNU CC to pass to the linker. ! 7465: ! 7466: Do not define this macro if it does not need to do anything. ! 7467: ! 7468: @item LIB_SPEC ! 7469: Another C string constant used much like @code{LINK_SPEC}. The difference ! 7470: between the two is that @code{LIBS_SPEC} is used at the end of the ! 7471: command given to the linker. ! 7472: ! 7473: If this macro is not defined, a default is provided that ! 7474: loads the standard C library from the usual place. See @file{gcc.c}. ! 7475: ! 7476: @item STARTFILE_SPEC ! 7477: Another C string constant used much like @code{LINK_SPEC}. The ! 7478: difference between the two is that @code{STARTFILE_SPEC} is used at ! 7479: the very beginning of the command given to the linker. ! 7480: ! 7481: If this macro is not defined, a default is provided that loads the ! 7482: standard C startup file from the usual place. See @file{gcc.c}. ! 7483: ! 7484: @item ASM_FILE_START (@var{stream}) ! 7485: A C expression which outputs to the stdio stream @var{stream} ! 7486: some appropriate text to go at the start of an assembler file. ! 7487: ! 7488: Normally this macro is defined to output a line containing ! 7489: @samp{#NO_APP}, which is a comment that has no effect on most ! 7490: assemblers but tells the GNU assembler that it can save time by not ! 7491: checking for certain assembler constructs. ! 7492: ! 7493: On systems that use SDB, it is necessary to output certain commands; ! 7494: see @file{tm-attasm.h}. ! 7495: ! 7496: @item ASM_APP_ON ! 7497: A C string constant for text to be output before each @code{asm} ! 7498: statement or group of consecutive ones. Normally this is ! 7499: @code{"#APP"}, which is a comment that has no effect on most ! 7500: assemblers but tells the GNU assembler that it must check the lines ! 7501: that follow for all valid assembler constructs. ! 7502: ! 7503: @item ASM_APP_OFF ! 7504: A C string constant for text to be output after each @code{asm} ! 7505: statement or group of consecutive ones. Normally this is ! 7506: @code{"#NO_APP"}, which tells the GNU assembler to resume making the ! 7507: time-saving assumptions that are valid for ordinary compiler output. ! 7508: ! 7509: @item TEXT_SECTION_ASM_OP ! 7510: A C string constant for the assembler operation that should precede ! 7511: instructions and read-only data. Normally @code{".text"} is right. ! 7512: ! 7513: @item DATA_SECTION_ASM_OP ! 7514: A C string constant for the assembler operation to identify the ! 7515: following data as writable initialized data. Normally @code{".data"} ! 7516: is right. ! 7517: ! 7518: @item REGISTER_NAMES ! 7519: A C initializer containing the assembler's names for the machine ! 7520: registers, each one as a C string constant. This is what translates ! 7521: register numbers in the compiler into assembler language. ! 7522: ! 7523: @item DBX_REGISTER_NUMBER (@var{regno}) ! 7524: A C expression that returns the DBX register number for the compiler ! 7525: register number @var{regno}. In simple cases, the value of this ! 7526: expression may be @var{regno} itself. But sometimes there are some ! 7527: registers that the compiler knows about and DBX does not, or vice ! 7528: versa. In such cases, some register may need to have one number in ! 7529: the compiler and another for DBX. ! 7530: ! 7531: @item DBX_DEBUGGING_INFO ! 7532: Define this macro if GNU CC should produce debugging output for DBX ! 7533: in response to the @samp{-g} option. ! 7534: ! 7535: @item SDB_DEBUGGING_INFO ! 7536: Define this macro if GNU CC should produce debugging output for SDB ! 7537: in response to the @samp{-g} option. ! 7538: ! 7539: @item PUT_SDB_@var{op} ! 7540: Define these macros to override the assembler syntax for the special ! 7541: SDB assembler directives. See @file{sdbout.c} for a list of these ! 7542: macros and their arguments. If the standard syntax is used, you need ! 7543: not define them yourself. ! 7544: ! 7545: @item SDB_GENERATE_FAKE ! 7546: Define this macro to override the usual method of constructing a dummy ! 7547: name for anonymous structure and union types. See @file{sdbout.c} for ! 7548: more infomation. ! 7549: ! 7550: @item DBX_NO_XREFS ! 7551: Define this macro if DBX on your system does not support the construct ! 7552: @samp{xs@var{tagname}}. On some systems, this construct is used to ! 7553: describe a forward reference to a structure named @var{tagname}. ! 7554: On other systems, this construct is not supported at all. ! 7555: ! 7556: @item DBX_CONTIN_LENGTH ! 7557: A symbol name in DBX-format debugging information is normally ! 7558: continued (split into two separate @code{.stabs} directives) when it ! 7559: exceeds a certain length (by default, 80 characters). On some ! 7560: operating systems, DBX requires this splitting; on others, splitting ! 7561: must not be done. You can inhibit splitting by defining this macro ! 7562: with the value zero. You can override the default splitting-length by ! 7563: defining this macro as an expression for the length you desire. ! 7564: ! 7565: @item DBX_CONTIN_CHAR ! 7566: Normally continuation is indicated by adding a @samp{\} character to ! 7567: the end of a @code{.stabs} string when a continuation follows. To use ! 7568: a different character instead, define this macro as a character ! 7569: constant for the character you want to use. Do not define this macro ! 7570: if backslash is correct for your system. ! 7571: ! 7572: @item ASM_OUTPUT_LABEL (@var{stream}, @var{name}) ! 7573: A C statement (sans semicolon) to output to the stdio stream ! 7574: @var{stream} the assembler definition of a label named @var{name}. Use ! 7575: the expression @code{assemble_name (@var{stream}, @var{name})} to output ! 7576: the name itself; before and after that, output the additional ! 7577: assembler syntax for defining the name, and a newline. ! 7578: ! 7579: @item ASM_DECLARE_FUNCTION_NAME (@var{stream}, @var{name}, @var{decl}) ! 7580: A C statement (sans semicolon) to output to the stdio stream ! 7581: @var{stream} any text necessary for declaring the name @var{name} of a ! 7582: function which is being defined. This macro is responsible for ! 7583: outputting the label definition (perhaps using ! 7584: @code{ASM_OUTPUT_LABEL}). The argument @var{decl} is the ! 7585: @code{FUNCTION_DECL} tree node representing the function. ! 7586: ! 7587: If this macro is not defined, then the function name is defined in the ! 7588: usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}). ! 7589: ! 7590: @item ASM_GLOBALIZE_LABEL (@var{stream}, @var{name}) ! 7591: A C statement (sans semicolon) to output to the stdio stream ! 7592: @var{stream} some commands that will make the label @var{name} global; ! 7593: that is, available for reference from other files. Use the expression ! 7594: @code{assemble_name (@var{stream}, @var{name})} to output the name ! 7595: itself; before and after that, output the additional assembler syntax ! 7596: for making that name global, and a newline. ! 7597: ! 7598: @item ASM_OUTPUT_EXTERNAL (@var{stream}, @var{name}, @var{decl}) ! 7599: A C statement (sans semicolon) to output to the stdio stream ! 7600: @var{stream} any text necessary for declaring the name of an external ! 7601: symbol named @var{name} which is referenced in this compilation but ! 7602: not defined. The value of @var{decl} is the tree node for the ! 7603: declaration. ! 7604: ! 7605: This macro need not be defined if it does not need to output anything. ! 7606: The GNU assembler and most Unix assemblers don't require anything. ! 7607: ! 7608: @item ASM_OUTPUT_LABELREF (@var{stream}, @var{name}) ! 7609: A C statement to output to the stdio stream @var{stream} a reference in ! 7610: assembler syntax to a label named @var{name}. The character @samp{_} ! 7611: should be added to the front of the name, if that is customary on your ! 7612: operating system, as it is in most Berkeley Unix systems. This macro ! 7613: is used in @code{assemble_name}. ! 7614: ! 7615: @item ASM_GENERATE_INTERNAL_LABEL (@var{string}, @var{prefix}, @var{num}) ! 7616: A C statement to store into the string @var{string} a label whose ! 7617: name is made from the string @var{prefix} and the number @var{num}. ! 7618: ! 7619: This string, when output subsequently by @code{ASM_OUTPUT_LABELREF}, ! 7620: should produce the same output that @code{ASM_OUTPUT_INTERNAL_LABEL} ! 7621: would produce with the same @var{prefix} and @var{num}. ! 7622: ! 7623: @item ASM_OUTPUT_INTERNAL_LABEL (@var{stream}, @var{prefix}, @var{num}) ! 7624: A C statement to output to the stdio stream @var{stream} a label whose ! 7625: name is made from the string @var{prefix} and the number @var{num}. ! 7626: These labels are used for internal purposes, and there is no reason ! 7627: for them to appear in the symbol table of the object file. On many ! 7628: systems, the letter @samp{L} at the beginning of a label has this ! 7629: effect. The usual definition of this macro is as follows: ! 7630: ! 7631: @example ! 7632: fprintf (@var{stream}, "L%s%d:\n", @var{prefix}, @var{num}) ! 7633: @end example ! 7634: ! 7635: @item ASM_OUTPUT_CASE_LABEL (@var{stream}, @var{prefix}, @var{num}, @var{table}) ! 7636: Define this if the label before a jump-table needs to be output ! 7637: specially. The first three arguments are the same as for ! 7638: @code{ASM_OUTPUT_INTERNAL_LABEL}; the fourth argument is the ! 7639: jump-table which follows (a @samp{jump_insn} containing an ! 7640: @samp{addr_vec} or @samp{addr_diff_vec}). ! 7641: ! 7642: This feature is used on system V to output a @code{swbeg} statement ! 7643: for the table. ! 7644: ! 7645: If this macro is not defined, these labels are output with ! 7646: @code{ASM_OUTPUT_INTERNAL_LABEL}. ! 7647: ! 7648: @item ASM_OUTPUT_CASE_END (@var{stream}, @var{num}, @var{table}) ! 7649: Define this if something special must be output at the end of a jump-table. ! 7650: The definition should be a C statement to be executed after the assembler ! 7651: code for the table is written. It should write the appropriate code to ! 7652: stdio stream @var{stream}. The argument @var{table} is the jump-table ! 7653: insn, and @var{num} is the label-number of the preceding label. ! 7654: ! 7655: If this macro is not defined, nothing special is output at the end of ! 7656: the jump-table. ! 7657: ! 7658: @item ASM_FORMAT_PRIVATE_NAME (@var{outvar}, @var{name}, @var{number}) ! 7659: A C expression to assign to @var{outvar} (which is a variable of type ! 7660: @code{char *}) a newly allocated string made from the string ! 7661: @var{name} and the number @var{number}, with some suitable punctuation ! 7662: added. Use @code{alloca} to get space for the string. ! 7663: ! 7664: This string will be used as the argument to @code{ASM_OUTPUT_LABELREF} ! 7665: to produce an assembler label for an internal static variable whose ! 7666: name is @var{name}. Therefore, the string must be such as to result ! 7667: in valid assembler code. The argument @var{number} is different each ! 7668: time this macro is executed; it prevents conflicts between ! 7669: similarly-named internal static variables in different scopes. ! 7670: ! 7671: Ideally this string should not be a valid C identifier, to prevent any ! 7672: conflict with the user's own symbols. Most assemblers allow periods ! 7673: or percent signs in assembler symbols; putting at least one of these ! 7674: between the name and the number will suffice. ! 7675: ! 7676: @item ASM_OUTPUT_REG_PUSH (@var{stream}, @var{regno}) ! 7677: A C expression to output to @var{stream} some assembler code ! 7678: which will push hard register number @var{regno} onto the stack. ! 7679: The code need not be optimal, since this macro is used only when ! 7680: profiling. ! 7681: ! 7682: @item ASM_OUTPUT_REG_POP (@var{stream}, @var{regno}) ! 7683: A C expression to output to @var{stream} some assembler code ! 7684: which will pop hard register number @var{regno} off of the stack. ! 7685: The code need not be optimal, since this macro is used only when ! 7686: profiling. ! 7687: ! 7688: @item ASM_OUTPUT_ADDR_DIFF_ELT (@var{stream}, @var{value}, @var{rel}) ! 7689: This macro should be provided on machines where the addresses ! 7690: in a dispatch table are relative to the table's own address. ! 7691: ! 7692: The definition should be a C statement to output to the stdio stream ! 7693: @var{stream} an assembler pseudo-instruction to generate a difference ! 7694: between two labels. @var{value} and @var{rel} are the numbers of two ! 7695: internal labels. The definitions of these labels are output using ! 7696: @code{ASM_OUTPUT_INTERNAL_LABEL}, and they must be printed in the same ! 7697: way here. For example, ! 7698: ! 7699: @example ! 7700: fprintf (@var{stream}, "\t.word L%d-L%d\n", ! 7701: @var{value}, @var{rel}) ! 7702: @end example ! 7703: ! 7704: @item ASM_OUTPUT_ADDR_VEC_ELT (@var{stream}, @var{value}) ! 7705: This macro should be provided on machines where the addresses ! 7706: in a dispatch table are absolute. ! 7707: ! 7708: The definition should be a C statement to output to the stdio stream ! 7709: @var{stream} an assembler pseudo-instruction to generate a reference to ! 7710: a label. @var{value} is the number of an internal label whose ! 7711: definition is output using @code{ASM_OUTPUT_INTERNAL_LABEL}. ! 7712: For example, ! 7713: ! 7714: @example ! 7715: fprintf (@var{stream}, "\t.word L%d\n", @var{value}) ! 7716: @end example ! 7717: ! 7718: @item ASM_OUTPUT_DOUBLE (@var{stream}, @var{value}) ! 7719: A C statement to output to the stdio stream @var{stream} an assembler ! 7720: instruction to assemble a @code{double} constant whose value is ! 7721: @var{value}. @var{value} will be a C expression of type ! 7722: @code{double}. ! 7723: ! 7724: @item ASM_OUTPUT_FLOAT (@var{stream}, @var{value}) ! 7725: A C statement to output to the stdio stream @var{stream} an assembler ! 7726: instruction to assemble a @code{float} constant whose value is ! 7727: @var{value}. @var{value} will be a C expression of type @code{float}. ! 7728: ! 7729: @item ASM_OUTPUT_INT (@var{stream}, @var{exp}) ! 7730: @itemx ASM_OUTPUT_SHORT (@var{stream}, @var{exp}) ! 7731: @itemx ASM_OUTPUT_CHAR (@var{stream}, @var{exp}) ! 7732: A C statement to output to the stdio stream @var{stream} an assembler ! 7733: instruction to assemble a @code{int}, @code{short} or @code{char} ! 7734: constant whose value is @var{value}. The argument @var{exp} will be ! 7735: an RTL expression which represents a constant value. Use ! 7736: @samp{output_addr_const (@var{exp})} to output this value as an ! 7737: assembler expression.@refill ! 7738: ! 7739: @item ASM_OUTPUT_BYTE (@var{stream}, @var{value}) ! 7740: A C statement to output to the stdio stream @var{stream} an assembler ! 7741: instruction to assemble a single byte containing the number @var{value}. ! 7742: ! 7743: @item ASM_OUTPUT_ASCII (@var{stream}, @var{ptr}, @var{len}) ! 7744: A C statement to output to the stdio stream @var{stream} an assembler ! 7745: instruction to assemble a string constant containing the @var{len} ! 7746: bytes at @var{ptr}. @var{ptr} will be a C expression of type ! 7747: @code{char *} and @var{len} a C expression of type @code{int}. ! 7748: ! 7749: If the assembler has a @code{.ascii} pseudo-op as found in the ! 7750: Berkeley Unix assembler, do not define the macro ! 7751: @code{ASM_OUTPUT_ASCII}. ! 7752: ! 7753: @item ASM_OUTPUT_SKIP (@var{stream}, @var{nbytes}) ! 7754: A C statement to output to the stdio stream @var{stream} an assembler ! 7755: instruction to advance the location counter by @var{nbytes} bytes. ! 7756: @var{nbytes} will be a C expression of type @code{int}. ! 7757: ! 7758: @item ASM_OUTPUT_ALIGN (@var{stream}, @var{power}) ! 7759: A C statement to output to the stdio stream @var{stream} an assembler ! 7760: instruction to advance the location counter to a multiple of 2 to the ! 7761: @var{power} bytes. @var{power} will be a C expression of type @code{int}. ! 7762: ! 7763: @item ASM_OUTPUT_COMMON (@var{stream}, @var{name}, @var{size}) ! 7764: A C statement (sans semicolon) to output to the stdio stream ! 7765: @var{stream} the assembler definition of a common-label named @var{name} ! 7766: whose size is @var{size} bytes. Use the expression ! 7767: @code{assemble_name (@var{stream}, @var{name})} to output the name ! 7768: itself; before and after that, output the additional assembler syntax ! 7769: for defining the name, and a newline. ! 7770: ! 7771: This macro controls how the assembler definitions of uninitialized ! 7772: global variables are output. ! 7773: ! 7774: @item ASM_OUTPUT_LOCAL (@var{stream}, @var{name}, @var{size}) ! 7775: A C statement (sans semicolon) to output to the stdio stream ! 7776: @var{stream} the assembler definition of a local-common-label named ! 7777: @var{name} whose size is @var{size} bytes. Use the expression ! 7778: @code{assemble_name (@var{stream}, @var{name})} to output the name ! 7779: itself; before and after that, output the additional assembler syntax ! 7780: for defining the name, and a newline. ! 7781: ! 7782: This macro controls how the assembler definitions of uninitialized ! 7783: static variables are output. ! 7784: ! 7785: @item ASM_OUTPUT_SOURCE_LINE (@var{stream}, @var{line}) ! 7786: A C statment to output DBX or SDB debugging information before code ! 7787: for line number @var{line} of the current source file to the ! 7788: stdio stream @var{stream}. ! 7789: ! 7790: This macro need not be defined if the standard form of debugging ! 7791: information for the debugger in use is appropriate. ! 7792: ! 7793: @item ASM_OUTPUT_IDENT (@var{stream}, @var{string}) ! 7794: A C statement to output something to the assembler file to handle a ! 7795: @samp{#ident} directive containing the text @var{string}. If this ! 7796: macro is not defined, the assembler code @samp{.ident "@var{string}"} ! 7797: will be output by default. ! 7798: ! 7799: This macro is significant only if @code{IDENT_DIRECTIVE} is defined. ! 7800: ! 7801: @item TARGET_BELL ! 7802: A C constant expression for the integer value for escape sequence ! 7803: @samp{\a}. ! 7804: ! 7805: @item TARGET_BS ! 7806: @itemx TARGET_TAB ! 7807: @itemx TARGET_NEWLINE ! 7808: C constant expressions for the integer values for escape sequences ! 7809: @samp{\b}, @samp{\t} and @samp{\n}. ! 7810: ! 7811: @item TARGET_VT ! 7812: @itemx TARGET_FF ! 7813: @itemx TARGET_CR ! 7814: C constant expressions for the integer values for escape sequences ! 7815: @samp{\v}, @samp{\f} and @samp{\r}. ! 7816: ! 7817: @item ASM_OUTPUT_OPCODE (@var{stream}, @var{ptr}) ! 7818: Define this macro if you are using an unusual assembler that ! 7819: requires different names for the machine instructions. ! 7820: ! 7821: The definition is a C statement or statements which output an ! 7822: assembler instruction opcode to the stdio stream @var{stream}. The ! 7823: macro-operand @var{ptr} is a variable of type @code{char *} which ! 7824: points to the opcode name in its ``internal'' form---the form that is ! 7825: written in the machine description. The definition should output the ! 7826: opcode name to @var{stream}, performing any translation you desire, and ! 7827: increment the variable @var{ptr} to point at the end of the opcode ! 7828: so that it will not be output twice. ! 7829: ! 7830: In fact, your macro definition may process less than the entire opcode ! 7831: name, or more than the opcode name; but if you want to process text ! 7832: that includes @samp{%}-sequences to substitute operands, you must take ! 7833: care of the substitution yourself. Just be sure to increment ! 7834: @var{ptr} over whatever text should not be output normally. ! 7835: ! 7836: If the macro definition does nothing, the instruction is output ! 7837: in the usual way. ! 7838: ! 7839: @item FINAL_PRESCAN_INSN (@var{insn}, @var{opvec}, @var{noperands}) ! 7840: If defined, a C statement to be executed just prior to the output of ! 7841: assembler code for @var{insn}, to modify the extracted operands so ! 7842: they will be output differently. ! 7843: ! 7844: Here the argument @var{opvec} is the vector containing the operands ! 7845: extracted from @var{insn}, and @var{noperands} is the number of ! 7846: elements of the vector which contain meaningful data for this insn. ! 7847: The contents of this vector are what will be used to convert the insn ! 7848: template into assembler code, so you can change the assembler output ! 7849: by changing the contents of the vector. ! 7850: ! 7851: This macro is useful when various assembler syntaxes share a single ! 7852: file of instruction patterns; by defining this macro differently, you ! 7853: can cause a large class of instructions to be output differently (such ! 7854: as with rearranged operands). Naturally, variations in assembler ! 7855: syntax affecting individual insn patterns ought to be handled by ! 7856: writing conditional output routines in those patterns. ! 7857: ! 7858: If this macro is not defined, it is equivalent to a null statement. ! 7859: ! 7860: @item PRINT_OPERAND (@var{stream}, @var{x}, @var{code}) ! 7861: A C compound statement to output to stdio stream @var{stream} the ! 7862: assembler syntax for an instruction operand @var{x}. @var{x} is an ! 7863: RTL expression. ! 7864: ! 7865: @var{code} is a value that can be used to specify one of several ways ! 7866: of printing the operand. It is used when identical operands must be ! 7867: printed differently depending on the context. @var{code} comes from ! 7868: the @samp{%} specification that was used to request printing of the ! 7869: operand. If the specification was just @samp{%@var{digit}} then ! 7870: @var{code} is 0; if the specification was @samp{%@var{ltr} ! 7871: @var{digit}} then @var{code} is the ASCII code for @var{ltr}. ! 7872: ! 7873: If @var{x} is a register, this macro should print the register's name. ! 7874: The names can be found in an array @code{reg_names} whose type is ! 7875: @code{char *[]}. @code{reg_names} is initialized from ! 7876: @code{REGISTER_NAMES}. ! 7877: ! 7878: When the machine description has a specification @samp{%@var{punct}} ! 7879: (a @samp{%} followed by a punctuation character), this macro is called ! 7880: with a null pointer for @var{x} and the punctuation character for ! 7881: @var{code}. ! 7882: ! 7883: @item PRINT_OPERAND_ADDRESS (@var{stream}, @var{x}) ! 7884: A C compound statement to output to stdio stream @var{stream} the ! 7885: assembler syntax for an instruction operand that is a memory reference ! 7886: whose address is @var{x}. @var{x} is an RTL expression. ! 7887: ! 7888: @item ASM_OPEN_PAREN ! 7889: @itemx ASM_CLOSE_PAREN ! 7890: These macros are defined as C string constant, describing the syntax ! 7891: in the assembler for grouping arithmetic expressions. The following ! 7892: definitions are correct for most assemblers: ! 7893: ! 7894: @example ! 7895: #define ASM_OPEN_PAREN "(" ! 7896: #define ASM_CLOSE_PAREN ")" ! 7897: @end example ! 7898: @end table ! 7899: ! 7900: @node Config,, Machine Macros, Top ! 7901: @chapter The Configuration File ! 7902: ! 7903: The configuration file @file{config-@var{machine}.h} contains macro ! 7904: definitions that describe the machine and system on which the compiler is ! 7905: running. Most of the values in it are actually the same on all machines ! 7906: that GNU CC runs on, so most all configuration files are identical. But ! 7907: there are some macros that vary: ! 7908: ! 7909: @table @code ! 7910: @item FAILURE_EXIT_CODE ! 7911: A C expression for the status code to be returned when the compiler ! 7912: exits after serious errors. ! 7913: ! 7914: @item SUCCESS_EXIT_CODE ! 7915: A C expression for the status code to be returned when the compiler ! 7916: exits without serious errors. ! 7917: @end table ! 7918: ! 7919: @contents ! 7920: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.