|
|
1.1 root 1: @c Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
2: @c This is part of the GCC manual.
3: @c For copying conditions, see the file gcc.texi.
4:
5: @ifset INTERNALS
6: @node RTL, Machine Desc, Passes, Top
7: @chapter RTL Representation
8: @cindex RTL representation
9: @cindex representation of RTL
10: @cindex Register Transfer Language (RTL)
11:
12: Most of the work of the compiler is done on an intermediate representation
13: called register transfer language. In this language, the instructions to be
14: output are described, pretty much one by one, in an algebraic form that
15: describes what the instruction does.
16:
17: RTL is inspired by Lisp lists. It has both an internal form, made up of
18: structures that point at other structures, and a textual form that is used
19: in the machine description and in printed debugging dumps. The textual
20: form uses nested parentheses to indicate the pointers in the internal form.
21:
22: @menu
23: * RTL Objects:: Expressions vs vectors vs strings vs integers.
24: * Accessors:: Macros to access expression operands or vector elts.
25: * Flags:: Other flags in an RTL expression.
26: * Machine Modes:: Describing the size and format of a datum.
27: * Constants:: Expressions with constant values.
28: * Regs and Memory:: Expressions representing register contents or memory.
29: * Arithmetic:: Expressions representing arithmetic on other expressions.
30: * Comparisons:: Expressions representing comparison of expressions.
31: * Bit Fields:: Expressions representing bit-fields in memory or reg.
32: * Conversions:: Extending, truncating, floating or fixing.
33: * RTL Declarations:: Declaring volatility, constancy, etc.
34: * Side Effects:: Expressions for storing in registers, etc.
35: * Incdec:: Embedded side-effects for autoincrement addressing.
36: * Assembler:: Representing @code{asm} with operands.
37: * Insns:: Expression types for entire insns.
38: * Calls:: RTL representation of function call insns.
39: * Sharing:: Some expressions are unique; others *must* be copied.
40: @end menu
41:
42: @node RTL Objects, Accessors, RTL, RTL
43: @section RTL Object Types
44: @cindex RTL object types
45:
46: @cindex RTL integers
47: @cindex RTL strings
48: @cindex RTL vectors
49: @cindex RTL expression
50: @cindex RTX (See RTL)
51: RTL uses four kinds of objects: expressions, integers, strings and vectors.
52: Expressions are the most important ones. An RTL expression (``RTX'', for
53: short) is a C structure, but it is usually referred to with a pointer; a
54: type that is given the typedef name @code{rtx}.
55:
56: An integer is simply an @code{int}; their written form uses decimal digits.
57:
58: A string is a sequence of characters. In core it is represented as a
59: @code{char *} in usual C fashion, and it is written in C syntax as well.
60: However, strings in RTL may never be null. If you write an empty string in
61: a machine description, it is represented in core as a null pointer rather
62: than as a pointer to a null character. In certain contexts, these null
63: pointers instead of strings are valid. Within RTL code, strings are most
64: commonly found inside @code{symbol_ref} expressions, but they appear in
65: other contexts in the RTL expressions that make up machine descriptions.
66:
67: A vector contains an arbitrary number of pointers to expressions. The
68: number of elements in the vector is explicitly present in the vector.
69: The written form of a vector consists of square brackets
70: (@samp{[@dots{}]}) surrounding the elements, in sequence and with
71: whitespace separating them. Vectors of length zero are not created;
72: null pointers are used instead.
73:
74: @cindex expression codes
75: @cindex codes, RTL expression
76: @findex GET_CODE
77: @findex PUT_CODE
78: Expressions are classified by @dfn{expression codes} (also called RTX
79: codes). The expression code is a name defined in @file{rtl.def}, which is
80: also (in upper case) a C enumeration constant. The possible expression
81: codes and their meanings are machine-independent. The code of an RTX can
82: be extracted with the macro @code{GET_CODE (@var{x})} and altered with
83: @code{PUT_CODE (@var{x}, @var{newcode})}.
84:
85: The expression code determines how many operands the expression contains,
86: and what kinds of objects they are. In RTL, unlike Lisp, you cannot tell
87: by looking at an operand what kind of object it is. Instead, you must know
88: from its context---from the expression code of the containing expression.
89: For example, in an expression of code @code{subreg}, the first operand is
90: to be regarded as an expression and the second operand as an integer. In
91: an expression of code @code{plus}, there are two operands, both of which
92: are to be regarded as expressions. In a @code{symbol_ref} expression,
93: there is one operand, which is to be regarded as a string.
94:
95: Expressions are written as parentheses containing the name of the
96: expression type, its flags and machine mode if any, and then the operands
97: of the expression (separated by spaces).
98:
99: Expression code names in the @samp{md} file are written in lower case,
100: but when they appear in C code they are written in upper case. In this
101: manual, they are shown as follows: @code{const_int}.
102:
103: @cindex (nil)
104: @cindex nil
105: In a few contexts a null pointer is valid where an expression is normally
106: wanted. The written form of this is @code{(nil)}.
107:
108: @node Accessors, Flags, RTL Objects, RTL
109: @section Access to Operands
110: @cindex accessors
111: @cindex access to operands
112: @cindex operand access
113:
114: @cindex RTL format
115: For each expression type @file{rtl.def} specifies the number of contained
116: objects and their kinds, with four possibilities: @samp{e} for expression
117: (actually a pointer to an expression), @samp{i} for integer, @samp{s} for
118: string, and @samp{E} for vector of expressions. The sequence of letters
119: for an expression code is called its @dfn{format}. Thus, the format of
120: @code{subreg} is @samp{ei}.@refill
121:
122: @cindex RTL format characters
123: A few other format characters are used occasionally:
124:
125: @table @code
126: @item u
127: @samp{u} is equivalent to @samp{e} except that it is printed differently
128: in debugging dumps. It is used for pointers to insns.
129:
130: @item n
131: @samp{n} is equivalent to @samp{i} except that it is printed differently
132: in debugging dumps. It is used for the line number or code number of a
133: @code{note} insn.
134:
135: @item S
136: @samp{S} indicates a string which is optional. In the RTL objects in
137: core, @samp{S} is equivalent to @samp{s}, but when the object is read,
138: from an @samp{md} file, the string value of this operand may be omitted.
139: An omitted string is taken to be the null string.
140:
141: @item V
142: @samp{V} indicates a vector which is optional. In the RTL objects in
143: core, @samp{V} is equivalent to @samp{E}, but when the object is read
144: from an @samp{md} file, the vector value of this operand may be omitted.
145: An omitted vector is effectively the same as a vector of no elements.
146:
147: @item 0
148: @samp{0} means a slot whose contents do not fit any normal category.
149: @samp{0} slots are not printed at all in dumps, and are often used in
150: special ways by small parts of the compiler.
151: @end table
152:
153: There are macros to get the number of operands, the format, and the
154: class of an expression code:
155:
156: @table @code
157: @findex GET_RTX_LENGTH
158: @item GET_RTX_LENGTH (@var{code})
159: Number of operands of an RTX of code @var{code}.
160:
161: @findex GET_RTX_FORMAT
162: @item GET_RTX_FORMAT (@var{code})
163: The format of an RTX of code @var{code}, as a C string.
164:
165: @findex GET_RTX_CLASS
166: @cindex classes of RTX codes
167: @item GET_RTX_CLASS (@var{code})
168: A single character representing the type of RTX operation that code
169: @var{code} performs.
170:
171: The following classes are defined:
172:
173: @table @code
174: @item o
175: An RTX code that represents an actual object, such as @code{reg} or
176: @code{mem}. @code{subreg} is not in this class.
177:
178: @item <
179: An RTX code for a comparison. The codes in this class are
180: @code{NE}, @code{EQ}, @code{LE}, @code{LT}, @code{GE}, @code{GT},
181: @code{LEU}, @code{LTU}, @code{GEU}, @code{GTU}.@refill
182:
183: @item 1
184: An RTX code for a unary arithmetic operation, such as @code{neg}.
185:
186: @item c
187: An RTX code for a commutative binary operation, other than @code{NE}
188: and @code{EQ} (which have class @samp{<}).
189:
190: @item 2
191: An RTX code for a noncommutative binary operation, such as @code{MINUS}.
192:
193: @item b
194: An RTX code for a bitfield operation (@code{ZERO_EXTRACT} and
195: @code{SIGN_EXTRACT}).
196:
197: @item 3
198: An RTX code for other three input operations, such as @code{IF_THEN_ELSE}.
199:
200: @item i
201: An RTX code for a machine insn (@code{INSN}, @code{JUMP_INSN}, and
202: @code{CALL_INSN}).@refill
203:
204: @item m
205: An RTX code for something that matches in insns, such as @code{MATCH_DUP}.
206:
207: @item x
208: All other RTX codes.
209: @end table
210: @end table
211:
212: @findex XEXP
213: @findex XINT
214: @findex XSTR
215: Operands of expressions are accessed using the macros @code{XEXP},
216: @code{XINT} and @code{XSTR}. Each of these macros takes two arguments: an
217: expression-pointer (RTX) and an operand number (counting from zero).
218: Thus,@refill
219:
220: @example
221: XEXP (@var{x}, 2)
222: @end example
223:
224: @noindent
225: accesses operand 2 of expression @var{x}, as an expression.
226:
227: @example
228: XINT (@var{x}, 2)
229: @end example
230:
231: @noindent
232: accesses the same operand as an integer. @code{XSTR}, used in the same
233: fashion, would access it as a string.
234:
235: Any operand can be accessed as an integer, as an expression or as a string.
236: You must choose the correct method of access for the kind of value actually
237: stored in the operand. You would do this based on the expression code of
238: the containing expression. That is also how you would know how many
239: operands there are.
240:
241: For example, if @var{x} is a @code{subreg} expression, you know that it has
242: two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
243: and @code{XINT (@var{x}, 1)}. If you did @code{XINT (@var{x}, 0)}, you
244: would get the address of the expression operand but cast as an integer;
245: that might occasionally be useful, but it would be cleaner to write
246: @code{(int) XEXP (@var{x}, 0)}. @code{XEXP (@var{x}, 1)} would also
247: compile without error, and would return the second, integer operand cast as
248: an expression pointer, which would probably result in a crash when
249: accessed. Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
250: but this will access memory past the end of the expression with
251: unpredictable results.@refill
252:
253: Access to operands which are vectors is more complicated. You can use the
254: macro @code{XVEC} to get the vector-pointer itself, or the macros
255: @code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
256: vector.
257:
258: @table @code
259: @findex XVEC
260: @item XVEC (@var{exp}, @var{idx})
261: Access the vector-pointer which is operand number @var{idx} in @var{exp}.
262:
263: @findex XVECLEN
264: @item XVECLEN (@var{exp}, @var{idx})
265: Access the length (number of elements) in the vector which is
266: in operand number @var{idx} in @var{exp}. This value is an @code{int}.
267:
268: @findex XVECEXP
269: @item XVECEXP (@var{exp}, @var{idx}, @var{eltnum})
270: Access element number @var{eltnum} in the vector which is
271: in operand number @var{idx} in @var{exp}. This value is an RTX.
272:
273: It is up to you to make sure that @var{eltnum} is not negative
274: and is less than @code{XVECLEN (@var{exp}, @var{idx})}.
275: @end table
276:
277: All the macros defined in this section expand into lvalues and therefore
278: can be used to assign the operands, lengths and vector elements as well as
279: to access them.
280:
281: @node Flags, Machine Modes, Accessors, RTL
282: @section Flags in an RTL Expression
283: @cindex flags in RTL expression
284:
285: RTL expressions contain several flags (one-bit bit-fields) that are used
286: in certain types of expression. Most often they are accessed with the
287: following macros:
288:
289: @table @code
290: @findex MEM_VOLATILE_P
291: @cindex @code{mem} and @samp{/v}
292: @cindex @code{volatil}, in @code{mem}
293: @cindex @samp{/v} in RTL dump
294: @item MEM_VOLATILE_P (@var{x})
295: In @code{mem} expressions, nonzero for volatile memory references.
296: Stored in the @code{volatil} field and printed as @samp{/v}.
297:
298: @findex MEM_IN_STRUCT_P
299: @cindex @code{mem} and @samp{/s}
300: @cindex @code{in_struct}, in @code{mem}
301: @cindex @samp{/s} in RTL dump
302: @item MEM_IN_STRUCT_P (@var{x})
303: In @code{mem} expressions, nonzero for reference to an entire
304: structure, union or array, or to a component of one. Zero for
305: references to a scalar variable or through a pointer to a scalar.
306: Stored in the @code{in_struct} field and printed as @samp{/s}.
307:
308: @findex REG_LOOP_TEST_P
309: @cindex @code{reg} and @samp{/s}
310: @cindex @code{in_struct}, in @code{reg}
311: @item REG_LOOP_TEST_P
312: In @code{reg} expressions, nonzero if this register's entire life is
313: contained in the exit test code for some loop. Stored in the
314: @code{in_struct} field and printed as @samp{/s}.
315:
316: @findex REG_USERVAR_P
317: @cindex @code{reg} and @samp{/v}
318: @cindex @code{volatil}, in @code{reg}
319: @item REG_USERVAR_P (@var{x})
320: In a @code{reg}, nonzero if it corresponds to a variable present in
321: the user's source code. Zero for temporaries generated internally by
322: the compiler. Stored in the @code{volatil} field and printed as
323: @samp{/v}.
324:
325: @cindex @samp{/i} in RTL dump
326: @findex REG_FUNCTION_VALUE_P
327: @cindex @code{reg} and @samp{/i}
328: @cindex @code{integrated}, in @code{reg}
329: @item REG_FUNCTION_VALUE_P (@var{x})
330: Nonzero in a @code{reg} if it is the place in which this function's
331: value is going to be returned. (This happens only in a hard
332: register.) Stored in the @code{integrated} field and printed as
333: @samp{/i}.
334:
335: The same hard register may be used also for collecting the values of
336: functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero
337: in this kind of use.
338:
339: @findex RTX_UNCHANGING_P
340: @cindex @code{reg} and @samp{/u}
341: @cindex @code{mem} and @samp{/u}
342: @cindex @code{unchanging}, in @code{reg} and @code{mem}
343: @cindex @samp{/u} in RTL dump
344: @item RTX_UNCHANGING_P (@var{x})
345: Nonzero in a @code{reg} or @code{mem} if the value is not changed.
346: (This flag is not set for memory references via pointers to constants.
347: Such pointers only guarantee that the object will not be changed
348: explicitly by the current function. The object might be changed by
349: other functions or by aliasing.) Stored in the
350: @code{unchanging} field and printed as @samp{/u}.
351:
352: @findex RTX_INTEGRATED_P
353: @cindex @code{integrated}, in @code{insn}
354: @item RTX_INTEGRATED_P (@var{insn})
355: Nonzero in an insn if it resulted from an in-line function call.
356: Stored in the @code{integrated} field and printed as @samp{/i}. This
357: may be deleted; nothing currently depends on it.
358:
359: @findex SYMBOL_REF_USED
360: @cindex @code{used}, in @code{symbol_ref}
361: @item SYMBOL_REF_USED (@var{x})
362: In a @code{symbol_ref}, indicates that @var{x} has been used. This is
363: normally only used to ensure that @var{x} is only declared external
364: once. Stored in the @code{used} field.
365:
366: @findex SYMBOL_REF_FLAG
367: @cindex @code{symbol_ref} and @samp{/v}
368: @cindex @code{volatil}, in @code{symbol_ref}
369: @item SYMBOL_REF_FLAG (@var{x})
370: In a @code{symbol_ref}, this is used as a flag for machine-specific purposes.
371: Stored in the @code{volatil} field and printed as @samp{/v}.
372:
373: @findex LABEL_OUTSIDE_LOOP_P
374: @cindex @code{label_ref} and @samp{/s}
375: @cindex @code{in_struct}, in @code{label_ref}
376: @item LABEL_OUTSIDE_LOOP_P
377: In @code{label_ref} expressions, nonzero if this is a reference to a
378: label that is outside the innermost loop containing the reference to the
379: label. Stored in the @code{in_struct} field and printed as @samp{/s}.
380:
381: @findex INSN_DELETED_P
382: @cindex @code{volatil}, in @code{insn}
383: @item INSN_DELETED_P (@var{insn})
384: In an insn, nonzero if the insn has been deleted. Stored in the
385: @code{volatil} field and printed as @samp{/v}.
386:
387: @findex INSN_ANNULLED_BRANCH_P
388: @cindex @code{insn} and @samp{/u}
389: @cindex @code{unchanging}, in @code{insn}
390: @item INSN_ANNULLED_BRANCH_P (@var{insn})
391: In an @code{insn} in the delay slot of a branch insn, indicates that an
392: annulling branch should be used. See the discussion under
393: @code{sequence} below. Stored in the @code{unchanging} field and printed
394: as @samp{/u}.
395:
396: @findex INSN_FROM_TARGET_P
397: @cindex @code{insn} and @samp{/s}
398: @cindex @code{in_struct}, in @code{insn}
399: @cindex @samp{/s} in RTL dump
400: @item INSN_FROM_TARGET_P (@var{insn})
401: In an @code{insn} in a delay slot of a branch, indicates that the insn
402: is from the target of the branch. If the branch insn has
403: @code{INSN_ANNULLED_BRANCH_P} set, this insn should only be executed if
404: the branch is taken. For annulled branches with this bit clear, the
405: insn should be executed only if the branch is not taken. Stored in the
406: @code{in_struct} field and printed as @samp{/s}.
407:
408: @findex CONSTANT_POOL_ADDRESS_P
409: @cindex @code{symbol_ref} and @samp{/u}
410: @cindex @code{unchanging}, in @code{symbol_ref}
411: @item CONSTANT_POOL_ADDRESS_P (@var{x})
412: Nonzero in a @code{symbol_ref} if it refers to part of the current
413: function's ``constants pool''. These are addresses close to the
414: beginning of the function, and GNU CC assumes they can be addressed
415: directly (perhaps with the help of base registers). Stored in the
416: @code{unchanging} field and printed as @samp{/u}.
417:
418: @findex CONST_CALL_P
419: @cindex @code{call_insn} and @samp{/u}
420: @cindex @code{unchanging}, in @code{call_insn}
421: @item CONST_CALL_P (@var{x})
422: In a @code{call_insn}, indicates that the insn represents a call to a const
423: function. Stored in the @code{unchanging} field and printed as @samp{/u}.
424:
425: @findex LABEL_PRESERVE_P
426: @cindex @code{code_label} and @samp{/i}
427: @cindex @code{in_struct}, in @code{code_label}
428: @item LABEL_PRESERVE_P (@var{x})
429: In a @code{code_label}, indicates that the label can never be deleted.
430: Labels referenced by a a non-local goto will have this bit set. Stored
431: in the @code{in_struct} field and printed as @samp{/s}.
432:
433: @findex SCHED_GROUP_P
434: @cindex @code{insn} and @samp{/i}
435: @cindex @code{in_struct}, in @code{insn}
436: @item SCHED_GROUP_P (@var{insn})
437: During instruction scheduling, in an insn, indicates that the previous insn
438: must be scheduled together with this insn. This is used to ensure that
439: certain groups of instructions will not be split up by the instruction
440: scheduling pass, for example, @code{use} insns before a @code{call_insn} may
441: not be separated from the @code{call_insn}. Stored in the @code{in_struct}
442: field and printed as @samp{/s}.
443: @end table
444:
445: These are the fields which the above macros refer to:
446:
447: @table @code
448: @findex used
449: @item used
450: Normally, this flag is used only momentarily, at the end of RTL
451: generation for a function, to count the number of times an expression
452: appears in insns. Expressions that appear more than once are copied,
453: according to the rules for shared structure (@pxref{Sharing}).
454:
455: In a @code{symbol_ref}, it indicates that an external declaration for
456: the symbol has already been written.
457:
458: In a @code{reg}, it is used by the leaf register renumbering code to ensure
459: that each register is only renumbered once.
460:
461: @findex volatil
462: @item volatil
463: This flag is used in @code{mem},@code{symbol_ref} and @code{reg}
464: expressions and in insns. In RTL dump files, it is printed as
465: @samp{/v}.
466:
467: @cindex volatile memory references
468: In a @code{mem} expression, it is 1 if the memory reference is volatile.
469: Volatile memory references may not be deleted, reordered or combined.
470:
471: In a @code{symbol_ref} expression, it is used for machine-specific
472: purposes.
473:
474: In a @code{reg} expression, it is 1 if the value is a user-level variable.
475: 0 indicates an internal compiler temporary.
476:
477: In an insn, 1 means the insn has been deleted.
478:
479: @findex in_struct
480: @item in_struct
481: In @code{mem} expressions, it is 1 if the memory datum referred to is
482: all or part of a structure or array; 0 if it is (or might be) a scalar
483: variable. A reference through a C pointer has 0 because the pointer
484: might point to a scalar variable. This information allows the compiler
485: to determine something about possible cases of aliasing.
486:
487: In an insn in the delay slot of a branch, 1 means that this insn is from
488: the target of the branch.
489:
490: During instruction scheduling, in an insn, 1 means that this insn must be
491: scheduled as part of a group together with the previous insn.
492:
493: In @code{reg} expressions, it is 1 if the register has its entire life
494: contained within the test expression of some loopl.
495:
496: In @code{label_ref} expressions, 1 means that the referenced label is
497: outside the innermost loop containing the insn in which the @code{label_ref}
498: was found.
499:
500: In @code{code_label} expressions, it is 1 if the label may never be deleted.
501: This is used for labels which are the target of non-local gotos.
502:
503: In an RTL dump, this flag is represented as @samp{/s}.
504:
505: @findex unchanging
506: @item unchanging
507: In @code{reg} and @code{mem} expressions, 1 means
508: that the value of the expression never changes.
509:
510: In an insn, 1 means that this is an annulling branch.
511:
512: In a @code{symbol_ref} expression, 1 means that this symbol addresses
513: something in the per-function constants pool.
514:
515: In a @code{call_insn}, 1 means that this instruction is a call to a
516: const function.
517:
518: In an RTL dump, this flag is represented as @samp{/u}.
519:
520: @findex integrated
521: @item integrated
522: In some kinds of expressions, including insns, this flag means the
523: rtl was produced by procedure integration.
524:
525: In a @code{reg} expression, this flag indicates the register
526: containing the value to be returned by the current function. On
527: machines that pass parameters in registers, the same register number
528: may be used for parameters as well, but this flag is not set on such
529: uses.
530: @end table
531:
532: @node Machine Modes, Constants, Flags, RTL
533: @section Machine Modes
534: @cindex machine modes
535:
536: @findex enum machine_mode
537: A machine mode describes a size of data object and the representation used
538: for it. In the C code, machine modes are represented by an enumeration
539: type, @code{enum machine_mode}, defined in @file{machmode.def}. Each RTL
540: expression has room for a machine mode and so do certain kinds of tree
541: expressions (declarations and types, to be precise).
542:
543: In debugging dumps and machine descriptions, the machine mode of an RTL
544: expression is written after the expression code with a colon to separate
545: them. The letters @samp{mode} which appear at the end of each machine mode
546: name are omitted. For example, @code{(reg:SI 38)} is a @code{reg}
547: expression with machine mode @code{SImode}. If the mode is
548: @code{VOIDmode}, it is not written at all.
549:
550: Here is a table of machine modes. The term ``byte'' below refers to an
551: object of @code{BITS_PER_UNIT} bits (@pxref{Storage Layout}).
552:
553: @table @code
554: @findex QImode
555: @item QImode
556: ``Quarter-Integer'' mode represents a single byte treated as an integer.
557:
558: @findex HImode
559: @item HImode
560: ``Half-Integer'' mode represents a two-byte integer.
561:
562: @findex PSImode
563: @item PSImode
564: ``Partial Single Integer'' mode represents an integer which occupies
565: four bytes but which doesn't really use all four. On some machines,
566: this is the right mode to use for pointers.
567:
568: @findex SImode
569: @item SImode
570: ``Single Integer'' mode represents a four-byte integer.
571:
572: @findex PDImode
573: @item PDImode
574: ``Partial Double Integer'' mode represents an integer which occupies
575: eight bytes but which doesn't really use all eight. On some machines,
576: this is the right mode to use for certain pointers.
577:
578: @findex DImode
579: @item DImode
580: ``Double Integer'' mode represents an eight-byte integer.
581:
582: @findex TImode
583: @item TImode
584: ``Tetra Integer'' (?) mode represents a sixteen-byte integer.
585:
586: @findex SFmode
587: @item SFmode
588: ``Single Floating'' mode represents a single-precision (four byte) floating
589: point number.
590:
591: @findex DFmode
592: @item DFmode
593: ``Double Floating'' mode represents a double-precision (eight byte) floating
594: point number.
595:
596: @findex XFmode
597: @item XFmode
598: ``Extended Floating'' mode represents a triple-precision (twelve byte)
599: floating point number. This mode is used for IEEE extended floating
600: point.
601:
602: @findex TFmode
603: @item TFmode
604: ``Tetra Floating'' mode represents a quadruple-precision (sixteen byte)
605: floating point number.
606:
607: @findex CCmode
608: @item CCmode
609: ``Condition Code'' mode represents the value of a condition code, which
610: is a machine-specific set of bits used to represent the result of a
611: comparison operation. Other machine-specific modes may also be used for
612: the condition code. These modes are not used on machines that use
613: @code{cc0} (see @pxref{Condition Code}).
614:
615: @findex BLKmode
616: @item BLKmode
617: ``Block'' mode represents values that are aggregates to which none of
618: the other modes apply. In RTL, only memory references can have this mode,
619: and only if they appear in string-move or vector instructions. On machines
620: which have no such instructions, @code{BLKmode} will not appear in RTL.
621:
622: @findex VOIDmode
623: @item VOIDmode
624: Void mode means the absence of a mode or an unspecified mode.
625: For example, RTL expressions of code @code{const_int} have mode
626: @code{VOIDmode} because they can be taken to have whatever mode the context
627: requires. In debugging dumps of RTL, @code{VOIDmode} is expressed by
628: the absence of any mode.
629:
630: @findex SCmode
631: @findex DCmode
632: @findex XCmode
633: @findex TCmode
634: @item SCmode, DCmode, XCmode, TCmode
635: These modes stand for a complex number represented as a pair of
636: floating point values. The values are in @code{SFmode}, @code{DFmode},
637: @code{XFmode}, and @code{TFmode}, respectively. Since C does not
638: support complex numbers, these machine modes are only partially
639: implemented.
640: @end table
641:
642: The machine description defines @code{Pmode} as a C macro which expands
643: into the machine mode used for addresses. Normally this is the mode
644: whose size is @code{BITS_PER_WORD}, @code{SImode} on 32-bit machines.
645:
646: The only modes which a machine description @i{must} support are
647: @code{QImode}, and the modes corresponding to @code{BITS_PER_WORD},
648: @code{FLOAT_TYPE_SIZE} and @code{DOUBLE_TYPE_SIZE}.
649: The compiler will attempt to use @code{DImode} for 8-byte structures and
650: unions, but this can be prevented by overriding the definition of
651: @code{MAX_FIXED_MODE_SIZE}. Alternatively, you can have the compiler
652: use @code{TImode} for 16-byte structures and unions. Likewise, you can
653: arrange for the C type @code{short int} to avoid using @code{HImode}.
654:
655: @cindex mode classes
656: Very few explicit references to machine modes remain in the compiler and
657: these few references will soon be removed. Instead, the machine modes
658: are divided into mode classes. These are represented by the enumeration
659: type @code{enum mode_class} defined in @file{machmode.h}. The possible
660: mode classes are:
661:
662: @table @code
663: @findex MODE_INT
664: @item MODE_INT
665: Integer modes. By default these are @code{QImode}, @code{HImode},
666: @code{SImode}, @code{DImode}, and @code{TImode}.
667:
668: @findex MODE_PARTIAL_INT
669: @item MODE_PARTIAL_INT
670: The ``partial integer'' modes, @code{PSImode} and @code{PDImode}.
671:
672: @findex MODE_FLOAT
673: @item MODE_FLOAT
674: floating point modes. By default these are @code{SFmode}, @code{DFmode},
675: @code{XFmode} and @code{TFmode}.
676:
677: @findex MODE_COMPLEX_INT
678: @item MODE_COMPLEX_INT
679: Complex integer modes. (These are not currently implemented).
680:
681: @findex MODE_COMPLEX_FLOAT
682: @item MODE_COMPLEX_FLOAT
683: Complex floating point modes. By default these are @code{SCmode},
684: @code{DCmode}, @code{XCmode}, and @code{TCmode}.
685:
686: @findex MODE_FUNCTION
687: @item MODE_FUNCTION
688: Algol or Pascal function variables including a static chain.
689: (These are not currently implemented).
690:
691: @findex MODE_CC
692: @item MODE_CC
693: Modes representing condition code values. These are @code{CCmode} plus
694: any modes listed in the @code{EXTRA_CC_MODES} macro. @xref{Jump Patterns},
695: also see @ref{Condition Code}.
696:
697: @findex MODE_RANDOM
698: @item MODE_RANDOM
699: This is a catchall mode class for modes which don't fit into the above
700: classes. Currently @code{VOIDmode} and @code{BLKmode} are in
701: @code{MODE_RANDOM}.
702: @end table
703:
704: Here are some C macros that relate to machine modes:
705:
706: @table @code
707: @findex GET_MODE
708: @item GET_MODE (@var{x})
709: Returns the machine mode of the RTX @var{x}.
710:
711: @findex PUT_MODE
712: @item PUT_MODE (@var{x}, @var{newmode})
713: Alters the machine mode of the RTX @var{x} to be @var{newmode}.
714:
715: @findex NUM_MACHINE_MODES
716: @item NUM_MACHINE_MODES
717: Stands for the number of machine modes available on the target
718: machine. This is one greater than the largest numeric value of any
719: machine mode.
720:
721: @findex GET_MODE_NAME
722: @item GET_MODE_NAME (@var{m})
723: Returns the name of mode @var{m} as a string.
724:
725: @findex GET_MODE_CLASS
726: @item GET_MODE_CLASS (@var{m})
727: Returns the mode class of mode @var{m}.
728:
729: @findex GET_MODE_WIDER_MODE
730: @item GET_MODE_WIDER_MODE (@var{m})
731: Returns the next wider natural mode. E.g.,
732: @code{GET_WIDER_MODE(QImode)} returns @code{HImode}.
733:
734: @findex GET_MODE_SIZE
735: @item GET_MODE_SIZE (@var{m})
736: Returns the size in bytes of a datum of mode @var{m}.
737:
738: @findex GET_MODE_BITSIZE
739: @item GET_MODE_BITSIZE (@var{m})
740: Returns the size in bits of a datum of mode @var{m}.
741:
742: @findex GET_MODE_MASK
743: @item GET_MODE_MASK (@var{m})
744: Returns a bitmask containing 1 for all bits in a word that fit within
745: mode @var{m}. This macro can only be used for modes whose bitsize is
746: less than or equal to @code{HOST_BITS_PER_INT}.
747:
748: @findex GET_MODE_ALIGNMENT
749: @item GET_MODE_ALIGNMENT (@var{m)})
750: Return the required alignment, in bits, for an object of mode @var{m}.
751:
752: @findex GET_MODE_UNIT_SIZE
753: @item GET_MODE_UNIT_SIZE (@var{m})
754: Returns the size in bytes of the subunits of a datum of mode @var{m}.
755: This is the same as @code{GET_MODE_SIZE} except in the case of complex
756: modes. For them, the unit size is the size of the real or imaginary
757: part.
758:
759: @findex GET_MODE_NUNITS
760: @item GET_MODE_NUNITS (@var{m})
761: Returns the number of units contained in a mode, i.e.,
762: @code{GET_MODE_SIZE} divided by @code{GET_MODE_UNIT_SIZE}.
763:
764: @findex GET_CLASS_NARROWEST_MODE
765: @item GET_CLASS_NARROWEST_MODE (@var{c})
766: Returns the narrowest mode in mode class @var{c}.
767: @end table
768:
769: @findex byte_mode
770: @findex word_mode
771: The global variables @code{byte_mode} and @code{word_mode} contain
772: modes whose classes are @code{MODE_INT} and whose bitsizes are
773: @code{BITS_PER_UNIT} or @code{BITS_PER_WORD}, respectively. On 32-bit
774: machines, these are @code{QImode} and @code{SImode}, respectively.
775:
776: @node Constants, Regs and Memory, Machine Modes, RTL
777: @section Constant Expression Types
778: @cindex RTL constants
779: @cindex RTL constant expression types
780:
781: The simplest RTL expressions are those that represent constant values.
782:
783: @table @code
784: @findex const_int
785: @item (const_int @var{i})
786: This type of expression represents the integer value @var{i}. @var{i}
787: is customarily accessed with the macro @code{INTVAL} as in
788: @code{INTVAL (@var{exp})}, which is equivalent to @code{XINT (@var{exp}, 0)}.
789:
790: Keep in mind that the result of @code{INTVAL} is an integer on the host
791: machine. If the host machine has more bits in an @code{int} than the
792: target machine has in the mode in which the constant will be used, then
793: some of the bits you get from @code{INTVAL} will be superfluous. In
794: many cases, for proper results, you must carefully disregard the values
795: of those bits.
796:
797: @findex const0_rtx
798: @findex const1_rtx
799: @findex const2_rtx
800: @findex constm1_rtx
801: There is only one expression object for the integer value zero; it is
802: the value of the variable @code{const0_rtx}. Likewise, the only
803: expression for integer value one is found in @code{const1_rtx}, the only
804: expression for integer value two is found in @code{const2_rtx}, and the
805: only expression for integer value negative one is found in
806: @code{constm1_rtx}. Any attempt to create an expression of code
807: @code{const_int} and value zero, one, two or negative one will return
808: @code{const0_rtx}, @code{const1_rtx}, @code{const2_rtx} or
809: @code{constm1_rtx} as appropriate.@refill
810:
811: @findex const_true_rtx
812: Similarly, there is only one object for the integer whose value is
813: @code{STORE_FLAG_VALUE}. It is found in @code{const_true_rtx}. If
814: @code{STORE_FLAG_VALUE} is one, @code{const_true_rtx} and
815: @code{const1_rtx} will point to the same object. If
816: @code{STORE_FLAG_VALUE} is -1, @code{const_true_rtx} and
817: @code{constm1_rtx} will point to the same object.@refill
818:
819: @findex const_double
820: @item (const_double:@var{m} @var{addr} @var{i0} @var{i1} @dots{})
821: Represents either a floating-point constant of mode @var{m} or an
822: integer constant that is too large to fit into @code{HOST_BITS_PER_INT}
823: bits but small enough to fit within twice that number of bits (GNU CC
824: does not provide a mechanism to represent even larger constants). In
825: the latter case, @var{m} will be @code{VOIDmode}.
826:
827: @findex CONST_DOUBLE_MEM
828: @findex CONST_DOUBLE_CHAIN
829: @var{addr} is used to contain the @code{mem} expression that corresponds
830: to the location in memory that at which the constant can be found. If
831: it has not been allocated a memory location, but is on the chain of all
832: @code{const_double} expressions in this compilation (maintained using an
833: undisplayed field), @var{addr} contains @code{const0_rtx}. If it is not
834: on the chain, @var{addr} contains @code{cc0_rtx}. @var{addr} is
835: customarily accessed with the macro @code{CONST_DOUBLE_MEM} and the
836: chain field via @code{CONST_DOUBLE_CHAIN}.@refill
837:
838: @findex CONST_DOUBLE_LOW
1.1.1.2 ! root 839: If @var{m} is @code{VOIDmode}, the bits of the value are stored in
1.1 root 840: @var{i0} and @var{i1}. @var{i0} is customarily accessed with the macro
841: @code{CONST_DOUBLE_LOW} and @var{i1} with @code{CONST_DOUBLE_HIGH}.
842:
843: If the constant is floating point (either single or double precision),
844: then the number of integers used to store the value depends on the size
845: of @code{REAL_VALUE_TYPE} (@pxref{Cross-compilation}). The integers
846: represent a @code{double}. To convert them to a @code{double}, do
847:
848: @example
849: union real_extract u;
850: bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u);
851: @end example
852:
853: @noindent
854: and then refer to @code{u.d}.
855:
856: @findex CONST0_RTX
857: @findex CONST1_RTX
858: @findex CONST2_RTX
859: The macro @code{CONST0_RTX (@var{mode})} refers to an expression with
860: value 0 in mode @var{mode}. If mode @var{mode} is of mode class
861: @code{MODE_INT}, it returns @code{const0_rtx}. Otherwise, it returns a
862: @code{CONST_DOUBLE} expression in mode @var{mode}. Similarly, the macro
863: @code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in
864: mode @var{mode} and similarly for @code{CONST2_RTX}.
865:
866: @findex const_string
867: @item (const_string @var{str})
868: Represents a constant string with value @var{str}. Currently this is
869: used only for insn attributes (@pxref{Insn Attributes}) since constant
870: strings in C are placed in memory.
871:
872: @findex symbol_ref
1.1.1.2 ! root 873: @item (symbol_ref:@var{mode} @var{symbol})
1.1 root 874: Represents the value of an assembler label for data. @var{symbol} is
875: a string that describes the name of the assembler label. If it starts
876: with a @samp{*}, the label is the rest of @var{symbol} not including
877: the @samp{*}. Otherwise, the label is @var{symbol}, usually prefixed
878: with @samp{_}.
879:
1.1.1.2 ! root 880: The @code{symbol_ref} contains a mode, which is usually @code{Pmode}.
! 881: Usually that is the only mode for which a symbol is directly valid.
! 882:
1.1 root 883: @findex label_ref
884: @item (label_ref @var{label})
885: Represents the value of an assembler label for code. It contains one
886: operand, an expression, which must be a @code{code_label} that appears
887: in the instruction sequence to identify the place where the label
888: should go.
889:
890: The reason for using a distinct expression type for code label
891: references is so that jump optimization can distinguish them.
892:
893: @item (const:@var{m} @var{exp})
894: Represents a constant that is the result of an assembly-time
895: arithmetic computation. The operand, @var{exp}, is an expression that
896: contains only constants (@code{const_int}, @code{symbol_ref} and
897: @code{label_ref} expressions) combined with @code{plus} and
898: @code{minus}. However, not all combinations are valid, since the
899: assembler cannot do arbitrary arithmetic on relocatable symbols.
900:
901: @var{m} should be @code{Pmode}.
902:
903: @findex high
904: @item (high:@var{m} @var{exp})
905: Represents the high-order bits of @var{exp}, usually a
906: @code{symbol_ref}. The number of bits is machine-dependent and is
907: normally the number of bits specified in an instruction that initializes
908: the high order bits of a register. It is used with @code{lo_sum} to
909: represent the typical two-instruction sequence used in RISC machines to
910: reference a global memory location.
911:
912: @var{m} should be @code{Pmode}.
913: @end table
914:
915: @node Regs and Memory, Arithmetic, Constants, RTL
916: @section Registers and Memory
917: @cindex RTL register expressions
918: @cindex RTL memory expressions
919:
920: Here are the RTL expression types for describing access to machine
921: registers and to main memory.
922:
923: @table @code
924: @findex reg
925: @cindex hard registers
926: @cindex pseudo registers
927: @item (reg:@var{m} @var{n})
928: For small values of the integer @var{n} (less than
929: @code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine
930: register number @var{n}: a @dfn{hard register}. For larger values of
931: @var{n}, it stands for a temporary value or @dfn{pseudo register}.
932: The compiler's strategy is to generate code assuming an unlimited
933: number of such pseudo registers, and later convert them into hard
934: registers or into memory references.
935:
936: @var{m} is the machine mode of the reference. It is necessary because
937: machines can generally refer to each register in more than one mode.
938: For example, a register may contain a full word but there may be
939: instructions to refer to it as a half word or as a single byte, as
940: well as instructions to refer to it as a floating point number of
941: various precisions.
942:
943: Even for a register that the machine can access in only one mode,
944: the mode must always be specified.
945:
946: The symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine
947: description, since the number of hard registers on the machine is an
948: invariant characteristic of the machine. Note, however, that not
949: all of the machine registers must be general registers. All the
950: machine registers that can be used for storage of data are given
951: hard register numbers, even those that can be used only in certain
952: instructions or can hold only certain types of data.
953:
954: A hard register may be accessed in various modes throughout one
955: function, but each pseudo register is given a natural mode
956: and is accessed only in that mode. When it is necessary to describe
957: an access to a pseudo register using a nonnatural mode, a @code{subreg}
958: expression is used.
959:
960: A @code{reg} expression with a machine mode that specifies more than
961: one word of data may actually stand for several consecutive registers.
962: If in addition the register number specifies a hardware register, then
963: it actually represents several consecutive hardware registers starting
964: with the specified one.
965:
966: Each pseudo register number used in a function's RTL code is
967: represented by a unique @code{reg} expression.
968:
969: @findex FIRST_VIRTUAL_REGISTER
970: @findex LAST_VIRTUAL_REGISTER
971: Some pseudo register numbers, those within the range of
972: @code{FIRST_VIRTUAL_REGISTER} to @code{LAST_VIRTUAL_REGISTER} only
973: appear during the RTL generation phase and are eliminated before the
974: optimization phases. These represent locations in the stack frame that
975: cannot be determined until RTL generation for the function has been
976: completed. The following virtual register numbers are defined:
977:
978: @table @code
979: @findex VIRTUAL_INCOMING_ARGS_REGNUM
980: @item VIRTUAL_INCOMING_ARGS_REGNUM
981: This points to the first word of the incoming arguments passed on the
982: stack. Normally these arguments are placed there by the caller, but the
983: callee may have pushed some arguments that were previously passed in
984: registers.
985:
986: @cindex @code{FIRST_PARM_OFFSET} and virtual registers
987: @cindex @code{ARG_POINTER_REGNUM} and virtual registers
988: When RTL generation is complete, this virtual register is replaced
989: by the sum of the register given by @code{ARG_POINTER_REGNUM} and the
990: value of @code{FIRST_PARM_OFFSET}.
991:
992: @findex VIRTUAL_STACK_VARS_REGNUM
993: @cindex @code{FRAME_GROWS_DOWNWARD} and virtual registers
994: @item VIRTUAL_STACK_VARS_REGNUM
995: If @code{FRAME_GROWS_DOWNWARDS} is defined, this points to immediately
996: above the first variable on the stack. Otherwise, it points to the
997: first variable on the stack.
998:
999: @cindex @code{STARTING_FRAME_OFFSET} and virtual registers
1000: @cindex @code{FRAME_POINTER_REGNUM} and virtual registers
1001: It is replaced with the sum of the register given by
1002: @code{FRAME_POINTER_REGNUM} and the value @code{STARTING_FRAME_OFFSET}.
1003:
1004: @findex VIRTUAL_STACK_DYNAMIC_REGNUM
1005: @item VIRTUAL_STACK_DYNAMIC_REGNUM
1006: This points to the location of dynamically allocated memory on the stack
1007: immediately after the stack pointer has been adjusted by the amount of
1008: memory desired.
1009:
1010: @cindex @code{STACK_DYNAMIC_OFFSET} and virtual registers
1011: @cindex @code{STACK_POINTER_REGNUM} and virtual registers
1012: It is replaced by the sum of the register given by
1013: @code{STACK_POINTER_REGNUM} and the value @code{STACK_DYNAMIC_OFFSET}.
1014:
1015: @findex VIRTUAL_OUTGOING_ARGS_REGNUM
1016: @item VIRTUAL_OUTGOING_ARGS_REGNUM
1017: This points to the location in the stack at which outgoing arguments
1018: should be written when the stack is pre-pushed (arguments pushed using
1019: push insns should always use @code{STACK_POINTER_REGNUM}).
1020:
1021: @cindex @code{STACK_POINTER_OFFSET} and virtual registers
1022: It is replaced by the sum of the register given by
1023: @code{STACK_POINTER_REGNUM} and the value @code{STACK_POINTER_OFFSET}.
1024: @end table
1025:
1026: @findex subreg
1027: @item (subreg:@var{m} @var{reg} @var{wordnum})
1028: @code{subreg} expressions are used to refer to a register in a machine
1029: mode other than its natural one, or to refer to one register of
1030: a multi-word @code{reg} that actually refers to several registers.
1031:
1032: Each pseudo-register has a natural mode. If it is necessary to
1033: operate on it in a different mode---for example, to perform a fullword
1034: move instruction on a pseudo-register that contains a single
1035: byte---the pseudo-register must be enclosed in a @code{subreg}. In
1036: such a case, @var{wordnum} is zero.
1037:
1038: Usually @var{m} is at least as narrow as the mode of @var{reg}, in which
1039: case it is restricting consideration to only the bits of @var{reg} that
1040: are in @var{m}. However, sometimes @var{m} is wider than the mode of
1041: @var{reg}. These @code{subreg} expressions are often called
1042: @dfn{paradoxical}. They are used in cases where we want to refer to an
1043: object in a wider mode but do not care what value the additional bits
1044: have. The reload pass ensures that paradoxical references are only
1045: made to hard registers.
1046:
1047: The other use of @code{subreg} is to extract the individual registers of
1048: a multi-register value. Machine modes such as @code{DImode} and
1049: @code{TImode} can indicate values longer than a word, values which
1050: usually require two or more consecutive registers. To access one of the
1051: registers, use a @code{subreg} with mode @code{SImode} and a
1052: @var{wordnum} that says which register.
1053:
1054: @cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg}
1055: The compilation parameter @code{WORDS_BIG_ENDIAN}, if set to 1, says
1056: that word number zero is the most significant part; otherwise, it is
1057: the least significant part.
1058:
1059: @cindex combiner pass
1060: @cindex reload pass
1061: @cindex @code{subreg}, special reload handling
1062: Between the combiner pass and the reload pass, it is possible to have a
1063: paradoxical @code{subreg} which contains a @code{mem} instead of a
1064: @code{reg} as its first operand. After the reload pass, it is also
1065: possible to have a non-paradoxical @code{subreg} which contains a
1066: @code{mem}; this usually occurs when the @code{mem} is a stack slot
1067: which replaced a pseudo register.
1068:
1069: Note that it is not valid to access a @code{DFmode} value in @code{SFmode}
1070: using a @code{subreg}. On some machines the most significant part of a
1071: @code{DFmode} value does not have the same format as a single-precision
1072: floating value.
1073:
1074: It is also not valid to access a single word of a multi-word value in a
1075: hard register when less registers can hold the value than would be
1076: expected from its size. For example, some 32-bit machines have
1077: floating-point registers that can hold an entire @code{DFmode} value.
1078: If register 10 were such a register @code{(subreg:SI (reg:DF 10) 1)}
1079: would be invalid because there is no way to convert that reference to
1080: a single machine register. The reload pass prevents @code{subreg}
1081: expressions such as these from being formed.
1082:
1083: @findex SUBREG_REG
1084: @findex SUBREG_WORD
1085: The first operand of a @code{subreg} expression is customarily accessed
1086: with the @code{SUBREG_REG} macro and the second operand is customarily
1087: accessed with the @code{SUBREG_WORD} macro.
1088:
1089: @findex scratch
1090: @cindex scratch operands
1091: @item (scratch:@var{m})
1092: This represents a scratch register that will be required for the
1093: execution of a single instruction and not used subsequently. It is
1094: converted into a @code{reg} by either the local register allocator or
1095: the reload pass.
1096:
1097: @code{scratch} is usually present inside a @code{clobber} operation
1098: (@pxref{Side Effects}).
1099:
1100: @findex cc0
1101: @cindex condition code register
1102: @item (cc0)
1103: This refers to the machine's condition code register. It has no
1104: operands and may not have a machine mode. There are two ways to use it:
1105:
1106: @itemize @bullet
1107: @item
1108: To stand for a complete set of condition code flags. This is best on
1109: most machines, where each comparison sets the entire series of flags.
1110:
1111: With this technique, @code{(cc0)} may be validly used in only two
1112: contexts: as the destination of an assignment (in test and compare
1113: instructions) and in comparison operators comparing against zero
1114: (@code{const_int} with value zero; that is to say, @code{const0_rtx}).
1115:
1116: @item
1117: To stand for a single flag that is the result of a single condition.
1118: This is useful on machines that have only a single flag bit, and in
1119: which comparison instructions must specify the condition to test.
1120:
1121: With this technique, @code{(cc0)} may be validly used in only two
1122: contexts: as the destination of an assignment (in test and compare
1123: instructions) where the source is a comparison operator, and as the
1124: first operand of @code{if_then_else} (in a conditional branch).
1125: @end itemize
1126:
1127: @findex cc0_rtx
1128: There is only one expression object of code @code{cc0}; it is the
1129: value of the variable @code{cc0_rtx}. Any attempt to create an
1130: expression of code @code{cc0} will return @code{cc0_rtx}.
1131:
1132: Instructions can set the condition code implicitly. On many machines,
1133: nearly all instructions set the condition code based on the value that
1134: they compute or store. It is not necessary to record these actions
1135: explicitly in the RTL because the machine description includes a
1136: prescription for recognizing the instructions that do so (by means of
1137: the macro @code{NOTICE_UPDATE_CC}). @xref{Condition Code}. Only
1138: instructions whose sole purpose is to set the condition code, and
1139: instructions that use the condition code, need mention @code{(cc0)}.
1140:
1141: On some machines, the condition code register is given a register number
1142: and a @code{reg} is used instead of @code{(cc0)}. This is usually the
1143: preferable approach if only a small subset of instructions modify the
1144: condition code. Other machines store condition codes in general
1145: registers; in such cases a pseudo register should be used.
1146:
1147: Some machines, such as the Sparc and RS/6000, have two sets of
1148: arithmetic instructions, one that sets and one that does not set the
1149: condition code. This is best handled by normally generating the
1150: instruction that does not set the condition code, and making a pattern
1151: that both performs the arithmetic and sets the condition code register
1152: (which would not be @code{(cc0)} in this case). For examples, search
1153: for @samp{addcc} and @samp{andcc} in @file{sparc.md}.
1154:
1155: @findex pc
1156: @item (pc)
1157: @cindex program counter
1158: This represents the machine's program counter. It has no operands and
1159: may not have a machine mode. @code{(pc)} may be validly used only in
1160: certain specific contexts in jump instructions.
1161:
1162: @findex pc_rtx
1163: There is only one expression object of code @code{pc}; it is the value
1164: of the variable @code{pc_rtx}. Any attempt to create an expression of
1165: code @code{pc} will return @code{pc_rtx}.
1166:
1167: All instructions that do not jump alter the program counter implicitly
1168: by incrementing it, but there is no need to mention this in the RTL.
1169:
1170: @findex mem
1171: @item (mem:@var{m} @var{addr})
1172: This RTX represents a reference to main memory at an address
1173: represented by the expression @var{addr}. @var{m} specifies how large
1174: a unit of memory is accessed.
1175: @end table
1176:
1177: @node Arithmetic, Comparisons, Regs and Memory, RTL
1178: @section RTL Expressions for Arithmetic
1179: @cindex arithmetic, in RTL
1180: @cindex math, in RTL
1181: @cindex RTL expressions for arithmetic
1182:
1183: Unless otherwise specified, all the operands of arithmetic expressions
1184: must be valid for mode @var{m}. An operand is valid for mode @var{m}
1185: if it has mode @var{m}, or if it is a @code{const_int} or
1186: @code{const_double} and @var{m} is a mode of class @code{MODE_INT}.
1187:
1188: For commutative binary operations, constants should be placed in the
1189: second operand.
1190:
1191: @table @code
1192: @findex plus
1193: @cindex RTL addition
1194: @cindex RTL sum
1195: @item (plus:@var{m} @var{x} @var{y})
1196: Represents the sum of the values represented by @var{x} and @var{y}
1197: carried out in machine mode @var{m}.
1198:
1199: @findex lo_sum
1200: @item (lo_sum:@var{m} @var{x} @var{y})
1201: Like @code{plus}, except that it represents that sum of @var{x} and the
1202: low-order bits of @var{y}. The number of low order bits is
1203: machine-dependent but is normally the number of bits in a @code{Pmode}
1204: item minus the number of bits set by the @code{high} code
1205: (@pxref{Constants}).
1206:
1207: @var{m} should be @code{Pmode}.
1208:
1209: @findex minus
1210: @cindex RTL subtraction
1211: @cindex RTL difference
1212: @item (minus:@var{m} @var{x} @var{y})
1213: Like @code{plus} but represents subtraction.
1214:
1215: @findex compare
1216: @cindex RTL comparison
1217: @item (compare:@var{m} @var{x} @var{y})
1218: Represents the result of subtracting @var{y} from @var{x} for purposes
1219: of comparison. The result is computed without overflow, as if with
1220: infinite precision.
1221:
1222: Of course, machines can't really subtract with infinite precision.
1223: However, they can pretend to do so when only the sign of the
1224: result will be used, which is the case when the result is stored
1225: in the condition code. And that is the only way this kind of expression
1226: may validly be used: as a value to be stored in the condition codes.
1227:
1228: The mode @var{m} is not related to the modes of @var{x} and @var{y},
1229: but instead is the mode of the condition code value. If @code{(cc0)}
1230: is used, it is @code{VOIDmode}. Otherwise it is some mode in class
1231: @code{MODE_CC}, often @code{CCmode}. @xref{Condition Code}.
1232:
1233: Normally, @var{x} and @var{y} must have the same mode. Otherwise,
1234: @code{compare} is valid only if the mode of @var{x} is in class
1235: @code{MODE_INT} and @var{y} is a @code{const_int} or
1236: @code{const_double} with mode @code{VOIDmode}. The mode of @var{x}
1237: determines what mode the comparison is to be done in; thus it must not
1238: be @code{VOIDmode}.
1239:
1240: If one of the operands is a constant, it should be placed in the
1241: second operand and the comparison code adjusted as appropriate.
1242:
1243: A @code{compare} specifying two @code{VOIDmode} constants is not valid
1244: since there is no way to know in what mode the comparison is to be
1245: performed; the comparison must either be folded during the compilation
1246: or the first operand must be loaded into a register while its mode is
1247: still known.
1248:
1249: @findex neg
1250: @item (neg:@var{m} @var{x})
1251: Represents the negation (subtraction from zero) of the value represented
1252: by @var{x}, carried out in mode @var{m}.
1253:
1254: @findex mult
1255: @cindex multiplication
1256: @cindex product
1257: @item (mult:@var{m} @var{x} @var{y})
1258: Represents the signed product of the values represented by @var{x} and
1259: @var{y} carried out in machine mode @var{m}.
1260:
1261: Some machines support a multiplication that generates a product wider
1262: than the operands. Write the pattern for this as
1263:
1264: @example
1265: (mult:@var{m} (sign_extend:@var{m} @var{x}) (sign_extend:@var{m} @var{y}))
1266: @end example
1267:
1268: where @var{m} is wider than the modes of @var{x} and @var{y}, which need
1269: not be the same.
1270:
1271: Write patterns for unsigned widening multiplication similarly using
1272: @code{zero_extend}.
1273:
1274: @findex div
1275: @cindex division
1276: @cindex signed division
1277: @cindex quotient
1278: @item (div:@var{m} @var{x} @var{y})
1279: Represents the quotient in signed division of @var{x} by @var{y},
1280: carried out in machine mode @var{m}. If @var{m} is a floating point
1281: mode, it represents the exact quotient; otherwise, the integerized
1282: quotient.
1283:
1284: Some machines have division instructions in which the operands and
1285: quotient widths are not all the same; you should represent
1286: such instructions using @code{truncate} and @code{sign_extend} as in,
1287:
1288: @example
1289: (truncate:@var{m1} (div:@var{m2} @var{x} (sign_extend:@var{m2} @var{y})))
1290: @end example
1291:
1292: @findex udiv
1293: @cindex unsigned division
1294: @cindex division
1295: @item (udiv:@var{m} @var{x} @var{y})
1296: Like @code{div} but represents unsigned division.
1297:
1298: @findex mod
1299: @findex umod
1300: @cindex remainder
1301: @cindex division
1302: @item (mod:@var{m} @var{x} @var{y})
1303: @itemx (umod:@var{m} @var{x} @var{y})
1304: Like @code{div} and @code{udiv} but represent the remainder instead of
1305: the quotient.
1306:
1307: @findex smin
1308: @findex smax
1309: @cindex signed minimum
1310: @cindex signed maximum
1311: @item (smin:@var{m} @var{x} @var{y})
1312: @itemx (smax:@var{m} @var{x} @var{y})
1313: Represents the smaller (for @code{smin}) or larger (for @code{smax}) of
1314: @var{x} and @var{y}, interpreted as signed integers in mode @var{m}.
1315:
1316: @findex umin
1317: @findex umax
1318: @cindex unsigned minimum and maximum
1319: @item (umin:@var{m} @var{x} @var{y})
1320: @itemx (umax:@var{m} @var{x} @var{y})
1321: Like @code{smin} and @code{smax}, but the values are interpreted as unsigned
1322: integers.
1323:
1324: @findex not
1325: @cindex complement, bitwise
1326: @cindex bitwise complement
1327: @item (not:@var{m} @var{x})
1328: Represents the bitwise complement of the value represented by @var{x},
1329: carried out in mode @var{m}, which must be a fixed-point machine mode.
1330:
1331: @findex and
1332: @cindex logical-and, bitwise
1333: @cindex bitwise logical-and
1334: @item (and:@var{m} @var{x} @var{y})
1335: Represents the bitwise logical-and of the values represented by
1336: @var{x} and @var{y}, carried out in machine mode @var{m}, which must be
1337: a fixed-point machine mode.
1338:
1339: @findex ior
1340: @cindex inclusive-or, bitwise
1341: @cindex bitwise inclusive-or
1342: @item (ior:@var{m} @var{x} @var{y})
1343: Represents the bitwise inclusive-or of the values represented by @var{x}
1344: and @var{y}, carried out in machine mode @var{m}, which must be a
1345: fixed-point mode.
1346:
1347: @findex xor
1348: @cindex exclusive-or, bitwise
1349: @cindex bitwise exclusive-or
1350: @item (xor:@var{m} @var{x} @var{y})
1351: Represents the bitwise exclusive-or of the values represented by @var{x}
1352: and @var{y}, carried out in machine mode @var{m}, which must be a
1353: fixed-point mode.
1354:
1355: @findex ashift
1356: @cindex left shift
1357: @cindex shift
1358: @cindex arithmetic shift
1359: @item (ashift:@var{m} @var{x} @var{c})
1360: Represents the result of arithmetically shifting @var{x} left by @var{c}
1361: places. @var{x} have mode @var{m}, a fixed-point machine mode. @var{c}
1362: be a fixed-point mode or be a constant with mode @code{VOIDmode}; which
1363: mode is determined by the mode called for in the machine description
1364: entry for the left-shift instruction. For example, on the Vax, the mode
1365: of @var{c} is @code{QImode} regardless of @var{m}.
1366:
1367: @findex lshift
1368: @cindex left shift
1369: @cindex logical shift
1370: @item (lshift:@var{m} @var{x} @var{c})
1.1.1.2 ! root 1371: Like @code{ashift} but for logical left shift. @code{ashift} and
1.1 root 1372: @code{lshift} are identical operations; we customarily use @code{ashift}
1373: for both.
1374:
1375: @findex lshiftrt
1376: @cindex right shift
1377: @findex ashiftrt
1378: @item (lshiftrt:@var{m} @var{x} @var{c})
1379: @itemx (ashiftrt:@var{m} @var{x} @var{c})
1380: Like @code{lshift} and @code{ashift} but for right shift. Unlike
1381: the case for left shift, these two operations are distinct.
1382:
1383: @findex rotate
1384: @cindex rotate
1385: @cindex left rotate
1386: @findex rotatert
1387: @cindex right rotate
1388: @item (rotate:@var{m} @var{x} @var{c})
1389: @itemx (rotatert:@var{m} @var{x} @var{c})
1390: Similar but represent left and right rotate. If @var{c} is a constant,
1391: use @code{rotate}.
1392:
1393: @findex abs
1394: @cindex absolute value
1395: @item (abs:@var{m} @var{x})
1396: Represents the absolute value of @var{x}, computed in mode @var{m}.
1397:
1398: @findex sqrt
1399: @cindex square root
1400: @item (sqrt:@var{m} @var{x})
1401: Represents the square root of @var{x}, computed in mode @var{m}.
1402: Most often @var{m} will be a floating point mode.
1403:
1404: @findex ffs
1405: @item (ffs:@var{m} @var{x})
1406: Represents one plus the index of the least significant 1-bit in
1407: @var{x}, represented as an integer of mode @var{m}. (The value is
1408: zero if @var{x} is zero.) The mode of @var{x} need not be @var{m};
1409: depending on the target machine, various mode combinations may be
1410: valid.
1411: @end table
1412:
1413: @node Comparisons, Bit Fields, Arithmetic, RTL
1414: @section Comparison Operations
1415: @cindex RTL comparison operations
1416:
1417: Comparison operators test a relation on two operands and are considered
1418: to represent a machine-dependent nonzero value described by, but not
1419: necessarily equal to, @code{STORE_FLAG_VALUE} (@pxref{Misc})
1420: if the relation holds, or zero if it does not. The mode of the
1421: comparison operation is independent of the mode of the data being
1422: compared. If the comparison operation is being tested (e.g., the first
1423: operand of an @code{if_then_else}), the mode must be @code{VOIDmode}.
1424: If the comparison operation is producing data to be stored in some
1425: variable, the mode must be in class @code{MODE_INT}. All comparison
1426: operations producing data must use the same mode, which is
1427: machine-specific.
1428:
1429: @cindex condition codes
1430: There are two ways that comparison operations may be used. The
1431: comparison operators may be used to compare the condition codes
1432: @code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}. Such
1433: a construct actually refers to the result of the preceding instruction
1434: in which the condition codes were set. The instructing setting the
1435: condition code must be adjacent to the instruction using the condition
1436: code; only @code{note} insns may separate them.
1437:
1438: Alternatively, a comparison operation may directly compare two data
1439: objects. The mode of the comparison is determined by the operands; they
1440: must both be valid for a common machine mode. A comparison with both
1441: operands constant would be invalid as the machine mode could not be
1442: deduced from it, but such a comparison should never exist in RTL due to
1443: constant folding.
1444:
1445: In the example above, if @code{(cc0)} were last set to
1446: @code{(compare @var{x} @var{y})}, the comparison operation is
1447: identical to @code{(eq @var{x} @var{y})}. Usually only one style
1448: of comparisons is supported on a particular machine, but the combine
1449: pass will try to merge the operations to produce the @code{eq} shown
1450: in case it exists in the context of the particular insn involved.
1451:
1452: Inequality comparisons come in two flavors, signed and unsigned. Thus,
1453: there are distinct expression codes @code{gt} and @code{gtu} for signed and
1454: unsigned greater-than. These can produce different results for the same
1455: pair of integer values: for example, 1 is signed greater-than -1 but not
1456: unsigned greater-than, because -1 when regarded as unsigned is actually
1457: @code{0xffffffff} which is greater than 1.
1458:
1459: The signed comparisons are also used for floating point values. Floating
1460: point comparisons are distinguished by the machine modes of the operands.
1461:
1462: @table @code
1463: @findex eq
1464: @cindex equal
1465: @item (eq:@var{m} @var{x} @var{y})
1466: 1 if the values represented by @var{x} and @var{y} are equal,
1467: otherwise 0.
1468:
1469: @findex ne
1470: @cindex not equal
1471: @item (ne:@var{m} @var{x} @var{y})
1472: 1 if the values represented by @var{x} and @var{y} are not equal,
1473: otherwise 0.
1474:
1475: @findex gt
1476: @cindex greater than
1477: @item (gt:@var{m} @var{x} @var{y})
1478: 1 if the @var{x} is greater than @var{y}. If they are fixed-point,
1479: the comparison is done in a signed sense.
1480:
1481: @findex gtu
1482: @cindex greater than
1483: @cindex unsigned greater than
1484: @item (gtu:@var{m} @var{x} @var{y})
1485: Like @code{gt} but does unsigned comparison, on fixed-point numbers only.
1486:
1487: @findex lt
1488: @cindex less than
1489: @findex ltu
1490: @cindex unsigned less than
1491: @item (lt:@var{m} @var{x} @var{y})
1492: @itemx (ltu:@var{m} @var{x} @var{y})
1493: Like @code{gt} and @code{gtu} but test for ``less than''.
1494:
1495: @findex ge
1496: @cindex greater than
1497: @findex geu
1498: @cindex unsigned greater than
1499: @item (ge:@var{m} @var{x} @var{y})
1500: @itemx (geu:@var{m} @var{x} @var{y})
1501: Like @code{gt} and @code{gtu} but test for ``greater than or equal''.
1502:
1503: @findex le
1504: @cindex less than or equal
1505: @findex leu
1506: @cindex unsigned less than
1507: @item (le:@var{m} @var{x} @var{y})
1508: @itemx (leu:@var{m} @var{x} @var{y})
1509: Like @code{gt} and @code{gtu} but test for ``less than or equal''.
1510:
1511: @findex if_then_else
1512: @item (if_then_else @var{cond} @var{then} @var{else})
1513: This is not a comparison operation but is listed here because it is
1514: always used in conjunction with a comparison operation. To be
1515: precise, @var{cond} is a comparison expression. This expression
1516: represents a choice, according to @var{cond}, between the value
1517: represented by @var{then} and the one represented by @var{else}.
1518:
1519: On most machines, @code{if_then_else} expressions are valid only
1520: to express conditional jumps.
1521:
1522: @findex cond
1523: @item (cond [@var{test1} @var{value1} @var{test2} @var{value2} @dots{}] @var{default})
1524: Similar to @code{if_then_else}, but more general. Each of @var{test1},
1525: @var{test2}, @dots{} is performed in turn. The result of this expression is
1526: the @var{value} corresponding to the first non-zero test, or @var{default} if
1527: none of the tests are non-zero expressions.
1528:
1529: This is currently not valid for instruction patterns and is supported only
1530: for insn attributes. @xref{Insn Attributes}.
1531: @end table
1532:
1533: @node Bit Fields, Conversions, Comparisons, RTL
1534: @section Bit Fields
1535: @cindex bit fields
1536:
1537: Special expression codes exist to represent bit-field instructions.
1538: These types of expressions are lvalues in RTL; they may appear
1539: on the left side of an assignment, indicating insertion of a value
1540: into the specified bit field.
1541:
1542: @table @code
1543: @findex sign_extract
1544: @cindex @code{BITS_BIG_ENDIAN}, effect on @code{sign_extract}
1545: @item (sign_extract:@var{m} @var{loc} @var{size} @var{pos})
1546: This represents a reference to a sign-extended bit field contained or
1547: starting in @var{loc} (a memory or register reference). The bit field
1548: is @var{size} bits wide and starts at bit @var{pos}. The compilation
1549: option @code{BITS_BIG_ENDIAN} says which end of the memory unit
1550: @var{pos} counts from.
1551:
1552: If @var{loc} is in memory, its mode must be a single-byte integer mode.
1553: If @var{loc} is in a register, the mode to use is specified by the
1554: operand of the @code{insv} or @code{extv} pattern
1555: (@pxref{Standard Names}) and is usually a full-word integer mode.
1556:
1557: The mode of @var{pos} is machine-specific and is also specified
1558: in the @code{insv} or @code{extv} pattern.
1559:
1560: The mode @var{m} is the same as the mode that would be used for
1561: @var{loc} if it were a register.
1562:
1563: @findex zero_extract
1564: @item (zero_extract:@var{m} @var{loc} @var{size} @var{pos})
1565: Like @code{sign_extract} but refers to an unsigned or zero-extended
1566: bit field. The same sequence of bits are extracted, but they
1567: are filled to an entire word with zeros instead of by sign-extension.
1568: @end table
1569:
1570: @node Conversions, RTL Declarations, Bit Fields, RTL
1571: @section Conversions
1572: @cindex conversions
1573: @cindex machine mode conversions
1574:
1575: All conversions between machine modes must be represented by
1576: explicit conversion operations. For example, an expression
1577: which is the sum of a byte and a full word cannot be written as
1578: @code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @code{plus}
1579: operation requires two operands of the same machine mode.
1580: Therefore, the byte-sized operand is enclosed in a conversion
1581: operation, as in
1582:
1583: @example
1584: (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
1585: @end example
1586:
1587: The conversion operation is not a mere placeholder, because there
1588: may be more than one way of converting from a given starting mode
1589: to the desired final mode. The conversion operation code says how
1590: to do it.
1591:
1592: For all conversion operations, @var{x} must not be @code{VOIDmode}
1593: because the mode in which to do the conversion would not be known.
1594: The conversion must either be done at compile-time or @var{x}
1595: must be placed into a register.
1596:
1597: @table @code
1598: @findex sign_extend
1599: @item (sign_extend:@var{m} @var{x})
1600: Represents the result of sign-extending the value @var{x}
1601: to machine mode @var{m}. @var{m} must be a fixed-point mode
1602: and @var{x} a fixed-point value of a mode narrower than @var{m}.
1603:
1604: @findex zero_extend
1605: @item (zero_extend:@var{m} @var{x})
1606: Represents the result of zero-extending the value @var{x}
1607: to machine mode @var{m}. @var{m} must be a fixed-point mode
1608: and @var{x} a fixed-point value of a mode narrower than @var{m}.
1609:
1610: @findex float_extend
1611: @item (float_extend:@var{m} @var{x})
1612: Represents the result of extending the value @var{x}
1613: to machine mode @var{m}. @var{m} must be a floating point mode
1614: and @var{x} a floating point value of a mode narrower than @var{m}.
1615:
1616: @findex truncate
1617: @item (truncate:@var{m} @var{x})
1618: Represents the result of truncating the value @var{x}
1619: to machine mode @var{m}. @var{m} must be a fixed-point mode
1620: and @var{x} a fixed-point value of a mode wider than @var{m}.
1621:
1622: @findex float_truncate
1623: @item (float_truncate:@var{m} @var{x})
1624: Represents the result of truncating the value @var{x}
1625: to machine mode @var{m}. @var{m} must be a floating point mode
1626: and @var{x} a floating point value of a mode wider than @var{m}.
1627:
1628: @findex float
1629: @item (float:@var{m} @var{x})
1630: Represents the result of converting fixed point value @var{x},
1631: regarded as signed, to floating point mode @var{m}.
1632:
1633: @findex unsigned_float
1634: @item (unsigned_float:@var{m} @var{x})
1635: Represents the result of converting fixed point value @var{x},
1636: regarded as unsigned, to floating point mode @var{m}.
1637:
1638: @findex fix
1639: @item (fix:@var{m} @var{x})
1640: When @var{m} is a fixed point mode, represents the result of
1641: converting floating point value @var{x} to mode @var{m}, regarded as
1642: signed. How rounding is done is not specified, so this operation may
1643: be used validly in compiling C code only for integer-valued operands.
1644:
1645: @findex unsigned_fix
1646: @item (unsigned_fix:@var{m} @var{x})
1647: Represents the result of converting floating point value @var{x} to
1648: fixed point mode @var{m}, regarded as unsigned. How rounding is done
1649: is not specified.
1650:
1651: @findex fix
1652: @item (fix:@var{m} @var{x})
1653: When @var{m} is a floating point mode, represents the result of
1654: converting floating point value @var{x} (valid for mode @var{m}) to an
1655: integer, still represented in floating point mode @var{m}, by rounding
1656: towards zero.
1657: @end table
1658:
1659: @node RTL Declarations, Side Effects, Conversions, RTL
1660: @section Declarations
1661: @cindex RTL declarations
1662: @cindex declarations, RTL
1663:
1664: Declaration expression codes do not represent arithmetic operations
1665: but rather state assertions about their operands.
1666:
1667: @table @code
1668: @findex strict_low_part
1669: @cindex @code{subreg}, in @code{strict_low_part}
1670: @item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0))
1671: This expression code is used in only one context: operand 0 of a
1672: @code{set} expression. In addition, the operand of this expression
1673: must be a non-paradoxical @code{subreg} expression.
1674:
1675: The presence of @code{strict_low_part} says that the part of the
1676: register which is meaningful in mode @var{n}, but is not part of
1677: mode @var{m}, is not to be altered. Normally, an assignment to such
1678: a subreg is allowed to have undefined effects on the rest of the
1679: register when @var{m} is less than a word.
1680: @end table
1681:
1682: @node Side Effects, Incdec, RTL Declarations, RTL
1683: @section Side Effect Expressions
1684: @cindex RTL side effect expressions
1685:
1686: The expression codes described so far represent values, not actions.
1687: But machine instructions never produce values; they are meaningful
1688: only for their side effects on the state of the machine. Special
1689: expression codes are used to represent side effects.
1690:
1691: The body of an instruction is always one of these side effect codes;
1692: the codes described above, which represent values, appear only as
1693: the operands of these.
1694:
1695: @table @code
1696: @findex set
1697: @item (set @var{lval} @var{x})
1698: Represents the action of storing the value of @var{x} into the place
1699: represented by @var{lval}. @var{lval} must be an expression
1700: representing a place that can be stored in: @code{reg} (or
1701: @code{subreg} or @code{strict_low_part}), @code{mem}, @code{pc} or
1702: @code{cc0}.@refill
1703:
1704: If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a
1705: machine mode; then @var{x} must be valid for that mode.@refill
1706:
1707: If @var{lval} is a @code{reg} whose machine mode is less than the full
1708: width of the register, then it means that the part of the register
1709: specified by the machine mode is given the specified value and the
1710: rest of the register receives an undefined value. Likewise, if
1711: @var{lval} is a @code{subreg} whose machine mode is narrower than
1712: the mode of the register, the rest of the register can be changed in
1713: an undefined way.
1714:
1715: If @var{lval} is a @code{strict_low_part} of a @code{subreg}, then the
1716: part of the register specified by the machine mode of the
1717: @code{subreg} is given the value @var{x} and the rest of the register
1718: is not changed.@refill
1719:
1720: If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may
1721: be either a @code{compare} expression or a value that may have any mode.
1722: The latter case represents a ``test'' instruction. The expression
1723: @code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to
1724: @code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}.
1725: Use the former expression to save space during the compilation.
1726:
1727: @cindex jump instructions and @code{set}
1728: @cindex @code{if_then_else} usage
1729: If @var{lval} is @code{(pc)}, we have a jump instruction, and the
1730: possibilities for @var{x} are very limited. It may be a
1731: @code{label_ref} expression (unconditional jump). It may be an
1732: @code{if_then_else} (conditional jump), in which case either the
1733: second or the third operand must be @code{(pc)} (for the case which
1734: does not jump) and the other of the two must be a @code{label_ref}
1735: (for the case which does jump). @var{x} may also be a @code{mem} or
1736: @code{(plus:SI (pc) @var{y})}, where @var{y} may be a @code{reg} or a
1737: @code{mem}; these unusual patterns are used to represent jumps through
1738: branch tables.@refill
1739:
1740: If @var{lval} is neither @code{(cc0)} nor @code{(pc)}, the mode of
1741: @var{lval} must not be @code{VOIDmode} and the mode of @var{x} must be
1742: valid for the mode of @var{lval}.
1743:
1744: @findex SET_DEST
1745: @findex SET_SRC
1746: @var{lval} is customarily accessed with the @code{SET_DEST} macro and
1747: @var{x} with the @code{SET_SRC} macro.
1748:
1749: @findex return
1750: @item (return)
1751: As the sole expression in a pattern, represents a return from the
1752: current function, on machines where this can be done with one
1753: instruction, such as Vaxes. On machines where a multi-instruction
1754: ``epilogue'' must be executed in order to return from the function,
1755: returning is done by jumping to a label which precedes the epilogue, and
1756: the @code{return} expression code is never used.
1757:
1758: Inside an @code{if_then_else} expression, represents the value to be
1759: placed in @code{pc} to return to the caller.
1760:
1761: Note that an insn pattern of @code{(return)} is logically equivalent to
1762: @code{(set (pc) (return))}, but the latter form is never used.
1763:
1764: @findex call
1765: @item (call @var{function} @var{nargs})
1766: Represents a function call. @var{function} is a @code{mem} expression
1767: whose address is the address of the function to be called.
1768: @var{nargs} is an expression which can be used for two purposes: on
1769: some machines it represents the number of bytes of stack argument; on
1770: others, it represents the number of argument registers.
1771:
1772: Each machine has a standard machine mode which @var{function} must
1773: have. The machine description defines macro @code{FUNCTION_MODE} to
1774: expand into the requisite mode name. The purpose of this mode is to
1775: specify what kind of addressing is allowed, on machines where the
1776: allowed kinds of addressing depend on the machine mode being
1777: addressed.
1778:
1779: @findex clobber
1780: @item (clobber @var{x})
1781: Represents the storing or possible storing of an unpredictable,
1782: undescribed value into @var{x}, which must be a @code{reg},
1783: @code{scratch} or @code{mem} expression.
1784:
1785: One place this is used is in string instructions that store standard
1786: values into particular hard registers. It may not be worth the
1787: trouble to describe the values that are stored, but it is essential to
1788: inform the compiler that the registers will be altered, lest it
1789: attempt to keep data in them across the string instruction.
1790:
1791: If @var{x} is @code{(mem:BLK (const_int 0))}, it means that all memory
1792: locations must be presumed clobbered.
1793:
1794: Note that the machine description classifies certain hard registers as
1795: ``call-clobbered''. All function call instructions are assumed by
1796: default to clobber these registers, so there is no need to use
1797: @code{clobber} expressions to indicate this fact. Also, each function
1798: call is assumed to have the potential to alter any memory location,
1799: unless the function is declared @code{const}.
1800:
1801: If the last group of expressions in a @code{parallel} are each a
1802: @code{clobber} expression whose arguments are @code{reg} or
1803: @code{match_scratch} (@pxref{RTL Template}) expressions, the combiner
1804: phase can add the appropriate @code{clobber} expressions to an insn it
1805: has constructed when doing so will cause a pattern to be matched.
1806:
1807: This feature can be used, for example, on a machine that whose multiply
1808: and add instructions don't use an MQ register but which has an
1809: add-accumulate instruction that does clobber the MQ register. Similarly,
1810: a combined instruction might require a temporary register while the
1811: constituent instructions might not.
1812:
1813: When a @code{clobber} expression for a register appears inside a
1814: @code{parallel} with other side effects, the register allocator
1815: guarantees that the register is unoccupied both before and after that
1816: insn. However, the reload phase may allocate a register used for one of
1817: the inputs unless the @samp{&} constraint is specified for the selected
1818: alternative (@pxref{Modifiers}). You can clobber either a specific hard
1819: register, a pseudo register, or a @code{scratch} expression; in the
1820: latter two cases, GNU CC will allocate a hard register that is available
1821: there for use as a temporary.
1822:
1823: For instructions that require a temporary register, you should use
1824: @code{scratch} instead of a pseudo-register because this will allow the
1825: combiner phase to add the @code{clobber} when required. You do this by
1826: coding (@code{clobber} (@code{match_scratch} @dots{})). If you do
1827: clobber a pseudo register, use one which appears nowhere else---generate
1828: a new one each time. Otherwise, you may confuse CSE.
1829:
1830: There is one other known use for clobbering a pseudo register in a
1831: @code{parallel}: when one of the input operands of the insn is also
1832: clobbered by the insn. In this case, using the same pseudo register in
1833: the clobber and elsewhere in the insn produces the expected results.
1834:
1835: @findex use
1836: @item (use @var{x})
1837: Represents the use of the value of @var{x}. It indicates that the
1838: value in @var{x} at this point in the program is needed, even though
1839: it may not be apparent why this is so. Therefore, the compiler will
1840: not attempt to delete previous instructions whose only effect is to
1841: store a value in @var{x}. @var{x} must be a @code{reg} expression.
1842:
1843: During the delayed branch scheduling phase, @var{x} may be an insn.
1844: This indicates that @var{x} previously was located at this place in the
1845: code and its data dependencies need to be taken into account. These
1846: @code{use} insns will be deleted before the delayed branch scheduling
1847: phase exits.
1848:
1849: @findex parallel
1850: @item (parallel [@var{x0} @var{x1} @dots{}])
1851: Represents several side effects performed in parallel. The square
1852: brackets stand for a vector; the operand of @code{parallel} is a
1853: vector of expressions. @var{x0}, @var{x1} and so on are individual
1854: side effect expressions---expressions of code @code{set}, @code{call},
1855: @code{return}, @code{clobber} or @code{use}.@refill
1856:
1857: ``In parallel'' means that first all the values used in the individual
1858: side-effects are computed, and second all the actual side-effects are
1859: performed. For example,
1860:
1861: @example
1862: (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
1863: (set (mem:SI (reg:SI 1)) (reg:SI 1))])
1864: @end example
1865:
1866: @noindent
1867: says unambiguously that the values of hard register 1 and the memory
1868: location addressed by it are interchanged. In both places where
1869: @code{(reg:SI 1)} appears as a memory address it refers to the value
1870: in register 1 @emph{before} the execution of the insn.
1871:
1872: It follows that it is @emph{incorrect} to use @code{parallel} and
1873: expect the result of one @code{set} to be available for the next one.
1874: For example, people sometimes attempt to represent a jump-if-zero
1875: instruction this way:
1876:
1877: @example
1878: (parallel [(set (cc0) (reg:SI 34))
1879: (set (pc) (if_then_else
1880: (eq (cc0) (const_int 0))
1881: (label_ref @dots{})
1882: (pc)))])
1883: @end example
1884:
1885: @noindent
1886: But this is incorrect, because it says that the jump condition depends
1887: on the condition code value @emph{before} this instruction, not on the
1888: new value that is set by this instruction.
1889:
1890: @cindex peephole optimization, RTL representation
1891: Peephole optimization, which takes place together with final assembly
1892: code output, can produce insns whose patterns consist of a @code{parallel}
1893: whose elements are the operands needed to output the resulting
1894: assembler code---often @code{reg}, @code{mem} or constant expressions.
1895: This would not be well-formed RTL at any other stage in compilation,
1896: but it is ok then because no further optimization remains to be done.
1897: However, the definition of the macro @code{NOTICE_UPDATE_CC}, if
1898: any, must deal with such insns if you define any peephole optimizations.
1899:
1900: @findex sequence
1901: @item (sequence [@var{insns} @dots{}])
1902: Represents a sequence of insns. Each of the @var{insns} that appears
1903: in the vector is suitable for appearing in the chain of insns, so it
1904: must be an @code{insn}, @code{jump_insn}, @code{call_insn},
1905: @code{code_label}, @code{barrier} or @code{note}.
1906:
1907: A @code{sequence} RTX is never placed in an actual insn during RTL
1908: generation. It represents the sequence of insns that result from a
1909: @code{define_expand} @emph{before} those insns are passed to
1910: @code{emit_insn} to insert them in the chain of insns. When actually
1911: inserted, the individual sub-insns are separated out and the
1912: @code{sequence} is forgotten.
1913:
1914: After delay-slot scheduling is completed, an insn and all the insns that
1915: reside in its delay slots are grouped together into a @code{sequence}.
1916: The insn requiring the delay slot is the first insn in the vector;
1917: subsequent insns are to be placed in the delay slot.
1918:
1919: @code{INSN_ANNULLED_BRANCH_P} is set on an insn in a delay slot to
1920: indicate that a branch insn should be used that will conditionally annul
1921: the effect of the insns in the delay slots. In such a case,
1922: @code{INSN_FROM_TARGET_P} indicates that the insn is from the target of
1923: the branch and should be executed only if the branch is taken; otherwise
1924: the insn should be executed only if the branch is not taken.
1925: @xref{Delay Slots}.
1926: @end table
1927:
1928: These expression codes appear in place of a side effect, as the body of
1929: an insn, though strictly speaking they do not always describe side
1930: effects as such:
1931:
1932: @table @code
1933: @findex asm_input
1934: @item (asm_input @var{s})
1935: Represents literal assembler code as described by the string @var{s}.
1936:
1937: @findex unspec
1938: @findex unspec_volatile
1939: @item (unspec [@var{operands} @dots{}] @var{index})
1.1.1.2 ! root 1940: @itemx (unspec_volatile [@var{operands} @dots{}] @var{index})
1.1 root 1941: Represents a machine-specific operation on @var{operands}. @var{index}
1.1.1.2 ! root 1942: selects between multiple machine-specific operations.
1.1 root 1943: @code{unspec_volatile} is used for volatile operations and operations
1944: that may trap; @code{unspec} is used for other operations.
1945:
1.1.1.2 ! root 1946: These codes may appear inside a @code{pattern} of an
1.1 root 1947: insn, inside a @code{parallel}, or inside an expression.
1948:
1949: @findex addr_vec
1950: @item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}])
1951: Represents a table of jump addresses. The vector elements @var{lr0},
1952: etc., are @code{label_ref} expressions. The mode @var{m} specifies
1953: how much space is given to each address; normally @var{m} would be
1954: @code{Pmode}.
1955:
1956: @findex addr_diff_vec
1957: @item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}])
1958: Represents a table of jump addresses expressed as offsets from
1959: @var{base}. The vector elements @var{lr0}, etc., are @code{label_ref}
1960: expressions and so is @var{base}. The mode @var{m} specifies how much
1961: space is given to each address-difference.@refill
1962: @end table
1963:
1964: @node Incdec, Assembler, Side Effects, RTL
1965: @section Embedded Side-Effects on Addresses
1966: @cindex RTL preincrement
1967: @cindex RTL postincrement
1968: @cindex RTL predecrement
1969: @cindex RTL postdecrement
1970:
1971: Four special side-effect expression codes appear as memory addresses.
1972:
1973: @table @code
1974: @findex pre_dec
1975: @item (pre_dec:@var{m} @var{x})
1976: Represents the side effect of decrementing @var{x} by a standard
1977: amount and represents also the value that @var{x} has after being
1978: decremented. @var{x} must be a @code{reg} or @code{mem}, but most
1979: machines allow only a @code{reg}. @var{m} must be the machine mode
1980: for pointers on the machine in use. The amount @var{x} is decremented
1981: by is the length in bytes of the machine mode of the containing memory
1982: reference of which this expression serves as the address. Here is an
1983: example of its use:@refill
1984:
1985: @example
1986: (mem:DF (pre_dec:SI (reg:SI 39)))
1987: @end example
1988:
1989: @noindent
1990: This says to decrement pseudo register 39 by the length of a @code{DFmode}
1991: value and use the result to address a @code{DFmode} value.
1992:
1993: @findex pre_inc
1994: @item (pre_inc:@var{m} @var{x})
1995: Similar, but specifies incrementing @var{x} instead of decrementing it.
1996:
1997: @findex post_dec
1998: @item (post_dec:@var{m} @var{x})
1999: Represents the same side effect as @code{pre_dec} but a different
2000: value. The value represented here is the value @var{x} has @i{before}
2001: being decremented.
2002:
2003: @findex post_inc
2004: @item (post_inc:@var{m} @var{x})
2005: Similar, but specifies incrementing @var{x} instead of decrementing it.
2006: @end table
2007:
2008: These embedded side effect expressions must be used with care. Instruction
2009: patterns may not use them. Until the @samp{flow} pass of the compiler,
2010: they may occur only to represent pushes onto the stack. The @samp{flow}
2011: pass finds cases where registers are incremented or decremented in one
2012: instruction and used as an address shortly before or after; these cases are
2013: then transformed to use pre- or post-increment or -decrement.
2014:
2015: If a register used as the operand of these expressions is used in
2016: another address in an insn, the original value of the register is used.
2017: Uses of the register outside of an address are not permitted within the
2018: same insn as a use in an embedded side effect expression because such
2019: insns behave differently on different machines and hence must be treated
2020: as ambiguous and disallowed.
2021:
2022: An instruction that can be represented with an embedded side effect
2023: could also be represented using @code{parallel} containing an additional
2024: @code{set} to describe how the address register is altered. This is not
2025: done because machines that allow these operations at all typically
2026: allow them wherever a memory address is called for. Describing them as
2027: additional parallel stores would require doubling the number of entries
2028: in the machine description.
2029:
2030: @node Assembler, Insns, IncDec, RTL
2031: @section Assembler Instructions as Expressions
2032: @cindex assembler instructions in RTL
2033:
2034: @cindex @code{asm_operands}, usage
2035: The RTX code @code{asm_operands} represents a value produced by a
2036: user-specified assembler instruction. It is used to represent
2037: an @code{asm} statement with arguments. An @code{asm} statement with
2038: a single output operand, like this:
2039:
2040: @example
2041: asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
2042: @end example
2043:
2044: @noindent
2045: is represented using a single @code{asm_operands} RTX which represents
2046: the value that is stored in @code{outputvar}:
2047:
2048: @example
2049: (set @var{rtx-for-outputvar}
2050: (asm_operands "foo %1,%2,%0" "a" 0
2051: [@var{rtx-for-addition-result} @var{rtx-for-*z}]
2052: [(asm_input:@var{m1} "g")
2053: (asm_input:@var{m2} "di")]))
2054: @end example
2055:
2056: @noindent
2057: Here the operands of the @code{asm_operands} RTX are the assembler
2058: template string, the output-operand's constraint, the index-number of the
2059: output operand among the output operands specified, a vector of input
2060: operand RTX's, and a vector of input-operand modes and constraints. The
2061: mode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of
2062: @code{*z}.
2063:
2064: When an @code{asm} statement has multiple output values, its insn has
2065: several such @code{set} RTX's inside of a @code{parallel}. Each @code{set}
2066: contains a @code{asm_operands}; all of these share the same assembler
2067: template and vectors, but each contains the constraint for the respective
2068: output operand. They are also distinguished by the output-operand index
2069: number, which is 0, 1, @dots{} for successive output operands.
2070:
2071: @node Insns, Calls, Assembler, RTL
2072: @section Insns
2073: @cindex insns
2074:
2075: The RTL representation of the code for a function is a doubly-linked
2076: chain of objects called @dfn{insns}. Insns are expressions with
2077: special codes that are used for no other purpose. Some insns are
2078: actual instructions; others represent dispatch tables for @code{switch}
2079: statements; others represent labels to jump to or various sorts of
2080: declarative information.
2081:
2082: In addition to its own specific data, each insn must have a unique
2083: id-number that distinguishes it from all other insns in the current
2084: function (after delayed branch scheduling, copies of an insn with the
2085: same id-number may be present in multiple places in a function, but
2086: these copies will always be identical and will only appear inside a
2087: @code{sequence}), and chain pointers to the preceding and following
2088: insns. These three fields occupy the same position in every insn,
2089: independent of the expression code of the insn. They could be accessed
2090: with @code{XEXP} and @code{XINT}, but instead three special macros are
2091: always used:
2092:
2093: @table @code
2094: @findex INSN_UID
2095: @item INSN_UID (@var{i})
2096: Accesses the unique id of insn @var{i}.
2097:
2098: @findex PREV_INSN
2099: @item PREV_INSN (@var{i})
2100: Accesses the chain pointer to the insn preceding @var{i}.
2101: If @var{i} is the first insn, this is a null pointer.
2102:
2103: @findex NEXT_INSN
2104: @item NEXT_INSN (@var{i})
2105: Accesses the chain pointer to the insn following @var{i}.
2106: If @var{i} is the last insn, this is a null pointer.
2107: @end table
2108:
2109: @findex get_insns
2110: @findex get_last_insn
2111: The first insn in the chain is obtained by calling @code{get_insns}; the
2112: last insn is the result of calling @code{get_last_insn}. Within the
2113: chain delimited by these insns, the @code{NEXT_INSN} and
2114: @code{PREV_INSN} pointers must always correspond: if @var{insn} is not
2115: the first insn,
2116:
2117: @example
2118: NEXT_INSN (PREV_INSN (@var{insn})) == @var{insn}
2119: @end example
2120:
2121: @noindent
2122: is always true and if @var{insn} is not the last insn,
2123:
2124: @example
2125: PREV_INSN (NEXT_INSN (@var{insn})) == @var{insn}
2126: @end example
2127:
2128: @noindent
2129: is always true.
2130:
2131: After delay slot scheduling, some of the insns in the chain might be
2132: @code{sequence} expressions, which contain a vector of insns. The value
2133: of @code{NEXT_INSN} in all but the last of these insns is the next insn
2134: in the vector; the value of @code{NEXT_INSN} of the last insn in the vector
2135: is the same as the value of @code{NEXT_INSN} for the @code{sequence} in
2136: which it is contained. Similar rules apply for @code{PREV_INSN}.
2137:
2138: This means that the above invariants are not necessarily true for insns
2139: inside @code{sequence} expressions. Specifically, if @var{insn} is the
2140: first insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))}
2141: is the insn containing the @code{sequence} expression, as is the value
2142: of @code{PREV_INSN (NEXT_INSN (@var{insn}))} is @var{insn} is the last
2143: insn in the @code{sequence} expression. You can use these expressions
2144: to find the containing @code{sequence} expression.@refill
2145:
2146: Every insn has one of the following six expression codes:
2147:
2148: @table @code
2149: @findex insn
2150: @item insn
2151: The expression code @code{insn} is used for instructions that do not jump
2152: and do not do function calls. @code{sequence} expressions are always
2153: contained in insns with code @code{insn} even if one of those insns
2154: should jump or do function calls.
2155:
2156: Insns with code @code{insn} have four additional fields beyond the three
2157: mandatory ones listed above. These four are described in a table below.
2158:
2159: @findex jump_insn
2160: @item jump_insn
2161: The expression code @code{jump_insn} is used for instructions that may
2162: jump (or, more generally, may contain @code{label_ref} expressions). If
2163: there is an instruction to return from the current function, it is
2164: recorded as a @code{jump_insn}.
2165:
2166: @findex JUMP_LABEL
2167: @code{jump_insn} insns have the same extra fields as @code{insn} insns,
2168: accessed in the same way and in addition contains a field
2169: @code{JUMP_LABEL} which is defined once jump optimization has completed.
2170:
2171: For simple conditional and unconditional jumps, this field contains the
2172: @code{code_label} to which this insn will (possibly conditionally)
2173: branch. In a more complex jump, @code{JUMP_LABEL} records one of the
2174: labels that the insn refers to; the only way to find the others
2175: is to scan the entire body of the insn.
2176:
2177: Return insns count as jumps, but since they do not refer to any labels,
2178: they have zero in the @code{JUMP_LABEL} field.
2179:
2180: @findex call_insn
2181: @item call_insn
2182: The expression code @code{call_insn} is used for instructions that may do
2183: function calls. It is important to distinguish these instructions because
2184: they imply that certain registers and memory locations may be altered
2185: unpredictably.
2186:
1.1.1.2 ! root 2187: A @code{call_insn} insn may be preceded by insns that contain a single
1.1 root 2188: @code{use} expression and be followed by insns the contain a single
2189: @code{clobber} expression. If so, these @code{use} and @code{clobber}
2190: expressions are treated as being part of the function call.
2191: There must not even be a @code{note} between the @code{call_insn} and
2192: the @code{use} or @code{clobber} insns for this special treatment to
2193: take place. This is somewhat of a kludge and will be removed in a later
2194: version of GNU CC.
2195:
2196: @code{call_insn} insns have the same extra fields as @code{insn} insns,
2197: accessed in the same way.
2198:
2199: @findex code_label
2200: @findex CODE_LABEL_NUMBER
2201: @item code_label
2202: A @code{code_label} insn represents a label that a jump insn can jump
2203: to. It contains two special fields of data in addition to the three
2204: standard ones. @code{CODE_LABEL_NUMBER} is used to hold the @dfn{label
2205: number}, a number that identifies this label uniquely among all the
2206: labels in the compilation (not just in the current function).
2207: Ultimately, the label is represented in the assembler output as an
2208: assembler label, usually of the form @samp{L@var{n}} where @var{n} is
2209: the label number.
2210:
2211: When a @code{code_label} appears in an RTL expression, it normally
2212: appears within a @code{label_ref} which represents the address of
2213: the label, as a number.
2214:
2215: @findex LABEL_NUSES
2216: The field @code{LABEL_NUSES} is only defined once the jump optimization
2217: phase is completed and contains the number of times this label is
2218: referenced in the current function.
2219:
2220: @findex barrier
2221: @item barrier
2222: Barriers are placed in the instruction stream when control cannot flow
2223: past them. They are placed after unconditional jump instructions to
2224: indicate that the jumps are unconditional and after calls to
2225: @code{volatile} functions, which do not return (e.g., @code{exit}).
2226: They contain no information beyond the three standard fields.
2227:
2228: @findex note
2229: @findex NOTE_LINE_NUMBER
2230: @findex NOTE_SOURCE_FILE
2231: @item note
2232: @code{note} insns are used to represent additional debugging and
2233: declarative information. They contain two nonstandard fields, an
2234: integer which is accessed with the macro @code{NOTE_LINE_NUMBER} and a
2235: string accessed with @code{NOTE_SOURCE_FILE}.
2236:
2237: If @code{NOTE_LINE_NUMBER} is positive, the note represents the
2238: position of a source line and @code{NOTE_SOURCE_FILE} is the source file name
2239: that the line came from. These notes control generation of line
2240: number data in the assembler output.
2241:
2242: Otherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a
2243: code with one of the following values (and @code{NOTE_SOURCE_FILE}
2244: must contain a null pointer):
2245:
2246: @table @code
2247: @findex NOTE_INSN_DELETED
2248: @item NOTE_INSN_DELETED
2249: Such a note is completely ignorable. Some passes of the compiler
2250: delete insns by altering them into notes of this kind.
2251:
2252: @findex NOTE_INSN_BLOCK_BEG
2253: @findex NOTE_INSN_BLOCK_END
2254: @item NOTE_INSN_BLOCK_BEG
2255: @itemx NOTE_INSN_BLOCK_END
2256: These types of notes indicate the position of the beginning and end
2257: of a level of scoping of variable names. They control the output
2258: of debugging information.
2259:
2260: @findex NOTE_INSN_LOOP_BEG
2261: @findex NOTE_INSN_LOOP_END
2262: @item NOTE_INSN_LOOP_BEG
2263: @itemx NOTE_INSN_LOOP_END
2264: These types of notes indicate the position of the beginning and end
2265: of a @code{while} or @code{for} loop. They enable the loop optimizer
2266: to find loops quickly.
2267:
2268: @findex NOTE_INSN_LOOP_CONT
2269: @item NOTE_INSN_LOOP_CONT
2270: Appears at the place in a loop that @code{continue} statements jump to.
2271:
2272: @findex NOTE_INSN_LOOP_VTOP
2273: @item NOTE_INSN_LOOP_VTOP
2274: This note indicates the place in a loop where the exit test begins for
2275: those loops in which the exit test has been duplicated. This position
2276: becomes another virtual start of the loop when considering loop
2277: invariants.
2278:
2279: @findex NOTE_INSN_FUNCTION_END
2280: @item NOTE_INSN_FUNCTION_END
2281: Appears near the end of the function body, just before the label that
2282: @code{return} statements jump to (on machine where a single instruction
2283: does not suffice for returning). This note may be deleted by jump
2284: optimization.
2285:
2286: @findex NOTE_INSN_SETJMP
2287: @item NOTE_INSN_SETJMP
2288: Appears following each call to @code{setjmp} or a related function.
2289: @end table
2290:
2291: These codes are printed symbolically when they appear in debugging dumps.
2292: @end table
2293:
2294: @cindex @code{HImode}, in @code{insn}
2295: @cindex @code{QImode}, in @code{insn}
2296: The machine mode of an insn is normally @code{VOIDmode}, but some
2297: phases use the mode for various purposes; for example, the reload pass
2298: sets it to @code{HImode} if the insn needs reloading but not register
2299: elimination and @code{QImode} if both are required. The common
2300: subexpression elimination pass sets the mode of an insn to @code{QImode}
2301: when it is the first insn in a block that has already been processed.
2302:
2303: Here is a table of the extra fields of @code{insn}, @code{jump_insn}
2304: and @code{call_insn} insns:
2305:
2306: @table @code
2307: @findex PATTERN
2308: @item PATTERN (@var{i})
2309: An expression for the side effect performed by this insn. This must be
2310: one of the following codes: @code{set}, @code{call}, @code{use},
2311: @code{clobber}, @code{return}, @code{asm_input}, @code{asm_output},
2312: @code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec},
2313: @code{unspec_volatile}, or @code{parallel}. If it is a @code{parallel},
2314: each element of the @code{parallel} must be one these codes, except that
2315: @code{parallel} expressions cannot be nested and @code{addr_vec} and
2316: @code{addr_diff_vec} are not permitted inside a @code{parallel} expression.
2317:
2318: @findex INSN_CODE
2319: @item INSN_CODE (@var{i})
2320: An integer that says which pattern in the machine description matches
2321: this insn, or -1 if the matching has not yet been attempted.
2322:
2323: Such matching is never attempted and this field remains -1 on an insn
2324: whose pattern consists of a single @code{use}, @code{clobber},
2325: @code{asm_input}, @code{addr_vec} or @code{addr_diff_vec} expression.
2326:
2327: @findex asm_noperands
2328: Matching is also never attempted on insns that result from an @code{asm}
2329: statement. These contain at least one @code{asm_operands} expression.
2330: The function @code{asm_noperands} returns a non-negative value for
2331: such insns.
2332:
2333: In the debugging output, this field is printed as a number followed by
2334: a symbolic representation that locates the pattern in the @file{md}
2335: file as some small positive or negative offset from a named pattern.
2336:
2337: @findex LOG_LINKS
2338: @item LOG_LINKS (@var{i})
2339: A list (chain of @code{insn_list} expressions) giving information about
2340: dependencies between instructions within a basic block. Neither a jump
2341: nor a label may come between the related insns.
2342:
2343: @findex REG_NOTES
2344: @item REG_NOTES (@var{i})
2345: A list (chain of @code{expr_list} and @code{insn_list} expressions)
2346: giving miscellaneous information about the insn. It is often information
2347: pertaining to the registers used in this insn.
2348: @end table
2349:
2350: The @code{LOG_LINKS} field of an insn is a chain of @code{insn_list}
2351: expressions. Each of these has two operands: the first is an insn,
2352: and the second is another @code{insn_list} expression (the next one in
2353: the chain). The last @code{insn_list} in the chain has a null pointer
2354: as second operand. The significant thing about the chain is which
2355: insns appear in it (as first operands of @code{insn_list}
2356: expressions). Their order is not significant.
2357:
2358: This list is originally set up by the flow analysis pass; it is a null
2359: pointer until then. Flow only adds links for those data dependencies
2360: which can be used for instruction combination. For each insn, the flow
2361: analysis pass adds a link to insns which store into registers values
2362: that are used for the first time in this insn. The instruction
2363: scheduling pass adds extra links so that every dependence will be
2364: represented. Links represent data dependencies, antidependencies and
2365: output dependencies; the machine mode of the link distinguishes these
2366: three types: antidependencies have mode @code{REG_DEP_ANTI}, output
2367: dependencies have mode @code{REG_DEP_OUTPUT}, and data dependencies have
2368: mode @code{VOIDmode}.
2369:
2370: The @code{REG_NOTES} field of an insn is a chain similar to the
2371: @code{LOG_LINKS} field but it includes @code{expr_list} expressions in
2372: addition to @code{insn_list} expressions. There are several kinds
2373: of register notes, which are distinguished by the machine mode, which
2374: in a register note is really understood as being an @code{enum reg_note}.
2375: The first operand @var{op} of the note is data whose meaning depends on
2376: the kind of note.
2377:
2378: @findex REG_NOTE_KIND
2379: @findex PUT_REG_NOTE_KIND
2380: The macro @code{REG_NOTE_KIND (@var{x})} returns the the kind of
2381: register note. Its counterpart, the macro @code{PUT_REG_NOTE_KIND
2382: (@var{x}, @var{newkind})} sets the register note type of @var{x} to be
2383: @var{newkind}.
2384:
2385: Register notes are of three classes: They may say something about an
2386: input to an insn, they may say something about an output of an insn, or
2387: they may create a linkage between two insns. There are also a set
2388: of values that are only used in @code{LOG_LINKS}.
2389:
2390: These register notes annotate inputs to an insn:
2391:
2392: @table @code
2393: @findex REG_DEAD
2394: @item REG_DEAD
2395: The value in @var{op} dies in this insn; that is to say, altering the
2396: value immediately after this insn would not affect the future behavior
2397: of the program.
2398:
2399: This does not necessarily mean that the register @var{op} has no useful
2400: value after this insn since it may also be an output of the insn. In
2401: such a case, however, a @code{REG_DEAD} note would be redundant and is
2402: usually not present until after the reload pass, but no code relies on
2403: this fact.
2404:
2405: @findex REG_INC
2406: @item REG_INC
2407: The register @var{op} is incremented (or decremented; at this level
2408: there is no distinction) by an embedded side effect inside this insn.
2409: This means it appears in a @code{post_inc}, @code{pre_inc},
2410: @code{post_dec} or @code{pre_dec} expression.
2411:
2412: @findex REG_NONNEG
2413: @item REG_NONNEG
2414: The register @var{op} is known to have a nonnegative value when this
2415: insn is reached. This is used so that decrement and branch until zero
2416: instructions, such as the m68k dbra, can be matched.
2417:
2418: The @code{REG_NONNEG} note is added to insns only if the machine
2419: description contains a pattern named
2420: @samp{decrement_and_branch_until_zero}.
2421:
2422: @findex REG_NO_CONFLICT
2423: @item REG_NO_CONFLICT
2424: This insn does not cause a conflict between @var{op} and the item
2425: being set by this insn even though it might appear that it does.
2426: In other words, if the destination register and @var{op} could
2427: otherwise be assigned the same register, this insn does not
2428: prevent that assignment.
2429:
2430: Insns with this note are usually part of a block that begins with a
2431: @code{clobber} insn specifying a multi-word pseudo register (which will
2432: be the output of the block), a group of insns that each set one word of
2433: the value and have the @code{REG_NO_CONFLICT} note attached, and a final
2434: insn that copies the output to itself with an attached @code{REG_EQUAL}
2435: note giving the expression being computed. This block is encapsulated
2436: with @code{REG_LIBCALL} and @code{REG_RETVAL} notes on the first and
2437: last insns, respectively.
2438:
2439: @findex REG_LABEL
2440: @item REG_LABEL
2441: This insn uses @var{op}, a @code{code_label}, but is not a
2442: @code{jump_insn}. The presence of this note allows jump optimization to
2443: be aware that @var{op} is, in fact, being used.
2444: @end table
2445:
2446: The following notes describe attributes of outputs of an insn:
2447:
2448: @table @code
2449: @findex REG_EQUIV
2450: @findex REG_EQUAL
2451: @item REG_EQUIV
2452: @itemx REG_EQUAL
2453: This note is only valid on an insn that sets only one register and
2454: indicates that that register will be equal to @var{op} at run time; the
2455: scope of this equivalence differs between the two types of notes. The
2456: value which the insn explicitly copies into the register may look
2457: different from @var{op}, but they will be equal at run time. If the
2458: output of the single @code{set} is a @code{strict_low_part} expression,
2459: the note refers to the register that is contained in @code{SUBREG_REG}
2460: of the @code{subreg} expression.
2461:
2462: For @code{REG_EQUIV}, the register is equivalent to @var{op} throughout
2463: the entire function, and could validly be replaced in all its
2464: occurrences by @var{op}. (``Validly'' here refers to the data flow of
2465: the program; simple replacement may make some insns invalid.) For
2466: example, when a constant is loaded into a register that is never
2467: assigned any other value, this kind of note is used.
2468:
2469: When a parameter is copied into a pseudo-register at entry to a function,
2470: a note of this kind records that the register is equivalent to the stack
2471: slot where the parameter was passed. Although in this case the register
2472: may be set by other insns, it is still valid to replace the register
2473: by the stack slot throughout the function.
2474:
2475: In the case of @code{REG_EQUAL}, the register that is set by this insn
2476: will be equal to @var{op} at run time at the end of this insn but not
2477: necessarily elsewhere in the function. In this case, @var{op}
2478: is typically an arithmetic expression. For example, when a sequence of
2479: insns such as a library call is used to perform an arithmetic operation,
2480: this kind of note is attached to the insn that produces or copies the
2481: final value.
2482:
2483: These two notes are used in different ways by the compiler passes.
2484: @code{REG_EQUAL} is used by passes prior to register allocation (such as
2485: common subexpression elimination and loop optimization) to tell them how
2486: to think of that value. @code{REG_EQUIV} notes are used by register
2487: allocation to indicate that there is an available substitute expression
2488: (either a constant or a @code{mem} expression for the location of a
2489: parameter on the stack) that may be used in place of a register if
2490: insufficient registers are available.
2491:
2492: Except for stack homes for parameters, which are indicated by a
2493: @code{REG_EQUIV} note and are not useful to the early optimization
2494: passes and pseudo registers that are equivalent to a memory location
2495: throughout there entire life, which is not detected until later in
2496: the compilation, all equivalences are initially indicated by an attached
2497: @code{REG_EQUAL} note. In the early stages of register allocation, a
2498: @code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if
2499: @var{op} is a constant and the insn represents the only set of its
2500: destination register.
2501:
2502: Thus, compiler passes prior to register allocation need only check for
2503: @code{REG_EQUAL} notes and passes subsequent to register allocation
2504: need only check for @code{REG_EQUIV} notes.
2505:
2506: @findex REG_UNUSED
2507: @item REG_UNUSED
2508: The register @var{op} being set by this insn will not be used in a
2509: subsequent insn. This differs from a @code{REG_DEAD} note, which
2510: indicates that the value in an input will not be used subsequently.
2511: These two notes are independent; both may be present for the same
2512: register.
2513:
2514: @findex REG_WAS_0
2515: @item REG_WAS_0
2516: The single output of this insn contained zero before this insn.
2517: @var{op} is the insn that set it to zero. You can rely on this note if
2518: it is present and @var{op} has not been deleted or turned into a @code{note};
2519: its absence implies nothing.
2520: @end table
2521:
2522: These notes describe linkages between insns. They occur in pairs: one
2523: insn has one of a pair of notes that points to a second insn, which has
2524: the inverse note pointing back to the first insn.
2525:
2526: @table @code
2527: @findex REG_RETVAL
2528: @item REG_RETVAL
2529: This insn copies the value of a multi-insn sequence (for example, a
2530: library call), and @var{op} is the first insn of the sequence (for a
2531: library call, the first insn that was generated to set up the arguments
2532: for the library call).
2533:
2534: Loop optimization uses this note to treat such a sequence as a single
2535: operation for code motion purposes and flow analysis uses this note to
2536: delete such sequences whose results are dead.
2537:
2538: A @code{REG_EQUAL} note will also usually be attached to this insn to
2539: provide the expression being computed by the sequence.
2540:
2541: @findex REG_LIBCALL
2542: @item REG_LIBCALL
2543: This is the inverse of @code{REG_RETVAL}: it is placed on the first
2544: insn of a multi-insn sequence, and it points to the last one.
2545:
2546: @findex REG_CC_SETTER
2547: @findex REG_CC_USER
2548: @item REG_CC_SETTER
2549: @itemx REG_CC_USER
2550: On machines that use @code{cc0}, the insns which set and use @code{cc0}
2551: set and use @code{cc0} are adjacent. However, when branch delay slot
2552: filling is done, this may no longer be true. In this case a
2553: @code{REG_CC_USER} note will be placed on the insn setting @code{cc0} to
2554: point to the insn using @code{cc0} and a @code{REG_CC_SETTER} note will
2555: be placed on the insn using @code{cc0} to point to the insn setting
2556: @code{cc0}.@refill
2557: @end table
2558:
2559: These values are only used in the @code{LOG_LINKS} field, and indicate
2560: the type of dependency that each link represents. Links which indicate
2561: a data dependence (a read after write dependence) do not use any code,
2562: they simply have mode @code{VOIDmode}, and are printed without any
2563: descriptive text.
2564:
2565: @table @code
2566: @findex REG_DEP_ANTI
2567: @item REG_DEP_ANTI
2568: This indicates an anti dependence (a write after read dependence).
2569:
2570: @findex REG_DEP_OUTPUT
2571: @item REG_DEP_OUTPUT
2572: This indicates an output dependence (a write after write dependence).
2573: @end table
2574:
2575: For convenience, the machine mode in an @code{insn_list} or
2576: @code{expr_list} is printed using these symbolic codes in debugging dumps.
2577:
2578: @findex insn_list
2579: @findex expr_list
2580: The only difference between the expression codes @code{insn_list} and
2581: @code{expr_list} is that the first operand of an @code{insn_list} is
2582: assumed to be an insn and is printed in debugging dumps as the insn's
2583: unique id; the first operand of an @code{expr_list} is printed in the
2584: ordinary way as an expression.
2585:
2586: @node Calls, Sharing, Insns, RTL
2587: @section RTL Representation of Function-Call Insns
2588: @cindex calling functions in RTL
2589: @cindex RTL function-call insns
2590: @cindex function-call insns
2591:
2592: Insns that call subroutines have the RTL expression code @code{call_insn}.
2593: These insns must satisfy special rules, and their bodies must use a special
2594: RTL expression code, @code{call}.
2595:
2596: @cindex @code{call} usage
2597: A @code{call} expression has two operands, as follows:
2598:
2599: @example
2600: (call (mem:@var{fm} @var{addr}) @var{nbytes})
2601: @end example
2602:
2603: @noindent
2604: Here @var{nbytes} is an operand that represents the number of bytes of
2605: argument data being passed to the subroutine, @var{fm} is a machine mode
2606: (which must equal as the definition of the @code{FUNCTION_MODE} macro in
2607: the machine description) and @var{addr} represents the address of the
2608: subroutine.
2609:
2610: For a subroutine that returns no value, the @code{call} expression as
2611: shown above is the entire body of the insn, except that the insn might
2612: also contain @code{use} or @code{clobber} expressions.
2613:
2614: @cindex @code{BLKmode}, and function return values
2615: For a subroutine that returns a value whose mode is not @code{BLKmode},
2616: the value is returned in a hard register. If this register's number is
2617: @var{r}, then the body of the call insn looks like this:
2618:
2619: @example
2620: (set (reg:@var{m} @var{r})
2621: (call (mem:@var{fm} @var{addr}) @var{nbytes}))
2622: @end example
2623:
2624: @noindent
2625: This RTL expression makes it clear (to the optimizer passes) that the
2626: appropriate register receives a useful value in this insn.
2627:
2628: When a subroutine returns a @code{BLKmode} value, it is handled by
2629: passing to the subroutine the address of a place to store the value.
2630: So the call insn itself does not ``return'' any value, and it has the
2631: same RTL form as a call that returns nothing.
2632:
2633: On some machines, the call instruction itself clobbers some register,
2634: for example to contain the return address. @code{call_insn} insns
2635: on these machines should have a body which is a @code{parallel}
2636: that contains both the @code{call} expression and @code{clobber}
2637: expressions that indicate which registers are destroyed. Similarly,
2638: if the call instruction requires some register other than the stack
2639: pointer that is not explicitly mentioned it its RTL, a @code{use}
2640: subexpression should mention that register.
2641:
2642: Functions that are called are assumed to modify all registers listed in
2643: the configuration macro @code{CALL_USED_REGISTERS} (@pxref{Register
2644: Basics}) and, with the exception of @code{const} functions and library
2645: calls, to modify all of memory.
2646:
2647: Insns containing just @code{use} expressions directly precede the
2648: @code{call_insn} insn to indicate which registers contain inputs to the
2649: function. Similarly, if registers other than those in
2650: @code{CALL_USED_REGISTERS} are clobbered by the called function, insns
2651: containing a single @code{clobber} follow immediately after the call to
2652: indicate which registers.
2653:
2654: @node Sharing,, Calls, RTL
2655: @section Structure Sharing Assumptions
2656: @cindex sharing of RTL components
2657: @cindex RTL structure sharing assumptions
2658:
2659: The compiler assumes that certain kinds of RTL expressions are unique;
2660: there do not exist two distinct objects representing the same value.
2661: In other cases, it makes an opposite assumption: that no RTL expression
2662: object of a certain kind appears in more than one place in the
2663: containing structure.
2664:
2665: These assumptions refer to a single function; except for the RTL
2666: objects that describe global variables and external functions,
2667: and a few standard objects such as small integer constants,
2668: no RTL objects are common to two functions.
2669:
2670: @itemize @bullet
2671: @cindex @code{reg}, RTL sharing
2672: @item
2673: Each pseudo-register has only a single @code{reg} object to represent it,
2674: and therefore only a single machine mode.
2675:
2676: @cindex symbolic label
2677: @cindex @code{symbol_ref}, RTL sharing
2678: @item
2679: For any symbolic label, there is only one @code{symbol_ref} object
2680: referring to it.
2681:
2682: @cindex @code{const_int}, RTL sharing
2683: @item
2684: There is only one @code{const_int} expression with value 0, only
2685: one with value 1, and only one with value @minus{}1.
2686: Some other integer values are also stored uniquely.
2687:
2688: @cindex @code{pc}, RTL sharing
2689: @item
2690: There is only one @code{pc} expression.
2691:
2692: @cindex @code{cc0}, RTL sharing
2693: @item
2694: There is only one @code{cc0} expression.
2695:
2696: @cindex @code{const_double}, RTL sharing
2697: @item
2698: There is only one @code{const_double} expression with value 0 for
2699: each floating point mode. Likewise for values 1 and 2.
2700:
2701: @cindex @code{label_ref}, RTL sharing
2702: @cindex @code{scratch}, RTL sharing
2703: @item
2704: No @code{label_ref} or @code{scratch} appears in more than one place in
2705: the RTL structure; in other words, it is safe to do a tree-walk of all
2706: the insns in the function and assume that each time a @code{label_ref}
2707: or @code{scratch} is seen it is distinct from all others that are seen.
2708:
2709: @cindex @code{mem}, RTL sharing
2710: @item
2711: Only one @code{mem} object is normally created for each static
2712: variable or stack slot, so these objects are frequently shared in all
2713: the places they appear. However, separate but equal objects for these
2714: variables are occasionally made.
2715:
2716: @cindex @code{asm_operands}, RTL sharing
2717: @item
2718: When a single @code{asm} statement has multiple output operands, a
2719: distinct @code{asm_operands} expression is made for each output operand.
2720: However, these all share the vector which contains the sequence of input
2721: operands. This sharing is used later on to test whether two
2722: @code{asm_operands} expressions come from the same statement, so all
2723: optimizations must carefully preserve the sharing if they copy the
2724: vector at all.
2725:
2726: @item
2727: No RTL object appears in more than one place in the RTL structure
2728: except as described above. Many passes of the compiler rely on this
2729: by assuming that they can modify RTL objects in place without unwanted
2730: side-effects on other insns.
2731:
2732: @findex unshare_all_rtl
2733: @item
2734: During initial RTL generation, shared structure is freely introduced.
2735: After all the RTL for a function has been generated, all shared
2736: structure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c},
2737: after which the above rules are guaranteed to be followed.
2738:
2739: @findex copy_rtx_if_shared
2740: @item
2741: During the combiner pass, shared structure within an insn can exist
2742: temporarily. However, the shared structure is copied before the
2743: combiner is finished with the insn. This is done by calling
2744: @code{copy_rtx_if_shared}, which is a subroutine of
2745: @code{unshare_all_rtl}.
2746: @end itemize
2747: @end ifset
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.