|
|
1.1 root 1: Info file internals, produced by texinfo-format-buffer -*-Text-*-
2: from file internals.texinfo
3:
4:
5: This file documents the internals of the GNU compiler.
6:
7: Copyright (C) 1987 Richard M. Stallman.
8:
9: Permission is granted to make and distribute verbatim copies of
10: this manual provided the copyright notice and this permission notice
11: are preserved on all copies.
12:
13: Permission is granted to copy and distribute modified versions of this
14: manual under the conditions for verbatim copying, provided also that the
15: section entitled "GNU CC General Public License" is included exactly as
16: in the original, and provided that the entire resulting derived work is
17: distributed under the terms of a permission notice identical to this one.
18:
19: Permission is granted to copy and distribute translations of this manual
20: into another language, under the above conditions for modified versions,
21: except that the section entitled "GNU CC General Public License" may be
22: included in a translation approved by the author instead of in the original
23: English.
24:
25:
26:
27:
28:
29: File: internals Node: Top, Up: (DIR), Next: Switches
30:
31: Introduction
32: ************
33:
34: This manual documents how to install and port the GNU C compiler.
35:
36: * Menu:
37:
38: * Copying:: GNU CC General Public License says
39: how you can copy and share GNU CC.
40: * Switches:: Command switches supported by `gcc'.
41: * Installation:: How to configure, compile and install GNU CC.
42: * Portability:: Goals of GNU CC's portability features.
43: * Passes:: Order of passes, what they do, and what each file is for.
44: * RTL:: The intermediate representation that most passes work on.
45: * Machine Desc:: How to write machine description instruction patterns.
46: * Machine Macros:: How to write the machine description C macros.
47:
48:
49: File: internals Node: Copying, Prev: Top, Up: Top, Next: Switches
50:
51: GNU CC GENERAL PUBLIC LICENSE
52: *****************************
53:
54: The license agreements of most software companies keep you at the
55: mercy of those companies. By contrast, our general public license is
56: intended to give everyone the right to share GNU CC. To make sure that
57: you get the rights we want you to have, we need to make restrictions
58: that forbid anyone to deny you these rights or to ask you to surrender
59: the rights. Hence this license agreement.
60:
61: Specifically, we want to make sure that you have the right to give
62: away copies of GNU CC, that you receive source code or else can get it
63: if you want it, that you can change GNU CC or use pieces of it in new
64: free programs, and that you know you can do these things.
65:
66: To make sure that everyone has such rights, we have to forbid you to
67: deprive anyone else of these rights. For example, if you distribute
68: copies of GNU CC, you must give the recipients all the rights that you
69: have. You must make sure that they, too, receive or can get the
70: source code. And you must tell them their rights.
71:
72: Also, for our own protection, we must make certain that everyone
73: finds out that there is no warranty for GNU CC. If GNU CC is modified by
74: someone else and passed on, we want its recipients to know that what
75: they have is not what we distributed, so that any problems introduced
76: by others will not reflect on our reputation.
77:
78: Therefore we (Richard Stallman and the Free Software Fundation,
79: Inc.) make the following terms which say what you must do to be
80: allowed to distribute or change GNU CC.
81:
82:
83: COPYING POLICIES
84: ================
85:
86: 1. You may copy and distribute verbatim copies of GNU CC source code as
87: you receive it, in any medium, provided that you conspicuously and
88: appropriately publish on each copy a valid copyright notice
89: "Copyright (C) 1987 Free Software Foundation, Inc." (or
90: with the year updated if that is appropriate); keep intact the notices
91: on all files that refer to this License Agreement and to the absence
92: of any warranty; and give any other recipients of the GNU CC program a
93: copy of this License Agreement along with the program. You may charge
94: a distribution fee for the physical act of transferring a copy.
95:
96: 2. You may modify your copy or copies of GNU CC or any portion of it,
97: and copy and distribute such modifications under the terms of
98: Paragraph 1 above, provided that you also do the following:
99:
100: * cause the modified files to carry prominent notices stating
101: that you changed the files and the date of any change; and
102:
103: * cause the whole of any work that you distribute or publish,
104: that in whole or in part contains or is a derivative of GNU CC or
105: any part thereof, to be licensed at no charge to all third
106: parties on terms identical to those contained in this License
107: Agreement (except that you may choose to grant more extensive
108: warranty protection to some or all third parties, at your
109: option).
110:
111: * You may charge a distribution fee for the physical act of
112: transferring a copy, and you may at your option offer warranty
113: protection in exchange for a fee.
114:
115: 3. You may copy and distribute GNU CC or any portion of it in
116: compiled, executable or object code form under the terms of Paragraphs
117: 1 and 2 above provided that you do the following:
118:
119: * cause each such copy to be accompanied by the
120: corresponding machine-readable source code, which must
121: be distributed under the terms of Paragraphs 1 and 2 above; or,
122:
123: * cause each such copy to be accompanied by a
124: written offer, with no time limit, to give any third party
125: free (except for a nominal shipping charge) a machine readable
126: copy of the corresponding source code, to be distributed
127: under the terms of Paragraphs 1 and 2 above; or,
128:
129: * in the case of a recipient of GNU CC in compiled, executable
130: or object code form (without the corresponding source code) you
131: shall cause copies you distribute to be accompanied by a copy
132: of the written offer of source code which you received along
133: with the copy you received.
134:
135: 4. You may not copy, sublicense, distribute or transfer GNU CC
136: except as expressly provided under this License Agreement. Any attempt
137: otherwise to copy, sublicense, distribute or transfer GNU CC is void and
138: your rights to use the program under this License agreement shall be
139: automatically terminated. However, parties who have received computer
140: software programs from you with this License Agreement will not have
141: their licenses terminated so long as such parties remain in full compliance.
142:
143: 5. If you wish to incorporate parts of GNU CC into other free programs
144: whose distribution conditions are different, write to the Free Software
145: Foundation at 1000 Mass Ave, Cambridge, MA 02138. We have not yet worked
146: out a simple rule that can be stated here, but we will often permit this.
147: We will be guided by the two goals of preserving the free status of all
148: derivatives our free software and of promoting the sharing and reuse of
149: software.
150:
151: Your comments and suggestions about our licensing policies and our
152: software are welcome! Please contact the Free Software Foundation, Inc.,
153: 1000 Mass Ave, Cambridge, MA 02138, or call (617) 876-3296.
154:
155:
156: NO WARRANTY
157: ===========
158:
159: BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
160: WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
161: WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
162: RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT
163: WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
164: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
165: A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
166: PERFORMANCE OF GNU CC IS WITH YOU. SHOULD GNU CC PROVE DEFECTIVE, YOU
167: ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
168:
169: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
170: STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
171: WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO
172: YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
173: SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
174: INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
175: BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
176: FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN
177: IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
178: ANY CLAIM BY ANY OTHER PARTY.
179:
180:
181: File: internals Node: Switches, Prev: Copying, Up: Top, Next: Installation
182:
183: GNU CC Switches
184: ***************
185:
186: `-O'
187: Do optimize.
188:
189: `-g'
190: Produce debugging information in DBX format.
191:
192: `-c'
193: Compile but do not link the object files.
194:
195: `-o FILE'
196: Place linker output in file FILE.
197:
198: `-S'
199: Compile into assembler code but do not assemble.
200:
201: `-mMACHINESPEC'
202: Machine-dependent switch specifying something about the type
203: of target machine. For example, using the 68000 machine description,
204: `-m68000' specifies do not use the 68020 instructions,
205: and `-msoft-float' specifies do not use the 68881 floating point
206: instructions.
207:
208: `-dLETTERS'
209: Says to make debugging dumps at times specified by LETTERS.
210: Here are the possible letters:
211:
212: `t'
213: Dump syntax-tree.
214: `r'
215: Dump after RTL generation.
216: `j'
217: Dump after first jump optimization.
218: `s'
219: Dump after CSE.
220: `L'
221: Dump after loop optimization.
222: `f'
223: Dump after flow analysis.
224: `c'
225: Dump after instruction combination.
226: `l'
227: Dump after local register allocation.
228: `g'
229: Dump after global register allocation.
230:
231: `-pedantic'
232: Attempt to support strict ANSI standard C. Valid ANSI standard C
233: programs should compile properly with or without this switch.
234: However, without this switch, certain useful or traditional constructs
235: banned by the standard are supported. With this switch, they are
236: rejected. There is no reason to use this switch; it exists only
237: to satisfy pedants.
238:
239: `E'
240: Preprocess the input files and output the results to standard output.
241:
242: `C'
243: Tell the preprocessor not to discard comments. Used with the `-E'
244: switch.
245:
246: `IDIR'
247: Search directory DIR for include files.
248:
249: `DMACRO'
250: Define macro MACRO with the empty string as its definition.
251:
252: `DMACRO=DEFN'
253: Define macro MACRO as DEFN.
254:
255: `UMACRO'
256: Undefine macro MACRO.
257:
258: `w'
259: Inhibit warning messages.
260:
261: `v'
262: Compiler driver program prints the commands it executes as it runs
263: the preprocessor, compiler proper, assembler and linker.
264:
265: `BPREFIX'
266: Compiler driver program tries PREFIX as a prefix for each program
267: it tries to run. These programs are `cpp', `cc1',
268: `as' and `ld'.
269:
270: For each subprogram to be run, the compiler driver first tries the
271: `-B' prefix, if any. If that name is not found, or if `-B'
272: was not specified, the driver tries two standard prefixes, which are
273: `/usr/lib/gcc-' and `/usr/local/lib/gcc-'. If neither of
274: those results in a file name that is found, the unmodified program
275: name is searched for using the `PATH' environment variable.
276:
277:
278: File: internals Node: Installation, Prev: Switches, Up: Top, Next: Portability
279:
280: Installing GNU CC
281: *****************
282:
283: 1. Choose configuration files.
284:
285: * Make a symbolic link from file `config.h' to the top-level
286: config file for the machine you are using. Its name should be
287: `config-MACHINE.h'. This file is responsible for
288: defining information about the host machine. It includes
289: `tm.h'.
290:
291: * Make a symbolic link from `tm.h' to the machine-description
292: macro file for your machine (its name should be
293: `tm-MACHINE.h').
294:
295: * Make a symbolic link from `md' to the
296: machine description pattern file (its name should be
297: `MACHINE.md').
298:
299: * Make a symbolic link from
300: `aux-output.c' to the output-subroutine file for your machine
301: (its name should be `MACHINE-output.c').
302:
303: 2. Make sure the Bison parser generator is installed.
304:
305: 3. Build the compiler. Just type `make' in the compiler directory.
306:
307: 4. Delete `*.o' in the compiler directory. The executables from
308: the previous step remain for the next step.
309:
310: 5. Remake the compiler with
311:
312: make CC=./gcc CFLAGS="-g -O -I."
313:
314: 6. Install the compiler's passes. Copy the file `cc1' just made
315: to `/usr/local/lib/gcc-cc1'.
316:
317: Make the file `/usr/local/lib/gcc-cpp' either a link to `/lib/cpp'
318: or a copy of the file `cpp' generated by `make'.
319:
320: *Warning: the GNU CPP may not work for @file{ioctl.h}.* This
321: cannot be fixed in the GNU CPP because the bug is in `ioctl.h':
322: at least on some machines, it relies on behavior that is incompatible
323: with ANSI C. This behavior consists of substituting for macro
324: argument names when they appear inside of character constants.
325:
326: 7. Install the compiler driver. This is the file `gcc' generated
327: by `make'.
328:
329:
330: File: internals Node: Portability, Prev: Installation, Up: Top, Next: Passes
331:
332: GNU CC and Portability
333: **********************
334:
335: The main goal of GNU CC was to make a good, fast compiler for machines in
336: the class that the GNU system aims to run on: 32-bit machines that address
337: 8-bit bytes and have several general registers. Elegance, theoretical
338: power and simplicity are only secondary.
339:
340: GNU CC gets most of the information about the target machine from a machine
341: description which gives an algebraic formula for each of the machine's
342: instructions. This is a very clean way to describe the target. But when
343: the compiler needs information that is difficult to express in this
344: fashion, I have not hesitated to define an ad-hoc parameter to the machine
345: description. The purpose of portability is to reduce the total work needed
346: on the compiler; it was not of interest for its own sake.
347:
348: GNU CC does not contain machine dependent code, but it does contain code
349: that depends on machine parameters such as endianness (whether the most
350: significant byte has the highest or lowest address of the bytes in a word)
351: and the availability of autoincrement addressing. In the RTL-generation
352: pass, it is often necessary to have multiple strategies for generating code
353: for a particular kind of syntax tree, strategies that are usable for different
354: combinations of parameters. Often I have not tried to address all possible
355: cases, but only the common ones or only the ones that I have encountered.
356: As a result, a new target may require additional strategies. You will know
357: if this happens because the compiler will call `abort'. Fortunately,
358: the new strategies can be added to all versions of the compiler, and will
359: be relevant only for target machines that need them.
360:
361:
362: File: internals Node: Passes, Prev: Portability, Up: Top, Next: RTL
363:
364: Passes and Files of the Compiler
365: ********************************
366:
367: The overall control structure of the compiler is in `toplev.c'. This
368: file is responsible for initialization, decoding arguments, opening and
369: closing files, and sequencing the passes.
370:
371: The parsing pass is invoked only once, to parse the entire input. Each
372: time a complete function definition or top-level data definition is read,
373: the parsing pass calls the function `rest_of_compilation' in
374: `toplev.c', which is responsible for all further processing necessary,
375: ending with output of the assembler language. All other compiler passes
376: run, in sequence, within `rest_of_compilation'. After
377: `rest_of_compilation' returns from compiling a function definition,
378: the storage used for its compilation is entirely freed.
379:
380: Here is a list of all the passes of the compiler and their source files.
381: Also included is a description of where debugging dumps can be requested
382: with `-d' switches.
383:
384: * Parsing. This pass reads the entire text of a function definition,
385: constructing a syntax tree. The tree representation does not entirely
386: follow C syntax, because it is intended to support other languages as well.
387:
388: C data type analysis is also done in this pass, and every tree node that
389: represents an expression has a data type attached. Variables are represented
390: as declaration nodes.
391:
392: Constant folding and associative-law simplifications are also done during
393: this pass.
394:
395: The source files of the parsing pass are `parse.y', `decl.c',
396: `typecheck.c', `stor-layout.c', `fold-const.c', and
397: `tree.c'. The last three are intended to be language-independent.
398: There are also header files `parse.h', `c-tree.h',
399: `tree.h' and `tree.def'. The last two define the format of
400: the tree representation.
401:
402: * RTL generation. This pass converts the tree structure for one
403: function into RTL code.
404:
405: This is where the bulk of target-parameter-dependent code is found,
406: since often it is necessary for strategies to apply only when certain
407: standard kinds of instructions are available. The purpose of named
408: instruction patterns is to provide this information to the RTL
409: generation pass.
410:
411: Optimization is done in this pass for `if'-conditions that are
412: comparisons, boolean operations or conditional expressions. Tail
413: recursion is detected at this time also. Decisions are made about how
414: best to arrange loops and how to output `switch' statements.
415:
416: The files of the RTL generation pass are `stmt.c', `expr.c',
417: `explow.c', `expmed.c', `optabs.c' and `emit-rtl.c'.
418: Also, the file `insn-emit.c', generated from the machine description
419: by the program `genemit', is used in this pass. The header files
420: `expr.h' is used for communication within this pass.
421:
422: The header files `insn-flags.h' and `insn-codes.h', generated from
423: the machine description by the programs `genflags' and `gencodes',
424: tell this pass which standard names are available for use and which patterns
425: correspond to them.
426:
427: Aside from debugging information output, none of the following passes
428: refers to the tree structure representation of the function.
429:
430: The switch `-dr' causes a debugging dump of the RTL code after this
431: pass. This dump file's name is made by appending `.rtl' to the
432: input file name.
433:
434: * Jump optimization. This pass simplifies jumps to the following instruction,
435: jumps across jumps, and jumps to jumps. It deletes unreferenced labels
436: and unreachable code, except that unreachable code that contains a loop
437: is not recognized as unreachable in this pass. (Such loops are deleted
438: later in the basic block analysis.)
439:
440: Jump optimization is performed two or three times. The first time is
441: immediately following RTL generation.
442:
443: The source file of this pass is `jump.c'.
444:
445: The switch `-dj' causes a debugging dump of the RTL code after this
446: pass is run for the first time. This dump file's name is made by appending
447: `.jump' to the input file name.
448:
449: * Register scan. This pass finds the first and last use of each
450: register, as a guide for common subexpression elimination. Its source
451: is in `regclass.c'.
452:
453: * Common subexpression elimination. This pass also does constant
454: propagation. Its source file is `cse.c'. If constant
455: propagation causes conditional jumps to become unconditional or to
456: become no-ops, jump optimization is run again when cse is finished.
457:
458: The switch `-ds' causes a debugging dump of the RTL code after
459: this pass. This dump file's name is made by appending `.cse' to
460: the input file name.
461:
462: * Loop optimization. This pass moves constant expressions out of loops.
463: Its source file is `loop.c'.
464:
465: The switch `-dL' causes a debugging dump of the RTL code after
466: this pass. This dump file's name is made by appending `.loop' to
467: the input file name.
468:
469: * Stupid register allocation is performed at this point in a
470: nonoptimizing compilation. It does a little data flow analysis as
471: well. When stupid register allocation is in use, the next pass
472: executed is the reloading pass; the others in between are skipped.
473: The source file is `stupid.c', with header file `stupid.h'
474: used for communication with the RTL generation pass.
475:
476: * Data flow analysis (`flow.c'). This pass divides the program
477: into basic blocks (and in the process deletes unreachable loops); then
478: it computes which pseudo-registers are live at each point in the
479: program, and makes the first instruction that uses a value point at
480: the instruction that computed the value.
481:
482: This pass also deletes computations whose results are never used, and
483: combines memory references with add or subtract instructions to make
484: autoincrement or autodecrement addressing.
485:
486: The switch `-df' causes a debugging dump of the RTL code after
487: this pass. This dump file's name is made by appending `.flow' to
488: the input file name. If stupid register allocation is in use, this
489: dump file reflects the full results of such allocation.
490:
491: * Instruction combination (`combine.c'). This pass attempts to
492: combine groups of two or three instructions that are related by data
493: flow into single instructions. It combines the RTL expressions for
494: the instructions by substitution, simplifies the result using algebra,
495: and then attempts to match the result against the machine description.
496:
497: The switch `-dc' causes a debugging dump of the RTL code after
498: this pass. This dump file's name is made by appending `.combine'
499: to the input file name.
500:
501: * Register class preferencing. The RTL code is scanned to find out
502: which register class is best for each pseudo register. The source file
503: is `regclass.c'.
504:
505: * Local register allocation (`local-alloc.c'). This pass allocates
506: hard registers to pseudo registers that are used only within one basic
507: block. Because the basic block is linear, it can use fast and powerful
508: techniques to do a very good job.
509:
510: The switch `-dl' causes a debugging dump of the RTL code after
511: this pass. This dump file's name is made by appending `.lreg' to
512: the input file name.
513:
514: * Global register allocation (`global-alloc.c'). This pass
515: allocates hard registers for the remaining pseudo registers (those
516: whose life spans are not contained in one basic block).
517:
518: * Reloading. This pass finds instructions that are invalid because a
519: value has failed to end up in a register, or has ended up in a
520: register of the wrong kind. It fixes up these instructions by
521: reloading the problematical values into registers temporarily.
522: Additional instructions are generated to do the copying.
523:
524: Source files are `reload.c' and `reload1.c', plus the header
525: `reload.h' used for communication between them.
526:
527: The switch `-dg' causes a debugging dump of the RTL code after
528: this pass. This dump file's name is made by appending `.greg' to
529: the input file name.
530:
531: * Jump optimization is repeated, this time including cross-jumping.
532:
533: * Final. This pass outputs the assembler code for the function. It is
534: also responsible for identifying no-op move instructions and spurious
535: test and compare instructions. The function entry and exit sequences
536: are generated directly as assembler code in this pass; they never
537: exist as RTL. Pseudo registers that did not get hard registers are
538: given stack slots in this pass.
539:
540: The source files are `final.c' plus `insn-output.c'; the
541: latter is generated automatically from the machine description by the
542: tool `genoutput'. The header file `conditions.h' is used
543: for communication between these files.
544:
545: * Debugging information output. This is run after final because it must
546: output the stack slot offsets for pseudo registers that did not get
547: hard registers. Source files are `dbxout.c' for DBX symbol table
548: format and `symout.c' for GDB's own symbol table format.
549:
550: Some additional files are used by all or many passes:
551:
552: * Every pass uses `machmode.def', which defines the machine modes.
553:
554: * All the passes that work with RTL use the header files `rtl.h'
555: and `rtl.def', and subroutines in file `rtl.c'. The
556: tools `gen*' also use these files to read and work with the
557: machine description RTL.
558:
559: * Several passes refer to the header file `insn-config.h' which
560: contains a few parameters (C macro definitions) generated
561: automatically from the machine description RTL by the tool
562: `genconfig'.
563:
564: * Several passes use the instruction recognizer, which consists of
565: `recog.c' and `recog.h', plus the files `insn-recog.c'
566: and `insn-extract.c' that are generated automatically from the
567: machine description by the tools `genrecog' and `genextract'.
568:
569: * Several passes use the header file `regs.h' which defines the
570: information recorded about pseudo register usage, `basic-block.h'
571: which defines the information recorded about basic blocks.
572:
573: * `hard-reg-set.h' defines the type `HARD_REG_SET', a bit-vector
574: with a bit for each hard register, and some macros to manipulate it.
575: This type is just `int' if the machine has few enough hard registers;
576: otherwise it is an array of `int' and some of the macros expand
577: into loops.
578:
579:
580: File: internals Node: RTL, Prev: Passes, Up: Top, Next: Machine Desc
581:
582: RTL Representation
583: ******************
584:
585: Most of the work of the compiler is done on an intermediate representation
586: called register tranfer language. In this language, the instructions to be
587: output are described, pretty much one by one, in an algebraic form that
588: describes what the instruction does.
589:
590: RTL is inspired by Lisp lists. It has both an internal form, made up of
591: structures that point at other structures, and a textual form that is used
592: in the machine description and in printed debugging dumps. The textual
593: form uses nested parentheses to indicate the pointers in the internal form.
594:
595: * Menu:
596:
597: * RTL Objects:: Expressions vs vectors vs strings vs integers.
598: * Accessors:: Macros to access expression operands or vector elts.
599: * Machine Modes:: Describing the size and format of a datum.
600: * Constants:: Expressions with constant values.
601: * Regs and Memory:: Expressions representing register contents or memory.
602: * Arithmetic:: Expressions representing arithmetic on other expressions.
603: * Comparisons:: Expressions representing comparison of expressions.
604: * Bit Fields:: Expressions representing bit-fields in memory or reg.
605: * Conversions:: Extending, truncating, floating or fixing.
606: * RTL Declarations:: Declaring volatility, constancy, etc.
607: * Side Effects:: Expressions for storing in registers, etc.
608: * Incdec:: Embedded side-effects for autoincrement addressing.
609: * Insns:: Expression types for entire insns.
610: * Sharing:: Some expressions are unique; others *must* be copied.
611:
612:
613: File: internals Node: RTL Objects, Prev: RTL, Up: RTL, Next: Accessors
614:
615: RTL Object Types
616: ================
617:
618: RTL uses four kinds of objects: expressions, integers, strings and vectors.
619: Expressions are the most important ones. An RTL expression is a C
620: structure, but it is usually referred to with a pointer; a type that is
621: given the typedef name `rtx'.
622:
623: An integer is simply an `int', and a string is a `char *'.
624: Within rtl code, strings appear only inside `symbol_ref' expressions,
625: but they appear in other contexts in the rtl expressions that make up
626: machine descriptions. Their written form uses decimal digits.
627:
628: A string is a sequence of characters. In core it is represented as a
629: `char *' in usual C fashion, and they are written in C syntax as well.
630: However, strings in RTL may never be null. If you write an empty string in
631: a machine description, it is represented in core as a null pointer rather
632: than as a pointer to a null character. In certain contexts, these null
633: pointers instead of strings are valid.
634:
635: A vector contains an arbitrary, specified number of pointers to
636: expressions. The number of elements in the vector is explicitly present in
637: the vector. The written form of a vector consists of square brackets
638: (`[...]') surrounding the elements, in sequence and with
639: whitespace separating them. Vectors of length zero are not created; null
640: pointers are used instead.
641:
642: Expressions are classified by "expression code". The expression code
643: is a name defined in `rtl.def', which is also (in upper case) a C
644: enumeration constant. The possible expression codes and their meanings are
645: machine-independent. The code of an rtx can be extracted with the macro
646: `GET_CODE (X)' and altered with `PUT_CODE (X,
647: NEWCODE)'.
648:
649: The expression code determines how many operands the expression contains,
650: and what kinds of objects they are. In RTL, unlike Lisp, you cannot tell
651: by looking at an operand what kind of object it is. Instead, you must know
652: from its context---from the expression code of the containing expression.
653: For example, in an expression of code `subreg', the first operand is
654: to be regarded as an expression and the second operand as an integer. In
655: an expression of code `plus', there are two operands, both of which
656: are to be regarded as expressions. In a `symbol_ref' expression,
657: there is one operand, which is to be regarded as a string.
658:
659: Expressions are written as parentheses containing the name of the
660: expression type, its flags and machine mode if any, and then the operands
661: of the expression (separated by spaces).
662:
663: In a few contexts a null pointer is valid where an expression is normally
664: wanted. The written form of this is `(nil)'.
665:
666:
667: File: internals Node: Accessors, Prev: RTL Objects, Up: RTL, Next: Machine Modes
668:
669: Access to Operands
670: ==================
671:
672: For each expression type `rtl.def' specifies the number of contained
673: objects and their kinds, with four possibilities: `e' for expression
674: (actually a pointer to an expression), `i' for integer, `s' for
675: string, and `E' for vector of expressions. The sequence of letters
676: for an expression code is called its "format". Thus, the format of
677: `subreg' is `ei'.
678:
679: Two other format characters are used occasionally: `u' and `0'.
680: `u' is equivalent to `e' except that it is printed differently in
681: debugging dumps, and `0' means a slot whose contents do not fit any
682: normal category. `0' slots are not printed at all in dumps, and are
683: often used in special ways by small parts of the compiler.
684:
685: There are macros to get the number of operands and the format of an
686: expression code:
687:
688: `GET_RTX_LENGTH (CODE)'
689: Number of operands of an rtx of code CODE.
690:
691: `GET_RTX_FORMAT (CODE)'
692: The format of an rtx of code CODE, as a C string.
693:
694: Operands of expressions are accessed using the macros `XEXP',
695: `XINT' and `XSTR'. Each of these macros takes two arguments: an
696: expression-pointer (rtx) and an operand number (counting from zero). Thus,
697:
698: XEXP (x, 2)
699:
700: accesses operand 2 of expression X, as an expression.
701:
702: XINT (x, 2)
703:
704: accesses the same operand as an integer. `XSTR', used in the same
705: fashion, would access it as a string.
706:
707: Any operand can be accessed as an integer, as an expression or as a string.
708: You must choose the correct method of access for the kind of value actually
709: stored in the operand. You would do this based on the expression code of
710: the containing expression. That is also how you would know how many
711: operands there are.
712:
713: For example, if X is a `subreg' expression, you know that it has
714: two operands which can be correctly accessed as `XEXP (x, 0)' and
715: `XINT (x, 1)'. If you did `XINT (x, 0)', you would get the
716: address of the expression operand but cast as an integer; that might
717: occasionally be useful, but it would be cleaner to write `(int) XEXP
718: (x, 0)'. `XEXP (x, 1)' would also compile without error, and would
719: return the second, integer operand cast as an expression pointer, which
720: would probably result in a crash when accessed. Nothing stops you from
721: writing `XEXP (x, 28)' either, but this will access memory past the
722: end of the expression with unpredictable results.
723:
724: Access to operands which are vectors is more complicated. You can use the
725: macro `XVEC' to get the vector-pointer itself, or the macros
726: `XVECEXP' and `XVECLEN' to access the elements and length of a
727: vector.
728:
729: `XVEC (EXP, IDX)'
730: Access the vector-pointer which is operand number IDX in EXP.
731:
732: `XVECLEN (EXP, IDX)'
733: Access the length (number of elements) in the vector which is
734: in operand number IDX in EXP. This value is an `int'.
735:
736: `XVECLEN (EXP, IDX, ELTNUM)'
737: Access element number ELTNUM in the vector which is
738: in operand number IDX in EXP. This value is an `rtx'.
739:
740: It is up to you to make sure that ELTNUM is not negative
741: and is less than `XVECLEN (EXP, IDX)'.
742:
743: All the macros defined in this section expand into lvalues and therefore
744: can be used to assign the operands, lengths and vector elements as well as
745: to access them.
746:
747:
748: File: internals Node: Machine Modes, Prev: Accessors, Up: RTL, Next: Constants
749:
750: Machine Modes
751: =============
752:
753: A machine mode describes a size of data object and the representation used
754: for it. In the C code, machine modes are represented by an enumeration
755: type, `enum machine_mode'. Each rtl expression has room for a machine
756: mode and so do certain kinds of tree expressions (declarations and types,
757: to be precise).
758:
759: In debugging dumps and machine descriptions, the machine mode of an RTL
760: expression is written after the expression code with a colon to separate
761: them. The letters `mode' which appear at the end of each machine mode
762: name are omitted. For example, `(reg:SI 38)' is a `reg'
763: expression with machine mode `SImode'. If the mode is
764: `VOIDmode', it is not written at all.
765:
766: Here is a table of machine modes.
767:
768: `QImode'
769: "Quarter-Integer" mode represents a single byte treated as an integer.
770:
771: `HImode'
772: "Half-Integer" mode represents a two-byte integer.
773:
774: `SImode'
775: "Single Integer" mode represents a four-byte integer.
776:
777: `DImode'
778: "Double Integer" mode represents an eight-byte integer.
779:
780: `TImode'
781: "Tetra Integer" (?) mode represents a sixteen-byte integer.
782:
783: `SFmode'
784: "Single Floating" mode represents a single-precision (four byte) floating
785: point number.
786:
787: `DFmode'
788: "Double Floating" mode represents a double-precision (eight byte) floating
789: point number.
790:
791: `TFmode'
792: "Tetra Floating" mode represents a quadruple-precision (sixteen byte)
793: floating point number.
794:
795: `BLKmode'
796: "Block" mode represents values that are aggregates to which none of
797: the other modes apply. In rtl, only memory references can have this mode,
798: and only if they appear in string-move or vector instructions. On machines
799: which have no such instructions, `BLKmode' will not appear in RTL.
800:
801: `VOIDmode'
802: Void mode means the absence of a mode or an unspecified mode.
803: For example, RTL expresslons of code `const_int' have mode
804: `VOIDmode' because they can be taken to have whatever mode the context
805: requires. In debugging dumps of RTL, `VOIDmode' is expressed by
806: the absence of any mode.
807:
808: `EPmode'
809: "Entry Pointer" mode is intended to be used for function variables in
810: Pascal and other block structured languages. Such values contain
811: both a function address and a static chain pointer for access to
812: automatic variables of outer levels. This mode is only partially
813: implemented since C does not use it.
814:
815: `CSImode, ...'
816: "Complex Single Integer" mode stands for a complex number represented
817: as a pair of `SImode' integers. Any of the integer and floating modes
818: may have `C' prefixed to its name to obtain a complex number mode.
819: For example, there are `CQImode', `CSFmode', and `CDFmode'.
820: Since C does not support complex numbers, these machine modes are only
821: partially implemented.
822:
823: `BImode'
824: This is the machine mode of a bit-field in a structure. It is used
825: only in the syntax tree, never in RTL, and in the syntax tree it appears
826: only in declaration nodes. In C, it appears only in `FIELD_DECL'
827: nodes for structure fields defined with a bit size.
828:
829: The machine description defines `Pmode' as a C macro which expands
830: into the machine mode used for addresses. Normally this is `SImode'.
831:
832: The only modes which a machine description must support are
833: `QImode', `SImode', `SFmode' and `DFmode'. The
834: compiler will attempt to use `DImode' for two-word structures and
835: unions, but it would not be hard to program it to avoid this. Likewise,
836: you can arrange for the C type `short int' to avoid using
837: `HImode'. In the long term it would be desirable to make the set of
838: available machine modes machine-dependent and eliminate all assumptions
839: about specific machine modes or their uses from the machine-independent
840: code of the compiler.
841:
842: Here are some C macros that relate to machine modes:
843:
844: `GET_MODE (X)'
845: Returns the machine mode of the rtx X.
846:
847: `PUT_MODE (X, NEWMODE)'
848: Alters the machine mode of the rtx X to be NEWMODE.
849:
850: `GET_MODE_SIZE (M)'
851: Returns the size in bytes of a datum of mode M.
852:
853: `GET_MODE_BITSIZE (M)'
854: Returns the size in bits of a datum of mode M.
855:
856: `GET_MODE_UNIT_SIZE (M)'
857: Returns the size in bits of the subunits of a datum of mode M.
858: This is the same as `GET_MODE_SIZE' except in the case of
859: complex modes and `EPmode'. For them, the unit size ithe
860: size of the real or imaginary part, or the size of the function
861: pointer or the context pointer.
862:
863:
864: File: internals Node: Constants, Prev: Machine Modes, Up: RTL, Next: Regs and Memory
865:
866: Constant Expression Types
867: =========================
868:
869: The simplest RTL expressions are those that represent constant values.
870:
871: `(const_int I)'
872: This type of expression represents the integer value I. I
873: is customarily accessed with the macro `INTVAL' as in
874: `INTVAL (exp)', which is equivalent to `XINT (exp, 0)'.
875:
876: There is only one expression object for the integer value zero;
877: it is the value of the variable `const0_rtx'. Likewise, the
878: only expression for integer value one is found in `const1_rtx'.
879: Any attempt to create an expression of code `const_int' and
880: value zero or one will return `const0_rtx' or `const1_rtx'
881: as appropriate.
882:
883: `(const_double:M I0 I1)'
884: Represents a floating point constant value of mode M. The two
885: integers I0 and I1 together contain the bits of a
886: `double' value. To convert them to a `double', do
887:
888: union { double d; int i[2];} u;
889: u.i[0] = XINT (x, 0);
890: u.i[1] = XINT (x, 1);
891:
892: and then refer to `u.d'. The value of the constant is
893: represented as a double in this fashion even if the value represented
894: is single-precision.
895:
896: `dconst0_rtx' and `fconst0_rtx' are `CONST_DOUBLE'
897: expressions with value 0 and modes `DFmode' and `SFmode'.
898:
899: `(symbol_ref SYMBOL)'
900: Represents the value of an assembler label for data. SYMBOL is
901: a string that describes the name of the assembler label. If it starts
902: with a `*', the label is the rest of SYMBOL not including
903: the `*'. Otherwise, the label is SYMBOL, prefixed with
904: `_'.
905:
906: `(label_ref LABEL)'
907: Represents the value of an assembler label for code. It contains one
908: operand, an expression, which must be a `code_label' that appears
909: in the instruction sequence to identify the place where the label
910: should go.
911:
912: The reason for using a distinct expression type for code label
913: references is so that jump optimization can distinguish them.
914:
915: `(const EXP)'
916: Represents a constant that is the result of an assembly-time
917: arithmetic computation. The operand, EXP, is an expression that
918: contains only constants (`const_int', `symbol_ref' and
919: `label_ref' expressions) combined with `plus' and
920: `minus'. However, not all combinations are valid, since the
921: assembler cannot do arbitrary arithmetic on relocatable symbols.
922:
923:
924: File: internals Node: Regs and Memory, Prev: Constants, Up: RTL, Next: Arithmetic
925:
926: Registers and Memory
927: ====================
928:
929: Here are the RTL expression types for describing access to machine
930: registers and to main memory.
931:
932: `(reg:M N)'
933: For small values of the integer N (less than
934: `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
935: register number N: a "hard register". For larger values of
936: N, it stands for a temporary value or "pseudo register".
937: The compiler's strategy is to generate code assuming an unlimited
938: number of such pseudo registers, and later convert them into hard
939: registers or into memory references.
940:
941: The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
942: description, since the number of hard registers on the machine is an
943: invariant characteristic of the machine. Note, however, that not
944: all of the machine registers must be general registers. All the
945: machine registers that can be used for storage of data are given
946: hard register numbers, even those that can be used only in certain
947: instructions or can hold only certain types of data.
948:
949: Each pseudo register number used in a function's rtl code is
950: represented by a unique `reg' expression.
951:
952: M is the machine mode of the reference. It is necessary because
953: machines can generally refer to each register in more than one mode.
954: For example, a register may contain a full word but there may be
955: instructions to refer to it as a half word or as a single byte, as
956: well as instructions to refer to it as a floating point number of
957: various precisions.
958:
959: Even for a register that the machine can access in only one mode,
960: the mode must always be specified.
961:
962: A hard register may be accessed in various modes throughout one
963: function, but each pseudo register is given a natural mode
964: and is accessed only in that mode. When it is necessary to describe
965: an access to a pseudo register using a nonnatural mode, a `subreg'
966: expression is used.
967:
968: A `reg' expression with a machine mode that specifies more than
969: one word of data may actually stand for several consecutive registers.
970: If in addition the register number specifies a hardware register, then
971: it actually represents several consecutive hardware registers starting
972: with the specified one.
973:
974: Such multi-word hardware register `reg' expressions may not be live
975: across the boundary of a basic block. The lifetime analysis pass does not
976: know how to record properly that several consecutive registers are
977: actually live there, and therefore register allocation would be confused.
978: The CSE pass must go out of its way to make sure the situation does
979: not arise.
980:
981: `(subreg:M REG WORDNUM)'
982: `subreg' expressions are used to refer to a register in a machine
983: mode other than its natural one, or to refer to one register of
984: a multi-word `reg' that actually refers to several registers.
985:
986: Each pseudo-register has a natural mode. If it is necessary to
987: operate on it in a different mode---for example, to perform a fullword
988: move instruction on a pseudo-register that contains a single byte---
989: the pseudo-register must be enclosed in a `subreg'. In such
990: a case, WORDNUM is zero.
991:
992: The other use of `subreg' is to extract the individual registers
993: of a multi-register value. Machine modes such as `DImode' and
994: `EPmode' indicate values longer than a word, values which usually
995: require two consecutive registers. To access one of the registers,
996: use a `subreg' with mode `SImode' and a WORDNUM that
997: says which register.
998:
999: The compilation parameter `WORDS_BIG_ENDIAN', if defined, says
1000: that word number zero is the most significant part; otherwise, it is
1001: the least significant part.
1002:
1003: Note that it is not valid to access a `DFmode' value in `SFmode'
1004: using a `subreg'. On some machines the most significant part of a
1005: `DFmode' value does not have the same format as a single-precision
1006: floating value.
1007:
1008: `(cc0)'
1009: This refers to the machine's condition code register. It has no
1010: operands and may not have a machine mode. It may be validly used in
1011: only two contexts: as the destination of an assignment (in test and
1012: compare instructions) and in comparison operators comparing against
1013: zero (`const_int' with value zero; that is to say,
1014: `const0_rtx'.
1015:
1016: There is only one expression object of code `cc0'; it is the
1017: value of the variable `cc0_rtx'. Any attempt to create an
1018: expression of code `cc0' will return `cc0_rtx'.
1019:
1020: One special thing about the condition code register is that instructions
1021: can set it implicitly. On many machines, nearly all instructions set
1022: the condition code based on the value that they compute or store.
1023: It is not necessary to record these actions explicitly in the RTL
1024: because the machine description includes a prescription for recognizing
1025: the instructions that do so (by means of the macro `NOTICE_UPDATE_CC').
1026: Only instructions whose sole purpose is to set the condition code,
1027: and instructions that use the condition code, need mention `(cc0)'.
1028:
1029: `(pc)'
1030: This represents the machine's program counter. It has no operands and
1031: may not have a machine mode. `(pc)' may be validly used only in
1032: certain specific contexts in jump instructions.
1033:
1034: There is only one expression object of code `pc'; it is the value of
1035: the variable `pc_rtx'. Any attempt to create an expression of code
1036: `pc' will return `pc_rtx'.
1037:
1038: All instructions that do not jump alter the program counter implicitly,
1039: but there is no need to mention this in the RTL.
1040:
1041: `(mem:M ADDR)'
1042: This rtx represents a reference to main memory at an address
1043: represented by the expression ADDR. M specifies how
1044: large a unit of memory is accessed.
1045:
1046:
1047: File: internals Node: Arithmetic, Prev: Regs and Memory, Up: RTL, Next: Comparisons
1048:
1049: RTL Expressions for Arithmetic
1050: ==============================
1051:
1052: `(plus:M X Y)'
1053: Represents the sum of the values represented by X and Y
1054: carried out in machine mode M. This is valid only if
1055: X and Y both are valid for mode M.
1056:
1057: `(minus:M X Y)'
1058: Like `plus' but represents subtraction.
1059:
1060: `(minus X Y)'
1061: Represents the result of subtracting Y from X
1062: for purposes of comparison. The absence of a machine mode
1063: in the `minus' expression indicates that the result is
1064: computed without overflow, as if with infinite precision.
1065:
1066: Of course, machines can't really subtract with infinite precision.
1067: However, they can pretend to do so when only the sign of the
1068: result will be used, which is the case when the result is stored
1069: in `(cc0)'. And that is the only was this kind of expression
1070: may validly be used: as a value to be stored in the condition codes.
1071:
1072: `(neg:M X)'
1073: Represents the negation (subtraction from zero) of the value
1074: represented by X, carried out in mode M. X must be
1075: valid for mode M.
1076:
1077: `(mult:M X Y)'
1078: Represents the signed product of the values represented by X and
1079: Y carried out in machine mode M. If
1080: X and Y are both valid for mode M, this is ordinary
1081: size-preserving multiplication. Alteratively, both X and Y
1082: may be valid for a different, narrower mode. This represents the
1083: kind of multiplication that generates a product wider than the operands.
1084: Widening multiplication and same-size multiplication are completely
1085: distinct and supported by different machine instructions; machines may
1086: support one but not the other.
1087:
1088: `mult' may be used for floating point division as well.
1089: Then M is a floating point machine mode.
1090:
1091: `(umult:M X Y)'
1092: Like `mult' but represents unsigned multiplication. It may be
1093: used in both same-size and widening forms, like `mult'.
1094: `umult' is used only for fixed-point division.
1095:
1096: `(div:M X Y)'
1097: Represents the quotient in signed division of X by Y,
1098: carried out in machine mode M. If M is a floating-point
1099: mode, it represents the exact quotient; otherwise, the integerized
1100: quotient. If X and Y are both valid for mode M,
1101: this is ordinary size-preserving division. Some machines have
1102: division instructions in which the operands and quotient widths are
1103: not all the same; such instructions are represented by `div'
1104: expressions in which the machine modes are not all the same.
1105:
1106: `(udiv:M X Y)'
1107: Like `div' but represents unsigned division.
1108:
1109: `(mod:M X Y)'
1110: `(umod:M X Y)'
1111: Like `div' and `udiv' but represent the remainder instead of
1112: the quotient.
1113:
1114: `(not:M X)'
1115: Represents the bitwise complement of the value represented by X,
1116: carried out in mode M, which must be a fixed-point machine mode.
1117: X must be valid for mode M, which must be a fixed-point mode.
1118:
1119: `(and:M X Y)'
1120: Represents the bitwise logical-and of the values represented by
1121: X and Y, carried out in machine mode M. This is
1122: valid only if X and Y both are valid for mode M,
1123: which must be a fixed-point mode.
1124:
1125: `(ior:M X Y)'
1126: Represents the bitwise inclusive-or of the values represented by
1127: X and Y, carried out in machine mode M. This is
1128: valid only if X and Y both are valid for mode M,
1129: which must be a fixed-point mode.
1130:
1131: `(xor:M X Y)'
1132: Represents the bitwise exclusive-or of the values represented by
1133: X and Y, carried out in machine mode M. This is
1134: valid only if X and Y both are valid for mode M,
1135: which must be a fixed-point mode.
1136:
1137: `(lshift:M X C)'
1138: Represents the result of logically shifting X left by C
1139: places. X must be valid for the mode M, a fixed-point
1140: machine mode. C must be valid for a fixed-point mode;
1141: which mode is determined by the mode called for in the machine
1142: description entry for the left-shift instruction. For example,
1143: on the Vax, the mode of C is `QImode' regardless of M.
1144:
1145: On some machines, negative values of C may be meaningful; this
1146: is why logical left shift an arithmetic left shift are distinguished.
1147: For example, Vaxes have no right-shift instructions, and right shifts
1148: are represented as left-shift instructions whose counts happen
1149: to be negative constants or else computed (in a previous instruction)
1150: by negation.
1151:
1152: `(ashift:M X C)'
1153: Like `lshift' but for arithmetic left shift.
1154:
1155: `(lshiftrt:M X C)'
1156: `(ashiftrt:M X C)'
1157: Like `lshift' and `ashift' but for right shift.
1158:
1159: `(rotate:M X C)'
1160: `(rotatert:M X C)'
1161: Similar but represent left and right rotate.
1162:
1163: `(abs:M X)'
1164: Represents the absolute value of X, computed in mode M.
1165: X must be valid for M.
1166:
1167: `(sqrt:M X)'
1168: Represents the square root of X, computed in mode M.
1169: X must be valid for M. Most often M will be
1170: a floating point mode.
1171:
1172:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.