|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
7:
8: Permission is granted to make and distribute verbatim copies of
9: this manual provided the copyright notice and this permission notice
10: are preserved on all copies.
11:
12: Permission is granted to copy and distribute modified versions of
13: this manual under the conditions for verbatim copying, provided also
14: that the section entitled "GNU General Public License" is included
15: exactly as in the original, and provided that the entire resulting
16: derived work is distributed under the terms of a permission notice
17: identical to this one.
18:
19: Permission is granted to copy and distribute translations of this
20: manual into another language, under the above conditions for modified
21: versions, except that the section entitled "GNU General Public
22: License" and this permission notice may be included in translations
23: approved by the Free Software Foundation instead of in the original
24: English.
25:
26:
27: File: gcc.info, Node: Accessors, Next: Flags, Prev: RTL Objects, Up: RTL
28:
29: Access to Operands
30: ==================
31:
32: For each expression type `rtl.def' specifies the number of contained
33: objects and their kinds, with four possibilities: `e' for expression
34: (actually a pointer to an expression), `i' for integer, `s' for
35: string, and `E' for vector of expressions. The sequence of letters
36: for an expression code is called its "format". Thus, the format of
37: `subreg' is `ei'.
38:
39: A few other format characters are used occasionally:
40:
41: `u'
42: `u' is equivalent to `e' except that it is printed differently in
43: debugging dumps. It is used for pointers to insns.
44:
45: `n'
46: `n' is equivalent to `i' except that it is printed differently in
47: debugging dumps. It is used for the line number or code number
48: of a `note' insn.
49:
50: `S'
51: `S' indicates a string which is optional. In the RTL objects in
52: core, `S' is equivalent to `s', but when the object is read, from
53: an `md' file, the string value of this operand may be omitted.
54: An omitted string is taken to be the null string.
55:
56: `V'
57: `V' indicates a vector which is optional. In the RTL objects in
58: core, `V' is equivalent to `E', but when the object is read from
59: an `md' file, the vector value of this operand may be omitted.
60: An omitted vector is effectively the same as a vector of no
61: elements.
62:
63: `0'
64: `0' means a slot whose contents do not fit any normal category.
65: `0' slots are not printed at all in dumps, and are often used in
66: special ways by small parts of the compiler.
67:
68: There are macros to get the number of operands, the format, and the
69: class of an expression code:
70:
71: `GET_RTX_LENGTH (CODE)'
72: Number of operands of an RTX of code CODE.
73:
74: `GET_RTX_FORMAT (CODE)'
75: The format of an RTX of code CODE, as a C string.
76:
77: `GET_RTX_CLASS (CODE)'
78: A single character representing the type of RTX operation that
79: code CODE performs.
80:
81: The following classes are defined:
82:
83: `o'
84: An RTX code that represents an actual object, such as `reg'
85: or `mem'. `subreg' is not in this class.
86:
87: `<'
88: An RTX code for a comparison. The codes in this class are
89: `NE', `EQ', `LE', `LT', `GE', `GT', `LEU', `LTU', `GEU',
90: `GTU'.
91:
92: `1'
93: An RTX code for a unary arithmetic operation, such as `neg'.
94:
95: `c'
96: An RTX code for a commutative binary operation, other than
97: `NE' and `EQ' (which have class `<').
98:
99: `2'
100: An RTX code for a noncommutative binary operation, such as
101: `MINUS'.
102:
103: `b'
104: An RTX code for a bitfield operation (`ZERO_EXTRACT' and
105: `SIGN_EXTRACT').
106:
107: `3'
108: An RTX code for other three input operations, such as
109: `IF_THEN_ELSE'.
110:
111: `i'
112: An RTX code for a machine insn (`INSN', `JUMP_INSN', and
113: `CALL_INSN').
114:
115: `m'
116: An RTX code for something that matches in insns, such as
117: `MATCH_DUP'.
118:
119: `x'
120: All other RTX codes.
121:
122: Operands of expressions are accessed using the macros `XEXP',
123: `XINT' and `XSTR'. Each of these macros takes two arguments: an
124: expression-pointer (RTX) and an operand number (counting from zero).
125: Thus,
126:
127: XEXP (X, 2)
128:
129: accesses operand 2 of expression X, as an expression.
130:
131: XINT (X, 2)
132:
133: accesses the same operand as an integer. `XSTR', used in the same
134: fashion, would access it as a string.
135:
136: Any operand can be accessed as an integer, as an expression or as a
137: string. You must choose the correct method of access for the kind of
138: value actually stored in the operand. You would do this based on the
139: expression code of the containing expression. That is also how you
140: would know how many operands there are.
141:
142: For example, if X is a `subreg' expression, you know that it has
143: two operands which can be correctly accessed as `XEXP (X, 0)' and
144: `XINT (X, 1)'. If you did `XINT (X, 0)', you would get the address of
145: the expression operand but cast as an integer; that might occasionally
146: be useful, but it would be cleaner to write `(int) XEXP (X, 0)'.
147: `XEXP (X, 1)' would also compile without error, and would return the
148: second, integer operand cast as an expression pointer, which would
149: probably result in a crash when accessed. Nothing stops you from
150: writing `XEXP (X, 28)' either, but this will access memory past the
151: end of the expression with unpredictable results.
152:
153: Access to operands which are vectors is more complicated. You can
154: use the macro `XVEC' to get the vector-pointer itself, or the macros
155: `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
156:
157: `XVEC (EXP, IDX)'
158: Access the vector-pointer which is operand number IDX in EXP.
159:
160: `XVECLEN (EXP, IDX)'
161: Access the length (number of elements) in the vector which is in
162: operand number IDX in EXP. This value is an `int'.
163:
164: `XVECEXP (EXP, IDX, ELTNUM)'
165: Access element number ELTNUM in the vector which is in operand
166: number IDX in EXP. This value is an RTX.
167:
168: It is up to you to make sure that ELTNUM is not negative and is
169: less than `XVECLEN (EXP, IDX)'.
170:
171: All the macros defined in this section expand into lvalues and
172: therefore can be used to assign the operands, lengths and vector
173: elements as well as to access them.
174:
175:
176: File: gcc.info, Node: Flags, Next: Machine Modes, Prev: Accessors, Up: RTL
177:
178: Flags in an RTL Expression
179: ==========================
180:
181: RTL expressions contain several flags (one-bit bit-fields) that are
182: used in certain types of expression. Most often they are accessed
183: with the following macros:
184:
185: `MEM_VOLATILE_P (X)'
186: In `mem' expressions, nonzero for volatile memory references.
187: Stored in the `volatil' field and printed as `/v'.
188:
189: `MEM_IN_STRUCT_P (X)'
190: In `mem' expressions, nonzero for reference to an entire
191: structure, union or array, or to a component of one. Zero for
192: references to a scalar variable or through a pointer to a scalar.
193: Stored in the `in_struct' field and printed as `/s'.
194:
195: `REG_LOOP_TEST_P'
196: In `reg' expressions, nonzero if this register's entire life is
197: contained in the exit test code for some loop. Stored in the
198: `in_struct' field and printed as `/s'.
199:
200: `REG_USERVAR_P (X)'
201: In a `reg', nonzero if it corresponds to a variable present in
202: the user's source code. Zero for temporaries generated
203: internally by the compiler. Stored in the `volatil' field and
204: printed as `/v'.
205:
206: `REG_FUNCTION_VALUE_P (X)'
207: Nonzero in a `reg' if it is the place in which this function's
208: value is going to be returned. (This happens only in a hard
209: register.) Stored in the `integrated' field and printed as `/i'.
210:
211: The same hard register may be used also for collecting the values
212: of functions called by this one, but `REG_FUNCTION_VALUE_P' is
213: zero in this kind of use.
214:
215: `RTX_UNCHANGING_P (X)'
216: Nonzero in a `reg' or `mem' if the value is not changed. (This
217: flag is not set for memory references via pointers to constants.
218: Such pointers only guarantee that the object will not be changed
219: explicitly by the current function. The object might be changed
220: by other functions or by aliasing.) Stored in the `unchanging'
221: field and printed as `/u'.
222:
223: `RTX_INTEGRATED_P (INSN)'
224: Nonzero in an insn if it resulted from an in-line function call.
225: Stored in the `integrated' field and printed as `/i'. This may
226: be deleted; nothing currently depends on it.
227:
228: `SYMBOL_REF_USED (X)'
229: In a `symbol_ref', indicates that X has been used. This is
230: normally only used to ensure that X is only declared external
231: once. Stored in the `used' field.
232:
233: `SYMBOL_REF_FLAG (X)'
234: In a `symbol_ref', this is used as a flag for machine-specific
235: purposes. Stored in the `volatil' field and printed as `/v'.
236:
237: `LABEL_OUTSIDE_LOOP_P'
238: In `label_ref' expressions, nonzero if this is a reference to a
239: label that is outside the innermost loop containing the reference
240: to the label. Stored in the `in_struct' field and printed as
241: `/s'.
242:
243: `INSN_DELETED_P (INSN)'
244: In an insn, nonzero if the insn has been deleted. Stored in the
245: `volatil' field and printed as `/v'.
246:
247: `INSN_ANNULLED_BRANCH_P (INSN)'
248: In an `insn' in the delay slot of a branch insn, indicates that an
249: annulling branch should be used. See the discussion under
250: `sequence' below. Stored in the `unchanging' field and printed
251: as `/u'.
252:
253: `INSN_FROM_TARGET_P (INSN)'
254: In an `insn' in a delay slot of a branch, indicates that the insn
255: is from the target of the branch. If the branch insn has
256: `INSN_ANNULLED_BRANCH_P' set, this insn should only be executed if
257: the branch is taken. For annulled branches with this bit clear,
258: the insn should be executed only if the branch is not taken.
259: Stored in the `in_struct' field and printed as `/s'.
260:
261: `CONSTANT_POOL_ADDRESS_P (X)'
262: Nonzero in a `symbol_ref' if it refers to part of the current
263: function's "constants pool". These are addresses close to the
264: beginning of the function, and GNU CC assumes they can be
265: addressed directly (perhaps with the help of base registers).
266: Stored in the `unchanging' field and printed as `/u'.
267:
268: `CONST_CALL_P (X)'
269: In a `call_insn', indicates that the insn represents a call to a
270: const function. Stored in the `unchanging' field and printed as
271: `/u'.
272:
273: `LABEL_PRESERVE_P (X)'
274: In a `code_label', indicates that the label can never be deleted.
275: Labels referenced by a a non-local goto will have this bit set.
276: Stored in the `in_struct' field and printed as `/s'.
277:
278: `SCHED_GROUP_P (INSN)'
279: During instruction scheduling, in an insn, indicates that the
280: previous insn must be scheduled together with this insn. This is
281: used to ensure that certain groups of instructions will not be
282: split up by the instruction scheduling pass, for example, `use'
283: insns before a `call_insn' may not be separated from the
284: `call_insn'. Stored in the `in_struct' field and printed as `/s'.
285:
286: These are the fields which the above macros refer to:
287:
288: `used'
289: Normally, this flag is used only momentarily, at the end of RTL
290: generation for a function, to count the number of times an
291: expression appears in insns. Expressions that appear more than
292: once are copied, according to the rules for shared structure
293: (*note Sharing::.).
294:
295: In a `symbol_ref', it indicates that an external declaration for
296: the symbol has already been written.
297:
298: In a `reg', it is used by the leaf register renumbering code to
299: ensure that each register is only renumbered once.
300:
301: `volatil'
302: This flag is used in `mem',`symbol_ref' and `reg' expressions and
303: in insns. In RTL dump files, it is printed as `/v'.
304:
305: In a `mem' expression, it is 1 if the memory reference is
306: volatile. Volatile memory references may not be deleted,
307: reordered or combined.
308:
309: In a `symbol_ref' expression, it is used for machine-specific
310: purposes.
311:
312: In a `reg' expression, it is 1 if the value is a user-level
313: variable. 0 indicates an internal compiler temporary.
314:
315: In an insn, 1 means the insn has been deleted.
316:
317: `in_struct'
318: In `mem' expressions, it is 1 if the memory datum referred to is
319: all or part of a structure or array; 0 if it is (or might be) a
320: scalar variable. A reference through a C pointer has 0 because
321: the pointer might point to a scalar variable. This information
322: allows the compiler to determine something about possible cases
323: of aliasing.
324:
325: In an insn in the delay slot of a branch, 1 means that this insn
326: is from the target of the branch.
327:
328: During instruction scheduling, in an insn, 1 means that this insn
329: must be scheduled as part of a group together with the previous
330: insn.
331:
332: In `reg' expressions, it is 1 if the register has its entire life
333: contained within the test expression of some loopl.
334:
335: In `label_ref' expressions, 1 means that the referenced label is
336: outside the innermost loop containing the insn in which the
337: `label_ref' was found.
338:
339: In `code_label' expressions, it is 1 if the label may never be
340: deleted. This is used for labels which are the target of
341: non-local gotos.
342:
343: In an RTL dump, this flag is represented as `/s'.
344:
345: `unchanging'
346: In `reg' and `mem' expressions, 1 means that the value of the
347: expression never changes.
348:
349: In an insn, 1 means that this is an annulling branch.
350:
351: In a `symbol_ref' expression, 1 means that this symbol addresses
352: something in the per-function constants pool.
353:
354: In a `call_insn', 1 means that this instruction is a call to a
355: const function.
356:
357: In an RTL dump, this flag is represented as `/u'.
358:
359: `integrated'
360: In some kinds of expressions, including insns, this flag means the
361: rtl was produced by procedure integration.
362:
363: In a `reg' expression, this flag indicates the register
364: containing the value to be returned by the current function. On
365: machines that pass parameters in registers, the same register
366: number may be used for parameters as well, but this flag is not
367: set on such uses.
368:
369:
370: File: gcc.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL
371:
372: Machine Modes
373: =============
374:
375: A machine mode describes a size of data object and the
376: representation used for it. In the C code, machine modes are
377: represented by an enumeration type, `enum machine_mode', defined in
378: `machmode.def'. Each RTL expression has room for a machine mode and
379: so do certain kinds of tree expressions (declarations and types, to be
380: precise).
381:
382: In debugging dumps and machine descriptions, the machine mode of an
383: RTL expression is written after the expression code with a colon to
384: separate them. The letters `mode' which appear at the end of each
385: machine mode name are omitted. For example, `(reg:SI 38)' is a `reg'
386: expression with machine mode `SImode'. If the mode is `VOIDmode', it
387: is not written at all.
388:
389: Here is a table of machine modes. The term "byte" below refers to
390: an object of `BITS_PER_UNIT' bits (*note Storage Layout::.).
391:
392: `QImode'
393: "Quarter-Integer" mode represents a single byte treated as an
394: integer.
395:
396: `HImode'
397: "Half-Integer" mode represents a two-byte integer.
398:
399: `PSImode'
400: "Partial Single Integer" mode represents an integer which occupies
401: four bytes but which doesn't really use all four. On some
402: machines, this is the right mode to use for pointers.
403:
404: `SImode'
405: "Single Integer" mode represents a four-byte integer.
406:
407: `PDImode'
408: "Partial Double Integer" mode represents an integer which occupies
409: eight bytes but which doesn't really use all eight. On some
410: machines, this is the right mode to use for certain pointers.
411:
412: `DImode'
413: "Double Integer" mode represents an eight-byte integer.
414:
415: `TImode'
416: "Tetra Integer" (?) mode represents a sixteen-byte integer.
417:
418: `SFmode'
419: "Single Floating" mode represents a single-precision (four byte)
420: floating point number.
421:
422: `DFmode'
423: "Double Floating" mode represents a double-precision (eight byte)
424: floating point number.
425:
426: `XFmode'
427: "Extended Floating" mode represents a triple-precision (twelve
428: byte) floating point number. This mode is used for IEEE extended
429: floating point.
430:
431: `TFmode'
432: "Tetra Floating" mode represents a quadruple-precision (sixteen
433: byte) floating point number.
434:
435: `CCmode'
436: "Condition Code" mode represents the value of a condition code,
437: which is a machine-specific set of bits used to represent the
438: result of a comparison operation. Other machine-specific modes
439: may also be used for the condition code. These modes are not
440: used on machines that use `cc0' (see *note Condition Code::.).
441:
442: `BLKmode'
443: "Block" mode represents values that are aggregates to which none
444: of the other modes apply. In RTL, only memory references can
445: have this mode, and only if they appear in string-move or vector
446: instructions. On machines which have no such instructions,
447: `BLKmode' will not appear in RTL.
448:
449: `VOIDmode'
450: Void mode means the absence of a mode or an unspecified mode.
451: For example, RTL expressions of code `const_int' have mode
452: `VOIDmode' because they can be taken to have whatever mode the
453: context requires. In debugging dumps of RTL, `VOIDmode' is
454: expressed by the absence of any mode.
455:
456: `SCmode, DCmode, XCmode, TCmode'
457: These modes stand for a complex number represented as a pair of
458: floating point values. The values are in `SFmode', `DFmode',
459: `XFmode', and `TFmode', respectively. Since C does not support
460: complex numbers, these machine modes are only partially
461: implemented.
462:
463: The machine description defines `Pmode' as a C macro which expands
464: into the machine mode used for addresses. Normally this is the mode
465: whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
466:
467: The only modes which a machine description must support are
468: `QImode', and the modes corresponding to `BITS_PER_WORD',
469: `FLOAT_TYPE_SIZE' and `DOUBLE_TYPE_SIZE'. The compiler will attempt
470: to use `DImode' for 8-byte structures and unions, but this can be
471: prevented by overriding the definition of `MAX_FIXED_MODE_SIZE'.
472: Alternatively, you can have the compiler use `TImode' for 16-byte
473: structures and unions. Likewise, you can arrange for the C type
474: `short int' to avoid using `HImode'.
475:
476: Very few explicit references to machine modes remain in the
477: compiler and these few references will soon be removed. Instead, the
478: machine modes are divided into mode classes. These are represented by
479: the enumeration type `enum mode_class' defined in `machmode.h'. The
480: possible mode classes are:
481:
482: `MODE_INT'
483: Integer modes. By default these are `QImode', `HImode',
484: `SImode', `DImode', and `TImode'.
485:
486: `MODE_PARTIAL_INT'
487: The "partial integer" modes, `PSImode' and `PDImode'.
488:
489: `MODE_FLOAT'
490: floating point modes. By default these are `SFmode', `DFmode',
491: `XFmode' and `TFmode'.
492:
493: `MODE_COMPLEX_INT'
494: Complex integer modes. (These are not currently implemented).
495:
496: `MODE_COMPLEX_FLOAT'
497: Complex floating point modes. By default these are `SCmode',
498: `DCmode', `XCmode', and `TCmode'.
499:
500: `MODE_FUNCTION'
501: Algol or Pascal function variables including a static chain.
502: (These are not currently implemented).
503:
504: `MODE_CC'
505: Modes representing condition code values. These are `CCmode' plus
506: any modes listed in the `EXTRA_CC_MODES' macro. *Note Jump
507: Patterns::, also see *Note Condition Code::.
508:
509: `MODE_RANDOM'
510: This is a catchall mode class for modes which don't fit into the
511: above classes. Currently `VOIDmode' and `BLKmode' are in
512: `MODE_RANDOM'.
513:
514: Here are some C macros that relate to machine modes:
515:
516: `GET_MODE (X)'
517: Returns the machine mode of the RTX X.
518:
519: `PUT_MODE (X, NEWMODE)'
520: Alters the machine mode of the RTX X to be NEWMODE.
521:
522: `NUM_MACHINE_MODES'
523: Stands for the number of machine modes available on the target
524: machine. This is one greater than the largest numeric value of
525: any machine mode.
526:
527: `GET_MODE_NAME (M)'
528: Returns the name of mode M as a string.
529:
530: `GET_MODE_CLASS (M)'
531: Returns the mode class of mode M.
532:
533: `GET_MODE_WIDER_MODE (M)'
534: Returns the next wider natural mode. E.g.,
535: `GET_WIDER_MODE(QImode)' returns `HImode'.
536:
537: `GET_MODE_SIZE (M)'
538: Returns the size in bytes of a datum of mode M.
539:
540: `GET_MODE_BITSIZE (M)'
541: Returns the size in bits of a datum of mode M.
542:
543: `GET_MODE_MASK (M)'
544: Returns a bitmask containing 1 for all bits in a word that fit
545: within mode M. This macro can only be used for modes whose
546: bitsize is less than or equal to `HOST_BITS_PER_INT'.
547:
548: `GET_MODE_ALIGNMENT (M))'
549: Return the required alignment, in bits, for an object of mode M.
550:
551: `GET_MODE_UNIT_SIZE (M)'
552: Returns the size in bytes of the subunits of a datum of mode M.
553: This is the same as `GET_MODE_SIZE' except in the case of complex
554: modes. For them, the unit size is the size of the real or
555: imaginary part.
556:
557: `GET_MODE_NUNITS (M)'
558: Returns the number of units contained in a mode, i.e.,
559: `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
560:
561: `GET_CLASS_NARROWEST_MODE (C)'
562: Returns the narrowest mode in mode class C.
563:
564: The global variables `byte_mode' and `word_mode' contain modes
565: whose classes are `MODE_INT' and whose bitsizes are `BITS_PER_UNIT' or
566: `BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode'
567: and `SImode', respectively.
568:
569:
570: File: gcc.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL
571:
572: Constant Expression Types
573: =========================
574:
575: The simplest RTL expressions are those that represent constant
576: values.
577:
578: `(const_int I)'
579: This type of expression represents the integer value I. I is
580: customarily accessed with the macro `INTVAL' as in `INTVAL
581: (EXP)', which is equivalent to `XINT (EXP, 0)'.
582:
583: Keep in mind that the result of `INTVAL' is an integer on the host
584: machine. If the host machine has more bits in an `int' than the
585: target machine has in the mode in which the constant will be
586: used, then some of the bits you get from `INTVAL' will be
587: superfluous. In many cases, for proper results, you must
588: carefully disregard the values of those bits.
589:
590: There is only one expression object for the integer value zero;
591: it is the value of the variable `const0_rtx'. Likewise, the only
592: expression for integer value one is found in `const1_rtx', the
593: only expression for integer value two is found in `const2_rtx',
594: and the only expression for integer value negative one is found in
595: `constm1_rtx'. Any attempt to create an expression of code
596: `const_int' and value zero, one, two or negative one will return
597: `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
598: appropriate.
599:
600: Similarly, there is only one object for the integer whose value is
601: `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If
602: `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
603: point to the same object. If `STORE_FLAG_VALUE' is -1,
604: `const_true_rtx' and `constm1_rtx' will point to the same object.
605:
606: `(const_double:M ADDR I0 I1 ...)'
607: Represents either a floating-point constant of mode M or an
608: integer constant that is too large to fit into `HOST_BITS_PER_INT'
609: bits but small enough to fit within twice that number of bits
610: (GNU CC does not provide a mechanism to represent even larger
611: constants). In the latter case, M will be `VOIDmode'.
612:
613: ADDR is used to contain the `mem' expression that corresponds to
614: the location in memory that at which the constant can be found.
615: If it has not been allocated a memory location, but is on the
616: chain of all `const_double' expressions in this compilation
617: (maintained using an undisplayed field), ADDR contains
618: `const0_rtx'. If it is not on the chain, ADDR contains
619: `cc0_rtx'. ADDR is customarily accessed with the macro
620: `CONST_DOUBLE_MEM' and the chain field via `CONST_DOUBLE_CHAIN'.
621:
622: If M is `VOIDmode', the bit of the value are stored in I0 and I1.
623: I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
624: I1 with `CONST_DOUBLE_HIGH'.
625:
626: If the constant is floating point (either single or double
627: precision), then the number of integers used to store the value
628: depends on the size of `REAL_VALUE_TYPE' (*note
629: Cross-compilation::.). The integers represent a `double'. To
630: convert them to a `double', do
631:
632: union real_extract u;
633: bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u);
634:
635: and then refer to `u.d'.
636:
637: The macro `CONST0_RTX (MODE)' refers to an expression with value
638: 0 in mode MODE. If mode MODE is of mode class `MODE_INT', it
639: returns `const0_rtx'. Otherwise, it returns a `CONST_DOUBLE'
640: expression in mode MODE. Similarly, the macro `CONST1_RTX
641: (MODE)' refers to an expression with value 1 in mode MODE and
642: similarly for `CONST2_RTX'.
643:
644: `(const_string STR)'
645: Represents a constant string with value STR. Currently this is
646: used only for insn attributes (*note Insn Attributes::.) since
647: constant strings in C are placed in memory.
648:
649: `(symbol_ref SYMBOL)'
650: Represents the value of an assembler label for data. SYMBOL is a
651: string that describes the name of the assembler label. If it
652: starts with a `*', the label is the rest of SYMBOL not including
653: the `*'. Otherwise, the label is SYMBOL, usually prefixed with
654: `_'.
655:
656: `(label_ref LABEL)'
657: Represents the value of an assembler label for code. It contains
658: one operand, an expression, which must be a `code_label' that
659: appears in the instruction sequence to identify the place where
660: the label should go.
661:
662: The reason for using a distinct expression type for code label
663: references is so that jump optimization can distinguish them.
664:
665: `(const:M EXP)'
666: Represents a constant that is the result of an assembly-time
667: arithmetic computation. The operand, EXP, is an expression that
668: contains only constants (`const_int', `symbol_ref' and
669: `label_ref' expressions) combined with `plus' and `minus'.
670: However, not all combinations are valid, since the assembler
671: cannot do arbitrary arithmetic on relocatable symbols.
672:
673: M should be `Pmode'.
674:
675: `(high:M EXP)'
676: Represents the high-order bits of EXP, usually a `symbol_ref'.
677: The number of bits is machine-dependent and is normally the
678: number of bits specified in an instruction that initializes the
679: high order bits of a register. It is used with `lo_sum' to
680: represent the typical two-instruction sequence used in RISC
681: machines to reference a global memory location.
682:
683: M should be `Pmode'.
684:
685:
686: File: gcc.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL
687:
688: Registers and Memory
689: ====================
690:
691: Here are the RTL expression types for describing access to machine
692: registers and to main memory.
693:
694: `(reg:M N)'
695: For small values of the integer N (less than
696: `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
697: register number N: a "hard register". For larger values of N, it
698: stands for a temporary value or "pseudo register". The
699: compiler's strategy is to generate code assuming an unlimited
700: number of such pseudo registers, and later convert them into hard
701: registers or into memory references.
702:
703: M is the machine mode of the reference. It is necessary because
704: machines can generally refer to each register in more than one
705: mode. For example, a register may contain a full word but there
706: may be instructions to refer to it as a half word or as a single
707: byte, as well as instructions to refer to it as a floating point
708: number of various precisions.
709:
710: Even for a register that the machine can access in only one mode,
711: the mode must always be specified.
712:
713: The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
714: description, since the number of hard registers on the machine is
715: an invariant characteristic of the machine. Note, however, that
716: not all of the machine registers must be general registers. All
717: the machine registers that can be used for storage of data are
718: given hard register numbers, even those that can be used only in
719: certain instructions or can hold only certain types of data.
720:
721: A hard register may be accessed in various modes throughout one
722: function, but each pseudo register is given a natural mode and is
723: accessed only in that mode. When it is necessary to describe an
724: access to a pseudo register using a nonnatural mode, a `subreg'
725: expression is used.
726:
727: A `reg' expression with a machine mode that specifies more than
728: one word of data may actually stand for several consecutive
729: registers. If in addition the register number specifies a
730: hardware register, then it actually represents several
731: consecutive hardware registers starting with the specified one.
732:
733: Each pseudo register number used in a function's RTL code is
734: represented by a unique `reg' expression.
735:
736: Some pseudo register numbers, those within the range of
737: `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
738: during the RTL generation phase and are eliminated before the
739: optimization phases. These represent locations in the stack
740: frame that cannot be determined until RTL generation for the
741: function has been completed. The following virtual register
742: numbers are defined:
743:
744: `VIRTUAL_INCOMING_ARGS_REGNUM'
745: This points to the first word of the incoming arguments
746: passed on the stack. Normally these arguments are placed
747: there by the caller, but the callee may have pushed some
748: arguments that were previously passed in registers.
749:
750: When RTL generation is complete, this virtual register is
751: replaced by the sum of the register given by
752: `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
753:
754: `VIRTUAL_STACK_VARS_REGNUM'
755: If `FRAME_GROWS_DOWNWARDS' is defined, this points to
756: immediately above the first variable on the stack.
757: Otherwise, it points to the first variable on the stack.
758:
759: It is replaced with the sum of the register given by
760: `FRAME_POINTER_REGNUM' and the value `STARTING_FRAME_OFFSET'.
761:
762: `VIRTUAL_STACK_DYNAMIC_REGNUM'
763: This points to the location of dynamically allocated memory
764: on the stack immediately after the stack pointer has been
765: adjusted by the amount of memory desired.
766:
767: It is replaced by the sum of the register given by
768: `STACK_POINTER_REGNUM' and the value `STACK_DYNAMIC_OFFSET'.
769:
770: `VIRTUAL_OUTGOING_ARGS_REGNUM'
771: This points to the location in the stack at which outgoing
772: arguments should be written when the stack is pre-pushed
773: (arguments pushed using push insns should always use
774: `STACK_POINTER_REGNUM').
775:
776: It is replaced by the sum of the register given by
777: `STACK_POINTER_REGNUM' and the value `STACK_POINTER_OFFSET'.
778:
779: `(subreg:M REG WORDNUM)'
780: `subreg' expressions are used to refer to a register in a machine
781: mode other than its natural one, or to refer to one register of a
782: multi-word `reg' that actually refers to several registers.
783:
784: Each pseudo-register has a natural mode. If it is necessary to
785: operate on it in a different mode--for example, to perform a
786: fullword move instruction on a pseudo-register that contains a
787: single byte--the pseudo-register must be enclosed in a `subreg'.
788: In such a case, WORDNUM is zero.
789:
790: Usually M is at least as narrow as the mode of REG, in which case
791: it is restricting consideration to only the bits of REG that are
792: in M. However, sometimes M is wider than the mode of REG. These
793: `subreg' expressions are often called "paradoxical". They are
794: used in cases where we want to refer to an object in a wider mode
795: but do not care what value the additional bits have. The reload
796: pass ensures that paradoxical references are only made to hard
797: registers.
798:
799: The other use of `subreg' is to extract the individual registers
800: of a multi-register value. Machine modes such as `DImode' and
801: `TImode' can indicate values longer than a word, values which
802: usually require two or more consecutive registers. To access one
803: of the registers, use a `subreg' with mode `SImode' and a WORDNUM
804: that says which register.
805:
806: The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says
807: that word number zero is the most significant part; otherwise, it
808: is the least significant part.
809:
810: Between the combiner pass and the reload pass, it is possible to
811: have a paradoxical `subreg' which contains a `mem' instead of a
812: `reg' as its first operand. After the reload pass, it is also
813: possible to have a non-paradoxical `subreg' which contains a
814: `mem'; this usually occurs when the `mem' is a stack slot which
815: replaced a pseudo register.
816:
817: Note that it is not valid to access a `DFmode' value in `SFmode'
818: using a `subreg'. On some machines the most significant part of a
819: `DFmode' value does not have the same format as a single-precision
820: floating value.
821:
822: It is also not valid to access a single word of a multi-word
823: value in a hard register when less registers can hold the value
824: than would be expected from its size. For example, some 32-bit
825: machines have floating-point registers that can hold an entire
826: `DFmode' value. If register 10 were such a register `(subreg:SI
827: (reg:DF 10) 1)' would be invalid because there is no way to
828: convert that reference to a single machine register. The reload
829: pass prevents `subreg' expressions such as these from being
830: formed.
831:
832: The first operand of a `subreg' expression is customarily accessed
833: with the `SUBREG_REG' macro and the second operand is customarily
834: accessed with the `SUBREG_WORD' macro.
835:
836: `(scratch:M)'
837: This represents a scratch register that will be required for the
838: execution of a single instruction and not used subsequently. It
839: is converted into a `reg' by either the local register allocator
840: or the reload pass.
841:
842: `scratch' is usually present inside a `clobber' operation (*note
843: Side Effects::.).
844:
845: `(cc0)'
846: This refers to the machine's condition code register. It has no
847: operands and may not have a machine mode. There are two ways to
848: use it:
849:
850: * To stand for a complete set of condition code flags. This
851: is best on most machines, where each comparison sets the
852: entire series of flags.
853:
854: With this technique, `(cc0)' may be validly used in only two
855: contexts: as the destination of an assignment (in test and
856: compare instructions) and in comparison operators comparing
857: against zero (`const_int' with value zero; that is to say,
858: `const0_rtx').
859:
860: * To stand for a single flag that is the result of a single
861: condition. This is useful on machines that have only a
862: single flag bit, and in which comparison instructions must
863: specify the condition to test.
864:
865: With this technique, `(cc0)' may be validly used in only two
866: contexts: as the destination of an assignment (in test and
867: compare instructions) where the source is a comparison
868: operator, and as the first operand of `if_then_else' (in a
869: conditional branch).
870:
871: There is only one expression object of code `cc0'; it is the
872: value of the variable `cc0_rtx'. Any attempt to create an
873: expression of code `cc0' will return `cc0_rtx'.
874:
875: Instructions can set the condition code implicitly. On many
876: machines, nearly all instructions set the condition code based on
877: the value that they compute or store. It is not necessary to
878: record these actions explicitly in the RTL because the machine
879: description includes a prescription for recognizing the
880: instructions that do so (by means of the macro
881: `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions
882: whose sole purpose is to set the condition code, and instructions
883: that use the condition code, need mention `(cc0)'.
884:
885: On some machines, the condition code register is given a register
886: number and a `reg' is used instead of `(cc0)'. This is usually
887: the preferable approach if only a small subset of instructions
888: modify the condition code. Other machines store condition codes
889: in general registers; in such cases a pseudo register should be
890: used.
891:
892: Some machines, such as the Sparc and RS/6000, have two sets of
893: arithmetic instructions, one that sets and one that does not set
894: the condition code. This is best handled by normally generating
895: the instruction that does not set the condition code, and making
896: a pattern that both performs the arithmetic and sets the
897: condition code register (which would not be `(cc0)' in this
898: case). For examples, search for `addcc' and `andcc' in
899: `sparc.md'.
900:
901: `(pc)'
902: This represents the machine's program counter. It has no
903: operands and may not have a machine mode. `(pc)' may be validly
904: used only in certain specific contexts in jump instructions.
905:
906: There is only one expression object of code `pc'; it is the value
907: of the variable `pc_rtx'. Any attempt to create an expression of
908: code `pc' will return `pc_rtx'.
909:
910: All instructions that do not jump alter the program counter
911: implicitly by incrementing it, but there is no need to mention
912: this in the RTL.
913:
914: `(mem:M ADDR)'
915: This RTX represents a reference to main memory at an address
916: represented by the expression ADDR. M specifies how large a unit
917: of memory is accessed.
918:
919:
920: File: gcc.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL
921:
922: RTL Expressions for Arithmetic
923: ==============================
924:
925: Unless otherwise specified, all the operands of arithmetic
926: expressions must be valid for mode M. An operand is valid for mode M
927: if it has mode M, or if it is a `const_int' or `const_double' and M is
928: a mode of class `MODE_INT'.
929:
930: For commutative binary operations, constants should be placed in the
931: second operand.
932:
933: `(plus:M X Y)'
934: Represents the sum of the values represented by X and Y carried
935: out in machine mode M.
936:
937: `(lo_sum:M X Y)'
938: Like `plus', except that it represents that sum of X and the
939: low-order bits of Y. The number of low order bits is
940: machine-dependent but is normally the number of bits in a `Pmode'
941: item minus the number of bits set by the `high' code (*note
942: Constants::.).
943:
944: M should be `Pmode'.
945:
946: `(minus:M X Y)'
947: Like `plus' but represents subtraction.
948:
949: `(compare:M X Y)'
950: Represents the result of subtracting Y from X for purposes of
951: comparison. The result is computed without overflow, as if with
952: infinite precision.
953:
954: Of course, machines can't really subtract with infinite precision.
955: However, they can pretend to do so when only the sign of the
956: result will be used, which is the case when the result is stored
957: in the condition code. And that is the only way this kind of
958: expression may validly be used: as a value to be stored in the
959: condition codes.
960:
961: The mode M is not related to the modes of X and Y, but instead is
962: the mode of the condition code value. If `(cc0)' is used, it is
963: `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often
964: `CCmode'. *Note Condition Code::.
965:
966: Normally, X and Y must have the same mode. Otherwise, `compare'
967: is valid only if the mode of X is in class `MODE_INT' and Y is a
968: `const_int' or `const_double' with mode `VOIDmode'. The mode of X
969: determines what mode the comparison is to be done in; thus it
970: must not be `VOIDmode'.
971:
972: If one of the operands is a constant, it should be placed in the
973: second operand and the comparison code adjusted as appropriate.
974:
975: A `compare' specifying two `VOIDmode' constants is not valid
976: since there is no way to know in what mode the comparison is to be
977: performed; the comparison must either be folded during the
978: compilation or the first operand must be loaded into a register
979: while its mode is still known.
980:
981: `(neg:M X)'
982: Represents the negation (subtraction from zero) of the value
983: represented by X, carried out in mode M.
984:
985: `(mult:M X Y)'
986: Represents the signed product of the values represented by X and
987: Y carried out in machine mode M.
988:
989: Some machines support a multiplication that generates a product
990: wider than the operands. Write the pattern for this as
991:
992: (mult:M (sign_extend:M X) (sign_extend:M Y))
993:
994: where M is wider than the modes of X and Y, which need not be the
995: same.
996:
997: Write patterns for unsigned widening multiplication similarly
998: using `zero_extend'.
999:
1000: `(div:M X Y)'
1001: Represents the quotient in signed division of X by Y, carried out
1002: in machine mode M. If M is a floating point mode, it represents
1003: the exact quotient; otherwise, the integerized quotient.
1004:
1005: Some machines have division instructions in which the operands and
1006: quotient widths are not all the same; you should represent such
1007: instructions using `truncate' and `sign_extend' as in,
1008:
1009: (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
1010:
1011: `(udiv:M X Y)'
1012: Like `div' but represents unsigned division.
1013:
1014: `(mod:M X Y)'
1015: `(umod:M X Y)'
1016: Like `div' and `udiv' but represent the remainder instead of the
1017: quotient.
1018:
1019: `(smin:M X Y)'
1020: `(smax:M X Y)'
1021: Represents the smaller (for `smin') or larger (for `smax') of X
1022: and Y, interpreted as signed integers in mode M.
1023:
1024: `(umin:M X Y)'
1025: `(umax:M X Y)'
1026: Like `smin' and `smax', but the values are interpreted as unsigned
1027: integers.
1028:
1029: `(not:M X)'
1030: Represents the bitwise complement of the value represented by X,
1031: carried out in mode M, which must be a fixed-point machine mode.
1032:
1033: `(and:M X Y)'
1034: Represents the bitwise logical-and of the values represented by X
1035: and Y, carried out in machine mode M, which must be a fixed-point
1036: machine mode.
1037:
1038: `(ior:M X Y)'
1039: Represents the bitwise inclusive-or of the values represented by X
1040: and Y, carried out in machine mode M, which must be a fixed-point
1041: mode.
1042:
1043: `(xor:M X Y)'
1044: Represents the bitwise exclusive-or of the values represented by X
1045: and Y, carried out in machine mode M, which must be a fixed-point
1046: mode.
1047:
1048: `(ashift:M X C)'
1049: Represents the result of arithmetically shifting X left by C
1050: places. X have mode M, a fixed-point machine mode. C be a
1051: fixed-point mode or be a constant with mode `VOIDmode'; which
1052: mode is determined by the mode called for in the machine
1053: description entry for the left-shift instruction. For example,
1054: on the Vax, the mode of C is `QImode' regardless of M.
1055:
1056: `(lshift:M X C)'
1057: Like `lshift' but for arithmetic left shift. `ashift' and
1058: `lshift' are identical operations; we customarily use `ashift'
1059: for both.
1060:
1061: `(lshiftrt:M X C)'
1062: `(ashiftrt:M X C)'
1063: Like `lshift' and `ashift' but for right shift. Unlike the case
1064: for left shift, these two operations are distinct.
1065:
1066: `(rotate:M X C)'
1067: `(rotatert:M X C)'
1068: Similar but represent left and right rotate. If C is a constant,
1069: use `rotate'.
1070:
1071: `(abs:M X)'
1072: Represents the absolute value of X, computed in mode M.
1073:
1074: `(sqrt:M X)'
1075: Represents the square root of X, computed in mode M. Most often
1076: M will be a floating point mode.
1077:
1078: `(ffs:M X)'
1079: Represents one plus the index of the least significant 1-bit in
1080: X, represented as an integer of mode M. (The value is zero if X
1081: is zero.) The mode of X need not be M; depending on the target
1082: machine, various mode combinations may be valid.
1083:
1084:
1085: File: gcc.info, Node: Comparisons, Next: Bit Fields, Prev: Arithmetic, Up: RTL
1086:
1087: Comparison Operations
1088: =====================
1089:
1090: Comparison operators test a relation on two operands and are
1091: considered to represent a machine-dependent nonzero value described
1092: by, but not necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::.)
1093: if the relation holds, or zero if it does not. The mode of the
1094: comparison operation is independent of the mode of the data being
1095: compared. If the comparison operation is being tested (e.g., the first
1096: operand of an `if_then_else'), the mode must be `VOIDmode'. If the
1097: comparison operation is producing data to be stored in some variable,
1098: the mode must be in class `MODE_INT'. All comparison operations
1099: producing data must use the same mode, which is machine-specific.
1100:
1101: There are two ways that comparison operations may be used. The
1102: comparison operators may be used to compare the condition codes
1103: `(cc0)' against zero, as in `(eq (cc0) (const_int 0))'. Such a
1104: construct actually refers to the result of the preceding instruction
1105: in which the condition codes were set. The instructing setting the
1106: condition code must be adjacent to the instruction using the condition
1107: code; only `note' insns may separate them.
1108:
1109: Alternatively, a comparison operation may directly compare two data
1110: objects. The mode of the comparison is determined by the operands;
1111: they must both be valid for a common machine mode. A comparison with
1112: both operands constant would be invalid as the machine mode could not
1113: be deduced from it, but such a comparison should never exist in RTL
1114: due to constant folding.
1115:
1116: In the example above, if `(cc0)' were last set to `(compare X Y)',
1117: the comparison operation is identical to `(eq X Y)'. Usually only one
1118: style of comparisons is supported on a particular machine, but the
1119: combine pass will try to merge the operations to produce the `eq' shown
1120: in case it exists in the context of the particular insn involved.
1121:
1122: Inequality comparisons come in two flavors, signed and unsigned.
1123: Thus, there are distinct expression codes `gt' and `gtu' for signed and
1124: unsigned greater-than. These can produce different results for the
1125: same pair of integer values: for example, 1 is signed greater-than -1
1126: but not unsigned greater-than, because -1 when regarded as unsigned is
1127: actually `0xffffffff' which is greater than 1.
1128:
1129: The signed comparisons are also used for floating point values.
1130: Floating point comparisons are distinguished by the machine modes of
1131: the operands.
1132:
1133: `(eq:M X Y)'
1134: 1 if the values represented by X and Y are equal, otherwise 0.
1135:
1136: `(ne:M X Y)'
1137: 1 if the values represented by X and Y are not equal, otherwise 0.
1138:
1139: `(gt:M X Y)'
1140: 1 if the X is greater than Y. If they are fixed-point, the
1141: comparison is done in a signed sense.
1142:
1143: `(gtu:M X Y)'
1144: Like `gt' but does unsigned comparison, on fixed-point numbers
1145: only.
1146:
1147: `(lt:M X Y)'
1148: `(ltu:M X Y)'
1149: Like `gt' and `gtu' but test for "less than".
1150:
1151: `(ge:M X Y)'
1152: `(geu:M X Y)'
1153: Like `gt' and `gtu' but test for "greater than or equal".
1154:
1155: `(le:M X Y)'
1156: `(leu:M X Y)'
1157: Like `gt' and `gtu' but test for "less than or equal".
1158:
1159: `(if_then_else COND THEN ELSE)'
1160: This is not a comparison operation but is listed here because it
1161: is always used in conjunction with a comparison operation. To be
1162: precise, COND is a comparison expression. This expression
1163: represents a choice, according to COND, between the value
1164: represented by THEN and the one represented by ELSE.
1165:
1166: On most machines, `if_then_else' expressions are valid only to
1167: express conditional jumps.
1168:
1169: `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
1170: Similar to `if_then_else', but more general. Each of TEST1,
1171: TEST2, ... is performed in turn. The result of this expression is
1172: the VALUE corresponding to the first non-zero test, or DEFAULT if
1173: none of the tests are non-zero expressions.
1174:
1175: This is currently not valid for instruction patterns and is
1176: supported only for insn attributes. *Note Insn Attributes::.
1177:
1178:
1179: File: gcc.info, Node: Bit Fields, Next: Conversions, Prev: Comparisons, Up: RTL
1180:
1181: Bit Fields
1182: ==========
1183:
1184: Special expression codes exist to represent bit-field instructions.
1185: These types of expressions are lvalues in RTL; they may appear on the
1186: left side of an assignment, indicating insertion of a value into the
1187: specified bit field.
1188:
1189: `(sign_extract:M LOC SIZE POS)'
1190: This represents a reference to a sign-extended bit field
1191: contained or starting in LOC (a memory or register reference).
1192: The bit field is SIZE bits wide and starts at bit POS. The
1193: compilation option `BITS_BIG_ENDIAN' says which end of the memory
1194: unit POS counts from.
1195:
1196: If LOC is in memory, its mode must be a single-byte integer mode.
1197: If LOC is in a register, the mode to use is specified by the
1198: operand of the `insv' or `extv' pattern (*note Standard Names::.)
1199: and is usually a full-word integer mode.
1200:
1201: The mode of POS is machine-specific and is also specified in the
1202: `insv' or `extv' pattern.
1203:
1204: The mode M is the same as the mode that would be used for LOC if
1205: it were a register.
1206:
1207: `(zero_extract:M LOC SIZE POS)'
1208: Like `sign_extract' but refers to an unsigned or zero-extended
1209: bit field. The same sequence of bits are extracted, but they are
1210: filled to an entire word with zeros instead of by sign-extension.
1211:
1212:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.