xref: /dflybsd-src/contrib/gcc-4.7/gcc/doc/rtl.texi (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino@c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
2*e4b17023SJohn Marino@c 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
3*e4b17023SJohn Marino@c Free Software Foundation, Inc.
4*e4b17023SJohn Marino@c This is part of the GCC manual.
5*e4b17023SJohn Marino@c For copying conditions, see the file gcc.texi.
6*e4b17023SJohn Marino
7*e4b17023SJohn Marino@node RTL
8*e4b17023SJohn Marino@chapter RTL Representation
9*e4b17023SJohn Marino@cindex RTL representation
10*e4b17023SJohn Marino@cindex representation of RTL
11*e4b17023SJohn Marino@cindex Register Transfer Language (RTL)
12*e4b17023SJohn Marino
13*e4b17023SJohn MarinoThe last part of the compiler work is done on a low-level intermediate
14*e4b17023SJohn Marinorepresentation called Register Transfer Language.  In this language, the
15*e4b17023SJohn Marinoinstructions to be output are described, pretty much one by one, in an
16*e4b17023SJohn Marinoalgebraic form that describes what the instruction does.
17*e4b17023SJohn Marino
18*e4b17023SJohn MarinoRTL is inspired by Lisp lists.  It has both an internal form, made up of
19*e4b17023SJohn Marinostructures that point at other structures, and a textual form that is used
20*e4b17023SJohn Marinoin the machine description and in printed debugging dumps.  The textual
21*e4b17023SJohn Marinoform uses nested parentheses to indicate the pointers in the internal form.
22*e4b17023SJohn Marino
23*e4b17023SJohn Marino@menu
24*e4b17023SJohn Marino* RTL Objects::       Expressions vs vectors vs strings vs integers.
25*e4b17023SJohn Marino* RTL Classes::       Categories of RTL expression objects, and their structure.
26*e4b17023SJohn Marino* Accessors::         Macros to access expression operands or vector elts.
27*e4b17023SJohn Marino* Special Accessors:: Macros to access specific annotations on RTL.
28*e4b17023SJohn Marino* Flags::             Other flags in an RTL expression.
29*e4b17023SJohn Marino* Machine Modes::     Describing the size and format of a datum.
30*e4b17023SJohn Marino* Constants::         Expressions with constant values.
31*e4b17023SJohn Marino* Regs and Memory::   Expressions representing register contents or memory.
32*e4b17023SJohn Marino* Arithmetic::        Expressions representing arithmetic on other expressions.
33*e4b17023SJohn Marino* Comparisons::       Expressions representing comparison of expressions.
34*e4b17023SJohn Marino* Bit-Fields::        Expressions representing bit-fields in memory or reg.
35*e4b17023SJohn Marino* Vector Operations:: Expressions involving vector datatypes.
36*e4b17023SJohn Marino* Conversions::       Extending, truncating, floating or fixing.
37*e4b17023SJohn Marino* RTL Declarations::  Declaring volatility, constancy, etc.
38*e4b17023SJohn Marino* Side Effects::      Expressions for storing in registers, etc.
39*e4b17023SJohn Marino* Incdec::            Embedded side-effects for autoincrement addressing.
40*e4b17023SJohn Marino* Assembler::         Representing @code{asm} with operands.
41*e4b17023SJohn Marino* Debug Information:: Expressions representing debugging information.
42*e4b17023SJohn Marino* Insns::             Expression types for entire insns.
43*e4b17023SJohn Marino* Calls::             RTL representation of function call insns.
44*e4b17023SJohn Marino* Sharing::           Some expressions are unique; others *must* be copied.
45*e4b17023SJohn Marino* Reading RTL::       Reading textual RTL from a file.
46*e4b17023SJohn Marino@end menu
47*e4b17023SJohn Marino
48*e4b17023SJohn Marino@node RTL Objects
49*e4b17023SJohn Marino@section RTL Object Types
50*e4b17023SJohn Marino@cindex RTL object types
51*e4b17023SJohn Marino
52*e4b17023SJohn Marino@cindex RTL integers
53*e4b17023SJohn Marino@cindex RTL strings
54*e4b17023SJohn Marino@cindex RTL vectors
55*e4b17023SJohn Marino@cindex RTL expression
56*e4b17023SJohn Marino@cindex RTX (See RTL)
57*e4b17023SJohn MarinoRTL uses five kinds of objects: expressions, integers, wide integers,
58*e4b17023SJohn Marinostrings and vectors.  Expressions are the most important ones.  An RTL
59*e4b17023SJohn Marinoexpression (``RTX'', for short) is a C structure, but it is usually
60*e4b17023SJohn Marinoreferred to with a pointer; a type that is given the typedef name
61*e4b17023SJohn Marino@code{rtx}.
62*e4b17023SJohn Marino
63*e4b17023SJohn MarinoAn integer is simply an @code{int}; their written form uses decimal
64*e4b17023SJohn Marinodigits.  A wide integer is an integral object whose type is
65*e4b17023SJohn Marino@code{HOST_WIDE_INT}; their written form uses decimal digits.
66*e4b17023SJohn Marino
67*e4b17023SJohn MarinoA string is a sequence of characters.  In core it is represented as a
68*e4b17023SJohn Marino@code{char *} in usual C fashion, and it is written in C syntax as well.
69*e4b17023SJohn MarinoHowever, strings in RTL may never be null.  If you write an empty string in
70*e4b17023SJohn Marinoa machine description, it is represented in core as a null pointer rather
71*e4b17023SJohn Marinothan as a pointer to a null character.  In certain contexts, these null
72*e4b17023SJohn Marinopointers instead of strings are valid.  Within RTL code, strings are most
73*e4b17023SJohn Marinocommonly found inside @code{symbol_ref} expressions, but they appear in
74*e4b17023SJohn Marinoother contexts in the RTL expressions that make up machine descriptions.
75*e4b17023SJohn Marino
76*e4b17023SJohn MarinoIn a machine description, strings are normally written with double
77*e4b17023SJohn Marinoquotes, as you would in C@.  However, strings in machine descriptions may
78*e4b17023SJohn Marinoextend over many lines, which is invalid C, and adjacent string
79*e4b17023SJohn Marinoconstants are not concatenated as they are in C@.  Any string constant
80*e4b17023SJohn Marinomay be surrounded with a single set of parentheses.  Sometimes this
81*e4b17023SJohn Marinomakes the machine description easier to read.
82*e4b17023SJohn Marino
83*e4b17023SJohn MarinoThere is also a special syntax for strings, which can be useful when C
84*e4b17023SJohn Marinocode is embedded in a machine description.  Wherever a string can
85*e4b17023SJohn Marinoappear, it is also valid to write a C-style brace block.  The entire
86*e4b17023SJohn Marinobrace block, including the outermost pair of braces, is considered to be
87*e4b17023SJohn Marinothe string constant.  Double quote characters inside the braces are not
88*e4b17023SJohn Marinospecial.  Therefore, if you write string constants in the C code, you
89*e4b17023SJohn Marinoneed not escape each quote character with a backslash.
90*e4b17023SJohn Marino
91*e4b17023SJohn MarinoA vector contains an arbitrary number of pointers to expressions.  The
92*e4b17023SJohn Marinonumber of elements in the vector is explicitly present in the vector.
93*e4b17023SJohn MarinoThe written form of a vector consists of square brackets
94*e4b17023SJohn Marino(@samp{[@dots{}]}) surrounding the elements, in sequence and with
95*e4b17023SJohn Marinowhitespace separating them.  Vectors of length zero are not created;
96*e4b17023SJohn Marinonull pointers are used instead.
97*e4b17023SJohn Marino
98*e4b17023SJohn Marino@cindex expression codes
99*e4b17023SJohn Marino@cindex codes, RTL expression
100*e4b17023SJohn Marino@findex GET_CODE
101*e4b17023SJohn Marino@findex PUT_CODE
102*e4b17023SJohn MarinoExpressions are classified by @dfn{expression codes} (also called RTX
103*e4b17023SJohn Marinocodes).  The expression code is a name defined in @file{rtl.def}, which is
104*e4b17023SJohn Marinoalso (in uppercase) a C enumeration constant.  The possible expression
105*e4b17023SJohn Marinocodes and their meanings are machine-independent.  The code of an RTX can
106*e4b17023SJohn Marinobe extracted with the macro @code{GET_CODE (@var{x})} and altered with
107*e4b17023SJohn Marino@code{PUT_CODE (@var{x}, @var{newcode})}.
108*e4b17023SJohn Marino
109*e4b17023SJohn MarinoThe expression code determines how many operands the expression contains,
110*e4b17023SJohn Marinoand what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
111*e4b17023SJohn Marinoby looking at an operand what kind of object it is.  Instead, you must know
112*e4b17023SJohn Marinofrom its context---from the expression code of the containing expression.
113*e4b17023SJohn MarinoFor example, in an expression of code @code{subreg}, the first operand is
114*e4b17023SJohn Marinoto be regarded as an expression and the second operand as an integer.  In
115*e4b17023SJohn Marinoan expression of code @code{plus}, there are two operands, both of which
116*e4b17023SJohn Marinoare to be regarded as expressions.  In a @code{symbol_ref} expression,
117*e4b17023SJohn Marinothere is one operand, which is to be regarded as a string.
118*e4b17023SJohn Marino
119*e4b17023SJohn MarinoExpressions are written as parentheses containing the name of the
120*e4b17023SJohn Marinoexpression type, its flags and machine mode if any, and then the operands
121*e4b17023SJohn Marinoof the expression (separated by spaces).
122*e4b17023SJohn Marino
123*e4b17023SJohn MarinoExpression code names in the @samp{md} file are written in lowercase,
124*e4b17023SJohn Marinobut when they appear in C code they are written in uppercase.  In this
125*e4b17023SJohn Marinomanual, they are shown as follows: @code{const_int}.
126*e4b17023SJohn Marino
127*e4b17023SJohn Marino@cindex (nil)
128*e4b17023SJohn Marino@cindex nil
129*e4b17023SJohn MarinoIn a few contexts a null pointer is valid where an expression is normally
130*e4b17023SJohn Marinowanted.  The written form of this is @code{(nil)}.
131*e4b17023SJohn Marino
132*e4b17023SJohn Marino@node RTL Classes
133*e4b17023SJohn Marino@section RTL Classes and Formats
134*e4b17023SJohn Marino@cindex RTL classes
135*e4b17023SJohn Marino@cindex classes of RTX codes
136*e4b17023SJohn Marino@cindex RTX codes, classes of
137*e4b17023SJohn Marino@findex GET_RTX_CLASS
138*e4b17023SJohn Marino
139*e4b17023SJohn MarinoThe various expression codes are divided into several @dfn{classes},
140*e4b17023SJohn Marinowhich are represented by single characters.  You can determine the class
141*e4b17023SJohn Marinoof an RTX code with the macro @code{GET_RTX_CLASS (@var{code})}.
142*e4b17023SJohn MarinoCurrently, @file{rtl.def} defines these classes:
143*e4b17023SJohn Marino
144*e4b17023SJohn Marino@table @code
145*e4b17023SJohn Marino@item RTX_OBJ
146*e4b17023SJohn MarinoAn RTX code that represents an actual object, such as a register
147*e4b17023SJohn Marino(@code{REG}) or a memory location (@code{MEM}, @code{SYMBOL_REF}).
148*e4b17023SJohn Marino@code{LO_SUM}) is also included; instead, @code{SUBREG} and
149*e4b17023SJohn Marino@code{STRICT_LOW_PART} are not in this class, but in class @code{x}.
150*e4b17023SJohn Marino
151*e4b17023SJohn Marino@item RTX_CONST_OBJ
152*e4b17023SJohn MarinoAn RTX code that represents a constant object.  @code{HIGH} is also
153*e4b17023SJohn Marinoincluded in this class.
154*e4b17023SJohn Marino
155*e4b17023SJohn Marino@item RTX_COMPARE
156*e4b17023SJohn MarinoAn RTX code for a non-symmetric comparison, such as @code{GEU} or
157*e4b17023SJohn Marino@code{LT}.
158*e4b17023SJohn Marino
159*e4b17023SJohn Marino@item RTX_COMM_COMPARE
160*e4b17023SJohn MarinoAn RTX code for a symmetric (commutative) comparison, such as @code{EQ}
161*e4b17023SJohn Marinoor @code{ORDERED}.
162*e4b17023SJohn Marino
163*e4b17023SJohn Marino@item RTX_UNARY
164*e4b17023SJohn MarinoAn RTX code for a unary arithmetic operation, such as @code{NEG},
165*e4b17023SJohn Marino@code{NOT}, or @code{ABS}.  This category also includes value extension
166*e4b17023SJohn Marino(sign or zero) and conversions between integer and floating point.
167*e4b17023SJohn Marino
168*e4b17023SJohn Marino@item RTX_COMM_ARITH
169*e4b17023SJohn MarinoAn RTX code for a commutative binary operation, such as @code{PLUS} or
170*e4b17023SJohn Marino@code{AND}.  @code{NE} and @code{EQ} are comparisons, so they have class
171*e4b17023SJohn Marino@code{<}.
172*e4b17023SJohn Marino
173*e4b17023SJohn Marino@item RTX_BIN_ARITH
174*e4b17023SJohn MarinoAn RTX code for a non-commutative binary operation, such as @code{MINUS},
175*e4b17023SJohn Marino@code{DIV}, or @code{ASHIFTRT}.
176*e4b17023SJohn Marino
177*e4b17023SJohn Marino@item RTX_BITFIELD_OPS
178*e4b17023SJohn MarinoAn RTX code for a bit-field operation.  Currently only
179*e4b17023SJohn Marino@code{ZERO_EXTRACT} and @code{SIGN_EXTRACT}.  These have three inputs
180*e4b17023SJohn Marinoand are lvalues (so they can be used for insertion as well).
181*e4b17023SJohn Marino@xref{Bit-Fields}.
182*e4b17023SJohn Marino
183*e4b17023SJohn Marino@item RTX_TERNARY
184*e4b17023SJohn MarinoAn RTX code for other three input operations.  Currently only
185*e4b17023SJohn Marino@code{IF_THEN_ELSE},  @code{VEC_MERGE}, @code{SIGN_EXTRACT},
186*e4b17023SJohn Marino@code{ZERO_EXTRACT}, and @code{FMA}.
187*e4b17023SJohn Marino
188*e4b17023SJohn Marino@item RTX_INSN
189*e4b17023SJohn MarinoAn RTX code for an entire instruction:  @code{INSN}, @code{JUMP_INSN}, and
190*e4b17023SJohn Marino@code{CALL_INSN}.  @xref{Insns}.
191*e4b17023SJohn Marino
192*e4b17023SJohn Marino@item RTX_MATCH
193*e4b17023SJohn MarinoAn RTX code for something that matches in insns, such as
194*e4b17023SJohn Marino@code{MATCH_DUP}.  These only occur in machine descriptions.
195*e4b17023SJohn Marino
196*e4b17023SJohn Marino@item RTX_AUTOINC
197*e4b17023SJohn MarinoAn RTX code for an auto-increment addressing mode, such as
198*e4b17023SJohn Marino@code{POST_INC}.
199*e4b17023SJohn Marino
200*e4b17023SJohn Marino@item RTX_EXTRA
201*e4b17023SJohn MarinoAll other RTX codes.  This category includes the remaining codes used
202*e4b17023SJohn Marinoonly in machine descriptions (@code{DEFINE_*}, etc.).  It also includes
203*e4b17023SJohn Marinoall the codes describing side effects (@code{SET}, @code{USE},
204*e4b17023SJohn Marino@code{CLOBBER}, etc.) and the non-insns that may appear on an insn
205*e4b17023SJohn Marinochain, such as @code{NOTE}, @code{BARRIER}, and @code{CODE_LABEL}.
206*e4b17023SJohn Marino@code{SUBREG} is also part of this class.
207*e4b17023SJohn Marino@end table
208*e4b17023SJohn Marino
209*e4b17023SJohn Marino@cindex RTL format
210*e4b17023SJohn MarinoFor each expression code, @file{rtl.def} specifies the number of
211*e4b17023SJohn Marinocontained objects and their kinds using a sequence of characters
212*e4b17023SJohn Marinocalled the @dfn{format} of the expression code.  For example,
213*e4b17023SJohn Marinothe format of @code{subreg} is @samp{ei}.
214*e4b17023SJohn Marino
215*e4b17023SJohn Marino@cindex RTL format characters
216*e4b17023SJohn MarinoThese are the most commonly used format characters:
217*e4b17023SJohn Marino
218*e4b17023SJohn Marino@table @code
219*e4b17023SJohn Marino@item e
220*e4b17023SJohn MarinoAn expression (actually a pointer to an expression).
221*e4b17023SJohn Marino
222*e4b17023SJohn Marino@item i
223*e4b17023SJohn MarinoAn integer.
224*e4b17023SJohn Marino
225*e4b17023SJohn Marino@item w
226*e4b17023SJohn MarinoA wide integer.
227*e4b17023SJohn Marino
228*e4b17023SJohn Marino@item s
229*e4b17023SJohn MarinoA string.
230*e4b17023SJohn Marino
231*e4b17023SJohn Marino@item E
232*e4b17023SJohn MarinoA vector of expressions.
233*e4b17023SJohn Marino@end table
234*e4b17023SJohn Marino
235*e4b17023SJohn MarinoA few other format characters are used occasionally:
236*e4b17023SJohn Marino
237*e4b17023SJohn Marino@table @code
238*e4b17023SJohn Marino@item u
239*e4b17023SJohn Marino@samp{u} is equivalent to @samp{e} except that it is printed differently
240*e4b17023SJohn Marinoin debugging dumps.  It is used for pointers to insns.
241*e4b17023SJohn Marino
242*e4b17023SJohn Marino@item n
243*e4b17023SJohn Marino@samp{n} is equivalent to @samp{i} except that it is printed differently
244*e4b17023SJohn Marinoin debugging dumps.  It is used for the line number or code number of a
245*e4b17023SJohn Marino@code{note} insn.
246*e4b17023SJohn Marino
247*e4b17023SJohn Marino@item S
248*e4b17023SJohn Marino@samp{S} indicates a string which is optional.  In the RTL objects in
249*e4b17023SJohn Marinocore, @samp{S} is equivalent to @samp{s}, but when the object is read,
250*e4b17023SJohn Marinofrom an @samp{md} file, the string value of this operand may be omitted.
251*e4b17023SJohn MarinoAn omitted string is taken to be the null string.
252*e4b17023SJohn Marino
253*e4b17023SJohn Marino@item V
254*e4b17023SJohn Marino@samp{V} indicates a vector which is optional.  In the RTL objects in
255*e4b17023SJohn Marinocore, @samp{V} is equivalent to @samp{E}, but when the object is read
256*e4b17023SJohn Marinofrom an @samp{md} file, the vector value of this operand may be omitted.
257*e4b17023SJohn MarinoAn omitted vector is effectively the same as a vector of no elements.
258*e4b17023SJohn Marino
259*e4b17023SJohn Marino@item B
260*e4b17023SJohn Marino@samp{B} indicates a pointer to basic block structure.
261*e4b17023SJohn Marino
262*e4b17023SJohn Marino@item 0
263*e4b17023SJohn Marino@samp{0} means a slot whose contents do not fit any normal category.
264*e4b17023SJohn Marino@samp{0} slots are not printed at all in dumps, and are often used in
265*e4b17023SJohn Marinospecial ways by small parts of the compiler.
266*e4b17023SJohn Marino@end table
267*e4b17023SJohn Marino
268*e4b17023SJohn MarinoThere are macros to get the number of operands and the format
269*e4b17023SJohn Marinoof an expression code:
270*e4b17023SJohn Marino
271*e4b17023SJohn Marino@table @code
272*e4b17023SJohn Marino@findex GET_RTX_LENGTH
273*e4b17023SJohn Marino@item GET_RTX_LENGTH (@var{code})
274*e4b17023SJohn MarinoNumber of operands of an RTX of code @var{code}.
275*e4b17023SJohn Marino
276*e4b17023SJohn Marino@findex GET_RTX_FORMAT
277*e4b17023SJohn Marino@item GET_RTX_FORMAT (@var{code})
278*e4b17023SJohn MarinoThe format of an RTX of code @var{code}, as a C string.
279*e4b17023SJohn Marino@end table
280*e4b17023SJohn Marino
281*e4b17023SJohn MarinoSome classes of RTX codes always have the same format.  For example, it
282*e4b17023SJohn Marinois safe to assume that all comparison operations have format @code{ee}.
283*e4b17023SJohn Marino
284*e4b17023SJohn Marino@table @code
285*e4b17023SJohn Marino@item 1
286*e4b17023SJohn MarinoAll codes of this class have format @code{e}.
287*e4b17023SJohn Marino
288*e4b17023SJohn Marino@item <
289*e4b17023SJohn Marino@itemx c
290*e4b17023SJohn Marino@itemx 2
291*e4b17023SJohn MarinoAll codes of these classes have format @code{ee}.
292*e4b17023SJohn Marino
293*e4b17023SJohn Marino@item b
294*e4b17023SJohn Marino@itemx 3
295*e4b17023SJohn MarinoAll codes of these classes have format @code{eee}.
296*e4b17023SJohn Marino
297*e4b17023SJohn Marino@item i
298*e4b17023SJohn MarinoAll codes of this class have formats that begin with @code{iuueiee}.
299*e4b17023SJohn Marino@xref{Insns}.  Note that not all RTL objects linked onto an insn chain
300*e4b17023SJohn Marinoare of class @code{i}.
301*e4b17023SJohn Marino
302*e4b17023SJohn Marino@item o
303*e4b17023SJohn Marino@itemx m
304*e4b17023SJohn Marino@itemx x
305*e4b17023SJohn MarinoYou can make no assumptions about the format of these codes.
306*e4b17023SJohn Marino@end table
307*e4b17023SJohn Marino
308*e4b17023SJohn Marino@node Accessors
309*e4b17023SJohn Marino@section Access to Operands
310*e4b17023SJohn Marino@cindex accessors
311*e4b17023SJohn Marino@cindex access to operands
312*e4b17023SJohn Marino@cindex operand access
313*e4b17023SJohn Marino
314*e4b17023SJohn Marino@findex XEXP
315*e4b17023SJohn Marino@findex XINT
316*e4b17023SJohn Marino@findex XWINT
317*e4b17023SJohn Marino@findex XSTR
318*e4b17023SJohn MarinoOperands of expressions are accessed using the macros @code{XEXP},
319*e4b17023SJohn Marino@code{XINT}, @code{XWINT} and @code{XSTR}.  Each of these macros takes
320*e4b17023SJohn Marinotwo arguments: an expression-pointer (RTX) and an operand number
321*e4b17023SJohn Marino(counting from zero).  Thus,
322*e4b17023SJohn Marino
323*e4b17023SJohn Marino@smallexample
324*e4b17023SJohn MarinoXEXP (@var{x}, 2)
325*e4b17023SJohn Marino@end smallexample
326*e4b17023SJohn Marino
327*e4b17023SJohn Marino@noindent
328*e4b17023SJohn Marinoaccesses operand 2 of expression @var{x}, as an expression.
329*e4b17023SJohn Marino
330*e4b17023SJohn Marino@smallexample
331*e4b17023SJohn MarinoXINT (@var{x}, 2)
332*e4b17023SJohn Marino@end smallexample
333*e4b17023SJohn Marino
334*e4b17023SJohn Marino@noindent
335*e4b17023SJohn Marinoaccesses the same operand as an integer.  @code{XSTR}, used in the same
336*e4b17023SJohn Marinofashion, would access it as a string.
337*e4b17023SJohn Marino
338*e4b17023SJohn MarinoAny operand can be accessed as an integer, as an expression or as a string.
339*e4b17023SJohn MarinoYou must choose the correct method of access for the kind of value actually
340*e4b17023SJohn Marinostored in the operand.  You would do this based on the expression code of
341*e4b17023SJohn Marinothe containing expression.  That is also how you would know how many
342*e4b17023SJohn Marinooperands there are.
343*e4b17023SJohn Marino
344*e4b17023SJohn MarinoFor example, if @var{x} is a @code{subreg} expression, you know that it has
345*e4b17023SJohn Marinotwo operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
346*e4b17023SJohn Marinoand @code{XINT (@var{x}, 1)}.  If you did @code{XINT (@var{x}, 0)}, you
347*e4b17023SJohn Marinowould get the address of the expression operand but cast as an integer;
348*e4b17023SJohn Marinothat might occasionally be useful, but it would be cleaner to write
349*e4b17023SJohn Marino@code{(int) XEXP (@var{x}, 0)}.  @code{XEXP (@var{x}, 1)} would also
350*e4b17023SJohn Marinocompile without error, and would return the second, integer operand cast as
351*e4b17023SJohn Marinoan expression pointer, which would probably result in a crash when
352*e4b17023SJohn Marinoaccessed.  Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
353*e4b17023SJohn Marinobut this will access memory past the end of the expression with
354*e4b17023SJohn Marinounpredictable results.
355*e4b17023SJohn Marino
356*e4b17023SJohn MarinoAccess to operands which are vectors is more complicated.  You can use the
357*e4b17023SJohn Marinomacro @code{XVEC} to get the vector-pointer itself, or the macros
358*e4b17023SJohn Marino@code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
359*e4b17023SJohn Marinovector.
360*e4b17023SJohn Marino
361*e4b17023SJohn Marino@table @code
362*e4b17023SJohn Marino@findex XVEC
363*e4b17023SJohn Marino@item XVEC (@var{exp}, @var{idx})
364*e4b17023SJohn MarinoAccess the vector-pointer which is operand number @var{idx} in @var{exp}.
365*e4b17023SJohn Marino
366*e4b17023SJohn Marino@findex XVECLEN
367*e4b17023SJohn Marino@item XVECLEN (@var{exp}, @var{idx})
368*e4b17023SJohn MarinoAccess the length (number of elements) in the vector which is
369*e4b17023SJohn Marinoin operand number @var{idx} in @var{exp}.  This value is an @code{int}.
370*e4b17023SJohn Marino
371*e4b17023SJohn Marino@findex XVECEXP
372*e4b17023SJohn Marino@item XVECEXP (@var{exp}, @var{idx}, @var{eltnum})
373*e4b17023SJohn MarinoAccess element number @var{eltnum} in the vector which is
374*e4b17023SJohn Marinoin operand number @var{idx} in @var{exp}.  This value is an RTX@.
375*e4b17023SJohn Marino
376*e4b17023SJohn MarinoIt is up to you to make sure that @var{eltnum} is not negative
377*e4b17023SJohn Marinoand is less than @code{XVECLEN (@var{exp}, @var{idx})}.
378*e4b17023SJohn Marino@end table
379*e4b17023SJohn Marino
380*e4b17023SJohn MarinoAll the macros defined in this section expand into lvalues and therefore
381*e4b17023SJohn Marinocan be used to assign the operands, lengths and vector elements as well as
382*e4b17023SJohn Marinoto access them.
383*e4b17023SJohn Marino
384*e4b17023SJohn Marino@node Special Accessors
385*e4b17023SJohn Marino@section Access to Special Operands
386*e4b17023SJohn Marino@cindex access to special operands
387*e4b17023SJohn Marino
388*e4b17023SJohn MarinoSome RTL nodes have special annotations associated with them.
389*e4b17023SJohn Marino
390*e4b17023SJohn Marino@table @code
391*e4b17023SJohn Marino@item MEM
392*e4b17023SJohn Marino@table @code
393*e4b17023SJohn Marino@findex MEM_ALIAS_SET
394*e4b17023SJohn Marino@item MEM_ALIAS_SET (@var{x})
395*e4b17023SJohn MarinoIf 0, @var{x} is not in any alias set, and may alias anything.  Otherwise,
396*e4b17023SJohn Marino@var{x} can only alias @code{MEM}s in a conflicting alias set.  This value
397*e4b17023SJohn Marinois set in a language-dependent manner in the front-end, and should not be
398*e4b17023SJohn Marinoaltered in the back-end.  In some front-ends, these numbers may correspond
399*e4b17023SJohn Marinoin some way to types, or other language-level entities, but they need not,
400*e4b17023SJohn Marinoand the back-end makes no such assumptions.
401*e4b17023SJohn MarinoThese set numbers are tested with @code{alias_sets_conflict_p}.
402*e4b17023SJohn Marino
403*e4b17023SJohn Marino@findex MEM_EXPR
404*e4b17023SJohn Marino@item MEM_EXPR (@var{x})
405*e4b17023SJohn MarinoIf this register is known to hold the value of some user-level
406*e4b17023SJohn Marinodeclaration, this is that tree node.  It may also be a
407*e4b17023SJohn Marino@code{COMPONENT_REF}, in which case this is some field reference,
408*e4b17023SJohn Marinoand @code{TREE_OPERAND (@var{x}, 0)} contains the declaration,
409*e4b17023SJohn Marinoor another @code{COMPONENT_REF}, or null if there is no compile-time
410*e4b17023SJohn Marinoobject associated with the reference.
411*e4b17023SJohn Marino
412*e4b17023SJohn Marino@findex MEM_OFFSET_KNOWN_P
413*e4b17023SJohn Marino@item MEM_OFFSET_KNOWN_P (@var{x})
414*e4b17023SJohn MarinoTrue if the offset of the memory reference from @code{MEM_EXPR} is known.
415*e4b17023SJohn Marino@samp{MEM_OFFSET (@var{x})} provides the offset if so.
416*e4b17023SJohn Marino
417*e4b17023SJohn Marino@findex MEM_OFFSET
418*e4b17023SJohn Marino@item MEM_OFFSET (@var{x})
419*e4b17023SJohn MarinoThe offset from the start of @code{MEM_EXPR}.  The value is only valid if
420*e4b17023SJohn Marino@samp{MEM_OFFSET_KNOWN_P (@var{x})} is true.
421*e4b17023SJohn Marino
422*e4b17023SJohn Marino@findex MEM_SIZE_KNOWN_P
423*e4b17023SJohn Marino@item MEM_SIZE_KNOWN_P (@var{x})
424*e4b17023SJohn MarinoTrue if the size of the memory reference is known.
425*e4b17023SJohn Marino@samp{MEM_SIZE (@var{x})} provides its size if so.
426*e4b17023SJohn Marino
427*e4b17023SJohn Marino@findex MEM_SIZE
428*e4b17023SJohn Marino@item MEM_SIZE (@var{x})
429*e4b17023SJohn MarinoThe size in bytes of the memory reference.
430*e4b17023SJohn MarinoThis is mostly relevant for @code{BLKmode} references as otherwise
431*e4b17023SJohn Marinothe size is implied by the mode.  The value is only valid if
432*e4b17023SJohn Marino@samp{MEM_SIZE_KNOWN_P (@var{x})} is true.
433*e4b17023SJohn Marino
434*e4b17023SJohn Marino@findex MEM_ALIGN
435*e4b17023SJohn Marino@item MEM_ALIGN (@var{x})
436*e4b17023SJohn MarinoThe known alignment in bits of the memory reference.
437*e4b17023SJohn Marino
438*e4b17023SJohn Marino@findex MEM_ADDR_SPACE
439*e4b17023SJohn Marino@item MEM_ADDR_SPACE (@var{x})
440*e4b17023SJohn MarinoThe address space of the memory reference.  This will commonly be zero
441*e4b17023SJohn Marinofor the generic address space.
442*e4b17023SJohn Marino@end table
443*e4b17023SJohn Marino
444*e4b17023SJohn Marino@item REG
445*e4b17023SJohn Marino@table @code
446*e4b17023SJohn Marino@findex ORIGINAL_REGNO
447*e4b17023SJohn Marino@item ORIGINAL_REGNO (@var{x})
448*e4b17023SJohn MarinoThis field holds the number the register ``originally'' had; for a
449*e4b17023SJohn Marinopseudo register turned into a hard reg this will hold the old pseudo
450*e4b17023SJohn Marinoregister number.
451*e4b17023SJohn Marino
452*e4b17023SJohn Marino@findex REG_EXPR
453*e4b17023SJohn Marino@item REG_EXPR (@var{x})
454*e4b17023SJohn MarinoIf this register is known to hold the value of some user-level
455*e4b17023SJohn Marinodeclaration, this is that tree node.
456*e4b17023SJohn Marino
457*e4b17023SJohn Marino@findex REG_OFFSET
458*e4b17023SJohn Marino@item REG_OFFSET (@var{x})
459*e4b17023SJohn MarinoIf this register is known to hold the value of some user-level
460*e4b17023SJohn Marinodeclaration, this is the offset into that logical storage.
461*e4b17023SJohn Marino@end table
462*e4b17023SJohn Marino
463*e4b17023SJohn Marino@item SYMBOL_REF
464*e4b17023SJohn Marino@table @code
465*e4b17023SJohn Marino@findex SYMBOL_REF_DECL
466*e4b17023SJohn Marino@item SYMBOL_REF_DECL (@var{x})
467*e4b17023SJohn MarinoIf the @code{symbol_ref} @var{x} was created for a @code{VAR_DECL} or
468*e4b17023SJohn Marinoa @code{FUNCTION_DECL}, that tree is recorded here.  If this value is
469*e4b17023SJohn Marinonull, then @var{x} was created by back end code generation routines,
470*e4b17023SJohn Marinoand there is no associated front end symbol table entry.
471*e4b17023SJohn Marino
472*e4b17023SJohn Marino@code{SYMBOL_REF_DECL} may also point to a tree of class @code{'c'},
473*e4b17023SJohn Marinothat is, some sort of constant.  In this case, the @code{symbol_ref}
474*e4b17023SJohn Marinois an entry in the per-file constant pool; again, there is no associated
475*e4b17023SJohn Marinofront end symbol table entry.
476*e4b17023SJohn Marino
477*e4b17023SJohn Marino@findex SYMBOL_REF_CONSTANT
478*e4b17023SJohn Marino@item SYMBOL_REF_CONSTANT (@var{x})
479*e4b17023SJohn MarinoIf @samp{CONSTANT_POOL_ADDRESS_P (@var{x})} is true, this is the constant
480*e4b17023SJohn Marinopool entry for @var{x}.  It is null otherwise.
481*e4b17023SJohn Marino
482*e4b17023SJohn Marino@findex SYMBOL_REF_DATA
483*e4b17023SJohn Marino@item SYMBOL_REF_DATA (@var{x})
484*e4b17023SJohn MarinoA field of opaque type used to store @code{SYMBOL_REF_DECL} or
485*e4b17023SJohn Marino@code{SYMBOL_REF_CONSTANT}.
486*e4b17023SJohn Marino
487*e4b17023SJohn Marino@findex SYMBOL_REF_FLAGS
488*e4b17023SJohn Marino@item SYMBOL_REF_FLAGS (@var{x})
489*e4b17023SJohn MarinoIn a @code{symbol_ref}, this is used to communicate various predicates
490*e4b17023SJohn Marinoabout the symbol.  Some of these are common enough to be computed by
491*e4b17023SJohn Marinocommon code, some are specific to the target.  The common bits are:
492*e4b17023SJohn Marino
493*e4b17023SJohn Marino@table @code
494*e4b17023SJohn Marino@findex SYMBOL_REF_FUNCTION_P
495*e4b17023SJohn Marino@findex SYMBOL_FLAG_FUNCTION
496*e4b17023SJohn Marino@item SYMBOL_FLAG_FUNCTION
497*e4b17023SJohn MarinoSet if the symbol refers to a function.
498*e4b17023SJohn Marino
499*e4b17023SJohn Marino@findex SYMBOL_REF_LOCAL_P
500*e4b17023SJohn Marino@findex SYMBOL_FLAG_LOCAL
501*e4b17023SJohn Marino@item SYMBOL_FLAG_LOCAL
502*e4b17023SJohn MarinoSet if the symbol is local to this ``module''.
503*e4b17023SJohn MarinoSee @code{TARGET_BINDS_LOCAL_P}.
504*e4b17023SJohn Marino
505*e4b17023SJohn Marino@findex SYMBOL_REF_EXTERNAL_P
506*e4b17023SJohn Marino@findex SYMBOL_FLAG_EXTERNAL
507*e4b17023SJohn Marino@item SYMBOL_FLAG_EXTERNAL
508*e4b17023SJohn MarinoSet if this symbol is not defined in this translation unit.
509*e4b17023SJohn MarinoNote that this is not the inverse of @code{SYMBOL_FLAG_LOCAL}.
510*e4b17023SJohn Marino
511*e4b17023SJohn Marino@findex SYMBOL_REF_SMALL_P
512*e4b17023SJohn Marino@findex SYMBOL_FLAG_SMALL
513*e4b17023SJohn Marino@item SYMBOL_FLAG_SMALL
514*e4b17023SJohn MarinoSet if the symbol is located in the small data section.
515*e4b17023SJohn MarinoSee @code{TARGET_IN_SMALL_DATA_P}.
516*e4b17023SJohn Marino
517*e4b17023SJohn Marino@findex SYMBOL_FLAG_TLS_SHIFT
518*e4b17023SJohn Marino@findex SYMBOL_REF_TLS_MODEL
519*e4b17023SJohn Marino@item SYMBOL_REF_TLS_MODEL (@var{x})
520*e4b17023SJohn MarinoThis is a multi-bit field accessor that returns the @code{tls_model}
521*e4b17023SJohn Marinoto be used for a thread-local storage symbol.  It returns zero for
522*e4b17023SJohn Marinonon-thread-local symbols.
523*e4b17023SJohn Marino
524*e4b17023SJohn Marino@findex SYMBOL_REF_HAS_BLOCK_INFO_P
525*e4b17023SJohn Marino@findex SYMBOL_FLAG_HAS_BLOCK_INFO
526*e4b17023SJohn Marino@item SYMBOL_FLAG_HAS_BLOCK_INFO
527*e4b17023SJohn MarinoSet if the symbol has @code{SYMBOL_REF_BLOCK} and
528*e4b17023SJohn Marino@code{SYMBOL_REF_BLOCK_OFFSET} fields.
529*e4b17023SJohn Marino
530*e4b17023SJohn Marino@findex SYMBOL_REF_ANCHOR_P
531*e4b17023SJohn Marino@findex SYMBOL_FLAG_ANCHOR
532*e4b17023SJohn Marino@cindex @option{-fsection-anchors}
533*e4b17023SJohn Marino@item SYMBOL_FLAG_ANCHOR
534*e4b17023SJohn MarinoSet if the symbol is used as a section anchor.  ``Section anchors''
535*e4b17023SJohn Marinoare symbols that have a known position within an @code{object_block}
536*e4b17023SJohn Marinoand that can be used to access nearby members of that block.
537*e4b17023SJohn MarinoThey are used to implement @option{-fsection-anchors}.
538*e4b17023SJohn Marino
539*e4b17023SJohn MarinoIf this flag is set, then @code{SYMBOL_FLAG_HAS_BLOCK_INFO} will be too.
540*e4b17023SJohn Marino@end table
541*e4b17023SJohn Marino
542*e4b17023SJohn MarinoBits beginning with @code{SYMBOL_FLAG_MACH_DEP} are available for
543*e4b17023SJohn Marinothe target's use.
544*e4b17023SJohn Marino@end table
545*e4b17023SJohn Marino
546*e4b17023SJohn Marino@findex SYMBOL_REF_BLOCK
547*e4b17023SJohn Marino@item SYMBOL_REF_BLOCK (@var{x})
548*e4b17023SJohn MarinoIf @samp{SYMBOL_REF_HAS_BLOCK_INFO_P (@var{x})}, this is the
549*e4b17023SJohn Marino@samp{object_block} structure to which the symbol belongs,
550*e4b17023SJohn Marinoor @code{NULL} if it has not been assigned a block.
551*e4b17023SJohn Marino
552*e4b17023SJohn Marino@findex SYMBOL_REF_BLOCK_OFFSET
553*e4b17023SJohn Marino@item SYMBOL_REF_BLOCK_OFFSET (@var{x})
554*e4b17023SJohn MarinoIf @samp{SYMBOL_REF_HAS_BLOCK_INFO_P (@var{x})}, this is the offset of @var{x}
555*e4b17023SJohn Marinofrom the first object in @samp{SYMBOL_REF_BLOCK (@var{x})}.  The value is
556*e4b17023SJohn Marinonegative if @var{x} has not yet been assigned to a block, or it has not
557*e4b17023SJohn Marinobeen given an offset within that block.
558*e4b17023SJohn Marino@end table
559*e4b17023SJohn Marino
560*e4b17023SJohn Marino@node Flags
561*e4b17023SJohn Marino@section Flags in an RTL Expression
562*e4b17023SJohn Marino@cindex flags in RTL expression
563*e4b17023SJohn Marino
564*e4b17023SJohn MarinoRTL expressions contain several flags (one-bit bit-fields)
565*e4b17023SJohn Marinothat are used in certain types of expression.  Most often they
566*e4b17023SJohn Marinoare accessed with the following macros, which expand into lvalues.
567*e4b17023SJohn Marino
568*e4b17023SJohn Marino@table @code
569*e4b17023SJohn Marino@findex CONSTANT_POOL_ADDRESS_P
570*e4b17023SJohn Marino@cindex @code{symbol_ref} and @samp{/u}
571*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{symbol_ref}
572*e4b17023SJohn Marino@item CONSTANT_POOL_ADDRESS_P (@var{x})
573*e4b17023SJohn MarinoNonzero in a @code{symbol_ref} if it refers to part of the current
574*e4b17023SJohn Marinofunction's constant pool.  For most targets these addresses are in a
575*e4b17023SJohn Marino@code{.rodata} section entirely separate from the function, but for
576*e4b17023SJohn Marinosome targets the addresses are close to the beginning of the function.
577*e4b17023SJohn MarinoIn either case GCC assumes these addresses can be addressed directly,
578*e4b17023SJohn Marinoperhaps with the help of base registers.
579*e4b17023SJohn MarinoStored in the @code{unchanging} field and printed as @samp{/u}.
580*e4b17023SJohn Marino
581*e4b17023SJohn Marino@findex RTL_CONST_CALL_P
582*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/u}
583*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{call_insn}
584*e4b17023SJohn Marino@item RTL_CONST_CALL_P (@var{x})
585*e4b17023SJohn MarinoIn a @code{call_insn} indicates that the insn represents a call to a
586*e4b17023SJohn Marinoconst function.  Stored in the @code{unchanging} field and printed as
587*e4b17023SJohn Marino@samp{/u}.
588*e4b17023SJohn Marino
589*e4b17023SJohn Marino@findex RTL_PURE_CALL_P
590*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/i}
591*e4b17023SJohn Marino@cindex @code{return_val}, in @code{call_insn}
592*e4b17023SJohn Marino@item RTL_PURE_CALL_P (@var{x})
593*e4b17023SJohn MarinoIn a @code{call_insn} indicates that the insn represents a call to a
594*e4b17023SJohn Marinopure function.  Stored in the @code{return_val} field and printed as
595*e4b17023SJohn Marino@samp{/i}.
596*e4b17023SJohn Marino
597*e4b17023SJohn Marino@findex RTL_CONST_OR_PURE_CALL_P
598*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/u} or @samp{/i}
599*e4b17023SJohn Marino@item RTL_CONST_OR_PURE_CALL_P (@var{x})
600*e4b17023SJohn MarinoIn a @code{call_insn}, true if @code{RTL_CONST_CALL_P} or
601*e4b17023SJohn Marino@code{RTL_PURE_CALL_P} is true.
602*e4b17023SJohn Marino
603*e4b17023SJohn Marino@findex RTL_LOOPING_CONST_OR_PURE_CALL_P
604*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/c}
605*e4b17023SJohn Marino@cindex @code{call}, in @code{call_insn}
606*e4b17023SJohn Marino@item RTL_LOOPING_CONST_OR_PURE_CALL_P (@var{x})
607*e4b17023SJohn MarinoIn a @code{call_insn} indicates that the insn represents a possibly
608*e4b17023SJohn Marinoinfinite looping call to a const or pure function.  Stored in the
609*e4b17023SJohn Marino@code{call} field and printed as @samp{/c}.  Only true if one of
610*e4b17023SJohn Marino@code{RTL_CONST_CALL_P} or @code{RTL_PURE_CALL_P} is true.
611*e4b17023SJohn Marino
612*e4b17023SJohn Marino@findex INSN_ANNULLED_BRANCH_P
613*e4b17023SJohn Marino@cindex @code{jump_insn} and @samp{/u}
614*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/u}
615*e4b17023SJohn Marino@cindex @code{insn} and @samp{/u}
616*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{jump_insn}, @code{call_insn} and @code{insn}
617*e4b17023SJohn Marino@item INSN_ANNULLED_BRANCH_P (@var{x})
618*e4b17023SJohn MarinoIn a @code{jump_insn}, @code{call_insn}, or @code{insn} indicates
619*e4b17023SJohn Marinothat the branch is an annulling one.  See the discussion under
620*e4b17023SJohn Marino@code{sequence} below.  Stored in the @code{unchanging} field and
621*e4b17023SJohn Marinoprinted as @samp{/u}.
622*e4b17023SJohn Marino
623*e4b17023SJohn Marino@findex INSN_DELETED_P
624*e4b17023SJohn Marino@cindex @code{insn} and @samp{/v}
625*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/v}
626*e4b17023SJohn Marino@cindex @code{jump_insn} and @samp{/v}
627*e4b17023SJohn Marino@cindex @code{code_label} and @samp{/v}
628*e4b17023SJohn Marino@cindex @code{barrier} and @samp{/v}
629*e4b17023SJohn Marino@cindex @code{note} and @samp{/v}
630*e4b17023SJohn Marino@cindex @code{volatil}, in @code{insn}, @code{call_insn}, @code{jump_insn}, @code{code_label}, @code{barrier}, and @code{note}
631*e4b17023SJohn Marino@item INSN_DELETED_P (@var{x})
632*e4b17023SJohn MarinoIn an @code{insn}, @code{call_insn}, @code{jump_insn}, @code{code_label},
633*e4b17023SJohn Marino@code{barrier}, or @code{note},
634*e4b17023SJohn Marinononzero if the insn has been deleted.  Stored in the
635*e4b17023SJohn Marino@code{volatil} field and printed as @samp{/v}.
636*e4b17023SJohn Marino
637*e4b17023SJohn Marino@findex INSN_FROM_TARGET_P
638*e4b17023SJohn Marino@cindex @code{insn} and @samp{/s}
639*e4b17023SJohn Marino@cindex @code{jump_insn} and @samp{/s}
640*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/s}
641*e4b17023SJohn Marino@cindex @code{in_struct}, in @code{insn} and @code{jump_insn} and @code{call_insn}
642*e4b17023SJohn Marino@item INSN_FROM_TARGET_P (@var{x})
643*e4b17023SJohn MarinoIn an @code{insn} or @code{jump_insn} or @code{call_insn} in a delay
644*e4b17023SJohn Marinoslot of a branch, indicates that the insn
645*e4b17023SJohn Marinois from the target of the branch.  If the branch insn has
646*e4b17023SJohn Marino@code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if
647*e4b17023SJohn Marinothe branch is taken.  For annulled branches with
648*e4b17023SJohn Marino@code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the
649*e4b17023SJohn Marinobranch is not taken.  When @code{INSN_ANNULLED_BRANCH_P} is not set,
650*e4b17023SJohn Marinothis insn will always be executed.  Stored in the @code{in_struct}
651*e4b17023SJohn Marinofield and printed as @samp{/s}.
652*e4b17023SJohn Marino
653*e4b17023SJohn Marino@findex LABEL_PRESERVE_P
654*e4b17023SJohn Marino@cindex @code{code_label} and @samp{/i}
655*e4b17023SJohn Marino@cindex @code{note} and @samp{/i}
656*e4b17023SJohn Marino@cindex @code{in_struct}, in @code{code_label} and @code{note}
657*e4b17023SJohn Marino@item LABEL_PRESERVE_P (@var{x})
658*e4b17023SJohn MarinoIn a @code{code_label} or @code{note}, indicates that the label is referenced by
659*e4b17023SJohn Marinocode or data not visible to the RTL of a given function.
660*e4b17023SJohn MarinoLabels referenced by a non-local goto will have this bit set.  Stored
661*e4b17023SJohn Marinoin the @code{in_struct} field and printed as @samp{/s}.
662*e4b17023SJohn Marino
663*e4b17023SJohn Marino@findex LABEL_REF_NONLOCAL_P
664*e4b17023SJohn Marino@cindex @code{label_ref} and @samp{/v}
665*e4b17023SJohn Marino@cindex @code{reg_label} and @samp{/v}
666*e4b17023SJohn Marino@cindex @code{volatil}, in @code{label_ref} and @code{reg_label}
667*e4b17023SJohn Marino@item LABEL_REF_NONLOCAL_P (@var{x})
668*e4b17023SJohn MarinoIn @code{label_ref} and @code{reg_label} expressions, nonzero if this is
669*e4b17023SJohn Marinoa reference to a non-local label.
670*e4b17023SJohn MarinoStored in the @code{volatil} field and printed as @samp{/v}.
671*e4b17023SJohn Marino
672*e4b17023SJohn Marino@findex MEM_KEEP_ALIAS_SET_P
673*e4b17023SJohn Marino@cindex @code{mem} and @samp{/j}
674*e4b17023SJohn Marino@cindex @code{jump}, in @code{mem}
675*e4b17023SJohn Marino@item MEM_KEEP_ALIAS_SET_P (@var{x})
676*e4b17023SJohn MarinoIn @code{mem} expressions, 1 if we should keep the alias set for this
677*e4b17023SJohn Marinomem unchanged when we access a component.  Set to 1, for example, when we
678*e4b17023SJohn Marinoare already in a non-addressable component of an aggregate.
679*e4b17023SJohn MarinoStored in the @code{jump} field and printed as @samp{/j}.
680*e4b17023SJohn Marino
681*e4b17023SJohn Marino@findex MEM_VOLATILE_P
682*e4b17023SJohn Marino@cindex @code{mem} and @samp{/v}
683*e4b17023SJohn Marino@cindex @code{asm_input} and @samp{/v}
684*e4b17023SJohn Marino@cindex @code{asm_operands} and @samp{/v}
685*e4b17023SJohn Marino@cindex @code{volatil}, in @code{mem}, @code{asm_operands}, and @code{asm_input}
686*e4b17023SJohn Marino@item MEM_VOLATILE_P (@var{x})
687*e4b17023SJohn MarinoIn @code{mem}, @code{asm_operands}, and @code{asm_input} expressions,
688*e4b17023SJohn Marinononzero for volatile memory references.
689*e4b17023SJohn MarinoStored in the @code{volatil} field and printed as @samp{/v}.
690*e4b17023SJohn Marino
691*e4b17023SJohn Marino@findex MEM_NOTRAP_P
692*e4b17023SJohn Marino@cindex @code{mem} and @samp{/c}
693*e4b17023SJohn Marino@cindex @code{call}, in @code{mem}
694*e4b17023SJohn Marino@item MEM_NOTRAP_P (@var{x})
695*e4b17023SJohn MarinoIn @code{mem}, nonzero for memory references that will not trap.
696*e4b17023SJohn MarinoStored in the @code{call} field and printed as @samp{/c}.
697*e4b17023SJohn Marino
698*e4b17023SJohn Marino@findex MEM_POINTER
699*e4b17023SJohn Marino@cindex @code{mem} and @samp{/f}
700*e4b17023SJohn Marino@cindex @code{frame_related}, in @code{mem}
701*e4b17023SJohn Marino@item MEM_POINTER (@var{x})
702*e4b17023SJohn MarinoNonzero in a @code{mem} if the memory reference holds a pointer.
703*e4b17023SJohn MarinoStored in the @code{frame_related} field and printed as @samp{/f}.
704*e4b17023SJohn Marino
705*e4b17023SJohn Marino@findex REG_FUNCTION_VALUE_P
706*e4b17023SJohn Marino@cindex @code{reg} and @samp{/i}
707*e4b17023SJohn Marino@cindex @code{return_val}, in @code{reg}
708*e4b17023SJohn Marino@item REG_FUNCTION_VALUE_P (@var{x})
709*e4b17023SJohn MarinoNonzero in a @code{reg} if it is the place in which this function's
710*e4b17023SJohn Marinovalue is going to be returned.  (This happens only in a hard
711*e4b17023SJohn Marinoregister.)  Stored in the @code{return_val} field and printed as
712*e4b17023SJohn Marino@samp{/i}.
713*e4b17023SJohn Marino
714*e4b17023SJohn Marino@findex REG_POINTER
715*e4b17023SJohn Marino@cindex @code{reg} and @samp{/f}
716*e4b17023SJohn Marino@cindex @code{frame_related}, in @code{reg}
717*e4b17023SJohn Marino@item REG_POINTER (@var{x})
718*e4b17023SJohn MarinoNonzero in a @code{reg} if the register holds a pointer.  Stored in the
719*e4b17023SJohn Marino@code{frame_related} field and printed as @samp{/f}.
720*e4b17023SJohn Marino
721*e4b17023SJohn Marino@findex REG_USERVAR_P
722*e4b17023SJohn Marino@cindex @code{reg} and @samp{/v}
723*e4b17023SJohn Marino@cindex @code{volatil}, in @code{reg}
724*e4b17023SJohn Marino@item REG_USERVAR_P (@var{x})
725*e4b17023SJohn MarinoIn a @code{reg}, nonzero if it corresponds to a variable present in
726*e4b17023SJohn Marinothe user's source code.  Zero for temporaries generated internally by
727*e4b17023SJohn Marinothe compiler.  Stored in the @code{volatil} field and printed as
728*e4b17023SJohn Marino@samp{/v}.
729*e4b17023SJohn Marino
730*e4b17023SJohn MarinoThe same hard register may be used also for collecting the values of
731*e4b17023SJohn Marinofunctions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero
732*e4b17023SJohn Marinoin this kind of use.
733*e4b17023SJohn Marino
734*e4b17023SJohn Marino@findex RTX_FRAME_RELATED_P
735*e4b17023SJohn Marino@cindex @code{insn} and @samp{/f}
736*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/f}
737*e4b17023SJohn Marino@cindex @code{jump_insn} and @samp{/f}
738*e4b17023SJohn Marino@cindex @code{barrier} and @samp{/f}
739*e4b17023SJohn Marino@cindex @code{set} and @samp{/f}
740*e4b17023SJohn Marino@cindex @code{frame_related}, in @code{insn}, @code{call_insn}, @code{jump_insn}, @code{barrier}, and @code{set}
741*e4b17023SJohn Marino@item RTX_FRAME_RELATED_P (@var{x})
742*e4b17023SJohn MarinoNonzero in an @code{insn}, @code{call_insn}, @code{jump_insn},
743*e4b17023SJohn Marino@code{barrier}, or @code{set} which is part of a function prologue
744*e4b17023SJohn Marinoand sets the stack pointer, sets the frame pointer, or saves a register.
745*e4b17023SJohn MarinoThis flag should also be set on an instruction that sets up a temporary
746*e4b17023SJohn Marinoregister to use in place of the frame pointer.
747*e4b17023SJohn MarinoStored in the @code{frame_related} field and printed as @samp{/f}.
748*e4b17023SJohn Marino
749*e4b17023SJohn MarinoIn particular, on RISC targets where there are limits on the sizes of
750*e4b17023SJohn Marinoimmediate constants, it is sometimes impossible to reach the register
751*e4b17023SJohn Marinosave area directly from the stack pointer.  In that case, a temporary
752*e4b17023SJohn Marinoregister is used that is near enough to the register save area, and the
753*e4b17023SJohn MarinoCanonical Frame Address, i.e., DWARF2's logical frame pointer, register
754*e4b17023SJohn Marinomust (temporarily) be changed to be this temporary register.  So, the
755*e4b17023SJohn Marinoinstruction that sets this temporary register must be marked as
756*e4b17023SJohn Marino@code{RTX_FRAME_RELATED_P}.
757*e4b17023SJohn Marino
758*e4b17023SJohn MarinoIf the marked instruction is overly complex (defined in terms of what
759*e4b17023SJohn Marino@code{dwarf2out_frame_debug_expr} can handle), you will also have to
760*e4b17023SJohn Marinocreate a @code{REG_FRAME_RELATED_EXPR} note and attach it to the
761*e4b17023SJohn Marinoinstruction.  This note should contain a simple expression of the
762*e4b17023SJohn Marinocomputation performed by this instruction, i.e., one that
763*e4b17023SJohn Marino@code{dwarf2out_frame_debug_expr} can handle.
764*e4b17023SJohn Marino
765*e4b17023SJohn MarinoThis flag is required for exception handling support on targets with RTL
766*e4b17023SJohn Marinoprologues.
767*e4b17023SJohn Marino
768*e4b17023SJohn Marino@findex MEM_READONLY_P
769*e4b17023SJohn Marino@cindex @code{mem} and @samp{/u}
770*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{mem}
771*e4b17023SJohn Marino@item MEM_READONLY_P (@var{x})
772*e4b17023SJohn MarinoNonzero in a @code{mem}, if the memory is statically allocated and read-only.
773*e4b17023SJohn Marino
774*e4b17023SJohn MarinoRead-only in this context means never modified during the lifetime of the
775*e4b17023SJohn Marinoprogram, not necessarily in ROM or in write-disabled pages.  A common
776*e4b17023SJohn Marinoexample of the later is a shared library's global offset table.  This
777*e4b17023SJohn Marinotable is initialized by the runtime loader, so the memory is technically
778*e4b17023SJohn Marinowritable, but after control is transfered from the runtime loader to the
779*e4b17023SJohn Marinoapplication, this memory will never be subsequently modified.
780*e4b17023SJohn Marino
781*e4b17023SJohn MarinoStored in the @code{unchanging} field and printed as @samp{/u}.
782*e4b17023SJohn Marino
783*e4b17023SJohn Marino@findex SCHED_GROUP_P
784*e4b17023SJohn Marino@cindex @code{insn} and @samp{/s}
785*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/s}
786*e4b17023SJohn Marino@cindex @code{jump_insn} and @samp{/s}
787*e4b17023SJohn Marino@cindex @code{in_struct}, in @code{insn}, @code{jump_insn} and @code{call_insn}
788*e4b17023SJohn Marino@item SCHED_GROUP_P (@var{x})
789*e4b17023SJohn MarinoDuring instruction scheduling, in an @code{insn}, @code{call_insn} or
790*e4b17023SJohn Marino@code{jump_insn}, indicates that the
791*e4b17023SJohn Marinoprevious insn must be scheduled together with this insn.  This is used to
792*e4b17023SJohn Marinoensure that certain groups of instructions will not be split up by the
793*e4b17023SJohn Marinoinstruction scheduling pass, for example, @code{use} insns before
794*e4b17023SJohn Marinoa @code{call_insn} may not be separated from the @code{call_insn}.
795*e4b17023SJohn MarinoStored in the @code{in_struct} field and printed as @samp{/s}.
796*e4b17023SJohn Marino
797*e4b17023SJohn Marino@findex SET_IS_RETURN_P
798*e4b17023SJohn Marino@cindex @code{insn} and @samp{/j}
799*e4b17023SJohn Marino@cindex @code{jump}, in @code{insn}
800*e4b17023SJohn Marino@item SET_IS_RETURN_P (@var{x})
801*e4b17023SJohn MarinoFor a @code{set}, nonzero if it is for a return.
802*e4b17023SJohn MarinoStored in the @code{jump} field and printed as @samp{/j}.
803*e4b17023SJohn Marino
804*e4b17023SJohn Marino@findex SIBLING_CALL_P
805*e4b17023SJohn Marino@cindex @code{call_insn} and @samp{/j}
806*e4b17023SJohn Marino@cindex @code{jump}, in @code{call_insn}
807*e4b17023SJohn Marino@item SIBLING_CALL_P (@var{x})
808*e4b17023SJohn MarinoFor a @code{call_insn}, nonzero if the insn is a sibling call.
809*e4b17023SJohn MarinoStored in the @code{jump} field and printed as @samp{/j}.
810*e4b17023SJohn Marino
811*e4b17023SJohn Marino@findex STRING_POOL_ADDRESS_P
812*e4b17023SJohn Marino@cindex @code{symbol_ref} and @samp{/f}
813*e4b17023SJohn Marino@cindex @code{frame_related}, in @code{symbol_ref}
814*e4b17023SJohn Marino@item STRING_POOL_ADDRESS_P (@var{x})
815*e4b17023SJohn MarinoFor a @code{symbol_ref} expression, nonzero if it addresses this function's
816*e4b17023SJohn Marinostring constant pool.
817*e4b17023SJohn MarinoStored in the @code{frame_related} field and printed as @samp{/f}.
818*e4b17023SJohn Marino
819*e4b17023SJohn Marino@findex SUBREG_PROMOTED_UNSIGNED_P
820*e4b17023SJohn Marino@cindex @code{subreg} and @samp{/u} and @samp{/v}
821*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{subreg}
822*e4b17023SJohn Marino@cindex @code{volatil}, in @code{subreg}
823*e4b17023SJohn Marino@item SUBREG_PROMOTED_UNSIGNED_P (@var{x})
824*e4b17023SJohn MarinoReturns a value greater then zero for a @code{subreg} that has
825*e4b17023SJohn Marino@code{SUBREG_PROMOTED_VAR_P} nonzero if the object being referenced is kept
826*e4b17023SJohn Marinozero-extended, zero if it is kept sign-extended, and less then zero if it is
827*e4b17023SJohn Marinoextended some other way via the @code{ptr_extend} instruction.
828*e4b17023SJohn MarinoStored in the @code{unchanging}
829*e4b17023SJohn Marinofield and @code{volatil} field, printed as @samp{/u} and @samp{/v}.
830*e4b17023SJohn MarinoThis macro may only be used to get the value it may not be used to change
831*e4b17023SJohn Marinothe value.  Use @code{SUBREG_PROMOTED_UNSIGNED_SET} to change the value.
832*e4b17023SJohn Marino
833*e4b17023SJohn Marino@findex SUBREG_PROMOTED_UNSIGNED_SET
834*e4b17023SJohn Marino@cindex @code{subreg} and @samp{/u}
835*e4b17023SJohn Marino@cindex @code{unchanging}, in @code{subreg}
836*e4b17023SJohn Marino@cindex @code{volatil}, in @code{subreg}
837*e4b17023SJohn Marino@item SUBREG_PROMOTED_UNSIGNED_SET (@var{x})
838*e4b17023SJohn MarinoSet the @code{unchanging} and @code{volatil} fields in a @code{subreg}
839*e4b17023SJohn Marinoto reflect zero, sign, or other extension.  If @code{volatil} is
840*e4b17023SJohn Marinozero, then @code{unchanging} as nonzero means zero extension and as
841*e4b17023SJohn Marinozero means sign extension.  If @code{volatil} is nonzero then some
842*e4b17023SJohn Marinoother type of extension was done via the @code{ptr_extend} instruction.
843*e4b17023SJohn Marino
844*e4b17023SJohn Marino@findex SUBREG_PROMOTED_VAR_P
845*e4b17023SJohn Marino@cindex @code{subreg} and @samp{/s}
846*e4b17023SJohn Marino@cindex @code{in_struct}, in @code{subreg}
847*e4b17023SJohn Marino@item SUBREG_PROMOTED_VAR_P (@var{x})
848*e4b17023SJohn MarinoNonzero in a @code{subreg} if it was made when accessing an object that
849*e4b17023SJohn Marinowas promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine
850*e4b17023SJohn Marinodescription macro (@pxref{Storage Layout}).  In this case, the mode of
851*e4b17023SJohn Marinothe @code{subreg} is the declared mode of the object and the mode of
852*e4b17023SJohn Marino@code{SUBREG_REG} is the mode of the register that holds the object.
853*e4b17023SJohn MarinoPromoted variables are always either sign- or zero-extended to the wider
854*e4b17023SJohn Marinomode on every assignment.  Stored in the @code{in_struct} field and
855*e4b17023SJohn Marinoprinted as @samp{/s}.
856*e4b17023SJohn Marino
857*e4b17023SJohn Marino@findex SYMBOL_REF_USED
858*e4b17023SJohn Marino@cindex @code{used}, in @code{symbol_ref}
859*e4b17023SJohn Marino@item SYMBOL_REF_USED (@var{x})
860*e4b17023SJohn MarinoIn a @code{symbol_ref}, indicates that @var{x} has been used.  This is
861*e4b17023SJohn Marinonormally only used to ensure that @var{x} is only declared external
862*e4b17023SJohn Marinoonce.  Stored in the @code{used} field.
863*e4b17023SJohn Marino
864*e4b17023SJohn Marino@findex SYMBOL_REF_WEAK
865*e4b17023SJohn Marino@cindex @code{symbol_ref} and @samp{/i}
866*e4b17023SJohn Marino@cindex @code{return_val}, in @code{symbol_ref}
867*e4b17023SJohn Marino@item SYMBOL_REF_WEAK (@var{x})
868*e4b17023SJohn MarinoIn a @code{symbol_ref}, indicates that @var{x} has been declared weak.
869*e4b17023SJohn MarinoStored in the @code{return_val} field and printed as @samp{/i}.
870*e4b17023SJohn Marino
871*e4b17023SJohn Marino@findex SYMBOL_REF_FLAG
872*e4b17023SJohn Marino@cindex @code{symbol_ref} and @samp{/v}
873*e4b17023SJohn Marino@cindex @code{volatil}, in @code{symbol_ref}
874*e4b17023SJohn Marino@item SYMBOL_REF_FLAG (@var{x})
875*e4b17023SJohn MarinoIn a @code{symbol_ref}, this is used as a flag for machine-specific purposes.
876*e4b17023SJohn MarinoStored in the @code{volatil} field and printed as @samp{/v}.
877*e4b17023SJohn Marino
878*e4b17023SJohn MarinoMost uses of @code{SYMBOL_REF_FLAG} are historic and may be subsumed
879*e4b17023SJohn Marinoby @code{SYMBOL_REF_FLAGS}.  Certainly use of @code{SYMBOL_REF_FLAGS}
880*e4b17023SJohn Marinois mandatory if the target requires more than one bit of storage.
881*e4b17023SJohn Marino
882*e4b17023SJohn Marino@findex PREFETCH_SCHEDULE_BARRIER_P
883*e4b17023SJohn Marino@cindex @code{prefetch} and @samp{/v}
884*e4b17023SJohn Marino@cindex @code{volatile}, in @code{prefetch}
885*e4b17023SJohn Marino@item PREFETCH_SCHEDULE_BARRIER_P (@var{x})
886*e4b17023SJohn MarinoIn a @code{prefetch}, indicates that the prefetch is a scheduling barrier.
887*e4b17023SJohn MarinoNo other INSNs will be moved over it.
888*e4b17023SJohn MarinoStored in the @code{volatil} field and printed as @samp{/v}.
889*e4b17023SJohn Marino@end table
890*e4b17023SJohn Marino
891*e4b17023SJohn MarinoThese are the fields to which the above macros refer:
892*e4b17023SJohn Marino
893*e4b17023SJohn Marino@table @code
894*e4b17023SJohn Marino@findex call
895*e4b17023SJohn Marino@cindex @samp{/c} in RTL dump
896*e4b17023SJohn Marino@item call
897*e4b17023SJohn MarinoIn a @code{mem}, 1 means that the memory reference will not trap.
898*e4b17023SJohn Marino
899*e4b17023SJohn MarinoIn a @code{call}, 1 means that this pure or const call may possibly
900*e4b17023SJohn Marinoinfinite loop.
901*e4b17023SJohn Marino
902*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/c}.
903*e4b17023SJohn Marino
904*e4b17023SJohn Marino@findex frame_related
905*e4b17023SJohn Marino@cindex @samp{/f} in RTL dump
906*e4b17023SJohn Marino@item frame_related
907*e4b17023SJohn MarinoIn an @code{insn} or @code{set} expression, 1 means that it is part of
908*e4b17023SJohn Marinoa function prologue and sets the stack pointer, sets the frame pointer,
909*e4b17023SJohn Marinosaves a register, or sets up a temporary register to use in place of the
910*e4b17023SJohn Marinoframe pointer.
911*e4b17023SJohn Marino
912*e4b17023SJohn MarinoIn @code{reg} expressions, 1 means that the register holds a pointer.
913*e4b17023SJohn Marino
914*e4b17023SJohn MarinoIn @code{mem} expressions, 1 means that the memory reference holds a pointer.
915*e4b17023SJohn Marino
916*e4b17023SJohn MarinoIn @code{symbol_ref} expressions, 1 means that the reference addresses
917*e4b17023SJohn Marinothis function's string constant pool.
918*e4b17023SJohn Marino
919*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/f}.
920*e4b17023SJohn Marino
921*e4b17023SJohn Marino@findex in_struct
922*e4b17023SJohn Marino@cindex @samp{/s} in RTL dump
923*e4b17023SJohn Marino@item in_struct
924*e4b17023SJohn MarinoIn @code{reg} expressions, it is 1 if the register has its entire life
925*e4b17023SJohn Marinocontained within the test expression of some loop.
926*e4b17023SJohn Marino
927*e4b17023SJohn MarinoIn @code{subreg} expressions, 1 means that the @code{subreg} is accessing
928*e4b17023SJohn Marinoan object that has had its mode promoted from a wider mode.
929*e4b17023SJohn Marino
930*e4b17023SJohn MarinoIn @code{label_ref} expressions, 1 means that the referenced label is
931*e4b17023SJohn Marinooutside the innermost loop containing the insn in which the @code{label_ref}
932*e4b17023SJohn Marinowas found.
933*e4b17023SJohn Marino
934*e4b17023SJohn MarinoIn @code{code_label} expressions, it is 1 if the label may never be deleted.
935*e4b17023SJohn MarinoThis is used for labels which are the target of non-local gotos.  Such a
936*e4b17023SJohn Marinolabel that would have been deleted is replaced with a @code{note} of type
937*e4b17023SJohn Marino@code{NOTE_INSN_DELETED_LABEL}.
938*e4b17023SJohn Marino
939*e4b17023SJohn MarinoIn an @code{insn} during dead-code elimination, 1 means that the insn is
940*e4b17023SJohn Marinodead code.
941*e4b17023SJohn Marino
942*e4b17023SJohn MarinoIn an @code{insn} or @code{jump_insn} during reorg for an insn in the
943*e4b17023SJohn Marinodelay slot of a branch,
944*e4b17023SJohn Marino1 means that this insn is from the target of the branch.
945*e4b17023SJohn Marino
946*e4b17023SJohn MarinoIn an @code{insn} during instruction scheduling, 1 means that this insn
947*e4b17023SJohn Marinomust be scheduled as part of a group together with the previous insn.
948*e4b17023SJohn Marino
949*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/s}.
950*e4b17023SJohn Marino
951*e4b17023SJohn Marino@findex return_val
952*e4b17023SJohn Marino@cindex @samp{/i} in RTL dump
953*e4b17023SJohn Marino@item return_val
954*e4b17023SJohn MarinoIn @code{reg} expressions, 1 means the register contains
955*e4b17023SJohn Marinothe value to be returned by the current function.  On
956*e4b17023SJohn Marinomachines that pass parameters in registers, the same register number
957*e4b17023SJohn Marinomay be used for parameters as well, but this flag is not set on such
958*e4b17023SJohn Marinouses.
959*e4b17023SJohn Marino
960*e4b17023SJohn MarinoIn @code{symbol_ref} expressions, 1 means the referenced symbol is weak.
961*e4b17023SJohn Marino
962*e4b17023SJohn MarinoIn @code{call} expressions, 1 means the call is pure.
963*e4b17023SJohn Marino
964*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/i}.
965*e4b17023SJohn Marino
966*e4b17023SJohn Marino@findex jump
967*e4b17023SJohn Marino@cindex @samp{/j} in RTL dump
968*e4b17023SJohn Marino@item jump
969*e4b17023SJohn MarinoIn a @code{mem} expression, 1 means we should keep the alias set for this
970*e4b17023SJohn Marinomem unchanged when we access a component.
971*e4b17023SJohn Marino
972*e4b17023SJohn MarinoIn a @code{set}, 1 means it is for a return.
973*e4b17023SJohn Marino
974*e4b17023SJohn MarinoIn a @code{call_insn}, 1 means it is a sibling call.
975*e4b17023SJohn Marino
976*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/j}.
977*e4b17023SJohn Marino
978*e4b17023SJohn Marino@findex unchanging
979*e4b17023SJohn Marino@cindex @samp{/u} in RTL dump
980*e4b17023SJohn Marino@item unchanging
981*e4b17023SJohn MarinoIn @code{reg} and @code{mem} expressions, 1 means
982*e4b17023SJohn Marinothat the value of the expression never changes.
983*e4b17023SJohn Marino
984*e4b17023SJohn MarinoIn @code{subreg} expressions, it is 1 if the @code{subreg} references an
985*e4b17023SJohn Marinounsigned object whose mode has been promoted to a wider mode.
986*e4b17023SJohn Marino
987*e4b17023SJohn MarinoIn an @code{insn} or @code{jump_insn} in the delay slot of a branch
988*e4b17023SJohn Marinoinstruction, 1 means an annulling branch should be used.
989*e4b17023SJohn Marino
990*e4b17023SJohn MarinoIn a @code{symbol_ref} expression, 1 means that this symbol addresses
991*e4b17023SJohn Marinosomething in the per-function constant pool.
992*e4b17023SJohn Marino
993*e4b17023SJohn MarinoIn a @code{call_insn} 1 means that this instruction is a call to a const
994*e4b17023SJohn Marinofunction.
995*e4b17023SJohn Marino
996*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/u}.
997*e4b17023SJohn Marino
998*e4b17023SJohn Marino@findex used
999*e4b17023SJohn Marino@item used
1000*e4b17023SJohn MarinoThis flag is used directly (without an access macro) at the end of RTL
1001*e4b17023SJohn Marinogeneration for a function, to count the number of times an expression
1002*e4b17023SJohn Marinoappears in insns.  Expressions that appear more than once are copied,
1003*e4b17023SJohn Marinoaccording to the rules for shared structure (@pxref{Sharing}).
1004*e4b17023SJohn Marino
1005*e4b17023SJohn MarinoFor a @code{reg}, it is used directly (without an access macro) by the
1006*e4b17023SJohn Marinoleaf register renumbering code to ensure that each register is only
1007*e4b17023SJohn Marinorenumbered once.
1008*e4b17023SJohn Marino
1009*e4b17023SJohn MarinoIn a @code{symbol_ref}, it indicates that an external declaration for
1010*e4b17023SJohn Marinothe symbol has already been written.
1011*e4b17023SJohn Marino
1012*e4b17023SJohn Marino@findex volatil
1013*e4b17023SJohn Marino@cindex @samp{/v} in RTL dump
1014*e4b17023SJohn Marino@item volatil
1015*e4b17023SJohn Marino@cindex volatile memory references
1016*e4b17023SJohn MarinoIn a @code{mem}, @code{asm_operands}, or @code{asm_input}
1017*e4b17023SJohn Marinoexpression, it is 1 if the memory
1018*e4b17023SJohn Marinoreference is volatile.  Volatile memory references may not be deleted,
1019*e4b17023SJohn Marinoreordered or combined.
1020*e4b17023SJohn Marino
1021*e4b17023SJohn MarinoIn a @code{symbol_ref} expression, it is used for machine-specific
1022*e4b17023SJohn Marinopurposes.
1023*e4b17023SJohn Marino
1024*e4b17023SJohn MarinoIn a @code{reg} expression, it is 1 if the value is a user-level variable.
1025*e4b17023SJohn Marino0 indicates an internal compiler temporary.
1026*e4b17023SJohn Marino
1027*e4b17023SJohn MarinoIn an @code{insn}, 1 means the insn has been deleted.
1028*e4b17023SJohn Marino
1029*e4b17023SJohn MarinoIn @code{label_ref} and @code{reg_label} expressions, 1 means a reference
1030*e4b17023SJohn Marinoto a non-local label.
1031*e4b17023SJohn Marino
1032*e4b17023SJohn MarinoIn @code{prefetch} expressions, 1 means that the containing insn is a
1033*e4b17023SJohn Marinoscheduling barrier.
1034*e4b17023SJohn Marino
1035*e4b17023SJohn MarinoIn an RTL dump, this flag is represented as @samp{/v}.
1036*e4b17023SJohn Marino@end table
1037*e4b17023SJohn Marino
1038*e4b17023SJohn Marino@node Machine Modes
1039*e4b17023SJohn Marino@section Machine Modes
1040*e4b17023SJohn Marino@cindex machine modes
1041*e4b17023SJohn Marino
1042*e4b17023SJohn Marino@findex enum machine_mode
1043*e4b17023SJohn MarinoA machine mode describes a size of data object and the representation used
1044*e4b17023SJohn Marinofor it.  In the C code, machine modes are represented by an enumeration
1045*e4b17023SJohn Marinotype, @code{enum machine_mode}, defined in @file{machmode.def}.  Each RTL
1046*e4b17023SJohn Marinoexpression has room for a machine mode and so do certain kinds of tree
1047*e4b17023SJohn Marinoexpressions (declarations and types, to be precise).
1048*e4b17023SJohn Marino
1049*e4b17023SJohn MarinoIn debugging dumps and machine descriptions, the machine mode of an RTL
1050*e4b17023SJohn Marinoexpression is written after the expression code with a colon to separate
1051*e4b17023SJohn Marinothem.  The letters @samp{mode} which appear at the end of each machine mode
1052*e4b17023SJohn Marinoname are omitted.  For example, @code{(reg:SI 38)} is a @code{reg}
1053*e4b17023SJohn Marinoexpression with machine mode @code{SImode}.  If the mode is
1054*e4b17023SJohn Marino@code{VOIDmode}, it is not written at all.
1055*e4b17023SJohn Marino
1056*e4b17023SJohn MarinoHere is a table of machine modes.  The term ``byte'' below refers to an
1057*e4b17023SJohn Marinoobject of @code{BITS_PER_UNIT} bits (@pxref{Storage Layout}).
1058*e4b17023SJohn Marino
1059*e4b17023SJohn Marino@table @code
1060*e4b17023SJohn Marino@findex BImode
1061*e4b17023SJohn Marino@item BImode
1062*e4b17023SJohn Marino``Bit'' mode represents a single bit, for predicate registers.
1063*e4b17023SJohn Marino
1064*e4b17023SJohn Marino@findex QImode
1065*e4b17023SJohn Marino@item QImode
1066*e4b17023SJohn Marino``Quarter-Integer'' mode represents a single byte treated as an integer.
1067*e4b17023SJohn Marino
1068*e4b17023SJohn Marino@findex HImode
1069*e4b17023SJohn Marino@item HImode
1070*e4b17023SJohn Marino``Half-Integer'' mode represents a two-byte integer.
1071*e4b17023SJohn Marino
1072*e4b17023SJohn Marino@findex PSImode
1073*e4b17023SJohn Marino@item PSImode
1074*e4b17023SJohn Marino``Partial Single Integer'' mode represents an integer which occupies
1075*e4b17023SJohn Marinofour bytes but which doesn't really use all four.  On some machines,
1076*e4b17023SJohn Marinothis is the right mode to use for pointers.
1077*e4b17023SJohn Marino
1078*e4b17023SJohn Marino@findex SImode
1079*e4b17023SJohn Marino@item SImode
1080*e4b17023SJohn Marino``Single Integer'' mode represents a four-byte integer.
1081*e4b17023SJohn Marino
1082*e4b17023SJohn Marino@findex PDImode
1083*e4b17023SJohn Marino@item PDImode
1084*e4b17023SJohn Marino``Partial Double Integer'' mode represents an integer which occupies
1085*e4b17023SJohn Marinoeight bytes but which doesn't really use all eight.  On some machines,
1086*e4b17023SJohn Marinothis is the right mode to use for certain pointers.
1087*e4b17023SJohn Marino
1088*e4b17023SJohn Marino@findex DImode
1089*e4b17023SJohn Marino@item DImode
1090*e4b17023SJohn Marino``Double Integer'' mode represents an eight-byte integer.
1091*e4b17023SJohn Marino
1092*e4b17023SJohn Marino@findex TImode
1093*e4b17023SJohn Marino@item TImode
1094*e4b17023SJohn Marino``Tetra Integer'' (?) mode represents a sixteen-byte integer.
1095*e4b17023SJohn Marino
1096*e4b17023SJohn Marino@findex OImode
1097*e4b17023SJohn Marino@item OImode
1098*e4b17023SJohn Marino``Octa Integer'' (?) mode represents a thirty-two-byte integer.
1099*e4b17023SJohn Marino
1100*e4b17023SJohn Marino@findex QFmode
1101*e4b17023SJohn Marino@item QFmode
1102*e4b17023SJohn Marino``Quarter-Floating'' mode represents a quarter-precision (single byte)
1103*e4b17023SJohn Marinofloating point number.
1104*e4b17023SJohn Marino
1105*e4b17023SJohn Marino@findex HFmode
1106*e4b17023SJohn Marino@item HFmode
1107*e4b17023SJohn Marino``Half-Floating'' mode represents a half-precision (two byte) floating
1108*e4b17023SJohn Marinopoint number.
1109*e4b17023SJohn Marino
1110*e4b17023SJohn Marino@findex TQFmode
1111*e4b17023SJohn Marino@item TQFmode
1112*e4b17023SJohn Marino``Three-Quarter-Floating'' (?) mode represents a three-quarter-precision
1113*e4b17023SJohn Marino(three byte) floating point number.
1114*e4b17023SJohn Marino
1115*e4b17023SJohn Marino@findex SFmode
1116*e4b17023SJohn Marino@item SFmode
1117*e4b17023SJohn Marino``Single Floating'' mode represents a four byte floating point number.
1118*e4b17023SJohn MarinoIn the common case, of a processor with IEEE arithmetic and 8-bit bytes,
1119*e4b17023SJohn Marinothis is a single-precision IEEE floating point number; it can also be
1120*e4b17023SJohn Marinoused for double-precision (on processors with 16-bit bytes) and
1121*e4b17023SJohn Marinosingle-precision VAX and IBM types.
1122*e4b17023SJohn Marino
1123*e4b17023SJohn Marino@findex DFmode
1124*e4b17023SJohn Marino@item DFmode
1125*e4b17023SJohn Marino``Double Floating'' mode represents an eight byte floating point number.
1126*e4b17023SJohn MarinoIn the common case, of a processor with IEEE arithmetic and 8-bit bytes,
1127*e4b17023SJohn Marinothis is a double-precision IEEE floating point number.
1128*e4b17023SJohn Marino
1129*e4b17023SJohn Marino@findex XFmode
1130*e4b17023SJohn Marino@item XFmode
1131*e4b17023SJohn Marino``Extended Floating'' mode represents an IEEE extended floating point
1132*e4b17023SJohn Marinonumber.  This mode only has 80 meaningful bits (ten bytes).  Some
1133*e4b17023SJohn Marinoprocessors require such numbers to be padded to twelve bytes, others
1134*e4b17023SJohn Marinoto sixteen; this mode is used for either.
1135*e4b17023SJohn Marino
1136*e4b17023SJohn Marino@findex SDmode
1137*e4b17023SJohn Marino@item SDmode
1138*e4b17023SJohn Marino``Single Decimal Floating'' mode represents a four byte decimal
1139*e4b17023SJohn Marinofloating point number (as distinct from conventional binary floating
1140*e4b17023SJohn Marinopoint).
1141*e4b17023SJohn Marino
1142*e4b17023SJohn Marino@findex DDmode
1143*e4b17023SJohn Marino@item DDmode
1144*e4b17023SJohn Marino``Double Decimal Floating'' mode represents an eight byte decimal
1145*e4b17023SJohn Marinofloating point number.
1146*e4b17023SJohn Marino
1147*e4b17023SJohn Marino@findex TDmode
1148*e4b17023SJohn Marino@item TDmode
1149*e4b17023SJohn Marino``Tetra Decimal Floating'' mode represents a sixteen byte decimal
1150*e4b17023SJohn Marinofloating point number all 128 of whose bits are meaningful.
1151*e4b17023SJohn Marino
1152*e4b17023SJohn Marino@findex TFmode
1153*e4b17023SJohn Marino@item TFmode
1154*e4b17023SJohn Marino``Tetra Floating'' mode represents a sixteen byte floating point number
1155*e4b17023SJohn Marinoall 128 of whose bits are meaningful.  One common use is the
1156*e4b17023SJohn MarinoIEEE quad-precision format.
1157*e4b17023SJohn Marino
1158*e4b17023SJohn Marino@findex QQmode
1159*e4b17023SJohn Marino@item QQmode
1160*e4b17023SJohn Marino``Quarter-Fractional'' mode represents a single byte treated as a signed
1161*e4b17023SJohn Marinofractional number.  The default format is ``s.7''.
1162*e4b17023SJohn Marino
1163*e4b17023SJohn Marino@findex HQmode
1164*e4b17023SJohn Marino@item HQmode
1165*e4b17023SJohn Marino``Half-Fractional'' mode represents a two-byte signed fractional number.
1166*e4b17023SJohn MarinoThe default format is ``s.15''.
1167*e4b17023SJohn Marino
1168*e4b17023SJohn Marino@findex SQmode
1169*e4b17023SJohn Marino@item SQmode
1170*e4b17023SJohn Marino``Single Fractional'' mode represents a four-byte signed fractional number.
1171*e4b17023SJohn MarinoThe default format is ``s.31''.
1172*e4b17023SJohn Marino
1173*e4b17023SJohn Marino@findex DQmode
1174*e4b17023SJohn Marino@item DQmode
1175*e4b17023SJohn Marino``Double Fractional'' mode represents an eight-byte signed fractional number.
1176*e4b17023SJohn MarinoThe default format is ``s.63''.
1177*e4b17023SJohn Marino
1178*e4b17023SJohn Marino@findex TQmode
1179*e4b17023SJohn Marino@item TQmode
1180*e4b17023SJohn Marino``Tetra Fractional'' mode represents a sixteen-byte signed fractional number.
1181*e4b17023SJohn MarinoThe default format is ``s.127''.
1182*e4b17023SJohn Marino
1183*e4b17023SJohn Marino@findex UQQmode
1184*e4b17023SJohn Marino@item UQQmode
1185*e4b17023SJohn Marino``Unsigned Quarter-Fractional'' mode represents a single byte treated as an
1186*e4b17023SJohn Marinounsigned fractional number.  The default format is ``.8''.
1187*e4b17023SJohn Marino
1188*e4b17023SJohn Marino@findex UHQmode
1189*e4b17023SJohn Marino@item UHQmode
1190*e4b17023SJohn Marino``Unsigned Half-Fractional'' mode represents a two-byte unsigned fractional
1191*e4b17023SJohn Marinonumber.  The default format is ``.16''.
1192*e4b17023SJohn Marino
1193*e4b17023SJohn Marino@findex USQmode
1194*e4b17023SJohn Marino@item USQmode
1195*e4b17023SJohn Marino``Unsigned Single Fractional'' mode represents a four-byte unsigned fractional
1196*e4b17023SJohn Marinonumber.  The default format is ``.32''.
1197*e4b17023SJohn Marino
1198*e4b17023SJohn Marino@findex UDQmode
1199*e4b17023SJohn Marino@item UDQmode
1200*e4b17023SJohn Marino``Unsigned Double Fractional'' mode represents an eight-byte unsigned
1201*e4b17023SJohn Marinofractional number.  The default format is ``.64''.
1202*e4b17023SJohn Marino
1203*e4b17023SJohn Marino@findex UTQmode
1204*e4b17023SJohn Marino@item UTQmode
1205*e4b17023SJohn Marino``Unsigned Tetra Fractional'' mode represents a sixteen-byte unsigned
1206*e4b17023SJohn Marinofractional number.  The default format is ``.128''.
1207*e4b17023SJohn Marino
1208*e4b17023SJohn Marino@findex HAmode
1209*e4b17023SJohn Marino@item HAmode
1210*e4b17023SJohn Marino``Half-Accumulator'' mode represents a two-byte signed accumulator.
1211*e4b17023SJohn MarinoThe default format is ``s8.7''.
1212*e4b17023SJohn Marino
1213*e4b17023SJohn Marino@findex SAmode
1214*e4b17023SJohn Marino@item SAmode
1215*e4b17023SJohn Marino``Single Accumulator'' mode represents a four-byte signed accumulator.
1216*e4b17023SJohn MarinoThe default format is ``s16.15''.
1217*e4b17023SJohn Marino
1218*e4b17023SJohn Marino@findex DAmode
1219*e4b17023SJohn Marino@item DAmode
1220*e4b17023SJohn Marino``Double Accumulator'' mode represents an eight-byte signed accumulator.
1221*e4b17023SJohn MarinoThe default format is ``s32.31''.
1222*e4b17023SJohn Marino
1223*e4b17023SJohn Marino@findex TAmode
1224*e4b17023SJohn Marino@item TAmode
1225*e4b17023SJohn Marino``Tetra Accumulator'' mode represents a sixteen-byte signed accumulator.
1226*e4b17023SJohn MarinoThe default format is ``s64.63''.
1227*e4b17023SJohn Marino
1228*e4b17023SJohn Marino@findex UHAmode
1229*e4b17023SJohn Marino@item UHAmode
1230*e4b17023SJohn Marino``Unsigned Half-Accumulator'' mode represents a two-byte unsigned accumulator.
1231*e4b17023SJohn MarinoThe default format is ``8.8''.
1232*e4b17023SJohn Marino
1233*e4b17023SJohn Marino@findex USAmode
1234*e4b17023SJohn Marino@item USAmode
1235*e4b17023SJohn Marino``Unsigned Single Accumulator'' mode represents a four-byte unsigned
1236*e4b17023SJohn Marinoaccumulator.  The default format is ``16.16''.
1237*e4b17023SJohn Marino
1238*e4b17023SJohn Marino@findex UDAmode
1239*e4b17023SJohn Marino@item UDAmode
1240*e4b17023SJohn Marino``Unsigned Double Accumulator'' mode represents an eight-byte unsigned
1241*e4b17023SJohn Marinoaccumulator.  The default format is ``32.32''.
1242*e4b17023SJohn Marino
1243*e4b17023SJohn Marino@findex UTAmode
1244*e4b17023SJohn Marino@item UTAmode
1245*e4b17023SJohn Marino``Unsigned Tetra Accumulator'' mode represents a sixteen-byte unsigned
1246*e4b17023SJohn Marinoaccumulator.  The default format is ``64.64''.
1247*e4b17023SJohn Marino
1248*e4b17023SJohn Marino@findex CCmode
1249*e4b17023SJohn Marino@item CCmode
1250*e4b17023SJohn Marino``Condition Code'' mode represents the value of a condition code, which
1251*e4b17023SJohn Marinois a machine-specific set of bits used to represent the result of a
1252*e4b17023SJohn Marinocomparison operation.  Other machine-specific modes may also be used for
1253*e4b17023SJohn Marinothe condition code.  These modes are not used on machines that use
1254*e4b17023SJohn Marino@code{cc0} (@pxref{Condition Code}).
1255*e4b17023SJohn Marino
1256*e4b17023SJohn Marino@findex BLKmode
1257*e4b17023SJohn Marino@item BLKmode
1258*e4b17023SJohn Marino``Block'' mode represents values that are aggregates to which none of
1259*e4b17023SJohn Marinothe other modes apply.  In RTL, only memory references can have this mode,
1260*e4b17023SJohn Marinoand only if they appear in string-move or vector instructions.  On machines
1261*e4b17023SJohn Marinowhich have no such instructions, @code{BLKmode} will not appear in RTL@.
1262*e4b17023SJohn Marino
1263*e4b17023SJohn Marino@findex VOIDmode
1264*e4b17023SJohn Marino@item VOIDmode
1265*e4b17023SJohn MarinoVoid mode means the absence of a mode or an unspecified mode.
1266*e4b17023SJohn MarinoFor example, RTL expressions of code @code{const_int} have mode
1267*e4b17023SJohn Marino@code{VOIDmode} because they can be taken to have whatever mode the context
1268*e4b17023SJohn Marinorequires.  In debugging dumps of RTL, @code{VOIDmode} is expressed by
1269*e4b17023SJohn Marinothe absence of any mode.
1270*e4b17023SJohn Marino
1271*e4b17023SJohn Marino@findex QCmode
1272*e4b17023SJohn Marino@findex HCmode
1273*e4b17023SJohn Marino@findex SCmode
1274*e4b17023SJohn Marino@findex DCmode
1275*e4b17023SJohn Marino@findex XCmode
1276*e4b17023SJohn Marino@findex TCmode
1277*e4b17023SJohn Marino@item QCmode, HCmode, SCmode, DCmode, XCmode, TCmode
1278*e4b17023SJohn MarinoThese modes stand for a complex number represented as a pair of floating
1279*e4b17023SJohn Marinopoint values.  The floating point values are in @code{QFmode},
1280*e4b17023SJohn Marino@code{HFmode}, @code{SFmode}, @code{DFmode}, @code{XFmode}, and
1281*e4b17023SJohn Marino@code{TFmode}, respectively.
1282*e4b17023SJohn Marino
1283*e4b17023SJohn Marino@findex CQImode
1284*e4b17023SJohn Marino@findex CHImode
1285*e4b17023SJohn Marino@findex CSImode
1286*e4b17023SJohn Marino@findex CDImode
1287*e4b17023SJohn Marino@findex CTImode
1288*e4b17023SJohn Marino@findex COImode
1289*e4b17023SJohn Marino@item CQImode, CHImode, CSImode, CDImode, CTImode, COImode
1290*e4b17023SJohn MarinoThese modes stand for a complex number represented as a pair of integer
1291*e4b17023SJohn Marinovalues.  The integer values are in @code{QImode}, @code{HImode},
1292*e4b17023SJohn Marino@code{SImode}, @code{DImode}, @code{TImode}, and @code{OImode},
1293*e4b17023SJohn Marinorespectively.
1294*e4b17023SJohn Marino@end table
1295*e4b17023SJohn Marino
1296*e4b17023SJohn MarinoThe machine description defines @code{Pmode} as a C macro which expands
1297*e4b17023SJohn Marinointo the machine mode used for addresses.  Normally this is the mode
1298*e4b17023SJohn Marinowhose size is @code{BITS_PER_WORD}, @code{SImode} on 32-bit machines.
1299*e4b17023SJohn Marino
1300*e4b17023SJohn MarinoThe only modes which a machine description @i{must} support are
1301*e4b17023SJohn Marino@code{QImode}, and the modes corresponding to @code{BITS_PER_WORD},
1302*e4b17023SJohn Marino@code{FLOAT_TYPE_SIZE} and @code{DOUBLE_TYPE_SIZE}.
1303*e4b17023SJohn MarinoThe compiler will attempt to use @code{DImode} for 8-byte structures and
1304*e4b17023SJohn Marinounions, but this can be prevented by overriding the definition of
1305*e4b17023SJohn Marino@code{MAX_FIXED_MODE_SIZE}.  Alternatively, you can have the compiler
1306*e4b17023SJohn Marinouse @code{TImode} for 16-byte structures and unions.  Likewise, you can
1307*e4b17023SJohn Marinoarrange for the C type @code{short int} to avoid using @code{HImode}.
1308*e4b17023SJohn Marino
1309*e4b17023SJohn Marino@cindex mode classes
1310*e4b17023SJohn MarinoVery few explicit references to machine modes remain in the compiler and
1311*e4b17023SJohn Marinothese few references will soon be removed.  Instead, the machine modes
1312*e4b17023SJohn Marinoare divided into mode classes.  These are represented by the enumeration
1313*e4b17023SJohn Marinotype @code{enum mode_class} defined in @file{machmode.h}.  The possible
1314*e4b17023SJohn Marinomode classes are:
1315*e4b17023SJohn Marino
1316*e4b17023SJohn Marino@table @code
1317*e4b17023SJohn Marino@findex MODE_INT
1318*e4b17023SJohn Marino@item MODE_INT
1319*e4b17023SJohn MarinoInteger modes.  By default these are @code{BImode}, @code{QImode},
1320*e4b17023SJohn Marino@code{HImode}, @code{SImode}, @code{DImode}, @code{TImode}, and
1321*e4b17023SJohn Marino@code{OImode}.
1322*e4b17023SJohn Marino
1323*e4b17023SJohn Marino@findex MODE_PARTIAL_INT
1324*e4b17023SJohn Marino@item MODE_PARTIAL_INT
1325*e4b17023SJohn MarinoThe ``partial integer'' modes, @code{PQImode}, @code{PHImode},
1326*e4b17023SJohn Marino@code{PSImode} and @code{PDImode}.
1327*e4b17023SJohn Marino
1328*e4b17023SJohn Marino@findex MODE_FLOAT
1329*e4b17023SJohn Marino@item MODE_FLOAT
1330*e4b17023SJohn MarinoFloating point modes.  By default these are @code{QFmode},
1331*e4b17023SJohn Marino@code{HFmode}, @code{TQFmode}, @code{SFmode}, @code{DFmode},
1332*e4b17023SJohn Marino@code{XFmode} and @code{TFmode}.
1333*e4b17023SJohn Marino
1334*e4b17023SJohn Marino@findex MODE_DECIMAL_FLOAT
1335*e4b17023SJohn Marino@item MODE_DECIMAL_FLOAT
1336*e4b17023SJohn MarinoDecimal floating point modes.  By default these are @code{SDmode},
1337*e4b17023SJohn Marino@code{DDmode} and @code{TDmode}.
1338*e4b17023SJohn Marino
1339*e4b17023SJohn Marino@findex MODE_FRACT
1340*e4b17023SJohn Marino@item MODE_FRACT
1341*e4b17023SJohn MarinoSigned fractional modes.  By default these are @code{QQmode}, @code{HQmode},
1342*e4b17023SJohn Marino@code{SQmode}, @code{DQmode} and @code{TQmode}.
1343*e4b17023SJohn Marino
1344*e4b17023SJohn Marino@findex MODE_UFRACT
1345*e4b17023SJohn Marino@item MODE_UFRACT
1346*e4b17023SJohn MarinoUnsigned fractional modes.  By default these are @code{UQQmode}, @code{UHQmode},
1347*e4b17023SJohn Marino@code{USQmode}, @code{UDQmode} and @code{UTQmode}.
1348*e4b17023SJohn Marino
1349*e4b17023SJohn Marino@findex MODE_ACCUM
1350*e4b17023SJohn Marino@item MODE_ACCUM
1351*e4b17023SJohn MarinoSigned accumulator modes.  By default these are @code{HAmode},
1352*e4b17023SJohn Marino@code{SAmode}, @code{DAmode} and @code{TAmode}.
1353*e4b17023SJohn Marino
1354*e4b17023SJohn Marino@findex MODE_UACCUM
1355*e4b17023SJohn Marino@item MODE_UACCUM
1356*e4b17023SJohn MarinoUnsigned accumulator modes.  By default these are @code{UHAmode},
1357*e4b17023SJohn Marino@code{USAmode}, @code{UDAmode} and @code{UTAmode}.
1358*e4b17023SJohn Marino
1359*e4b17023SJohn Marino@findex MODE_COMPLEX_INT
1360*e4b17023SJohn Marino@item MODE_COMPLEX_INT
1361*e4b17023SJohn MarinoComplex integer modes.  (These are not currently implemented).
1362*e4b17023SJohn Marino
1363*e4b17023SJohn Marino@findex MODE_COMPLEX_FLOAT
1364*e4b17023SJohn Marino@item MODE_COMPLEX_FLOAT
1365*e4b17023SJohn MarinoComplex floating point modes.  By default these are @code{QCmode},
1366*e4b17023SJohn Marino@code{HCmode}, @code{SCmode}, @code{DCmode}, @code{XCmode}, and
1367*e4b17023SJohn Marino@code{TCmode}.
1368*e4b17023SJohn Marino
1369*e4b17023SJohn Marino@findex MODE_FUNCTION
1370*e4b17023SJohn Marino@item MODE_FUNCTION
1371*e4b17023SJohn MarinoAlgol or Pascal function variables including a static chain.
1372*e4b17023SJohn Marino(These are not currently implemented).
1373*e4b17023SJohn Marino
1374*e4b17023SJohn Marino@findex MODE_CC
1375*e4b17023SJohn Marino@item MODE_CC
1376*e4b17023SJohn MarinoModes representing condition code values.  These are @code{CCmode} plus
1377*e4b17023SJohn Marinoany @code{CC_MODE} modes listed in the @file{@var{machine}-modes.def}.
1378*e4b17023SJohn Marino@xref{Jump Patterns},
1379*e4b17023SJohn Marinoalso see @ref{Condition Code}.
1380*e4b17023SJohn Marino
1381*e4b17023SJohn Marino@findex MODE_RANDOM
1382*e4b17023SJohn Marino@item MODE_RANDOM
1383*e4b17023SJohn MarinoThis is a catchall mode class for modes which don't fit into the above
1384*e4b17023SJohn Marinoclasses.  Currently @code{VOIDmode} and @code{BLKmode} are in
1385*e4b17023SJohn Marino@code{MODE_RANDOM}.
1386*e4b17023SJohn Marino@end table
1387*e4b17023SJohn Marino
1388*e4b17023SJohn MarinoHere are some C macros that relate to machine modes:
1389*e4b17023SJohn Marino
1390*e4b17023SJohn Marino@table @code
1391*e4b17023SJohn Marino@findex GET_MODE
1392*e4b17023SJohn Marino@item GET_MODE (@var{x})
1393*e4b17023SJohn MarinoReturns the machine mode of the RTX @var{x}.
1394*e4b17023SJohn Marino
1395*e4b17023SJohn Marino@findex PUT_MODE
1396*e4b17023SJohn Marino@item PUT_MODE (@var{x}, @var{newmode})
1397*e4b17023SJohn MarinoAlters the machine mode of the RTX @var{x} to be @var{newmode}.
1398*e4b17023SJohn Marino
1399*e4b17023SJohn Marino@findex NUM_MACHINE_MODES
1400*e4b17023SJohn Marino@item NUM_MACHINE_MODES
1401*e4b17023SJohn MarinoStands for the number of machine modes available on the target
1402*e4b17023SJohn Marinomachine.  This is one greater than the largest numeric value of any
1403*e4b17023SJohn Marinomachine mode.
1404*e4b17023SJohn Marino
1405*e4b17023SJohn Marino@findex GET_MODE_NAME
1406*e4b17023SJohn Marino@item GET_MODE_NAME (@var{m})
1407*e4b17023SJohn MarinoReturns the name of mode @var{m} as a string.
1408*e4b17023SJohn Marino
1409*e4b17023SJohn Marino@findex GET_MODE_CLASS
1410*e4b17023SJohn Marino@item GET_MODE_CLASS (@var{m})
1411*e4b17023SJohn MarinoReturns the mode class of mode @var{m}.
1412*e4b17023SJohn Marino
1413*e4b17023SJohn Marino@findex GET_MODE_WIDER_MODE
1414*e4b17023SJohn Marino@item GET_MODE_WIDER_MODE (@var{m})
1415*e4b17023SJohn MarinoReturns the next wider natural mode.  For example, the expression
1416*e4b17023SJohn Marino@code{GET_MODE_WIDER_MODE (QImode)} returns @code{HImode}.
1417*e4b17023SJohn Marino
1418*e4b17023SJohn Marino@findex GET_MODE_SIZE
1419*e4b17023SJohn Marino@item GET_MODE_SIZE (@var{m})
1420*e4b17023SJohn MarinoReturns the size in bytes of a datum of mode @var{m}.
1421*e4b17023SJohn Marino
1422*e4b17023SJohn Marino@findex GET_MODE_BITSIZE
1423*e4b17023SJohn Marino@item GET_MODE_BITSIZE (@var{m})
1424*e4b17023SJohn MarinoReturns the size in bits of a datum of mode @var{m}.
1425*e4b17023SJohn Marino
1426*e4b17023SJohn Marino@findex GET_MODE_IBIT
1427*e4b17023SJohn Marino@item GET_MODE_IBIT (@var{m})
1428*e4b17023SJohn MarinoReturns the number of integral bits of a datum of fixed-point mode @var{m}.
1429*e4b17023SJohn Marino
1430*e4b17023SJohn Marino@findex GET_MODE_FBIT
1431*e4b17023SJohn Marino@item GET_MODE_FBIT (@var{m})
1432*e4b17023SJohn MarinoReturns the number of fractional bits of a datum of fixed-point mode @var{m}.
1433*e4b17023SJohn Marino
1434*e4b17023SJohn Marino@findex GET_MODE_MASK
1435*e4b17023SJohn Marino@item GET_MODE_MASK (@var{m})
1436*e4b17023SJohn MarinoReturns a bitmask containing 1 for all bits in a word that fit within
1437*e4b17023SJohn Marinomode @var{m}.  This macro can only be used for modes whose bitsize is
1438*e4b17023SJohn Marinoless than or equal to @code{HOST_BITS_PER_INT}.
1439*e4b17023SJohn Marino
1440*e4b17023SJohn Marino@findex GET_MODE_ALIGNMENT
1441*e4b17023SJohn Marino@item GET_MODE_ALIGNMENT (@var{m})
1442*e4b17023SJohn MarinoReturn the required alignment, in bits, for an object of mode @var{m}.
1443*e4b17023SJohn Marino
1444*e4b17023SJohn Marino@findex GET_MODE_UNIT_SIZE
1445*e4b17023SJohn Marino@item GET_MODE_UNIT_SIZE (@var{m})
1446*e4b17023SJohn MarinoReturns the size in bytes of the subunits of a datum of mode @var{m}.
1447*e4b17023SJohn MarinoThis is the same as @code{GET_MODE_SIZE} except in the case of complex
1448*e4b17023SJohn Marinomodes.  For them, the unit size is the size of the real or imaginary
1449*e4b17023SJohn Marinopart.
1450*e4b17023SJohn Marino
1451*e4b17023SJohn Marino@findex GET_MODE_NUNITS
1452*e4b17023SJohn Marino@item GET_MODE_NUNITS (@var{m})
1453*e4b17023SJohn MarinoReturns the number of units contained in a mode, i.e.,
1454*e4b17023SJohn Marino@code{GET_MODE_SIZE} divided by @code{GET_MODE_UNIT_SIZE}.
1455*e4b17023SJohn Marino
1456*e4b17023SJohn Marino@findex GET_CLASS_NARROWEST_MODE
1457*e4b17023SJohn Marino@item GET_CLASS_NARROWEST_MODE (@var{c})
1458*e4b17023SJohn MarinoReturns the narrowest mode in mode class @var{c}.
1459*e4b17023SJohn Marino@end table
1460*e4b17023SJohn Marino
1461*e4b17023SJohn Marino@findex byte_mode
1462*e4b17023SJohn Marino@findex word_mode
1463*e4b17023SJohn MarinoThe global variables @code{byte_mode} and @code{word_mode} contain modes
1464*e4b17023SJohn Marinowhose classes are @code{MODE_INT} and whose bitsizes are either
1465*e4b17023SJohn Marino@code{BITS_PER_UNIT} or @code{BITS_PER_WORD}, respectively.  On 32-bit
1466*e4b17023SJohn Marinomachines, these are @code{QImode} and @code{SImode}, respectively.
1467*e4b17023SJohn Marino
1468*e4b17023SJohn Marino@node Constants
1469*e4b17023SJohn Marino@section Constant Expression Types
1470*e4b17023SJohn Marino@cindex RTL constants
1471*e4b17023SJohn Marino@cindex RTL constant expression types
1472*e4b17023SJohn Marino
1473*e4b17023SJohn MarinoThe simplest RTL expressions are those that represent constant values.
1474*e4b17023SJohn Marino
1475*e4b17023SJohn Marino@table @code
1476*e4b17023SJohn Marino@findex const_int
1477*e4b17023SJohn Marino@item (const_int @var{i})
1478*e4b17023SJohn MarinoThis type of expression represents the integer value @var{i}.  @var{i}
1479*e4b17023SJohn Marinois customarily accessed with the macro @code{INTVAL} as in
1480*e4b17023SJohn Marino@code{INTVAL (@var{exp})}, which is equivalent to @code{XWINT (@var{exp}, 0)}.
1481*e4b17023SJohn Marino
1482*e4b17023SJohn MarinoConstants generated for modes with fewer bits than @code{HOST_WIDE_INT}
1483*e4b17023SJohn Marinomust be sign extended to full width (e.g., with @code{gen_int_mode}).
1484*e4b17023SJohn Marino
1485*e4b17023SJohn Marino@findex const0_rtx
1486*e4b17023SJohn Marino@findex const1_rtx
1487*e4b17023SJohn Marino@findex const2_rtx
1488*e4b17023SJohn Marino@findex constm1_rtx
1489*e4b17023SJohn MarinoThere is only one expression object for the integer value zero; it is
1490*e4b17023SJohn Marinothe value of the variable @code{const0_rtx}.  Likewise, the only
1491*e4b17023SJohn Marinoexpression for integer value one is found in @code{const1_rtx}, the only
1492*e4b17023SJohn Marinoexpression for integer value two is found in @code{const2_rtx}, and the
1493*e4b17023SJohn Marinoonly expression for integer value negative one is found in
1494*e4b17023SJohn Marino@code{constm1_rtx}.  Any attempt to create an expression of code
1495*e4b17023SJohn Marino@code{const_int} and value zero, one, two or negative one will return
1496*e4b17023SJohn Marino@code{const0_rtx}, @code{const1_rtx}, @code{const2_rtx} or
1497*e4b17023SJohn Marino@code{constm1_rtx} as appropriate.
1498*e4b17023SJohn Marino
1499*e4b17023SJohn Marino@findex const_true_rtx
1500*e4b17023SJohn MarinoSimilarly, there is only one object for the integer whose value is
1501*e4b17023SJohn Marino@code{STORE_FLAG_VALUE}.  It is found in @code{const_true_rtx}.  If
1502*e4b17023SJohn Marino@code{STORE_FLAG_VALUE} is one, @code{const_true_rtx} and
1503*e4b17023SJohn Marino@code{const1_rtx} will point to the same object.  If
1504*e4b17023SJohn Marino@code{STORE_FLAG_VALUE} is @minus{}1, @code{const_true_rtx} and
1505*e4b17023SJohn Marino@code{constm1_rtx} will point to the same object.
1506*e4b17023SJohn Marino
1507*e4b17023SJohn Marino@findex const_double
1508*e4b17023SJohn Marino@item (const_double:@var{m} @var{i0} @var{i1} @dots{})
1509*e4b17023SJohn MarinoRepresents either a floating-point constant of mode @var{m} or an
1510*e4b17023SJohn Marinointeger constant too large to fit into @code{HOST_BITS_PER_WIDE_INT}
1511*e4b17023SJohn Marinobits but small enough to fit within twice that number of bits (GCC
1512*e4b17023SJohn Marinodoes not provide a mechanism to represent even larger constants).  In
1513*e4b17023SJohn Marinothe latter case, @var{m} will be @code{VOIDmode}.
1514*e4b17023SJohn Marino
1515*e4b17023SJohn Marino@findex CONST_DOUBLE_LOW
1516*e4b17023SJohn MarinoIf @var{m} is @code{VOIDmode}, the bits of the value are stored in
1517*e4b17023SJohn Marino@var{i0} and @var{i1}.  @var{i0} is customarily accessed with the macro
1518*e4b17023SJohn Marino@code{CONST_DOUBLE_LOW} and @var{i1} with @code{CONST_DOUBLE_HIGH}.
1519*e4b17023SJohn Marino
1520*e4b17023SJohn MarinoIf the constant is floating point (regardless of its precision), then
1521*e4b17023SJohn Marinothe number of integers used to store the value depends on the size of
1522*e4b17023SJohn Marino@code{REAL_VALUE_TYPE} (@pxref{Floating Point}).  The integers
1523*e4b17023SJohn Marinorepresent a floating point number, but not precisely in the target
1524*e4b17023SJohn Marinomachine's or host machine's floating point format.  To convert them to
1525*e4b17023SJohn Marinothe precise bit pattern used by the target machine, use the macro
1526*e4b17023SJohn Marino@code{REAL_VALUE_TO_TARGET_DOUBLE} and friends (@pxref{Data Output}).
1527*e4b17023SJohn Marino
1528*e4b17023SJohn Marino@findex const_fixed
1529*e4b17023SJohn Marino@item (const_fixed:@var{m} @dots{})
1530*e4b17023SJohn MarinoRepresents a fixed-point constant of mode @var{m}.
1531*e4b17023SJohn MarinoThe operand is a data structure of type @code{struct fixed_value} and
1532*e4b17023SJohn Marinois accessed with the macro @code{CONST_FIXED_VALUE}.  The high part of
1533*e4b17023SJohn Marinodata is accessed with @code{CONST_FIXED_VALUE_HIGH}; the low part is
1534*e4b17023SJohn Marinoaccessed with @code{CONST_FIXED_VALUE_LOW}.
1535*e4b17023SJohn Marino
1536*e4b17023SJohn Marino@findex const_vector
1537*e4b17023SJohn Marino@item (const_vector:@var{m} [@var{x0} @var{x1} @dots{}])
1538*e4b17023SJohn MarinoRepresents a vector constant.  The square brackets stand for the vector
1539*e4b17023SJohn Marinocontaining the constant elements.  @var{x0}, @var{x1} and so on are
1540*e4b17023SJohn Marinothe @code{const_int}, @code{const_double} or @code{const_fixed} elements.
1541*e4b17023SJohn Marino
1542*e4b17023SJohn MarinoThe number of units in a @code{const_vector} is obtained with the macro
1543*e4b17023SJohn Marino@code{CONST_VECTOR_NUNITS} as in @code{CONST_VECTOR_NUNITS (@var{v})}.
1544*e4b17023SJohn Marino
1545*e4b17023SJohn MarinoIndividual elements in a vector constant are accessed with the macro
1546*e4b17023SJohn Marino@code{CONST_VECTOR_ELT} as in @code{CONST_VECTOR_ELT (@var{v}, @var{n})}
1547*e4b17023SJohn Marinowhere @var{v} is the vector constant and @var{n} is the element
1548*e4b17023SJohn Marinodesired.
1549*e4b17023SJohn Marino
1550*e4b17023SJohn Marino@findex const_string
1551*e4b17023SJohn Marino@item (const_string @var{str})
1552*e4b17023SJohn MarinoRepresents a constant string with value @var{str}.  Currently this is
1553*e4b17023SJohn Marinoused only for insn attributes (@pxref{Insn Attributes}) since constant
1554*e4b17023SJohn Marinostrings in C are placed in memory.
1555*e4b17023SJohn Marino
1556*e4b17023SJohn Marino@findex symbol_ref
1557*e4b17023SJohn Marino@item (symbol_ref:@var{mode} @var{symbol})
1558*e4b17023SJohn MarinoRepresents the value of an assembler label for data.  @var{symbol} is
1559*e4b17023SJohn Marinoa string that describes the name of the assembler label.  If it starts
1560*e4b17023SJohn Marinowith a @samp{*}, the label is the rest of @var{symbol} not including
1561*e4b17023SJohn Marinothe @samp{*}.  Otherwise, the label is @var{symbol}, usually prefixed
1562*e4b17023SJohn Marinowith @samp{_}.
1563*e4b17023SJohn Marino
1564*e4b17023SJohn MarinoThe @code{symbol_ref} contains a mode, which is usually @code{Pmode}.
1565*e4b17023SJohn MarinoUsually that is the only mode for which a symbol is directly valid.
1566*e4b17023SJohn Marino
1567*e4b17023SJohn Marino@findex label_ref
1568*e4b17023SJohn Marino@item (label_ref:@var{mode} @var{label})
1569*e4b17023SJohn MarinoRepresents the value of an assembler label for code.  It contains one
1570*e4b17023SJohn Marinooperand, an expression, which must be a @code{code_label} or a @code{note}
1571*e4b17023SJohn Marinoof type @code{NOTE_INSN_DELETED_LABEL} that appears in the instruction
1572*e4b17023SJohn Marinosequence to identify the place where the label should go.
1573*e4b17023SJohn Marino
1574*e4b17023SJohn MarinoThe reason for using a distinct expression type for code label
1575*e4b17023SJohn Marinoreferences is so that jump optimization can distinguish them.
1576*e4b17023SJohn Marino
1577*e4b17023SJohn MarinoThe @code{label_ref} contains a mode, which is usually @code{Pmode}.
1578*e4b17023SJohn MarinoUsually that is the only mode for which a label is directly valid.
1579*e4b17023SJohn Marino
1580*e4b17023SJohn Marino@findex const
1581*e4b17023SJohn Marino@item (const:@var{m} @var{exp})
1582*e4b17023SJohn MarinoRepresents a constant that is the result of an assembly-time
1583*e4b17023SJohn Marinoarithmetic computation.  The operand, @var{exp}, is an expression that
1584*e4b17023SJohn Marinocontains only constants (@code{const_int}, @code{symbol_ref} and
1585*e4b17023SJohn Marino@code{label_ref} expressions) combined with @code{plus} and
1586*e4b17023SJohn Marino@code{minus}.  However, not all combinations are valid, since the
1587*e4b17023SJohn Marinoassembler cannot do arbitrary arithmetic on relocatable symbols.
1588*e4b17023SJohn Marino
1589*e4b17023SJohn Marino@var{m} should be @code{Pmode}.
1590*e4b17023SJohn Marino
1591*e4b17023SJohn Marino@findex high
1592*e4b17023SJohn Marino@item (high:@var{m} @var{exp})
1593*e4b17023SJohn MarinoRepresents the high-order bits of @var{exp}, usually a
1594*e4b17023SJohn Marino@code{symbol_ref}.  The number of bits is machine-dependent and is
1595*e4b17023SJohn Marinonormally the number of bits specified in an instruction that initializes
1596*e4b17023SJohn Marinothe high order bits of a register.  It is used with @code{lo_sum} to
1597*e4b17023SJohn Marinorepresent the typical two-instruction sequence used in RISC machines to
1598*e4b17023SJohn Marinoreference a global memory location.
1599*e4b17023SJohn Marino
1600*e4b17023SJohn Marino@var{m} should be @code{Pmode}.
1601*e4b17023SJohn Marino@end table
1602*e4b17023SJohn Marino
1603*e4b17023SJohn Marino@findex CONST0_RTX
1604*e4b17023SJohn Marino@findex CONST1_RTX
1605*e4b17023SJohn Marino@findex CONST2_RTX
1606*e4b17023SJohn MarinoThe macro @code{CONST0_RTX (@var{mode})} refers to an expression with
1607*e4b17023SJohn Marinovalue 0 in mode @var{mode}.  If mode @var{mode} is of mode class
1608*e4b17023SJohn Marino@code{MODE_INT}, it returns @code{const0_rtx}.  If mode @var{mode} is of
1609*e4b17023SJohn Marinomode class @code{MODE_FLOAT}, it returns a @code{CONST_DOUBLE}
1610*e4b17023SJohn Marinoexpression in mode @var{mode}.  Otherwise, it returns a
1611*e4b17023SJohn Marino@code{CONST_VECTOR} expression in mode @var{mode}.  Similarly, the macro
1612*e4b17023SJohn Marino@code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in
1613*e4b17023SJohn Marinomode @var{mode} and similarly for @code{CONST2_RTX}.  The
1614*e4b17023SJohn Marino@code{CONST1_RTX} and @code{CONST2_RTX} macros are undefined
1615*e4b17023SJohn Marinofor vector modes.
1616*e4b17023SJohn Marino
1617*e4b17023SJohn Marino@node Regs and Memory
1618*e4b17023SJohn Marino@section Registers and Memory
1619*e4b17023SJohn Marino@cindex RTL register expressions
1620*e4b17023SJohn Marino@cindex RTL memory expressions
1621*e4b17023SJohn Marino
1622*e4b17023SJohn MarinoHere are the RTL expression types for describing access to machine
1623*e4b17023SJohn Marinoregisters and to main memory.
1624*e4b17023SJohn Marino
1625*e4b17023SJohn Marino@table @code
1626*e4b17023SJohn Marino@findex reg
1627*e4b17023SJohn Marino@cindex hard registers
1628*e4b17023SJohn Marino@cindex pseudo registers
1629*e4b17023SJohn Marino@item (reg:@var{m} @var{n})
1630*e4b17023SJohn MarinoFor small values of the integer @var{n} (those that are less than
1631*e4b17023SJohn Marino@code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine
1632*e4b17023SJohn Marinoregister number @var{n}: a @dfn{hard register}.  For larger values of
1633*e4b17023SJohn Marino@var{n}, it stands for a temporary value or @dfn{pseudo register}.
1634*e4b17023SJohn MarinoThe compiler's strategy is to generate code assuming an unlimited
1635*e4b17023SJohn Marinonumber of such pseudo registers, and later convert them into hard
1636*e4b17023SJohn Marinoregisters or into memory references.
1637*e4b17023SJohn Marino
1638*e4b17023SJohn Marino@var{m} is the machine mode of the reference.  It is necessary because
1639*e4b17023SJohn Marinomachines can generally refer to each register in more than one mode.
1640*e4b17023SJohn MarinoFor example, a register may contain a full word but there may be
1641*e4b17023SJohn Marinoinstructions to refer to it as a half word or as a single byte, as
1642*e4b17023SJohn Marinowell as instructions to refer to it as a floating point number of
1643*e4b17023SJohn Marinovarious precisions.
1644*e4b17023SJohn Marino
1645*e4b17023SJohn MarinoEven for a register that the machine can access in only one mode,
1646*e4b17023SJohn Marinothe mode must always be specified.
1647*e4b17023SJohn Marino
1648*e4b17023SJohn MarinoThe symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine
1649*e4b17023SJohn Marinodescription, since the number of hard registers on the machine is an
1650*e4b17023SJohn Marinoinvariant characteristic of the machine.  Note, however, that not
1651*e4b17023SJohn Marinoall of the machine registers must be general registers.  All the
1652*e4b17023SJohn Marinomachine registers that can be used for storage of data are given
1653*e4b17023SJohn Marinohard register numbers, even those that can be used only in certain
1654*e4b17023SJohn Marinoinstructions or can hold only certain types of data.
1655*e4b17023SJohn Marino
1656*e4b17023SJohn MarinoA hard register may be accessed in various modes throughout one
1657*e4b17023SJohn Marinofunction, but each pseudo register is given a natural mode
1658*e4b17023SJohn Marinoand is accessed only in that mode.  When it is necessary to describe
1659*e4b17023SJohn Marinoan access to a pseudo register using a nonnatural mode, a @code{subreg}
1660*e4b17023SJohn Marinoexpression is used.
1661*e4b17023SJohn Marino
1662*e4b17023SJohn MarinoA @code{reg} expression with a machine mode that specifies more than
1663*e4b17023SJohn Marinoone word of data may actually stand for several consecutive registers.
1664*e4b17023SJohn MarinoIf in addition the register number specifies a hardware register, then
1665*e4b17023SJohn Marinoit actually represents several consecutive hardware registers starting
1666*e4b17023SJohn Marinowith the specified one.
1667*e4b17023SJohn Marino
1668*e4b17023SJohn MarinoEach pseudo register number used in a function's RTL code is
1669*e4b17023SJohn Marinorepresented by a unique @code{reg} expression.
1670*e4b17023SJohn Marino
1671*e4b17023SJohn Marino@findex FIRST_VIRTUAL_REGISTER
1672*e4b17023SJohn Marino@findex LAST_VIRTUAL_REGISTER
1673*e4b17023SJohn MarinoSome pseudo register numbers, those within the range of
1674*e4b17023SJohn Marino@code{FIRST_VIRTUAL_REGISTER} to @code{LAST_VIRTUAL_REGISTER} only
1675*e4b17023SJohn Marinoappear during the RTL generation phase and are eliminated before the
1676*e4b17023SJohn Marinooptimization phases.  These represent locations in the stack frame that
1677*e4b17023SJohn Marinocannot be determined until RTL generation for the function has been
1678*e4b17023SJohn Marinocompleted.  The following virtual register numbers are defined:
1679*e4b17023SJohn Marino
1680*e4b17023SJohn Marino@table @code
1681*e4b17023SJohn Marino@findex VIRTUAL_INCOMING_ARGS_REGNUM
1682*e4b17023SJohn Marino@item VIRTUAL_INCOMING_ARGS_REGNUM
1683*e4b17023SJohn MarinoThis points to the first word of the incoming arguments passed on the
1684*e4b17023SJohn Marinostack.  Normally these arguments are placed there by the caller, but the
1685*e4b17023SJohn Marinocallee may have pushed some arguments that were previously passed in
1686*e4b17023SJohn Marinoregisters.
1687*e4b17023SJohn Marino
1688*e4b17023SJohn Marino@cindex @code{FIRST_PARM_OFFSET} and virtual registers
1689*e4b17023SJohn Marino@cindex @code{ARG_POINTER_REGNUM} and virtual registers
1690*e4b17023SJohn MarinoWhen RTL generation is complete, this virtual register is replaced
1691*e4b17023SJohn Marinoby the sum of the register given by @code{ARG_POINTER_REGNUM} and the
1692*e4b17023SJohn Marinovalue of @code{FIRST_PARM_OFFSET}.
1693*e4b17023SJohn Marino
1694*e4b17023SJohn Marino@findex VIRTUAL_STACK_VARS_REGNUM
1695*e4b17023SJohn Marino@cindex @code{FRAME_GROWS_DOWNWARD} and virtual registers
1696*e4b17023SJohn Marino@item VIRTUAL_STACK_VARS_REGNUM
1697*e4b17023SJohn MarinoIf @code{FRAME_GROWS_DOWNWARD} is defined to a nonzero value, this points
1698*e4b17023SJohn Marinoto immediately above the first variable on the stack.  Otherwise, it points
1699*e4b17023SJohn Marinoto the first variable on the stack.
1700*e4b17023SJohn Marino
1701*e4b17023SJohn Marino@cindex @code{STARTING_FRAME_OFFSET} and virtual registers
1702*e4b17023SJohn Marino@cindex @code{FRAME_POINTER_REGNUM} and virtual registers
1703*e4b17023SJohn Marino@code{VIRTUAL_STACK_VARS_REGNUM} is replaced with the sum of the
1704*e4b17023SJohn Marinoregister given by @code{FRAME_POINTER_REGNUM} and the value
1705*e4b17023SJohn Marino@code{STARTING_FRAME_OFFSET}.
1706*e4b17023SJohn Marino
1707*e4b17023SJohn Marino@findex VIRTUAL_STACK_DYNAMIC_REGNUM
1708*e4b17023SJohn Marino@item VIRTUAL_STACK_DYNAMIC_REGNUM
1709*e4b17023SJohn MarinoThis points to the location of dynamically allocated memory on the stack
1710*e4b17023SJohn Marinoimmediately after the stack pointer has been adjusted by the amount of
1711*e4b17023SJohn Marinomemory desired.
1712*e4b17023SJohn Marino
1713*e4b17023SJohn Marino@cindex @code{STACK_DYNAMIC_OFFSET} and virtual registers
1714*e4b17023SJohn Marino@cindex @code{STACK_POINTER_REGNUM} and virtual registers
1715*e4b17023SJohn MarinoThis virtual register is replaced by the sum of the register given by
1716*e4b17023SJohn Marino@code{STACK_POINTER_REGNUM} and the value @code{STACK_DYNAMIC_OFFSET}.
1717*e4b17023SJohn Marino
1718*e4b17023SJohn Marino@findex VIRTUAL_OUTGOING_ARGS_REGNUM
1719*e4b17023SJohn Marino@item VIRTUAL_OUTGOING_ARGS_REGNUM
1720*e4b17023SJohn MarinoThis points to the location in the stack at which outgoing arguments
1721*e4b17023SJohn Marinoshould be written when the stack is pre-pushed (arguments pushed using
1722*e4b17023SJohn Marinopush insns should always use @code{STACK_POINTER_REGNUM}).
1723*e4b17023SJohn Marino
1724*e4b17023SJohn Marino@cindex @code{STACK_POINTER_OFFSET} and virtual registers
1725*e4b17023SJohn MarinoThis virtual register is replaced by the sum of the register given by
1726*e4b17023SJohn Marino@code{STACK_POINTER_REGNUM} and the value @code{STACK_POINTER_OFFSET}.
1727*e4b17023SJohn Marino@end table
1728*e4b17023SJohn Marino
1729*e4b17023SJohn Marino@findex subreg
1730*e4b17023SJohn Marino@item (subreg:@var{m1} @var{reg:m2} @var{bytenum})
1731*e4b17023SJohn Marino
1732*e4b17023SJohn Marino@code{subreg} expressions are used to refer to a register in a machine
1733*e4b17023SJohn Marinomode other than its natural one, or to refer to one register of
1734*e4b17023SJohn Marinoa multi-part @code{reg} that actually refers to several registers.
1735*e4b17023SJohn Marino
1736*e4b17023SJohn MarinoEach pseudo register has a natural mode.  If it is necessary to
1737*e4b17023SJohn Marinooperate on it in a different mode, the register must be
1738*e4b17023SJohn Marinoenclosed in a @code{subreg}.
1739*e4b17023SJohn Marino
1740*e4b17023SJohn MarinoThere are currently three supported types for the first operand of a
1741*e4b17023SJohn Marino@code{subreg}:
1742*e4b17023SJohn Marino@itemize
1743*e4b17023SJohn Marino@item pseudo registers
1744*e4b17023SJohn MarinoThis is the most common case.  Most @code{subreg}s have pseudo
1745*e4b17023SJohn Marino@code{reg}s as their first operand.
1746*e4b17023SJohn Marino
1747*e4b17023SJohn Marino@item mem
1748*e4b17023SJohn Marino@code{subreg}s of @code{mem} were common in earlier versions of GCC and
1749*e4b17023SJohn Marinoare still supported.  During the reload pass these are replaced by plain
1750*e4b17023SJohn Marino@code{mem}s.  On machines that do not do instruction scheduling, use of
1751*e4b17023SJohn Marino@code{subreg}s of @code{mem} are still used, but this is no longer
1752*e4b17023SJohn Marinorecommended.  Such @code{subreg}s are considered to be
1753*e4b17023SJohn Marino@code{register_operand}s rather than @code{memory_operand}s before and
1754*e4b17023SJohn Marinoduring reload.  Because of this, the scheduling passes cannot properly
1755*e4b17023SJohn Marinoschedule instructions with @code{subreg}s of @code{mem}, so for machines
1756*e4b17023SJohn Marinothat do scheduling, @code{subreg}s of @code{mem} should never be used.
1757*e4b17023SJohn MarinoTo support this, the combine and recog passes have explicit code to
1758*e4b17023SJohn Marinoinhibit the creation of @code{subreg}s of @code{mem} when
1759*e4b17023SJohn Marino@code{INSN_SCHEDULING} is defined.
1760*e4b17023SJohn Marino
1761*e4b17023SJohn MarinoThe use of @code{subreg}s of @code{mem} after the reload pass is an area
1762*e4b17023SJohn Marinothat is not well understood and should be avoided.  There is still some
1763*e4b17023SJohn Marinocode in the compiler to support this, but this code has possibly rotted.
1764*e4b17023SJohn MarinoThis use of @code{subreg}s is discouraged and will most likely not be
1765*e4b17023SJohn Marinosupported in the future.
1766*e4b17023SJohn Marino
1767*e4b17023SJohn Marino@item hard registers
1768*e4b17023SJohn MarinoIt is seldom necessary to wrap hard registers in @code{subreg}s; such
1769*e4b17023SJohn Marinoregisters would normally reduce to a single @code{reg} rtx.  This use of
1770*e4b17023SJohn Marino@code{subreg}s is discouraged and may not be supported in the future.
1771*e4b17023SJohn Marino
1772*e4b17023SJohn Marino@end itemize
1773*e4b17023SJohn Marino
1774*e4b17023SJohn Marino@code{subreg}s of @code{subreg}s are not supported.  Using
1775*e4b17023SJohn Marino@code{simplify_gen_subreg} is the recommended way to avoid this problem.
1776*e4b17023SJohn Marino
1777*e4b17023SJohn Marino@code{subreg}s come in two distinct flavors, each having its own
1778*e4b17023SJohn Marinousage and rules:
1779*e4b17023SJohn Marino
1780*e4b17023SJohn Marino@table @asis
1781*e4b17023SJohn Marino@item Paradoxical subregs
1782*e4b17023SJohn MarinoWhen @var{m1} is strictly wider than @var{m2}, the @code{subreg}
1783*e4b17023SJohn Marinoexpression is called @dfn{paradoxical}.  The canonical test for this
1784*e4b17023SJohn Marinoclass of @code{subreg} is:
1785*e4b17023SJohn Marino
1786*e4b17023SJohn Marino@smallexample
1787*e4b17023SJohn MarinoGET_MODE_SIZE (@var{m1}) > GET_MODE_SIZE (@var{m2})
1788*e4b17023SJohn Marino@end smallexample
1789*e4b17023SJohn Marino
1790*e4b17023SJohn MarinoParadoxical @code{subreg}s can be used as both lvalues and rvalues.
1791*e4b17023SJohn MarinoWhen used as an lvalue, the low-order bits of the source value
1792*e4b17023SJohn Marinoare stored in @var{reg} and the high-order bits are discarded.
1793*e4b17023SJohn MarinoWhen used as an rvalue, the low-order bits of the @code{subreg} are
1794*e4b17023SJohn Marinotaken from @var{reg} while the high-order bits may or may not be
1795*e4b17023SJohn Marinodefined.
1796*e4b17023SJohn Marino
1797*e4b17023SJohn MarinoThe high-order bits of rvalues are in the following circumstances:
1798*e4b17023SJohn Marino
1799*e4b17023SJohn Marino@itemize
1800*e4b17023SJohn Marino@item @code{subreg}s of @code{mem}
1801*e4b17023SJohn MarinoWhen @var{m2} is smaller than a word, the macro @code{LOAD_EXTEND_OP},
1802*e4b17023SJohn Marinocan control how the high-order bits are defined.
1803*e4b17023SJohn Marino
1804*e4b17023SJohn Marino@item @code{subreg} of @code{reg}s
1805*e4b17023SJohn MarinoThe upper bits are defined when @code{SUBREG_PROMOTED_VAR_P} is true.
1806*e4b17023SJohn Marino@code{SUBREG_PROMOTED_UNSIGNED_P} describes what the upper bits hold.
1807*e4b17023SJohn MarinoSuch subregs usually represent local variables, register variables
1808*e4b17023SJohn Marinoand parameter pseudo variables that have been promoted to a wider mode.
1809*e4b17023SJohn Marino
1810*e4b17023SJohn Marino@end itemize
1811*e4b17023SJohn Marino
1812*e4b17023SJohn Marino@var{bytenum} is always zero for a paradoxical @code{subreg}, even on
1813*e4b17023SJohn Marinobig-endian targets.
1814*e4b17023SJohn Marino
1815*e4b17023SJohn MarinoFor example, the paradoxical @code{subreg}:
1816*e4b17023SJohn Marino
1817*e4b17023SJohn Marino@smallexample
1818*e4b17023SJohn Marino(set (subreg:SI (reg:HI @var{x}) 0) @var{y})
1819*e4b17023SJohn Marino@end smallexample
1820*e4b17023SJohn Marino
1821*e4b17023SJohn Marinostores the lower 2 bytes of @var{y} in @var{x} and discards the upper
1822*e4b17023SJohn Marino2 bytes.  A subsequent:
1823*e4b17023SJohn Marino
1824*e4b17023SJohn Marino@smallexample
1825*e4b17023SJohn Marino(set @var{z} (subreg:SI (reg:HI @var{x}) 0))
1826*e4b17023SJohn Marino@end smallexample
1827*e4b17023SJohn Marino
1828*e4b17023SJohn Marinowould set the lower two bytes of @var{z} to @var{y} and set the upper
1829*e4b17023SJohn Marinotwo bytes to an unknown value assuming @code{SUBREG_PROMOTED_VAR_P} is
1830*e4b17023SJohn Marinofalse.
1831*e4b17023SJohn Marino
1832*e4b17023SJohn Marino@item Normal subregs
1833*e4b17023SJohn MarinoWhen @var{m1} is at least as narrow as @var{m2} the @code{subreg}
1834*e4b17023SJohn Marinoexpression is called @dfn{normal}.
1835*e4b17023SJohn Marino
1836*e4b17023SJohn MarinoNormal @code{subreg}s restrict consideration to certain bits of
1837*e4b17023SJohn Marino@var{reg}.  There are two cases.  If @var{m1} is smaller than a word,
1838*e4b17023SJohn Marinothe @code{subreg} refers to the least-significant part (or
1839*e4b17023SJohn Marino@dfn{lowpart}) of one word of @var{reg}.  If @var{m1} is word-sized or
1840*e4b17023SJohn Marinogreater, the @code{subreg} refers to one or more complete words.
1841*e4b17023SJohn Marino
1842*e4b17023SJohn MarinoWhen used as an lvalue, @code{subreg} is a word-based accessor.
1843*e4b17023SJohn MarinoStoring to a @code{subreg} modifies all the words of @var{reg} that
1844*e4b17023SJohn Marinooverlap the @code{subreg}, but it leaves the other words of @var{reg}
1845*e4b17023SJohn Marinoalone.
1846*e4b17023SJohn Marino
1847*e4b17023SJohn MarinoWhen storing to a normal @code{subreg} that is smaller than a word,
1848*e4b17023SJohn Marinothe other bits of the referenced word are usually left in an undefined
1849*e4b17023SJohn Marinostate.  This laxity makes it easier to generate efficient code for
1850*e4b17023SJohn Marinosuch instructions.  To represent an instruction that preserves all the
1851*e4b17023SJohn Marinobits outside of those in the @code{subreg}, use @code{strict_low_part}
1852*e4b17023SJohn Marinoor @code{zero_extract} around the @code{subreg}.
1853*e4b17023SJohn Marino
1854*e4b17023SJohn Marino@var{bytenum} must identify the offset of the first byte of the
1855*e4b17023SJohn Marino@code{subreg} from the start of @var{reg}, assuming that @var{reg} is
1856*e4b17023SJohn Marinolaid out in memory order.  The memory order of bytes is defined by
1857*e4b17023SJohn Marinotwo target macros, @code{WORDS_BIG_ENDIAN} and @code{BYTES_BIG_ENDIAN}:
1858*e4b17023SJohn Marino
1859*e4b17023SJohn Marino@itemize
1860*e4b17023SJohn Marino@item
1861*e4b17023SJohn Marino@cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg}
1862*e4b17023SJohn Marino@code{WORDS_BIG_ENDIAN}, if set to 1, says that byte number zero is
1863*e4b17023SJohn Marinopart of the most significant word; otherwise, it is part of the least
1864*e4b17023SJohn Marinosignificant word.
1865*e4b17023SJohn Marino
1866*e4b17023SJohn Marino@item
1867*e4b17023SJohn Marino@cindex @code{BYTES_BIG_ENDIAN}, effect on @code{subreg}
1868*e4b17023SJohn Marino@code{BYTES_BIG_ENDIAN}, if set to 1, says that byte number zero is
1869*e4b17023SJohn Marinothe most significant byte within a word; otherwise, it is the least
1870*e4b17023SJohn Marinosignificant byte within a word.
1871*e4b17023SJohn Marino@end itemize
1872*e4b17023SJohn Marino
1873*e4b17023SJohn Marino@cindex @code{FLOAT_WORDS_BIG_ENDIAN}, (lack of) effect on @code{subreg}
1874*e4b17023SJohn MarinoOn a few targets, @code{FLOAT_WORDS_BIG_ENDIAN} disagrees with
1875*e4b17023SJohn Marino@code{WORDS_BIG_ENDIAN}.  However, most parts of the compiler treat
1876*e4b17023SJohn Marinofloating point values as if they had the same endianness as integer
1877*e4b17023SJohn Marinovalues.  This works because they handle them solely as a collection of
1878*e4b17023SJohn Marinointeger values, with no particular numerical value.  Only real.c and
1879*e4b17023SJohn Marinothe runtime libraries care about @code{FLOAT_WORDS_BIG_ENDIAN}.
1880*e4b17023SJohn Marino
1881*e4b17023SJohn MarinoThus,
1882*e4b17023SJohn Marino
1883*e4b17023SJohn Marino@smallexample
1884*e4b17023SJohn Marino(subreg:HI (reg:SI @var{x}) 2)
1885*e4b17023SJohn Marino@end smallexample
1886*e4b17023SJohn Marino
1887*e4b17023SJohn Marinoon a @code{BYTES_BIG_ENDIAN}, @samp{UNITS_PER_WORD == 4} target is the same as
1888*e4b17023SJohn Marino
1889*e4b17023SJohn Marino@smallexample
1890*e4b17023SJohn Marino(subreg:HI (reg:SI @var{x}) 0)
1891*e4b17023SJohn Marino@end smallexample
1892*e4b17023SJohn Marino
1893*e4b17023SJohn Marinoon a little-endian, @samp{UNITS_PER_WORD == 4} target.  Both
1894*e4b17023SJohn Marino@code{subreg}s access the lower two bytes of register @var{x}.
1895*e4b17023SJohn Marino
1896*e4b17023SJohn Marino@end table
1897*e4b17023SJohn Marino
1898*e4b17023SJohn MarinoA @code{MODE_PARTIAL_INT} mode behaves as if it were as wide as the
1899*e4b17023SJohn Marinocorresponding @code{MODE_INT} mode, except that it has an unknown
1900*e4b17023SJohn Marinonumber of undefined bits.  For example:
1901*e4b17023SJohn Marino
1902*e4b17023SJohn Marino@smallexample
1903*e4b17023SJohn Marino(subreg:PSI (reg:SI 0) 0)
1904*e4b17023SJohn Marino@end smallexample
1905*e4b17023SJohn Marino
1906*e4b17023SJohn Marinoaccesses the whole of @samp{(reg:SI 0)}, but the exact relationship
1907*e4b17023SJohn Marinobetween the @code{PSImode} value and the @code{SImode} value is not
1908*e4b17023SJohn Marinodefined.  If we assume @samp{UNITS_PER_WORD <= 4}, then the following
1909*e4b17023SJohn Marinotwo @code{subreg}s:
1910*e4b17023SJohn Marino
1911*e4b17023SJohn Marino@smallexample
1912*e4b17023SJohn Marino(subreg:PSI (reg:DI 0) 0)
1913*e4b17023SJohn Marino(subreg:PSI (reg:DI 0) 4)
1914*e4b17023SJohn Marino@end smallexample
1915*e4b17023SJohn Marino
1916*e4b17023SJohn Marinorepresent independent 4-byte accesses to the two halves of
1917*e4b17023SJohn Marino@samp{(reg:DI 0)}.  Both @code{subreg}s have an unknown number
1918*e4b17023SJohn Marinoof undefined bits.
1919*e4b17023SJohn Marino
1920*e4b17023SJohn MarinoIf @samp{UNITS_PER_WORD <= 2} then these two @code{subreg}s:
1921*e4b17023SJohn Marino
1922*e4b17023SJohn Marino@smallexample
1923*e4b17023SJohn Marino(subreg:HI (reg:PSI 0) 0)
1924*e4b17023SJohn Marino(subreg:HI (reg:PSI 0) 2)
1925*e4b17023SJohn Marino@end smallexample
1926*e4b17023SJohn Marino
1927*e4b17023SJohn Marinorepresent independent 2-byte accesses that together span the whole
1928*e4b17023SJohn Marinoof @samp{(reg:PSI 0)}.  Storing to the first @code{subreg} does not
1929*e4b17023SJohn Marinoaffect the value of the second, and vice versa.  @samp{(reg:PSI 0)}
1930*e4b17023SJohn Marinohas an unknown number of undefined bits, so the assignment:
1931*e4b17023SJohn Marino
1932*e4b17023SJohn Marino@smallexample
1933*e4b17023SJohn Marino(set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
1934*e4b17023SJohn Marino@end smallexample
1935*e4b17023SJohn Marino
1936*e4b17023SJohn Marinodoes not guarantee that @samp{(subreg:HI (reg:PSI 0) 0)} has the
1937*e4b17023SJohn Marinovalue @samp{(reg:HI 4)}.
1938*e4b17023SJohn Marino
1939*e4b17023SJohn Marino@cindex @code{CANNOT_CHANGE_MODE_CLASS} and subreg semantics
1940*e4b17023SJohn MarinoThe rules above apply to both pseudo @var{reg}s and hard @var{reg}s.
1941*e4b17023SJohn MarinoIf the semantics are not correct for particular combinations of
1942*e4b17023SJohn Marino@var{m1}, @var{m2} and hard @var{reg}, the target-specific code
1943*e4b17023SJohn Marinomust ensure that those combinations are never used.  For example:
1944*e4b17023SJohn Marino
1945*e4b17023SJohn Marino@smallexample
1946*e4b17023SJohn MarinoCANNOT_CHANGE_MODE_CLASS (@var{m2}, @var{m1}, @var{class})
1947*e4b17023SJohn Marino@end smallexample
1948*e4b17023SJohn Marino
1949*e4b17023SJohn Marinomust be true for every class @var{class} that includes @var{reg}.
1950*e4b17023SJohn Marino
1951*e4b17023SJohn Marino@findex SUBREG_REG
1952*e4b17023SJohn Marino@findex SUBREG_BYTE
1953*e4b17023SJohn MarinoThe first operand of a @code{subreg} expression is customarily accessed
1954*e4b17023SJohn Marinowith the @code{SUBREG_REG} macro and the second operand is customarily
1955*e4b17023SJohn Marinoaccessed with the @code{SUBREG_BYTE} macro.
1956*e4b17023SJohn Marino
1957*e4b17023SJohn MarinoIt has been several years since a platform in which
1958*e4b17023SJohn Marino@code{BYTES_BIG_ENDIAN} not equal to @code{WORDS_BIG_ENDIAN} has
1959*e4b17023SJohn Marinobeen tested.  Anyone wishing to support such a platform in the future
1960*e4b17023SJohn Marinomay be confronted with code rot.
1961*e4b17023SJohn Marino
1962*e4b17023SJohn Marino@findex scratch
1963*e4b17023SJohn Marino@cindex scratch operands
1964*e4b17023SJohn Marino@item (scratch:@var{m})
1965*e4b17023SJohn MarinoThis represents a scratch register that will be required for the
1966*e4b17023SJohn Marinoexecution of a single instruction and not used subsequently.  It is
1967*e4b17023SJohn Marinoconverted into a @code{reg} by either the local register allocator or
1968*e4b17023SJohn Marinothe reload pass.
1969*e4b17023SJohn Marino
1970*e4b17023SJohn Marino@code{scratch} is usually present inside a @code{clobber} operation
1971*e4b17023SJohn Marino(@pxref{Side Effects}).
1972*e4b17023SJohn Marino
1973*e4b17023SJohn Marino@findex cc0
1974*e4b17023SJohn Marino@cindex condition code register
1975*e4b17023SJohn Marino@item (cc0)
1976*e4b17023SJohn MarinoThis refers to the machine's condition code register.  It has no
1977*e4b17023SJohn Marinooperands and may not have a machine mode.  There are two ways to use it:
1978*e4b17023SJohn Marino
1979*e4b17023SJohn Marino@itemize @bullet
1980*e4b17023SJohn Marino@item
1981*e4b17023SJohn MarinoTo stand for a complete set of condition code flags.  This is best on
1982*e4b17023SJohn Marinomost machines, where each comparison sets the entire series of flags.
1983*e4b17023SJohn Marino
1984*e4b17023SJohn MarinoWith this technique, @code{(cc0)} may be validly used in only two
1985*e4b17023SJohn Marinocontexts: as the destination of an assignment (in test and compare
1986*e4b17023SJohn Marinoinstructions) and in comparison operators comparing against zero
1987*e4b17023SJohn Marino(@code{const_int} with value zero; that is to say, @code{const0_rtx}).
1988*e4b17023SJohn Marino
1989*e4b17023SJohn Marino@item
1990*e4b17023SJohn MarinoTo stand for a single flag that is the result of a single condition.
1991*e4b17023SJohn MarinoThis is useful on machines that have only a single flag bit, and in
1992*e4b17023SJohn Marinowhich comparison instructions must specify the condition to test.
1993*e4b17023SJohn Marino
1994*e4b17023SJohn MarinoWith this technique, @code{(cc0)} may be validly used in only two
1995*e4b17023SJohn Marinocontexts: as the destination of an assignment (in test and compare
1996*e4b17023SJohn Marinoinstructions) where the source is a comparison operator, and as the
1997*e4b17023SJohn Marinofirst operand of @code{if_then_else} (in a conditional branch).
1998*e4b17023SJohn Marino@end itemize
1999*e4b17023SJohn Marino
2000*e4b17023SJohn Marino@findex cc0_rtx
2001*e4b17023SJohn MarinoThere is only one expression object of code @code{cc0}; it is the
2002*e4b17023SJohn Marinovalue of the variable @code{cc0_rtx}.  Any attempt to create an
2003*e4b17023SJohn Marinoexpression of code @code{cc0} will return @code{cc0_rtx}.
2004*e4b17023SJohn Marino
2005*e4b17023SJohn MarinoInstructions can set the condition code implicitly.  On many machines,
2006*e4b17023SJohn Marinonearly all instructions set the condition code based on the value that
2007*e4b17023SJohn Marinothey compute or store.  It is not necessary to record these actions
2008*e4b17023SJohn Marinoexplicitly in the RTL because the machine description includes a
2009*e4b17023SJohn Marinoprescription for recognizing the instructions that do so (by means of
2010*e4b17023SJohn Marinothe macro @code{NOTICE_UPDATE_CC}).  @xref{Condition Code}.  Only
2011*e4b17023SJohn Marinoinstructions whose sole purpose is to set the condition code, and
2012*e4b17023SJohn Marinoinstructions that use the condition code, need mention @code{(cc0)}.
2013*e4b17023SJohn Marino
2014*e4b17023SJohn MarinoOn some machines, the condition code register is given a register number
2015*e4b17023SJohn Marinoand a @code{reg} is used instead of @code{(cc0)}.  This is usually the
2016*e4b17023SJohn Marinopreferable approach if only a small subset of instructions modify the
2017*e4b17023SJohn Marinocondition code.  Other machines store condition codes in general
2018*e4b17023SJohn Marinoregisters; in such cases a pseudo register should be used.
2019*e4b17023SJohn Marino
2020*e4b17023SJohn MarinoSome machines, such as the SPARC and RS/6000, have two sets of
2021*e4b17023SJohn Marinoarithmetic instructions, one that sets and one that does not set the
2022*e4b17023SJohn Marinocondition code.  This is best handled by normally generating the
2023*e4b17023SJohn Marinoinstruction that does not set the condition code, and making a pattern
2024*e4b17023SJohn Marinothat both performs the arithmetic and sets the condition code register
2025*e4b17023SJohn Marino(which would not be @code{(cc0)} in this case).  For examples, search
2026*e4b17023SJohn Marinofor @samp{addcc} and @samp{andcc} in @file{sparc.md}.
2027*e4b17023SJohn Marino
2028*e4b17023SJohn Marino@findex pc
2029*e4b17023SJohn Marino@item (pc)
2030*e4b17023SJohn Marino@cindex program counter
2031*e4b17023SJohn MarinoThis represents the machine's program counter.  It has no operands and
2032*e4b17023SJohn Marinomay not have a machine mode.  @code{(pc)} may be validly used only in
2033*e4b17023SJohn Marinocertain specific contexts in jump instructions.
2034*e4b17023SJohn Marino
2035*e4b17023SJohn Marino@findex pc_rtx
2036*e4b17023SJohn MarinoThere is only one expression object of code @code{pc}; it is the value
2037*e4b17023SJohn Marinoof the variable @code{pc_rtx}.  Any attempt to create an expression of
2038*e4b17023SJohn Marinocode @code{pc} will return @code{pc_rtx}.
2039*e4b17023SJohn Marino
2040*e4b17023SJohn MarinoAll instructions that do not jump alter the program counter implicitly
2041*e4b17023SJohn Marinoby incrementing it, but there is no need to mention this in the RTL@.
2042*e4b17023SJohn Marino
2043*e4b17023SJohn Marino@findex mem
2044*e4b17023SJohn Marino@item (mem:@var{m} @var{addr} @var{alias})
2045*e4b17023SJohn MarinoThis RTX represents a reference to main memory at an address
2046*e4b17023SJohn Marinorepresented by the expression @var{addr}.  @var{m} specifies how large
2047*e4b17023SJohn Marinoa unit of memory is accessed.  @var{alias} specifies an alias set for the
2048*e4b17023SJohn Marinoreference.  In general two items are in different alias sets if they cannot
2049*e4b17023SJohn Marinoreference the same memory address.
2050*e4b17023SJohn Marino
2051*e4b17023SJohn MarinoThe construct @code{(mem:BLK (scratch))} is considered to alias all
2052*e4b17023SJohn Marinoother memories.  Thus it may be used as a memory barrier in epilogue
2053*e4b17023SJohn Marinostack deallocation patterns.
2054*e4b17023SJohn Marino
2055*e4b17023SJohn Marino@findex concat
2056*e4b17023SJohn Marino@item (concat@var{m} @var{rtx} @var{rtx})
2057*e4b17023SJohn MarinoThis RTX represents the concatenation of two other RTXs.  This is used
2058*e4b17023SJohn Marinofor complex values.  It should only appear in the RTL attached to
2059*e4b17023SJohn Marinodeclarations and during RTL generation.  It should not appear in the
2060*e4b17023SJohn Marinoordinary insn chain.
2061*e4b17023SJohn Marino
2062*e4b17023SJohn Marino@findex concatn
2063*e4b17023SJohn Marino@item (concatn@var{m} [@var{rtx} @dots{}])
2064*e4b17023SJohn MarinoThis RTX represents the concatenation of all the @var{rtx} to make a
2065*e4b17023SJohn Marinosingle value.  Like @code{concat}, this should only appear in
2066*e4b17023SJohn Marinodeclarations, and not in the insn chain.
2067*e4b17023SJohn Marino@end table
2068*e4b17023SJohn Marino
2069*e4b17023SJohn Marino@node Arithmetic
2070*e4b17023SJohn Marino@section RTL Expressions for Arithmetic
2071*e4b17023SJohn Marino@cindex arithmetic, in RTL
2072*e4b17023SJohn Marino@cindex math, in RTL
2073*e4b17023SJohn Marino@cindex RTL expressions for arithmetic
2074*e4b17023SJohn Marino
2075*e4b17023SJohn MarinoUnless otherwise specified, all the operands of arithmetic expressions
2076*e4b17023SJohn Marinomust be valid for mode @var{m}.  An operand is valid for mode @var{m}
2077*e4b17023SJohn Marinoif it has mode @var{m}, or if it is a @code{const_int} or
2078*e4b17023SJohn Marino@code{const_double} and @var{m} is a mode of class @code{MODE_INT}.
2079*e4b17023SJohn Marino
2080*e4b17023SJohn MarinoFor commutative binary operations, constants should be placed in the
2081*e4b17023SJohn Marinosecond operand.
2082*e4b17023SJohn Marino
2083*e4b17023SJohn Marino@table @code
2084*e4b17023SJohn Marino@findex plus
2085*e4b17023SJohn Marino@findex ss_plus
2086*e4b17023SJohn Marino@findex us_plus
2087*e4b17023SJohn Marino@cindex RTL sum
2088*e4b17023SJohn Marino@cindex RTL addition
2089*e4b17023SJohn Marino@cindex RTL addition with signed saturation
2090*e4b17023SJohn Marino@cindex RTL addition with unsigned saturation
2091*e4b17023SJohn Marino@item (plus:@var{m} @var{x} @var{y})
2092*e4b17023SJohn Marino@itemx (ss_plus:@var{m} @var{x} @var{y})
2093*e4b17023SJohn Marino@itemx (us_plus:@var{m} @var{x} @var{y})
2094*e4b17023SJohn Marino
2095*e4b17023SJohn MarinoThese three expressions all represent the sum of the values
2096*e4b17023SJohn Marinorepresented by @var{x} and @var{y} carried out in machine mode
2097*e4b17023SJohn Marino@var{m}.  They differ in their behavior on overflow of integer modes.
2098*e4b17023SJohn Marino@code{plus} wraps round modulo the width of @var{m}; @code{ss_plus}
2099*e4b17023SJohn Marinosaturates at the maximum signed value representable in @var{m};
2100*e4b17023SJohn Marino@code{us_plus} saturates at the maximum unsigned value.
2101*e4b17023SJohn Marino
2102*e4b17023SJohn Marino@c ??? What happens on overflow of floating point modes?
2103*e4b17023SJohn Marino
2104*e4b17023SJohn Marino@findex lo_sum
2105*e4b17023SJohn Marino@item (lo_sum:@var{m} @var{x} @var{y})
2106*e4b17023SJohn Marino
2107*e4b17023SJohn MarinoThis expression represents the sum of @var{x} and the low-order bits
2108*e4b17023SJohn Marinoof @var{y}.  It is used with @code{high} (@pxref{Constants}) to
2109*e4b17023SJohn Marinorepresent the typical two-instruction sequence used in RISC machines
2110*e4b17023SJohn Marinoto reference a global memory location.
2111*e4b17023SJohn Marino
2112*e4b17023SJohn MarinoThe number of low order bits is machine-dependent but is
2113*e4b17023SJohn Marinonormally the number of bits in a @code{Pmode} item minus the number of
2114*e4b17023SJohn Marinobits set by @code{high}.
2115*e4b17023SJohn Marino
2116*e4b17023SJohn Marino@var{m} should be @code{Pmode}.
2117*e4b17023SJohn Marino
2118*e4b17023SJohn Marino@findex minus
2119*e4b17023SJohn Marino@findex ss_minus
2120*e4b17023SJohn Marino@findex us_minus
2121*e4b17023SJohn Marino@cindex RTL difference
2122*e4b17023SJohn Marino@cindex RTL subtraction
2123*e4b17023SJohn Marino@cindex RTL subtraction with signed saturation
2124*e4b17023SJohn Marino@cindex RTL subtraction with unsigned saturation
2125*e4b17023SJohn Marino@item (minus:@var{m} @var{x} @var{y})
2126*e4b17023SJohn Marino@itemx (ss_minus:@var{m} @var{x} @var{y})
2127*e4b17023SJohn Marino@itemx (us_minus:@var{m} @var{x} @var{y})
2128*e4b17023SJohn Marino
2129*e4b17023SJohn MarinoThese three expressions represent the result of subtracting @var{y}
2130*e4b17023SJohn Marinofrom @var{x}, carried out in mode @var{M}.  Behavior on overflow is
2131*e4b17023SJohn Marinothe same as for the three variants of @code{plus} (see above).
2132*e4b17023SJohn Marino
2133*e4b17023SJohn Marino@findex compare
2134*e4b17023SJohn Marino@cindex RTL comparison
2135*e4b17023SJohn Marino@item (compare:@var{m} @var{x} @var{y})
2136*e4b17023SJohn MarinoRepresents the result of subtracting @var{y} from @var{x} for purposes
2137*e4b17023SJohn Marinoof comparison.  The result is computed without overflow, as if with
2138*e4b17023SJohn Marinoinfinite precision.
2139*e4b17023SJohn Marino
2140*e4b17023SJohn MarinoOf course, machines can't really subtract with infinite precision.
2141*e4b17023SJohn MarinoHowever, they can pretend to do so when only the sign of the result will
2142*e4b17023SJohn Marinobe used, which is the case when the result is stored in the condition
2143*e4b17023SJohn Marinocode.  And that is the @emph{only} way this kind of expression may
2144*e4b17023SJohn Marinovalidly be used: as a value to be stored in the condition codes, either
2145*e4b17023SJohn Marino@code{(cc0)} or a register.  @xref{Comparisons}.
2146*e4b17023SJohn Marino
2147*e4b17023SJohn MarinoThe mode @var{m} is not related to the modes of @var{x} and @var{y}, but
2148*e4b17023SJohn Marinoinstead is the mode of the condition code value.  If @code{(cc0)} is
2149*e4b17023SJohn Marinoused, it is @code{VOIDmode}.  Otherwise it is some mode in class
2150*e4b17023SJohn Marino@code{MODE_CC}, often @code{CCmode}.  @xref{Condition Code}.  If @var{m}
2151*e4b17023SJohn Marinois @code{VOIDmode} or @code{CCmode}, the operation returns sufficient
2152*e4b17023SJohn Marinoinformation (in an unspecified format) so that any comparison operator
2153*e4b17023SJohn Marinocan be applied to the result of the @code{COMPARE} operation.  For other
2154*e4b17023SJohn Marinomodes in class @code{MODE_CC}, the operation only returns a subset of
2155*e4b17023SJohn Marinothis information.
2156*e4b17023SJohn Marino
2157*e4b17023SJohn MarinoNormally, @var{x} and @var{y} must have the same mode.  Otherwise,
2158*e4b17023SJohn Marino@code{compare} is valid only if the mode of @var{x} is in class
2159*e4b17023SJohn Marino@code{MODE_INT} and @var{y} is a @code{const_int} or
2160*e4b17023SJohn Marino@code{const_double} with mode @code{VOIDmode}.  The mode of @var{x}
2161*e4b17023SJohn Marinodetermines what mode the comparison is to be done in; thus it must not
2162*e4b17023SJohn Marinobe @code{VOIDmode}.
2163*e4b17023SJohn Marino
2164*e4b17023SJohn MarinoIf one of the operands is a constant, it should be placed in the
2165*e4b17023SJohn Marinosecond operand and the comparison code adjusted as appropriate.
2166*e4b17023SJohn Marino
2167*e4b17023SJohn MarinoA @code{compare} specifying two @code{VOIDmode} constants is not valid
2168*e4b17023SJohn Marinosince there is no way to know in what mode the comparison is to be
2169*e4b17023SJohn Marinoperformed; the comparison must either be folded during the compilation
2170*e4b17023SJohn Marinoor the first operand must be loaded into a register while its mode is
2171*e4b17023SJohn Marinostill known.
2172*e4b17023SJohn Marino
2173*e4b17023SJohn Marino@findex neg
2174*e4b17023SJohn Marino@findex ss_neg
2175*e4b17023SJohn Marino@findex us_neg
2176*e4b17023SJohn Marino@cindex negation
2177*e4b17023SJohn Marino@cindex negation with signed saturation
2178*e4b17023SJohn Marino@cindex negation with unsigned saturation
2179*e4b17023SJohn Marino@item (neg:@var{m} @var{x})
2180*e4b17023SJohn Marino@itemx (ss_neg:@var{m} @var{x})
2181*e4b17023SJohn Marino@itemx (us_neg:@var{m} @var{x})
2182*e4b17023SJohn MarinoThese two expressions represent the negation (subtraction from zero) of
2183*e4b17023SJohn Marinothe value represented by @var{x}, carried out in mode @var{m}.  They
2184*e4b17023SJohn Marinodiffer in the behavior on overflow of integer modes.  In the case of
2185*e4b17023SJohn Marino@code{neg}, the negation of the operand may be a number not representable
2186*e4b17023SJohn Marinoin mode @var{m}, in which case it is truncated to @var{m}.  @code{ss_neg}
2187*e4b17023SJohn Marinoand @code{us_neg} ensure that an out-of-bounds result saturates to the
2188*e4b17023SJohn Marinomaximum or minimum signed or unsigned value.
2189*e4b17023SJohn Marino
2190*e4b17023SJohn Marino@findex mult
2191*e4b17023SJohn Marino@findex ss_mult
2192*e4b17023SJohn Marino@findex us_mult
2193*e4b17023SJohn Marino@cindex multiplication
2194*e4b17023SJohn Marino@cindex product
2195*e4b17023SJohn Marino@cindex multiplication with signed saturation
2196*e4b17023SJohn Marino@cindex multiplication with unsigned saturation
2197*e4b17023SJohn Marino@item (mult:@var{m} @var{x} @var{y})
2198*e4b17023SJohn Marino@itemx (ss_mult:@var{m} @var{x} @var{y})
2199*e4b17023SJohn Marino@itemx (us_mult:@var{m} @var{x} @var{y})
2200*e4b17023SJohn MarinoRepresents the signed product of the values represented by @var{x} and
2201*e4b17023SJohn Marino@var{y} carried out in machine mode @var{m}.
2202*e4b17023SJohn Marino@code{ss_mult} and @code{us_mult} ensure that an out-of-bounds result
2203*e4b17023SJohn Marinosaturates to the maximum or minimum signed or unsigned value.
2204*e4b17023SJohn Marino
2205*e4b17023SJohn MarinoSome machines support a multiplication that generates a product wider
2206*e4b17023SJohn Marinothan the operands.  Write the pattern for this as
2207*e4b17023SJohn Marino
2208*e4b17023SJohn Marino@smallexample
2209*e4b17023SJohn Marino(mult:@var{m} (sign_extend:@var{m} @var{x}) (sign_extend:@var{m} @var{y}))
2210*e4b17023SJohn Marino@end smallexample
2211*e4b17023SJohn Marino
2212*e4b17023SJohn Marinowhere @var{m} is wider than the modes of @var{x} and @var{y}, which need
2213*e4b17023SJohn Marinonot be the same.
2214*e4b17023SJohn Marino
2215*e4b17023SJohn MarinoFor unsigned widening multiplication, use the same idiom, but with
2216*e4b17023SJohn Marino@code{zero_extend} instead of @code{sign_extend}.
2217*e4b17023SJohn Marino
2218*e4b17023SJohn Marino@findex fma
2219*e4b17023SJohn Marino@item (fma:@var{m} @var{x} @var{y} @var{z})
2220*e4b17023SJohn MarinoRepresents the @code{fma}, @code{fmaf}, and @code{fmal} builtin
2221*e4b17023SJohn Marinofunctions that do a combined multiply of @var{x} and @var{y} and then
2222*e4b17023SJohn Marinoadding to@var{z} without doing an intermediate rounding step.
2223*e4b17023SJohn Marino
2224*e4b17023SJohn Marino@findex div
2225*e4b17023SJohn Marino@findex ss_div
2226*e4b17023SJohn Marino@cindex division
2227*e4b17023SJohn Marino@cindex signed division
2228*e4b17023SJohn Marino@cindex signed division with signed saturation
2229*e4b17023SJohn Marino@cindex quotient
2230*e4b17023SJohn Marino@item (div:@var{m} @var{x} @var{y})
2231*e4b17023SJohn Marino@itemx (ss_div:@var{m} @var{x} @var{y})
2232*e4b17023SJohn MarinoRepresents the quotient in signed division of @var{x} by @var{y},
2233*e4b17023SJohn Marinocarried out in machine mode @var{m}.  If @var{m} is a floating point
2234*e4b17023SJohn Marinomode, it represents the exact quotient; otherwise, the integerized
2235*e4b17023SJohn Marinoquotient.
2236*e4b17023SJohn Marino@code{ss_div} ensures that an out-of-bounds result saturates to the maximum
2237*e4b17023SJohn Marinoor minimum signed value.
2238*e4b17023SJohn Marino
2239*e4b17023SJohn MarinoSome machines have division instructions in which the operands and
2240*e4b17023SJohn Marinoquotient widths are not all the same; you should represent
2241*e4b17023SJohn Marinosuch instructions using @code{truncate} and @code{sign_extend} as in,
2242*e4b17023SJohn Marino
2243*e4b17023SJohn Marino@smallexample
2244*e4b17023SJohn Marino(truncate:@var{m1} (div:@var{m2} @var{x} (sign_extend:@var{m2} @var{y})))
2245*e4b17023SJohn Marino@end smallexample
2246*e4b17023SJohn Marino
2247*e4b17023SJohn Marino@findex udiv
2248*e4b17023SJohn Marino@cindex unsigned division
2249*e4b17023SJohn Marino@cindex unsigned division with unsigned saturation
2250*e4b17023SJohn Marino@cindex division
2251*e4b17023SJohn Marino@item (udiv:@var{m} @var{x} @var{y})
2252*e4b17023SJohn Marino@itemx (us_div:@var{m} @var{x} @var{y})
2253*e4b17023SJohn MarinoLike @code{div} but represents unsigned division.
2254*e4b17023SJohn Marino@code{us_div} ensures that an out-of-bounds result saturates to the maximum
2255*e4b17023SJohn Marinoor minimum unsigned value.
2256*e4b17023SJohn Marino
2257*e4b17023SJohn Marino@findex mod
2258*e4b17023SJohn Marino@findex umod
2259*e4b17023SJohn Marino@cindex remainder
2260*e4b17023SJohn Marino@cindex division
2261*e4b17023SJohn Marino@item (mod:@var{m} @var{x} @var{y})
2262*e4b17023SJohn Marino@itemx (umod:@var{m} @var{x} @var{y})
2263*e4b17023SJohn MarinoLike @code{div} and @code{udiv} but represent the remainder instead of
2264*e4b17023SJohn Marinothe quotient.
2265*e4b17023SJohn Marino
2266*e4b17023SJohn Marino@findex smin
2267*e4b17023SJohn Marino@findex smax
2268*e4b17023SJohn Marino@cindex signed minimum
2269*e4b17023SJohn Marino@cindex signed maximum
2270*e4b17023SJohn Marino@item (smin:@var{m} @var{x} @var{y})
2271*e4b17023SJohn Marino@itemx (smax:@var{m} @var{x} @var{y})
2272*e4b17023SJohn MarinoRepresents the smaller (for @code{smin}) or larger (for @code{smax}) of
2273*e4b17023SJohn Marino@var{x} and @var{y}, interpreted as signed values in mode @var{m}.
2274*e4b17023SJohn MarinoWhen used with floating point, if both operands are zeros, or if either
2275*e4b17023SJohn Marinooperand is @code{NaN}, then it is unspecified which of the two operands
2276*e4b17023SJohn Marinois returned as the result.
2277*e4b17023SJohn Marino
2278*e4b17023SJohn Marino@findex umin
2279*e4b17023SJohn Marino@findex umax
2280*e4b17023SJohn Marino@cindex unsigned minimum and maximum
2281*e4b17023SJohn Marino@item (umin:@var{m} @var{x} @var{y})
2282*e4b17023SJohn Marino@itemx (umax:@var{m} @var{x} @var{y})
2283*e4b17023SJohn MarinoLike @code{smin} and @code{smax}, but the values are interpreted as unsigned
2284*e4b17023SJohn Marinointegers.
2285*e4b17023SJohn Marino
2286*e4b17023SJohn Marino@findex not
2287*e4b17023SJohn Marino@cindex complement, bitwise
2288*e4b17023SJohn Marino@cindex bitwise complement
2289*e4b17023SJohn Marino@item (not:@var{m} @var{x})
2290*e4b17023SJohn MarinoRepresents the bitwise complement of the value represented by @var{x},
2291*e4b17023SJohn Marinocarried out in mode @var{m}, which must be a fixed-point machine mode.
2292*e4b17023SJohn Marino
2293*e4b17023SJohn Marino@findex and
2294*e4b17023SJohn Marino@cindex logical-and, bitwise
2295*e4b17023SJohn Marino@cindex bitwise logical-and
2296*e4b17023SJohn Marino@item (and:@var{m} @var{x} @var{y})
2297*e4b17023SJohn MarinoRepresents the bitwise logical-and of the values represented by
2298*e4b17023SJohn Marino@var{x} and @var{y}, carried out in machine mode @var{m}, which must be
2299*e4b17023SJohn Marinoa fixed-point machine mode.
2300*e4b17023SJohn Marino
2301*e4b17023SJohn Marino@findex ior
2302*e4b17023SJohn Marino@cindex inclusive-or, bitwise
2303*e4b17023SJohn Marino@cindex bitwise inclusive-or
2304*e4b17023SJohn Marino@item (ior:@var{m} @var{x} @var{y})
2305*e4b17023SJohn MarinoRepresents the bitwise inclusive-or of the values represented by @var{x}
2306*e4b17023SJohn Marinoand @var{y}, carried out in machine mode @var{m}, which must be a
2307*e4b17023SJohn Marinofixed-point mode.
2308*e4b17023SJohn Marino
2309*e4b17023SJohn Marino@findex xor
2310*e4b17023SJohn Marino@cindex exclusive-or, bitwise
2311*e4b17023SJohn Marino@cindex bitwise exclusive-or
2312*e4b17023SJohn Marino@item (xor:@var{m} @var{x} @var{y})
2313*e4b17023SJohn MarinoRepresents the bitwise exclusive-or of the values represented by @var{x}
2314*e4b17023SJohn Marinoand @var{y}, carried out in machine mode @var{m}, which must be a
2315*e4b17023SJohn Marinofixed-point mode.
2316*e4b17023SJohn Marino
2317*e4b17023SJohn Marino@findex ashift
2318*e4b17023SJohn Marino@findex ss_ashift
2319*e4b17023SJohn Marino@findex us_ashift
2320*e4b17023SJohn Marino@cindex left shift
2321*e4b17023SJohn Marino@cindex shift
2322*e4b17023SJohn Marino@cindex arithmetic shift
2323*e4b17023SJohn Marino@cindex arithmetic shift with signed saturation
2324*e4b17023SJohn Marino@cindex arithmetic shift with unsigned saturation
2325*e4b17023SJohn Marino@item (ashift:@var{m} @var{x} @var{c})
2326*e4b17023SJohn Marino@itemx (ss_ashift:@var{m} @var{x} @var{c})
2327*e4b17023SJohn Marino@itemx (us_ashift:@var{m} @var{x} @var{c})
2328*e4b17023SJohn MarinoThese three expressions represent the result of arithmetically shifting @var{x}
2329*e4b17023SJohn Marinoleft by @var{c} places.  They differ in their behavior on overflow of integer
2330*e4b17023SJohn Marinomodes.  An @code{ashift} operation is a plain shift with no special behavior
2331*e4b17023SJohn Marinoin case of a change in the sign bit; @code{ss_ashift} and @code{us_ashift}
2332*e4b17023SJohn Marinosaturates to the minimum or maximum representable value if any of the bits
2333*e4b17023SJohn Marinoshifted out differs from the final sign bit.
2334*e4b17023SJohn Marino
2335*e4b17023SJohn Marino@var{x} have mode @var{m}, a fixed-point machine mode.  @var{c}
2336*e4b17023SJohn Marinobe a fixed-point mode or be a constant with mode @code{VOIDmode}; which
2337*e4b17023SJohn Marinomode is determined by the mode called for in the machine description
2338*e4b17023SJohn Marinoentry for the left-shift instruction.  For example, on the VAX, the mode
2339*e4b17023SJohn Marinoof @var{c} is @code{QImode} regardless of @var{m}.
2340*e4b17023SJohn Marino
2341*e4b17023SJohn Marino@findex lshiftrt
2342*e4b17023SJohn Marino@cindex right shift
2343*e4b17023SJohn Marino@findex ashiftrt
2344*e4b17023SJohn Marino@item (lshiftrt:@var{m} @var{x} @var{c})
2345*e4b17023SJohn Marino@itemx (ashiftrt:@var{m} @var{x} @var{c})
2346*e4b17023SJohn MarinoLike @code{ashift} but for right shift.  Unlike the case for left shift,
2347*e4b17023SJohn Marinothese two operations are distinct.
2348*e4b17023SJohn Marino
2349*e4b17023SJohn Marino@findex rotate
2350*e4b17023SJohn Marino@cindex rotate
2351*e4b17023SJohn Marino@cindex left rotate
2352*e4b17023SJohn Marino@findex rotatert
2353*e4b17023SJohn Marino@cindex right rotate
2354*e4b17023SJohn Marino@item (rotate:@var{m} @var{x} @var{c})
2355*e4b17023SJohn Marino@itemx (rotatert:@var{m} @var{x} @var{c})
2356*e4b17023SJohn MarinoSimilar but represent left and right rotate.  If @var{c} is a constant,
2357*e4b17023SJohn Marinouse @code{rotate}.
2358*e4b17023SJohn Marino
2359*e4b17023SJohn Marino@findex abs
2360*e4b17023SJohn Marino@findex ss_abs
2361*e4b17023SJohn Marino@cindex absolute value
2362*e4b17023SJohn Marino@item (abs:@var{m} @var{x})
2363*e4b17023SJohn Marino@item (ss_abs:@var{m} @var{x})
2364*e4b17023SJohn MarinoRepresents the absolute value of @var{x}, computed in mode @var{m}.
2365*e4b17023SJohn Marino@code{ss_abs} ensures that an out-of-bounds result saturates to the
2366*e4b17023SJohn Marinomaximum signed value.
2367*e4b17023SJohn Marino
2368*e4b17023SJohn Marino
2369*e4b17023SJohn Marino@findex sqrt
2370*e4b17023SJohn Marino@cindex square root
2371*e4b17023SJohn Marino@item (sqrt:@var{m} @var{x})
2372*e4b17023SJohn MarinoRepresents the square root of @var{x}, computed in mode @var{m}.
2373*e4b17023SJohn MarinoMost often @var{m} will be a floating point mode.
2374*e4b17023SJohn Marino
2375*e4b17023SJohn Marino@findex ffs
2376*e4b17023SJohn Marino@item (ffs:@var{m} @var{x})
2377*e4b17023SJohn MarinoRepresents one plus the index of the least significant 1-bit in
2378*e4b17023SJohn Marino@var{x}, represented as an integer of mode @var{m}.  (The value is
2379*e4b17023SJohn Marinozero if @var{x} is zero.)  The mode of @var{x} must be @var{m}
2380*e4b17023SJohn Marinoor @code{VOIDmode}.
2381*e4b17023SJohn Marino
2382*e4b17023SJohn Marino@findex clrsb
2383*e4b17023SJohn Marino@item (clrsb:@var{m} @var{x})
2384*e4b17023SJohn MarinoRepresents the number of redundant leading sign bits in @var{x},
2385*e4b17023SJohn Marinorepresented as an integer of mode @var{m}, starting at the most
2386*e4b17023SJohn Marinosignificant bit position.  This is one less than the number of leading
2387*e4b17023SJohn Marinosign bits (either 0 or 1), with no special cases.  The mode of @var{x}
2388*e4b17023SJohn Marinomust be @var{m} or @code{VOIDmode}.
2389*e4b17023SJohn Marino
2390*e4b17023SJohn Marino@findex clz
2391*e4b17023SJohn Marino@item (clz:@var{m} @var{x})
2392*e4b17023SJohn MarinoRepresents the number of leading 0-bits in @var{x}, represented as an
2393*e4b17023SJohn Marinointeger of mode @var{m}, starting at the most significant bit position.
2394*e4b17023SJohn MarinoIf @var{x} is zero, the value is determined by
2395*e4b17023SJohn Marino@code{CLZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}).  Note that this is one of
2396*e4b17023SJohn Marinothe few expressions that is not invariant under widening.  The mode of
2397*e4b17023SJohn Marino@var{x} must be @var{m} or @code{VOIDmode}.
2398*e4b17023SJohn Marino
2399*e4b17023SJohn Marino@findex ctz
2400*e4b17023SJohn Marino@item (ctz:@var{m} @var{x})
2401*e4b17023SJohn MarinoRepresents the number of trailing 0-bits in @var{x}, represented as an
2402*e4b17023SJohn Marinointeger of mode @var{m}, starting at the least significant bit position.
2403*e4b17023SJohn MarinoIf @var{x} is zero, the value is determined by
2404*e4b17023SJohn Marino@code{CTZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}).  Except for this case,
2405*e4b17023SJohn Marino@code{ctz(x)} is equivalent to @code{ffs(@var{x}) - 1}.  The mode of
2406*e4b17023SJohn Marino@var{x} must be @var{m} or @code{VOIDmode}.
2407*e4b17023SJohn Marino
2408*e4b17023SJohn Marino@findex popcount
2409*e4b17023SJohn Marino@item (popcount:@var{m} @var{x})
2410*e4b17023SJohn MarinoRepresents the number of 1-bits in @var{x}, represented as an integer of
2411*e4b17023SJohn Marinomode @var{m}.  The mode of @var{x} must be @var{m} or @code{VOIDmode}.
2412*e4b17023SJohn Marino
2413*e4b17023SJohn Marino@findex parity
2414*e4b17023SJohn Marino@item (parity:@var{m} @var{x})
2415*e4b17023SJohn MarinoRepresents the number of 1-bits modulo 2 in @var{x}, represented as an
2416*e4b17023SJohn Marinointeger of mode @var{m}.  The mode of @var{x} must be @var{m} or
2417*e4b17023SJohn Marino@code{VOIDmode}.
2418*e4b17023SJohn Marino
2419*e4b17023SJohn Marino@findex bswap
2420*e4b17023SJohn Marino@item (bswap:@var{m} @var{x})
2421*e4b17023SJohn MarinoRepresents the value @var{x} with the order of bytes reversed, carried out
2422*e4b17023SJohn Marinoin mode @var{m}, which must be a fixed-point machine mode.
2423*e4b17023SJohn MarinoThe mode of @var{x} must be @var{m} or @code{VOIDmode}.
2424*e4b17023SJohn Marino@end table
2425*e4b17023SJohn Marino
2426*e4b17023SJohn Marino@node Comparisons
2427*e4b17023SJohn Marino@section Comparison Operations
2428*e4b17023SJohn Marino@cindex RTL comparison operations
2429*e4b17023SJohn Marino
2430*e4b17023SJohn MarinoComparison operators test a relation on two operands and are considered
2431*e4b17023SJohn Marinoto represent a machine-dependent nonzero value described by, but not
2432*e4b17023SJohn Marinonecessarily equal to, @code{STORE_FLAG_VALUE} (@pxref{Misc})
2433*e4b17023SJohn Marinoif the relation holds, or zero if it does not, for comparison operators
2434*e4b17023SJohn Marinowhose results have a `MODE_INT' mode,
2435*e4b17023SJohn Marino@code{FLOAT_STORE_FLAG_VALUE} (@pxref{Misc}) if the relation holds, or
2436*e4b17023SJohn Marinozero if it does not, for comparison operators that return floating-point
2437*e4b17023SJohn Marinovalues, and a vector of either @code{VECTOR_STORE_FLAG_VALUE} (@pxref{Misc})
2438*e4b17023SJohn Marinoif the relation holds, or of zeros if it does not, for comparison operators
2439*e4b17023SJohn Marinothat return vector results.
2440*e4b17023SJohn MarinoThe mode of the comparison operation is independent of the mode
2441*e4b17023SJohn Marinoof the data being compared.  If the comparison operation is being tested
2442*e4b17023SJohn Marino(e.g., the first operand of an @code{if_then_else}), the mode must be
2443*e4b17023SJohn Marino@code{VOIDmode}.
2444*e4b17023SJohn Marino
2445*e4b17023SJohn Marino@cindex condition codes
2446*e4b17023SJohn MarinoThere are two ways that comparison operations may be used.  The
2447*e4b17023SJohn Marinocomparison operators may be used to compare the condition codes
2448*e4b17023SJohn Marino@code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}.  Such
2449*e4b17023SJohn Marinoa construct actually refers to the result of the preceding instruction
2450*e4b17023SJohn Marinoin which the condition codes were set.  The instruction setting the
2451*e4b17023SJohn Marinocondition code must be adjacent to the instruction using the condition
2452*e4b17023SJohn Marinocode; only @code{note} insns may separate them.
2453*e4b17023SJohn Marino
2454*e4b17023SJohn MarinoAlternatively, a comparison operation may directly compare two data
2455*e4b17023SJohn Marinoobjects.  The mode of the comparison is determined by the operands; they
2456*e4b17023SJohn Marinomust both be valid for a common machine mode.  A comparison with both
2457*e4b17023SJohn Marinooperands constant would be invalid as the machine mode could not be
2458*e4b17023SJohn Marinodeduced from it, but such a comparison should never exist in RTL due to
2459*e4b17023SJohn Marinoconstant folding.
2460*e4b17023SJohn Marino
2461*e4b17023SJohn MarinoIn the example above, if @code{(cc0)} were last set to
2462*e4b17023SJohn Marino@code{(compare @var{x} @var{y})}, the comparison operation is
2463*e4b17023SJohn Marinoidentical to @code{(eq @var{x} @var{y})}.  Usually only one style
2464*e4b17023SJohn Marinoof comparisons is supported on a particular machine, but the combine
2465*e4b17023SJohn Marinopass will try to merge the operations to produce the @code{eq} shown
2466*e4b17023SJohn Marinoin case it exists in the context of the particular insn involved.
2467*e4b17023SJohn Marino
2468*e4b17023SJohn MarinoInequality comparisons come in two flavors, signed and unsigned.  Thus,
2469*e4b17023SJohn Marinothere are distinct expression codes @code{gt} and @code{gtu} for signed and
2470*e4b17023SJohn Marinounsigned greater-than.  These can produce different results for the same
2471*e4b17023SJohn Marinopair of integer values: for example, 1 is signed greater-than @minus{}1 but not
2472*e4b17023SJohn Marinounsigned greater-than, because @minus{}1 when regarded as unsigned is actually
2473*e4b17023SJohn Marino@code{0xffffffff} which is greater than 1.
2474*e4b17023SJohn Marino
2475*e4b17023SJohn MarinoThe signed comparisons are also used for floating point values.  Floating
2476*e4b17023SJohn Marinopoint comparisons are distinguished by the machine modes of the operands.
2477*e4b17023SJohn Marino
2478*e4b17023SJohn Marino@table @code
2479*e4b17023SJohn Marino@findex eq
2480*e4b17023SJohn Marino@cindex equal
2481*e4b17023SJohn Marino@item (eq:@var{m} @var{x} @var{y})
2482*e4b17023SJohn Marino@code{STORE_FLAG_VALUE} if the values represented by @var{x} and @var{y}
2483*e4b17023SJohn Marinoare equal, otherwise 0.
2484*e4b17023SJohn Marino
2485*e4b17023SJohn Marino@findex ne
2486*e4b17023SJohn Marino@cindex not equal
2487*e4b17023SJohn Marino@item (ne:@var{m} @var{x} @var{y})
2488*e4b17023SJohn Marino@code{STORE_FLAG_VALUE} if the values represented by @var{x} and @var{y}
2489*e4b17023SJohn Marinoare not equal, otherwise 0.
2490*e4b17023SJohn Marino
2491*e4b17023SJohn Marino@findex gt
2492*e4b17023SJohn Marino@cindex greater than
2493*e4b17023SJohn Marino@item (gt:@var{m} @var{x} @var{y})
2494*e4b17023SJohn Marino@code{STORE_FLAG_VALUE} if the @var{x} is greater than @var{y}.  If they
2495*e4b17023SJohn Marinoare fixed-point, the comparison is done in a signed sense.
2496*e4b17023SJohn Marino
2497*e4b17023SJohn Marino@findex gtu
2498*e4b17023SJohn Marino@cindex greater than
2499*e4b17023SJohn Marino@cindex unsigned greater than
2500*e4b17023SJohn Marino@item (gtu:@var{m} @var{x} @var{y})
2501*e4b17023SJohn MarinoLike @code{gt} but does unsigned comparison, on fixed-point numbers only.
2502*e4b17023SJohn Marino
2503*e4b17023SJohn Marino@findex lt
2504*e4b17023SJohn Marino@cindex less than
2505*e4b17023SJohn Marino@findex ltu
2506*e4b17023SJohn Marino@cindex unsigned less than
2507*e4b17023SJohn Marino@item (lt:@var{m} @var{x} @var{y})
2508*e4b17023SJohn Marino@itemx (ltu:@var{m} @var{x} @var{y})
2509*e4b17023SJohn MarinoLike @code{gt} and @code{gtu} but test for ``less than''.
2510*e4b17023SJohn Marino
2511*e4b17023SJohn Marino@findex ge
2512*e4b17023SJohn Marino@cindex greater than
2513*e4b17023SJohn Marino@findex geu
2514*e4b17023SJohn Marino@cindex unsigned greater than
2515*e4b17023SJohn Marino@item (ge:@var{m} @var{x} @var{y})
2516*e4b17023SJohn Marino@itemx (geu:@var{m} @var{x} @var{y})
2517*e4b17023SJohn MarinoLike @code{gt} and @code{gtu} but test for ``greater than or equal''.
2518*e4b17023SJohn Marino
2519*e4b17023SJohn Marino@findex le
2520*e4b17023SJohn Marino@cindex less than or equal
2521*e4b17023SJohn Marino@findex leu
2522*e4b17023SJohn Marino@cindex unsigned less than
2523*e4b17023SJohn Marino@item (le:@var{m} @var{x} @var{y})
2524*e4b17023SJohn Marino@itemx (leu:@var{m} @var{x} @var{y})
2525*e4b17023SJohn MarinoLike @code{gt} and @code{gtu} but test for ``less than or equal''.
2526*e4b17023SJohn Marino
2527*e4b17023SJohn Marino@findex if_then_else
2528*e4b17023SJohn Marino@item (if_then_else @var{cond} @var{then} @var{else})
2529*e4b17023SJohn MarinoThis is not a comparison operation but is listed here because it is
2530*e4b17023SJohn Marinoalways used in conjunction with a comparison operation.  To be
2531*e4b17023SJohn Marinoprecise, @var{cond} is a comparison expression.  This expression
2532*e4b17023SJohn Marinorepresents a choice, according to @var{cond}, between the value
2533*e4b17023SJohn Marinorepresented by @var{then} and the one represented by @var{else}.
2534*e4b17023SJohn Marino
2535*e4b17023SJohn MarinoOn most machines, @code{if_then_else} expressions are valid only
2536*e4b17023SJohn Marinoto express conditional jumps.
2537*e4b17023SJohn Marino
2538*e4b17023SJohn Marino@findex cond
2539*e4b17023SJohn Marino@item (cond [@var{test1} @var{value1} @var{test2} @var{value2} @dots{}] @var{default})
2540*e4b17023SJohn MarinoSimilar to @code{if_then_else}, but more general.  Each of @var{test1},
2541*e4b17023SJohn Marino@var{test2}, @dots{} is performed in turn.  The result of this expression is
2542*e4b17023SJohn Marinothe @var{value} corresponding to the first nonzero test, or @var{default} if
2543*e4b17023SJohn Marinonone of the tests are nonzero expressions.
2544*e4b17023SJohn Marino
2545*e4b17023SJohn MarinoThis is currently not valid for instruction patterns and is supported only
2546*e4b17023SJohn Marinofor insn attributes.  @xref{Insn Attributes}.
2547*e4b17023SJohn Marino@end table
2548*e4b17023SJohn Marino
2549*e4b17023SJohn Marino@node Bit-Fields
2550*e4b17023SJohn Marino@section Bit-Fields
2551*e4b17023SJohn Marino@cindex bit-fields
2552*e4b17023SJohn Marino
2553*e4b17023SJohn MarinoSpecial expression codes exist to represent bit-field instructions.
2554*e4b17023SJohn Marino
2555*e4b17023SJohn Marino@table @code
2556*e4b17023SJohn Marino@findex sign_extract
2557*e4b17023SJohn Marino@cindex @code{BITS_BIG_ENDIAN}, effect on @code{sign_extract}
2558*e4b17023SJohn Marino@item (sign_extract:@var{m} @var{loc} @var{size} @var{pos})
2559*e4b17023SJohn MarinoThis represents a reference to a sign-extended bit-field contained or
2560*e4b17023SJohn Marinostarting in @var{loc} (a memory or register reference).  The bit-field
2561*e4b17023SJohn Marinois @var{size} bits wide and starts at bit @var{pos}.  The compilation
2562*e4b17023SJohn Marinooption @code{BITS_BIG_ENDIAN} says which end of the memory unit
2563*e4b17023SJohn Marino@var{pos} counts from.
2564*e4b17023SJohn Marino
2565*e4b17023SJohn MarinoIf @var{loc} is in memory, its mode must be a single-byte integer mode.
2566*e4b17023SJohn MarinoIf @var{loc} is in a register, the mode to use is specified by the
2567*e4b17023SJohn Marinooperand of the @code{insv} or @code{extv} pattern
2568*e4b17023SJohn Marino(@pxref{Standard Names}) and is usually a full-word integer mode,
2569*e4b17023SJohn Marinowhich is the default if none is specified.
2570*e4b17023SJohn Marino
2571*e4b17023SJohn MarinoThe mode of @var{pos} is machine-specific and is also specified
2572*e4b17023SJohn Marinoin the @code{insv} or @code{extv} pattern.
2573*e4b17023SJohn Marino
2574*e4b17023SJohn MarinoThe mode @var{m} is the same as the mode that would be used for
2575*e4b17023SJohn Marino@var{loc} if it were a register.
2576*e4b17023SJohn Marino
2577*e4b17023SJohn MarinoA @code{sign_extract} can not appear as an lvalue, or part thereof,
2578*e4b17023SJohn Marinoin RTL.
2579*e4b17023SJohn Marino
2580*e4b17023SJohn Marino@findex zero_extract
2581*e4b17023SJohn Marino@item (zero_extract:@var{m} @var{loc} @var{size} @var{pos})
2582*e4b17023SJohn MarinoLike @code{sign_extract} but refers to an unsigned or zero-extended
2583*e4b17023SJohn Marinobit-field.  The same sequence of bits are extracted, but they
2584*e4b17023SJohn Marinoare filled to an entire word with zeros instead of by sign-extension.
2585*e4b17023SJohn Marino
2586*e4b17023SJohn MarinoUnlike @code{sign_extract}, this type of expressions can be lvalues
2587*e4b17023SJohn Marinoin RTL; they may appear on the left side of an assignment, indicating
2588*e4b17023SJohn Marinoinsertion of a value into the specified bit-field.
2589*e4b17023SJohn Marino@end table
2590*e4b17023SJohn Marino
2591*e4b17023SJohn Marino@node Vector Operations
2592*e4b17023SJohn Marino@section Vector Operations
2593*e4b17023SJohn Marino@cindex vector operations
2594*e4b17023SJohn Marino
2595*e4b17023SJohn MarinoAll normal RTL expressions can be used with vector modes; they are
2596*e4b17023SJohn Marinointerpreted as operating on each part of the vector independently.
2597*e4b17023SJohn MarinoAdditionally, there are a few new expressions to describe specific vector
2598*e4b17023SJohn Marinooperations.
2599*e4b17023SJohn Marino
2600*e4b17023SJohn Marino@table @code
2601*e4b17023SJohn Marino@findex vec_merge
2602*e4b17023SJohn Marino@item (vec_merge:@var{m} @var{vec1} @var{vec2} @var{items})
2603*e4b17023SJohn MarinoThis describes a merge operation between two vectors.  The result is a vector
2604*e4b17023SJohn Marinoof mode @var{m}; its elements are selected from either @var{vec1} or
2605*e4b17023SJohn Marino@var{vec2}.  Which elements are selected is described by @var{items}, which
2606*e4b17023SJohn Marinois a bit mask represented by a @code{const_int}; a zero bit indicates the
2607*e4b17023SJohn Marinocorresponding element in the result vector is taken from @var{vec2} while
2608*e4b17023SJohn Marinoa set bit indicates it is taken from @var{vec1}.
2609*e4b17023SJohn Marino
2610*e4b17023SJohn Marino@findex vec_select
2611*e4b17023SJohn Marino@item (vec_select:@var{m} @var{vec1} @var{selection})
2612*e4b17023SJohn MarinoThis describes an operation that selects parts of a vector.  @var{vec1} is
2613*e4b17023SJohn Marinothe source vector, and @var{selection} is a @code{parallel} that contains a
2614*e4b17023SJohn Marino@code{const_int} for each of the subparts of the result vector, giving the
2615*e4b17023SJohn Marinonumber of the source subpart that should be stored into it.
2616*e4b17023SJohn MarinoThe result mode @var{m} is either the submode for a single element of
2617*e4b17023SJohn Marino@var{vec1} (if only one subpart is selected), or another vector mode
2618*e4b17023SJohn Marinowith that element submode (if multiple subparts are selected).
2619*e4b17023SJohn Marino
2620*e4b17023SJohn Marino@findex vec_concat
2621*e4b17023SJohn Marino@item (vec_concat:@var{m} @var{vec1} @var{vec2})
2622*e4b17023SJohn MarinoDescribes a vector concat operation.  The result is a concatenation of the
2623*e4b17023SJohn Marinovectors @var{vec1} and @var{vec2}; its length is the sum of the lengths of
2624*e4b17023SJohn Marinothe two inputs.
2625*e4b17023SJohn Marino
2626*e4b17023SJohn Marino@findex vec_duplicate
2627*e4b17023SJohn Marino@item (vec_duplicate:@var{m} @var{vec})
2628*e4b17023SJohn MarinoThis operation converts a small vector into a larger one by duplicating the
2629*e4b17023SJohn Marinoinput values.  The output vector mode must have the same submodes as the
2630*e4b17023SJohn Marinoinput vector mode, and the number of output parts must be an integer multiple
2631*e4b17023SJohn Marinoof the number of input parts.
2632*e4b17023SJohn Marino
2633*e4b17023SJohn Marino@end table
2634*e4b17023SJohn Marino
2635*e4b17023SJohn Marino@node Conversions
2636*e4b17023SJohn Marino@section Conversions
2637*e4b17023SJohn Marino@cindex conversions
2638*e4b17023SJohn Marino@cindex machine mode conversions
2639*e4b17023SJohn Marino
2640*e4b17023SJohn MarinoAll conversions between machine modes must be represented by
2641*e4b17023SJohn Marinoexplicit conversion operations.  For example, an expression
2642*e4b17023SJohn Marinowhich is the sum of a byte and a full word cannot be written as
2643*e4b17023SJohn Marino@code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @code{plus}
2644*e4b17023SJohn Marinooperation requires two operands of the same machine mode.
2645*e4b17023SJohn MarinoTherefore, the byte-sized operand is enclosed in a conversion
2646*e4b17023SJohn Marinooperation, as in
2647*e4b17023SJohn Marino
2648*e4b17023SJohn Marino@smallexample
2649*e4b17023SJohn Marino(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
2650*e4b17023SJohn Marino@end smallexample
2651*e4b17023SJohn Marino
2652*e4b17023SJohn MarinoThe conversion operation is not a mere placeholder, because there
2653*e4b17023SJohn Marinomay be more than one way of converting from a given starting mode
2654*e4b17023SJohn Marinoto the desired final mode.  The conversion operation code says how
2655*e4b17023SJohn Marinoto do it.
2656*e4b17023SJohn Marino
2657*e4b17023SJohn MarinoFor all conversion operations, @var{x} must not be @code{VOIDmode}
2658*e4b17023SJohn Marinobecause the mode in which to do the conversion would not be known.
2659*e4b17023SJohn MarinoThe conversion must either be done at compile-time or @var{x}
2660*e4b17023SJohn Marinomust be placed into a register.
2661*e4b17023SJohn Marino
2662*e4b17023SJohn Marino@table @code
2663*e4b17023SJohn Marino@findex sign_extend
2664*e4b17023SJohn Marino@item (sign_extend:@var{m} @var{x})
2665*e4b17023SJohn MarinoRepresents the result of sign-extending the value @var{x}
2666*e4b17023SJohn Marinoto machine mode @var{m}.  @var{m} must be a fixed-point mode
2667*e4b17023SJohn Marinoand @var{x} a fixed-point value of a mode narrower than @var{m}.
2668*e4b17023SJohn Marino
2669*e4b17023SJohn Marino@findex zero_extend
2670*e4b17023SJohn Marino@item (zero_extend:@var{m} @var{x})
2671*e4b17023SJohn MarinoRepresents the result of zero-extending the value @var{x}
2672*e4b17023SJohn Marinoto machine mode @var{m}.  @var{m} must be a fixed-point mode
2673*e4b17023SJohn Marinoand @var{x} a fixed-point value of a mode narrower than @var{m}.
2674*e4b17023SJohn Marino
2675*e4b17023SJohn Marino@findex float_extend
2676*e4b17023SJohn Marino@item (float_extend:@var{m} @var{x})
2677*e4b17023SJohn MarinoRepresents the result of extending the value @var{x}
2678*e4b17023SJohn Marinoto machine mode @var{m}.  @var{m} must be a floating point mode
2679*e4b17023SJohn Marinoand @var{x} a floating point value of a mode narrower than @var{m}.
2680*e4b17023SJohn Marino
2681*e4b17023SJohn Marino@findex truncate
2682*e4b17023SJohn Marino@item (truncate:@var{m} @var{x})
2683*e4b17023SJohn MarinoRepresents the result of truncating the value @var{x}
2684*e4b17023SJohn Marinoto machine mode @var{m}.  @var{m} must be a fixed-point mode
2685*e4b17023SJohn Marinoand @var{x} a fixed-point value of a mode wider than @var{m}.
2686*e4b17023SJohn Marino
2687*e4b17023SJohn Marino@findex ss_truncate
2688*e4b17023SJohn Marino@item (ss_truncate:@var{m} @var{x})
2689*e4b17023SJohn MarinoRepresents the result of truncating the value @var{x}
2690*e4b17023SJohn Marinoto machine mode @var{m}, using signed saturation in the case of
2691*e4b17023SJohn Marinooverflow.  Both @var{m} and the mode of @var{x} must be fixed-point
2692*e4b17023SJohn Marinomodes.
2693*e4b17023SJohn Marino
2694*e4b17023SJohn Marino@findex us_truncate
2695*e4b17023SJohn Marino@item (us_truncate:@var{m} @var{x})
2696*e4b17023SJohn MarinoRepresents the result of truncating the value @var{x}
2697*e4b17023SJohn Marinoto machine mode @var{m}, using unsigned saturation in the case of
2698*e4b17023SJohn Marinooverflow.  Both @var{m} and the mode of @var{x} must be fixed-point
2699*e4b17023SJohn Marinomodes.
2700*e4b17023SJohn Marino
2701*e4b17023SJohn Marino@findex float_truncate
2702*e4b17023SJohn Marino@item (float_truncate:@var{m} @var{x})
2703*e4b17023SJohn MarinoRepresents the result of truncating the value @var{x}
2704*e4b17023SJohn Marinoto machine mode @var{m}.  @var{m} must be a floating point mode
2705*e4b17023SJohn Marinoand @var{x} a floating point value of a mode wider than @var{m}.
2706*e4b17023SJohn Marino
2707*e4b17023SJohn Marino@findex float
2708*e4b17023SJohn Marino@item (float:@var{m} @var{x})
2709*e4b17023SJohn MarinoRepresents the result of converting fixed point value @var{x},
2710*e4b17023SJohn Marinoregarded as signed, to floating point mode @var{m}.
2711*e4b17023SJohn Marino
2712*e4b17023SJohn Marino@findex unsigned_float
2713*e4b17023SJohn Marino@item (unsigned_float:@var{m} @var{x})
2714*e4b17023SJohn MarinoRepresents the result of converting fixed point value @var{x},
2715*e4b17023SJohn Marinoregarded as unsigned, to floating point mode @var{m}.
2716*e4b17023SJohn Marino
2717*e4b17023SJohn Marino@findex fix
2718*e4b17023SJohn Marino@item (fix:@var{m} @var{x})
2719*e4b17023SJohn MarinoWhen @var{m} is a floating-point mode, represents the result of
2720*e4b17023SJohn Marinoconverting floating point value @var{x} (valid for mode @var{m}) to an
2721*e4b17023SJohn Marinointeger, still represented in floating point mode @var{m}, by rounding
2722*e4b17023SJohn Marinotowards zero.
2723*e4b17023SJohn Marino
2724*e4b17023SJohn MarinoWhen @var{m} is a fixed-point mode, represents the result of
2725*e4b17023SJohn Marinoconverting floating point value @var{x} to mode @var{m}, regarded as
2726*e4b17023SJohn Marinosigned.  How rounding is done is not specified, so this operation may
2727*e4b17023SJohn Marinobe used validly in compiling C code only for integer-valued operands.
2728*e4b17023SJohn Marino
2729*e4b17023SJohn Marino@findex unsigned_fix
2730*e4b17023SJohn Marino@item (unsigned_fix:@var{m} @var{x})
2731*e4b17023SJohn MarinoRepresents the result of converting floating point value @var{x} to
2732*e4b17023SJohn Marinofixed point mode @var{m}, regarded as unsigned.  How rounding is done
2733*e4b17023SJohn Marinois not specified.
2734*e4b17023SJohn Marino
2735*e4b17023SJohn Marino@findex fract_convert
2736*e4b17023SJohn Marino@item (fract_convert:@var{m} @var{x})
2737*e4b17023SJohn MarinoRepresents the result of converting fixed-point value @var{x} to
2738*e4b17023SJohn Marinofixed-point mode @var{m}, signed integer value @var{x} to
2739*e4b17023SJohn Marinofixed-point mode @var{m}, floating-point value @var{x} to
2740*e4b17023SJohn Marinofixed-point mode @var{m}, fixed-point value @var{x} to integer mode @var{m}
2741*e4b17023SJohn Marinoregarded as signed, or fixed-point value @var{x} to floating-point mode @var{m}.
2742*e4b17023SJohn MarinoWhen overflows or underflows happen, the results are undefined.
2743*e4b17023SJohn Marino
2744*e4b17023SJohn Marino@findex sat_fract
2745*e4b17023SJohn Marino@item (sat_fract:@var{m} @var{x})
2746*e4b17023SJohn MarinoRepresents the result of converting fixed-point value @var{x} to
2747*e4b17023SJohn Marinofixed-point mode @var{m}, signed integer value @var{x} to
2748*e4b17023SJohn Marinofixed-point mode @var{m}, or floating-point value @var{x} to
2749*e4b17023SJohn Marinofixed-point mode @var{m}.
2750*e4b17023SJohn MarinoWhen overflows or underflows happen, the results are saturated to the
2751*e4b17023SJohn Marinomaximum or the minimum.
2752*e4b17023SJohn Marino
2753*e4b17023SJohn Marino@findex unsigned_fract_convert
2754*e4b17023SJohn Marino@item (unsigned_fract_convert:@var{m} @var{x})
2755*e4b17023SJohn MarinoRepresents the result of converting fixed-point value @var{x} to
2756*e4b17023SJohn Marinointeger mode @var{m} regarded as unsigned, or unsigned integer value @var{x} to
2757*e4b17023SJohn Marinofixed-point mode @var{m}.
2758*e4b17023SJohn MarinoWhen overflows or underflows happen, the results are undefined.
2759*e4b17023SJohn Marino
2760*e4b17023SJohn Marino@findex unsigned_sat_fract
2761*e4b17023SJohn Marino@item (unsigned_sat_fract:@var{m} @var{x})
2762*e4b17023SJohn MarinoRepresents the result of converting unsigned integer value @var{x} to
2763*e4b17023SJohn Marinofixed-point mode @var{m}.
2764*e4b17023SJohn MarinoWhen overflows or underflows happen, the results are saturated to the
2765*e4b17023SJohn Marinomaximum or the minimum.
2766*e4b17023SJohn Marino@end table
2767*e4b17023SJohn Marino
2768*e4b17023SJohn Marino@node RTL Declarations
2769*e4b17023SJohn Marino@section Declarations
2770*e4b17023SJohn Marino@cindex RTL declarations
2771*e4b17023SJohn Marino@cindex declarations, RTL
2772*e4b17023SJohn Marino
2773*e4b17023SJohn MarinoDeclaration expression codes do not represent arithmetic operations
2774*e4b17023SJohn Marinobut rather state assertions about their operands.
2775*e4b17023SJohn Marino
2776*e4b17023SJohn Marino@table @code
2777*e4b17023SJohn Marino@findex strict_low_part
2778*e4b17023SJohn Marino@cindex @code{subreg}, in @code{strict_low_part}
2779*e4b17023SJohn Marino@item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0))
2780*e4b17023SJohn MarinoThis expression code is used in only one context: as the destination operand of a
2781*e4b17023SJohn Marino@code{set} expression.  In addition, the operand of this expression
2782*e4b17023SJohn Marinomust be a non-paradoxical @code{subreg} expression.
2783*e4b17023SJohn Marino
2784*e4b17023SJohn MarinoThe presence of @code{strict_low_part} says that the part of the
2785*e4b17023SJohn Marinoregister which is meaningful in mode @var{n}, but is not part of
2786*e4b17023SJohn Marinomode @var{m}, is not to be altered.  Normally, an assignment to such
2787*e4b17023SJohn Marinoa subreg is allowed to have undefined effects on the rest of the
2788*e4b17023SJohn Marinoregister when @var{m} is less than a word.
2789*e4b17023SJohn Marino@end table
2790*e4b17023SJohn Marino
2791*e4b17023SJohn Marino@node Side Effects
2792*e4b17023SJohn Marino@section Side Effect Expressions
2793*e4b17023SJohn Marino@cindex RTL side effect expressions
2794*e4b17023SJohn Marino
2795*e4b17023SJohn MarinoThe expression codes described so far represent values, not actions.
2796*e4b17023SJohn MarinoBut machine instructions never produce values; they are meaningful
2797*e4b17023SJohn Marinoonly for their side effects on the state of the machine.  Special
2798*e4b17023SJohn Marinoexpression codes are used to represent side effects.
2799*e4b17023SJohn Marino
2800*e4b17023SJohn MarinoThe body of an instruction is always one of these side effect codes;
2801*e4b17023SJohn Marinothe codes described above, which represent values, appear only as
2802*e4b17023SJohn Marinothe operands of these.
2803*e4b17023SJohn Marino
2804*e4b17023SJohn Marino@table @code
2805*e4b17023SJohn Marino@findex set
2806*e4b17023SJohn Marino@item (set @var{lval} @var{x})
2807*e4b17023SJohn MarinoRepresents the action of storing the value of @var{x} into the place
2808*e4b17023SJohn Marinorepresented by @var{lval}.  @var{lval} must be an expression
2809*e4b17023SJohn Marinorepresenting a place that can be stored in: @code{reg} (or @code{subreg},
2810*e4b17023SJohn Marino@code{strict_low_part} or @code{zero_extract}), @code{mem}, @code{pc},
2811*e4b17023SJohn Marino@code{parallel}, or @code{cc0}.
2812*e4b17023SJohn Marino
2813*e4b17023SJohn MarinoIf @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a
2814*e4b17023SJohn Marinomachine mode; then @var{x} must be valid for that mode.
2815*e4b17023SJohn Marino
2816*e4b17023SJohn MarinoIf @var{lval} is a @code{reg} whose machine mode is less than the full
2817*e4b17023SJohn Marinowidth of the register, then it means that the part of the register
2818*e4b17023SJohn Marinospecified by the machine mode is given the specified value and the
2819*e4b17023SJohn Marinorest of the register receives an undefined value.  Likewise, if
2820*e4b17023SJohn Marino@var{lval} is a @code{subreg} whose machine mode is narrower than
2821*e4b17023SJohn Marinothe mode of the register, the rest of the register can be changed in
2822*e4b17023SJohn Marinoan undefined way.
2823*e4b17023SJohn Marino
2824*e4b17023SJohn MarinoIf @var{lval} is a @code{strict_low_part} of a subreg, then the part
2825*e4b17023SJohn Marinoof the register specified by the machine mode of the @code{subreg} is
2826*e4b17023SJohn Marinogiven the value @var{x} and the rest of the register is not changed.
2827*e4b17023SJohn Marino
2828*e4b17023SJohn MarinoIf @var{lval} is a @code{zero_extract}, then the referenced part of
2829*e4b17023SJohn Marinothe bit-field (a memory or register reference) specified by the
2830*e4b17023SJohn Marino@code{zero_extract} is given the value @var{x} and the rest of the
2831*e4b17023SJohn Marinobit-field is not changed.  Note that @code{sign_extract} can not
2832*e4b17023SJohn Marinoappear in @var{lval}.
2833*e4b17023SJohn Marino
2834*e4b17023SJohn MarinoIf @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may
2835*e4b17023SJohn Marinobe either a @code{compare} expression or a value that may have any mode.
2836*e4b17023SJohn MarinoThe latter case represents a ``test'' instruction.  The expression
2837*e4b17023SJohn Marino@code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to
2838*e4b17023SJohn Marino@code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}.
2839*e4b17023SJohn MarinoUse the former expression to save space during the compilation.
2840*e4b17023SJohn Marino
2841*e4b17023SJohn MarinoIf @var{lval} is a @code{parallel}, it is used to represent the case of
2842*e4b17023SJohn Marinoa function returning a structure in multiple registers.  Each element
2843*e4b17023SJohn Marinoof the @code{parallel} is an @code{expr_list} whose first operand is a
2844*e4b17023SJohn Marino@code{reg} and whose second operand is a @code{const_int} representing the
2845*e4b17023SJohn Marinooffset (in bytes) into the structure at which the data in that register
2846*e4b17023SJohn Marinocorresponds.  The first element may be null to indicate that the structure
2847*e4b17023SJohn Marinois also passed partly in memory.
2848*e4b17023SJohn Marino
2849*e4b17023SJohn Marino@cindex jump instructions and @code{set}
2850*e4b17023SJohn Marino@cindex @code{if_then_else} usage
2851*e4b17023SJohn MarinoIf @var{lval} is @code{(pc)}, we have a jump instruction, and the
2852*e4b17023SJohn Marinopossibilities for @var{x} are very limited.  It may be a
2853*e4b17023SJohn Marino@code{label_ref} expression (unconditional jump).  It may be an
2854*e4b17023SJohn Marino@code{if_then_else} (conditional jump), in which case either the
2855*e4b17023SJohn Marinosecond or the third operand must be @code{(pc)} (for the case which
2856*e4b17023SJohn Marinodoes not jump) and the other of the two must be a @code{label_ref}
2857*e4b17023SJohn Marino(for the case which does jump).  @var{x} may also be a @code{mem} or
2858*e4b17023SJohn Marino@code{(plus:SI (pc) @var{y})}, where @var{y} may be a @code{reg} or a
2859*e4b17023SJohn Marino@code{mem}; these unusual patterns are used to represent jumps through
2860*e4b17023SJohn Marinobranch tables.
2861*e4b17023SJohn Marino
2862*e4b17023SJohn MarinoIf @var{lval} is neither @code{(cc0)} nor @code{(pc)}, the mode of
2863*e4b17023SJohn Marino@var{lval} must not be @code{VOIDmode} and the mode of @var{x} must be
2864*e4b17023SJohn Marinovalid for the mode of @var{lval}.
2865*e4b17023SJohn Marino
2866*e4b17023SJohn Marino@findex SET_DEST
2867*e4b17023SJohn Marino@findex SET_SRC
2868*e4b17023SJohn Marino@var{lval} is customarily accessed with the @code{SET_DEST} macro and
2869*e4b17023SJohn Marino@var{x} with the @code{SET_SRC} macro.
2870*e4b17023SJohn Marino
2871*e4b17023SJohn Marino@findex return
2872*e4b17023SJohn Marino@item (return)
2873*e4b17023SJohn MarinoAs the sole expression in a pattern, represents a return from the
2874*e4b17023SJohn Marinocurrent function, on machines where this can be done with one
2875*e4b17023SJohn Marinoinstruction, such as VAXen.  On machines where a multi-instruction
2876*e4b17023SJohn Marino``epilogue'' must be executed in order to return from the function,
2877*e4b17023SJohn Marinoreturning is done by jumping to a label which precedes the epilogue, and
2878*e4b17023SJohn Marinothe @code{return} expression code is never used.
2879*e4b17023SJohn Marino
2880*e4b17023SJohn MarinoInside an @code{if_then_else} expression, represents the value to be
2881*e4b17023SJohn Marinoplaced in @code{pc} to return to the caller.
2882*e4b17023SJohn Marino
2883*e4b17023SJohn MarinoNote that an insn pattern of @code{(return)} is logically equivalent to
2884*e4b17023SJohn Marino@code{(set (pc) (return))}, but the latter form is never used.
2885*e4b17023SJohn Marino
2886*e4b17023SJohn Marino@findex simple_return
2887*e4b17023SJohn Marino@item (simple_return)
2888*e4b17023SJohn MarinoLike @code{(return)}, but truly represents only a function return, while
2889*e4b17023SJohn Marino@code{(return)} may represent an insn that also performs other functions
2890*e4b17023SJohn Marinoof the function epilogue.  Like @code{(return)}, this may also occur in
2891*e4b17023SJohn Marinoconditional jumps.
2892*e4b17023SJohn Marino
2893*e4b17023SJohn Marino@findex call
2894*e4b17023SJohn Marino@item (call @var{function} @var{nargs})
2895*e4b17023SJohn MarinoRepresents a function call.  @var{function} is a @code{mem} expression
2896*e4b17023SJohn Marinowhose address is the address of the function to be called.
2897*e4b17023SJohn Marino@var{nargs} is an expression which can be used for two purposes: on
2898*e4b17023SJohn Marinosome machines it represents the number of bytes of stack argument; on
2899*e4b17023SJohn Marinoothers, it represents the number of argument registers.
2900*e4b17023SJohn Marino
2901*e4b17023SJohn MarinoEach machine has a standard machine mode which @var{function} must
2902*e4b17023SJohn Marinohave.  The machine description defines macro @code{FUNCTION_MODE} to
2903*e4b17023SJohn Marinoexpand into the requisite mode name.  The purpose of this mode is to
2904*e4b17023SJohn Marinospecify what kind of addressing is allowed, on machines where the
2905*e4b17023SJohn Marinoallowed kinds of addressing depend on the machine mode being
2906*e4b17023SJohn Marinoaddressed.
2907*e4b17023SJohn Marino
2908*e4b17023SJohn Marino@findex clobber
2909*e4b17023SJohn Marino@item (clobber @var{x})
2910*e4b17023SJohn MarinoRepresents the storing or possible storing of an unpredictable,
2911*e4b17023SJohn Marinoundescribed value into @var{x}, which must be a @code{reg},
2912*e4b17023SJohn Marino@code{scratch}, @code{parallel} or @code{mem} expression.
2913*e4b17023SJohn Marino
2914*e4b17023SJohn MarinoOne place this is used is in string instructions that store standard
2915*e4b17023SJohn Marinovalues into particular hard registers.  It may not be worth the
2916*e4b17023SJohn Marinotrouble to describe the values that are stored, but it is essential to
2917*e4b17023SJohn Marinoinform the compiler that the registers will be altered, lest it
2918*e4b17023SJohn Marinoattempt to keep data in them across the string instruction.
2919*e4b17023SJohn Marino
2920*e4b17023SJohn MarinoIf @var{x} is @code{(mem:BLK (const_int 0))} or
2921*e4b17023SJohn Marino@code{(mem:BLK (scratch))}, it means that all memory
2922*e4b17023SJohn Marinolocations must be presumed clobbered.  If @var{x} is a @code{parallel},
2923*e4b17023SJohn Marinoit has the same meaning as a @code{parallel} in a @code{set} expression.
2924*e4b17023SJohn Marino
2925*e4b17023SJohn MarinoNote that the machine description classifies certain hard registers as
2926*e4b17023SJohn Marino``call-clobbered''.  All function call instructions are assumed by
2927*e4b17023SJohn Marinodefault to clobber these registers, so there is no need to use
2928*e4b17023SJohn Marino@code{clobber} expressions to indicate this fact.  Also, each function
2929*e4b17023SJohn Marinocall is assumed to have the potential to alter any memory location,
2930*e4b17023SJohn Marinounless the function is declared @code{const}.
2931*e4b17023SJohn Marino
2932*e4b17023SJohn MarinoIf the last group of expressions in a @code{parallel} are each a
2933*e4b17023SJohn Marino@code{clobber} expression whose arguments are @code{reg} or
2934*e4b17023SJohn Marino@code{match_scratch} (@pxref{RTL Template}) expressions, the combiner
2935*e4b17023SJohn Marinophase can add the appropriate @code{clobber} expressions to an insn it
2936*e4b17023SJohn Marinohas constructed when doing so will cause a pattern to be matched.
2937*e4b17023SJohn Marino
2938*e4b17023SJohn MarinoThis feature can be used, for example, on a machine that whose multiply
2939*e4b17023SJohn Marinoand add instructions don't use an MQ register but which has an
2940*e4b17023SJohn Marinoadd-accumulate instruction that does clobber the MQ register.  Similarly,
2941*e4b17023SJohn Marinoa combined instruction might require a temporary register while the
2942*e4b17023SJohn Marinoconstituent instructions might not.
2943*e4b17023SJohn Marino
2944*e4b17023SJohn MarinoWhen a @code{clobber} expression for a register appears inside a
2945*e4b17023SJohn Marino@code{parallel} with other side effects, the register allocator
2946*e4b17023SJohn Marinoguarantees that the register is unoccupied both before and after that
2947*e4b17023SJohn Marinoinsn if it is a hard register clobber.  For pseudo-register clobber,
2948*e4b17023SJohn Marinothe register allocator and the reload pass do not assign the same hard
2949*e4b17023SJohn Marinoregister to the clobber and the input operands if there is an insn
2950*e4b17023SJohn Marinoalternative containing the @samp{&} constraint (@pxref{Modifiers}) for
2951*e4b17023SJohn Marinothe clobber and the hard register is in register classes of the
2952*e4b17023SJohn Marinoclobber in the alternative.  You can clobber either a specific hard
2953*e4b17023SJohn Marinoregister, a pseudo register, or a @code{scratch} expression; in the
2954*e4b17023SJohn Marinolatter two cases, GCC will allocate a hard register that is available
2955*e4b17023SJohn Marinothere for use as a temporary.
2956*e4b17023SJohn Marino
2957*e4b17023SJohn MarinoFor instructions that require a temporary register, you should use
2958*e4b17023SJohn Marino@code{scratch} instead of a pseudo-register because this will allow the
2959*e4b17023SJohn Marinocombiner phase to add the @code{clobber} when required.  You do this by
2960*e4b17023SJohn Marinocoding (@code{clobber} (@code{match_scratch} @dots{})).  If you do
2961*e4b17023SJohn Marinoclobber a pseudo register, use one which appears nowhere else---generate
2962*e4b17023SJohn Marinoa new one each time.  Otherwise, you may confuse CSE@.
2963*e4b17023SJohn Marino
2964*e4b17023SJohn MarinoThere is one other known use for clobbering a pseudo register in a
2965*e4b17023SJohn Marino@code{parallel}: when one of the input operands of the insn is also
2966*e4b17023SJohn Marinoclobbered by the insn.  In this case, using the same pseudo register in
2967*e4b17023SJohn Marinothe clobber and elsewhere in the insn produces the expected results.
2968*e4b17023SJohn Marino
2969*e4b17023SJohn Marino@findex use
2970*e4b17023SJohn Marino@item (use @var{x})
2971*e4b17023SJohn MarinoRepresents the use of the value of @var{x}.  It indicates that the
2972*e4b17023SJohn Marinovalue in @var{x} at this point in the program is needed, even though
2973*e4b17023SJohn Marinoit may not be apparent why this is so.  Therefore, the compiler will
2974*e4b17023SJohn Marinonot attempt to delete previous instructions whose only effect is to
2975*e4b17023SJohn Marinostore a value in @var{x}.  @var{x} must be a @code{reg} expression.
2976*e4b17023SJohn Marino
2977*e4b17023SJohn MarinoIn some situations, it may be tempting to add a @code{use} of a
2978*e4b17023SJohn Marinoregister in a @code{parallel} to describe a situation where the value
2979*e4b17023SJohn Marinoof a special register will modify the behavior of the instruction.
2980*e4b17023SJohn MarinoA hypothetical example might be a pattern for an addition that can
2981*e4b17023SJohn Marinoeither wrap around or use saturating addition depending on the value
2982*e4b17023SJohn Marinoof a special control register:
2983*e4b17023SJohn Marino
2984*e4b17023SJohn Marino@smallexample
2985*e4b17023SJohn Marino(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
2986*e4b17023SJohn Marino                                       (reg:SI 4)] 0))
2987*e4b17023SJohn Marino           (use (reg:SI 1))])
2988*e4b17023SJohn Marino@end smallexample
2989*e4b17023SJohn Marino
2990*e4b17023SJohn Marino@noindent
2991*e4b17023SJohn Marino
2992*e4b17023SJohn MarinoThis will not work, several of the optimizers only look at expressions
2993*e4b17023SJohn Marinolocally; it is very likely that if you have multiple insns with
2994*e4b17023SJohn Marinoidentical inputs to the @code{unspec}, they will be optimized away even
2995*e4b17023SJohn Marinoif register 1 changes in between.
2996*e4b17023SJohn Marino
2997*e4b17023SJohn MarinoThis means that @code{use} can @emph{only} be used to describe
2998*e4b17023SJohn Marinothat the register is live.  You should think twice before adding
2999*e4b17023SJohn Marino@code{use} statements, more often you will want to use @code{unspec}
3000*e4b17023SJohn Marinoinstead.  The @code{use} RTX is most commonly useful to describe that
3001*e4b17023SJohn Marinoa fixed register is implicitly used in an insn.  It is also safe to use
3002*e4b17023SJohn Marinoin patterns where the compiler knows for other reasons that the result
3003*e4b17023SJohn Marinoof the whole pattern is variable, such as @samp{movmem@var{m}} or
3004*e4b17023SJohn Marino@samp{call} patterns.
3005*e4b17023SJohn Marino
3006*e4b17023SJohn MarinoDuring the reload phase, an insn that has a @code{use} as pattern
3007*e4b17023SJohn Marinocan carry a reg_equal note.  These @code{use} insns will be deleted
3008*e4b17023SJohn Marinobefore the reload phase exits.
3009*e4b17023SJohn Marino
3010*e4b17023SJohn MarinoDuring the delayed branch scheduling phase, @var{x} may be an insn.
3011*e4b17023SJohn MarinoThis indicates that @var{x} previously was located at this place in the
3012*e4b17023SJohn Marinocode and its data dependencies need to be taken into account.  These
3013*e4b17023SJohn Marino@code{use} insns will be deleted before the delayed branch scheduling
3014*e4b17023SJohn Marinophase exits.
3015*e4b17023SJohn Marino
3016*e4b17023SJohn Marino@findex parallel
3017*e4b17023SJohn Marino@item (parallel [@var{x0} @var{x1} @dots{}])
3018*e4b17023SJohn MarinoRepresents several side effects performed in parallel.  The square
3019*e4b17023SJohn Marinobrackets stand for a vector; the operand of @code{parallel} is a
3020*e4b17023SJohn Marinovector of expressions.  @var{x0}, @var{x1} and so on are individual
3021*e4b17023SJohn Marinoside effect expressions---expressions of code @code{set}, @code{call},
3022*e4b17023SJohn Marino@code{return}, @code{simple_return}, @code{clobber} or @code{use}.
3023*e4b17023SJohn Marino
3024*e4b17023SJohn Marino``In parallel'' means that first all the values used in the individual
3025*e4b17023SJohn Marinoside-effects are computed, and second all the actual side-effects are
3026*e4b17023SJohn Marinoperformed.  For example,
3027*e4b17023SJohn Marino
3028*e4b17023SJohn Marino@smallexample
3029*e4b17023SJohn Marino(parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
3030*e4b17023SJohn Marino           (set (mem:SI (reg:SI 1)) (reg:SI 1))])
3031*e4b17023SJohn Marino@end smallexample
3032*e4b17023SJohn Marino
3033*e4b17023SJohn Marino@noindent
3034*e4b17023SJohn Marinosays unambiguously that the values of hard register 1 and the memory
3035*e4b17023SJohn Marinolocation addressed by it are interchanged.  In both places where
3036*e4b17023SJohn Marino@code{(reg:SI 1)} appears as a memory address it refers to the value
3037*e4b17023SJohn Marinoin register 1 @emph{before} the execution of the insn.
3038*e4b17023SJohn Marino
3039*e4b17023SJohn MarinoIt follows that it is @emph{incorrect} to use @code{parallel} and
3040*e4b17023SJohn Marinoexpect the result of one @code{set} to be available for the next one.
3041*e4b17023SJohn MarinoFor example, people sometimes attempt to represent a jump-if-zero
3042*e4b17023SJohn Marinoinstruction this way:
3043*e4b17023SJohn Marino
3044*e4b17023SJohn Marino@smallexample
3045*e4b17023SJohn Marino(parallel [(set (cc0) (reg:SI 34))
3046*e4b17023SJohn Marino           (set (pc) (if_then_else
3047*e4b17023SJohn Marino                        (eq (cc0) (const_int 0))
3048*e4b17023SJohn Marino                        (label_ref @dots{})
3049*e4b17023SJohn Marino                        (pc)))])
3050*e4b17023SJohn Marino@end smallexample
3051*e4b17023SJohn Marino
3052*e4b17023SJohn Marino@noindent
3053*e4b17023SJohn MarinoBut this is incorrect, because it says that the jump condition depends
3054*e4b17023SJohn Marinoon the condition code value @emph{before} this instruction, not on the
3055*e4b17023SJohn Marinonew value that is set by this instruction.
3056*e4b17023SJohn Marino
3057*e4b17023SJohn Marino@cindex peephole optimization, RTL representation
3058*e4b17023SJohn MarinoPeephole optimization, which takes place together with final assembly
3059*e4b17023SJohn Marinocode output, can produce insns whose patterns consist of a @code{parallel}
3060*e4b17023SJohn Marinowhose elements are the operands needed to output the resulting
3061*e4b17023SJohn Marinoassembler code---often @code{reg}, @code{mem} or constant expressions.
3062*e4b17023SJohn MarinoThis would not be well-formed RTL at any other stage in compilation,
3063*e4b17023SJohn Marinobut it is ok then because no further optimization remains to be done.
3064*e4b17023SJohn MarinoHowever, the definition of the macro @code{NOTICE_UPDATE_CC}, if
3065*e4b17023SJohn Marinoany, must deal with such insns if you define any peephole optimizations.
3066*e4b17023SJohn Marino
3067*e4b17023SJohn Marino@findex cond_exec
3068*e4b17023SJohn Marino@item (cond_exec [@var{cond} @var{expr}])
3069*e4b17023SJohn MarinoRepresents a conditionally executed expression.  The @var{expr} is
3070*e4b17023SJohn Marinoexecuted only if the @var{cond} is nonzero.  The @var{cond} expression
3071*e4b17023SJohn Marinomust not have side-effects, but the @var{expr} may very well have
3072*e4b17023SJohn Marinoside-effects.
3073*e4b17023SJohn Marino
3074*e4b17023SJohn Marino@findex sequence
3075*e4b17023SJohn Marino@item (sequence [@var{insns} @dots{}])
3076*e4b17023SJohn MarinoRepresents a sequence of insns.  Each of the @var{insns} that appears
3077*e4b17023SJohn Marinoin the vector is suitable for appearing in the chain of insns, so it
3078*e4b17023SJohn Marinomust be an @code{insn}, @code{jump_insn}, @code{call_insn},
3079*e4b17023SJohn Marino@code{code_label}, @code{barrier} or @code{note}.
3080*e4b17023SJohn Marino
3081*e4b17023SJohn MarinoA @code{sequence} RTX is never placed in an actual insn during RTL
3082*e4b17023SJohn Marinogeneration.  It represents the sequence of insns that result from a
3083*e4b17023SJohn Marino@code{define_expand} @emph{before} those insns are passed to
3084*e4b17023SJohn Marino@code{emit_insn} to insert them in the chain of insns.  When actually
3085*e4b17023SJohn Marinoinserted, the individual sub-insns are separated out and the
3086*e4b17023SJohn Marino@code{sequence} is forgotten.
3087*e4b17023SJohn Marino
3088*e4b17023SJohn MarinoAfter delay-slot scheduling is completed, an insn and all the insns that
3089*e4b17023SJohn Marinoreside in its delay slots are grouped together into a @code{sequence}.
3090*e4b17023SJohn MarinoThe insn requiring the delay slot is the first insn in the vector;
3091*e4b17023SJohn Marinosubsequent insns are to be placed in the delay slot.
3092*e4b17023SJohn Marino
3093*e4b17023SJohn Marino@code{INSN_ANNULLED_BRANCH_P} is set on an insn in a delay slot to
3094*e4b17023SJohn Marinoindicate that a branch insn should be used that will conditionally annul
3095*e4b17023SJohn Marinothe effect of the insns in the delay slots.  In such a case,
3096*e4b17023SJohn Marino@code{INSN_FROM_TARGET_P} indicates that the insn is from the target of
3097*e4b17023SJohn Marinothe branch and should be executed only if the branch is taken; otherwise
3098*e4b17023SJohn Marinothe insn should be executed only if the branch is not taken.
3099*e4b17023SJohn Marino@xref{Delay Slots}.
3100*e4b17023SJohn Marino@end table
3101*e4b17023SJohn Marino
3102*e4b17023SJohn MarinoThese expression codes appear in place of a side effect, as the body of
3103*e4b17023SJohn Marinoan insn, though strictly speaking they do not always describe side
3104*e4b17023SJohn Marinoeffects as such:
3105*e4b17023SJohn Marino
3106*e4b17023SJohn Marino@table @code
3107*e4b17023SJohn Marino@findex asm_input
3108*e4b17023SJohn Marino@item (asm_input @var{s})
3109*e4b17023SJohn MarinoRepresents literal assembler code as described by the string @var{s}.
3110*e4b17023SJohn Marino
3111*e4b17023SJohn Marino@findex unspec
3112*e4b17023SJohn Marino@findex unspec_volatile
3113*e4b17023SJohn Marino@item (unspec [@var{operands} @dots{}] @var{index})
3114*e4b17023SJohn Marino@itemx (unspec_volatile [@var{operands} @dots{}] @var{index})
3115*e4b17023SJohn MarinoRepresents a machine-specific operation on @var{operands}.  @var{index}
3116*e4b17023SJohn Marinoselects between multiple machine-specific operations.
3117*e4b17023SJohn Marino@code{unspec_volatile} is used for volatile operations and operations
3118*e4b17023SJohn Marinothat may trap; @code{unspec} is used for other operations.
3119*e4b17023SJohn Marino
3120*e4b17023SJohn MarinoThese codes may appear inside a @code{pattern} of an
3121*e4b17023SJohn Marinoinsn, inside a @code{parallel}, or inside an expression.
3122*e4b17023SJohn Marino
3123*e4b17023SJohn Marino@findex addr_vec
3124*e4b17023SJohn Marino@item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}])
3125*e4b17023SJohn MarinoRepresents a table of jump addresses.  The vector elements @var{lr0},
3126*e4b17023SJohn Marinoetc., are @code{label_ref} expressions.  The mode @var{m} specifies
3127*e4b17023SJohn Marinohow much space is given to each address; normally @var{m} would be
3128*e4b17023SJohn Marino@code{Pmode}.
3129*e4b17023SJohn Marino
3130*e4b17023SJohn Marino@findex addr_diff_vec
3131*e4b17023SJohn Marino@item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}] @var{min} @var{max} @var{flags})
3132*e4b17023SJohn MarinoRepresents a table of jump addresses expressed as offsets from
3133*e4b17023SJohn Marino@var{base}.  The vector elements @var{lr0}, etc., are @code{label_ref}
3134*e4b17023SJohn Marinoexpressions and so is @var{base}.  The mode @var{m} specifies how much
3135*e4b17023SJohn Marinospace is given to each address-difference.  @var{min} and @var{max}
3136*e4b17023SJohn Marinoare set up by branch shortening and hold a label with a minimum and a
3137*e4b17023SJohn Marinomaximum address, respectively.  @var{flags} indicates the relative
3138*e4b17023SJohn Marinoposition of @var{base}, @var{min} and @var{max} to the containing insn
3139*e4b17023SJohn Marinoand of @var{min} and @var{max} to @var{base}.  See rtl.def for details.
3140*e4b17023SJohn Marino
3141*e4b17023SJohn Marino@findex prefetch
3142*e4b17023SJohn Marino@item (prefetch:@var{m} @var{addr} @var{rw} @var{locality})
3143*e4b17023SJohn MarinoRepresents prefetch of memory at address @var{addr}.
3144*e4b17023SJohn MarinoOperand @var{rw} is 1 if the prefetch is for data to be written, 0 otherwise;
3145*e4b17023SJohn Marinotargets that do not support write prefetches should treat this as a normal
3146*e4b17023SJohn Marinoprefetch.
3147*e4b17023SJohn MarinoOperand @var{locality} specifies the amount of temporal locality; 0 if there
3148*e4b17023SJohn Marinois none or 1, 2, or 3 for increasing levels of temporal locality;
3149*e4b17023SJohn Marinotargets that do not support locality hints should ignore this.
3150*e4b17023SJohn Marino
3151*e4b17023SJohn MarinoThis insn is used to minimize cache-miss latency by moving data into a
3152*e4b17023SJohn Marinocache before it is accessed.  It should use only non-faulting data prefetch
3153*e4b17023SJohn Marinoinstructions.
3154*e4b17023SJohn Marino@end table
3155*e4b17023SJohn Marino
3156*e4b17023SJohn Marino@node Incdec
3157*e4b17023SJohn Marino@section Embedded Side-Effects on Addresses
3158*e4b17023SJohn Marino@cindex RTL preincrement
3159*e4b17023SJohn Marino@cindex RTL postincrement
3160*e4b17023SJohn Marino@cindex RTL predecrement
3161*e4b17023SJohn Marino@cindex RTL postdecrement
3162*e4b17023SJohn Marino
3163*e4b17023SJohn MarinoSix special side-effect expression codes appear as memory addresses.
3164*e4b17023SJohn Marino
3165*e4b17023SJohn Marino@table @code
3166*e4b17023SJohn Marino@findex pre_dec
3167*e4b17023SJohn Marino@item (pre_dec:@var{m} @var{x})
3168*e4b17023SJohn MarinoRepresents the side effect of decrementing @var{x} by a standard
3169*e4b17023SJohn Marinoamount and represents also the value that @var{x} has after being
3170*e4b17023SJohn Marinodecremented.  @var{x} must be a @code{reg} or @code{mem}, but most
3171*e4b17023SJohn Marinomachines allow only a @code{reg}.  @var{m} must be the machine mode
3172*e4b17023SJohn Marinofor pointers on the machine in use.  The amount @var{x} is decremented
3173*e4b17023SJohn Marinoby is the length in bytes of the machine mode of the containing memory
3174*e4b17023SJohn Marinoreference of which this expression serves as the address.  Here is an
3175*e4b17023SJohn Marinoexample of its use:
3176*e4b17023SJohn Marino
3177*e4b17023SJohn Marino@smallexample
3178*e4b17023SJohn Marino(mem:DF (pre_dec:SI (reg:SI 39)))
3179*e4b17023SJohn Marino@end smallexample
3180*e4b17023SJohn Marino
3181*e4b17023SJohn Marino@noindent
3182*e4b17023SJohn MarinoThis says to decrement pseudo register 39 by the length of a @code{DFmode}
3183*e4b17023SJohn Marinovalue and use the result to address a @code{DFmode} value.
3184*e4b17023SJohn Marino
3185*e4b17023SJohn Marino@findex pre_inc
3186*e4b17023SJohn Marino@item (pre_inc:@var{m} @var{x})
3187*e4b17023SJohn MarinoSimilar, but specifies incrementing @var{x} instead of decrementing it.
3188*e4b17023SJohn Marino
3189*e4b17023SJohn Marino@findex post_dec
3190*e4b17023SJohn Marino@item (post_dec:@var{m} @var{x})
3191*e4b17023SJohn MarinoRepresents the same side effect as @code{pre_dec} but a different
3192*e4b17023SJohn Marinovalue.  The value represented here is the value @var{x} has @i{before}
3193*e4b17023SJohn Marinobeing decremented.
3194*e4b17023SJohn Marino
3195*e4b17023SJohn Marino@findex post_inc
3196*e4b17023SJohn Marino@item (post_inc:@var{m} @var{x})
3197*e4b17023SJohn MarinoSimilar, but specifies incrementing @var{x} instead of decrementing it.
3198*e4b17023SJohn Marino
3199*e4b17023SJohn Marino@findex post_modify
3200*e4b17023SJohn Marino@item (post_modify:@var{m} @var{x} @var{y})
3201*e4b17023SJohn Marino
3202*e4b17023SJohn MarinoRepresents the side effect of setting @var{x} to @var{y} and
3203*e4b17023SJohn Marinorepresents @var{x} before @var{x} is modified.  @var{x} must be a
3204*e4b17023SJohn Marino@code{reg} or @code{mem}, but most machines allow only a @code{reg}.
3205*e4b17023SJohn Marino@var{m} must be the machine mode for pointers on the machine in use.
3206*e4b17023SJohn Marino
3207*e4b17023SJohn MarinoThe expression @var{y} must be one of three forms:
3208*e4b17023SJohn Marino@code{(plus:@var{m} @var{x} @var{z})},
3209*e4b17023SJohn Marino@code{(minus:@var{m} @var{x} @var{z})}, or
3210*e4b17023SJohn Marino@code{(plus:@var{m} @var{x} @var{i})},
3211*e4b17023SJohn Marinowhere @var{z} is an index register and @var{i} is a constant.
3212*e4b17023SJohn Marino
3213*e4b17023SJohn MarinoHere is an example of its use:
3214*e4b17023SJohn Marino
3215*e4b17023SJohn Marino@smallexample
3216*e4b17023SJohn Marino(mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
3217*e4b17023SJohn Marino                                          (reg:SI 48))))
3218*e4b17023SJohn Marino@end smallexample
3219*e4b17023SJohn Marino
3220*e4b17023SJohn MarinoThis says to modify pseudo register 42 by adding the contents of pseudo
3221*e4b17023SJohn Marinoregister 48 to it, after the use of what ever 42 points to.
3222*e4b17023SJohn Marino
3223*e4b17023SJohn Marino@findex pre_modify
3224*e4b17023SJohn Marino@item (pre_modify:@var{m} @var{x} @var{expr})
3225*e4b17023SJohn MarinoSimilar except side effects happen before the use.
3226*e4b17023SJohn Marino@end table
3227*e4b17023SJohn Marino
3228*e4b17023SJohn MarinoThese embedded side effect expressions must be used with care.  Instruction
3229*e4b17023SJohn Marinopatterns may not use them.  Until the @samp{flow} pass of the compiler,
3230*e4b17023SJohn Marinothey may occur only to represent pushes onto the stack.  The @samp{flow}
3231*e4b17023SJohn Marinopass finds cases where registers are incremented or decremented in one
3232*e4b17023SJohn Marinoinstruction and used as an address shortly before or after; these cases are
3233*e4b17023SJohn Marinothen transformed to use pre- or post-increment or -decrement.
3234*e4b17023SJohn Marino
3235*e4b17023SJohn MarinoIf a register used as the operand of these expressions is used in
3236*e4b17023SJohn Marinoanother address in an insn, the original value of the register is used.
3237*e4b17023SJohn MarinoUses of the register outside of an address are not permitted within the
3238*e4b17023SJohn Marinosame insn as a use in an embedded side effect expression because such
3239*e4b17023SJohn Marinoinsns behave differently on different machines and hence must be treated
3240*e4b17023SJohn Marinoas ambiguous and disallowed.
3241*e4b17023SJohn Marino
3242*e4b17023SJohn MarinoAn instruction that can be represented with an embedded side effect
3243*e4b17023SJohn Marinocould also be represented using @code{parallel} containing an additional
3244*e4b17023SJohn Marino@code{set} to describe how the address register is altered.  This is not
3245*e4b17023SJohn Marinodone because machines that allow these operations at all typically
3246*e4b17023SJohn Marinoallow them wherever a memory address is called for.  Describing them as
3247*e4b17023SJohn Marinoadditional parallel stores would require doubling the number of entries
3248*e4b17023SJohn Marinoin the machine description.
3249*e4b17023SJohn Marino
3250*e4b17023SJohn Marino@node Assembler
3251*e4b17023SJohn Marino@section Assembler Instructions as Expressions
3252*e4b17023SJohn Marino@cindex assembler instructions in RTL
3253*e4b17023SJohn Marino
3254*e4b17023SJohn Marino@cindex @code{asm_operands}, usage
3255*e4b17023SJohn MarinoThe RTX code @code{asm_operands} represents a value produced by a
3256*e4b17023SJohn Marinouser-specified assembler instruction.  It is used to represent
3257*e4b17023SJohn Marinoan @code{asm} statement with arguments.  An @code{asm} statement with
3258*e4b17023SJohn Marinoa single output operand, like this:
3259*e4b17023SJohn Marino
3260*e4b17023SJohn Marino@smallexample
3261*e4b17023SJohn Marinoasm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
3262*e4b17023SJohn Marino@end smallexample
3263*e4b17023SJohn Marino
3264*e4b17023SJohn Marino@noindent
3265*e4b17023SJohn Marinois represented using a single @code{asm_operands} RTX which represents
3266*e4b17023SJohn Marinothe value that is stored in @code{outputvar}:
3267*e4b17023SJohn Marino
3268*e4b17023SJohn Marino@smallexample
3269*e4b17023SJohn Marino(set @var{rtx-for-outputvar}
3270*e4b17023SJohn Marino     (asm_operands "foo %1,%2,%0" "a" 0
3271*e4b17023SJohn Marino                   [@var{rtx-for-addition-result} @var{rtx-for-*z}]
3272*e4b17023SJohn Marino                   [(asm_input:@var{m1} "g")
3273*e4b17023SJohn Marino                    (asm_input:@var{m2} "di")]))
3274*e4b17023SJohn Marino@end smallexample
3275*e4b17023SJohn Marino
3276*e4b17023SJohn Marino@noindent
3277*e4b17023SJohn MarinoHere the operands of the @code{asm_operands} RTX are the assembler
3278*e4b17023SJohn Marinotemplate string, the output-operand's constraint, the index-number of the
3279*e4b17023SJohn Marinooutput operand among the output operands specified, a vector of input
3280*e4b17023SJohn Marinooperand RTX's, and a vector of input-operand modes and constraints.  The
3281*e4b17023SJohn Marinomode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of
3282*e4b17023SJohn Marino@code{*z}.
3283*e4b17023SJohn Marino
3284*e4b17023SJohn MarinoWhen an @code{asm} statement has multiple output values, its insn has
3285*e4b17023SJohn Marinoseveral such @code{set} RTX's inside of a @code{parallel}.  Each @code{set}
3286*e4b17023SJohn Marinocontains an @code{asm_operands}; all of these share the same assembler
3287*e4b17023SJohn Marinotemplate and vectors, but each contains the constraint for the respective
3288*e4b17023SJohn Marinooutput operand.  They are also distinguished by the output-operand index
3289*e4b17023SJohn Marinonumber, which is 0, 1, @dots{} for successive output operands.
3290*e4b17023SJohn Marino
3291*e4b17023SJohn Marino@node Debug Information
3292*e4b17023SJohn Marino@section Variable Location Debug Information in RTL
3293*e4b17023SJohn Marino@cindex Variable Location Debug Information in RTL
3294*e4b17023SJohn Marino
3295*e4b17023SJohn MarinoVariable tracking relies on @code{MEM_EXPR} and @code{REG_EXPR}
3296*e4b17023SJohn Marinoannotations to determine what user variables memory and register
3297*e4b17023SJohn Marinoreferences refer to.
3298*e4b17023SJohn Marino
3299*e4b17023SJohn MarinoVariable tracking at assignments uses these notes only when they refer
3300*e4b17023SJohn Marinoto variables that live at fixed locations (e.g., addressable
3301*e4b17023SJohn Marinovariables, global non-automatic variables).  For variables whose
3302*e4b17023SJohn Marinolocation may vary, it relies on the following types of notes.
3303*e4b17023SJohn Marino
3304*e4b17023SJohn Marino@table @code
3305*e4b17023SJohn Marino@findex var_location
3306*e4b17023SJohn Marino@item (var_location:@var{mode} @var{var} @var{exp} @var{stat})
3307*e4b17023SJohn MarinoBinds variable @code{var}, a tree, to value @var{exp}, an RTL
3308*e4b17023SJohn Marinoexpression.  It appears only in @code{NOTE_INSN_VAR_LOCATION} and
3309*e4b17023SJohn Marino@code{DEBUG_INSN}s, with slightly different meanings.  @var{mode}, if
3310*e4b17023SJohn Marinopresent, represents the mode of @var{exp}, which is useful if it is a
3311*e4b17023SJohn Marinomodeless expression.  @var{stat} is only meaningful in notes,
3312*e4b17023SJohn Marinoindicating whether the variable is known to be initialized or
3313*e4b17023SJohn Marinouninitialized.
3314*e4b17023SJohn Marino
3315*e4b17023SJohn Marino@findex debug_expr
3316*e4b17023SJohn Marino@item (debug_expr:@var{mode} @var{decl})
3317*e4b17023SJohn MarinoStands for the value bound to the @code{DEBUG_EXPR_DECL} @var{decl},
3318*e4b17023SJohn Marinothat points back to it, within value expressions in
3319*e4b17023SJohn Marino@code{VAR_LOCATION} nodes.
3320*e4b17023SJohn Marino
3321*e4b17023SJohn Marino@end table
3322*e4b17023SJohn Marino
3323*e4b17023SJohn Marino@node Insns
3324*e4b17023SJohn Marino@section Insns
3325*e4b17023SJohn Marino@cindex insns
3326*e4b17023SJohn Marino
3327*e4b17023SJohn MarinoThe RTL representation of the code for a function is a doubly-linked
3328*e4b17023SJohn Marinochain of objects called @dfn{insns}.  Insns are expressions with
3329*e4b17023SJohn Marinospecial codes that are used for no other purpose.  Some insns are
3330*e4b17023SJohn Marinoactual instructions; others represent dispatch tables for @code{switch}
3331*e4b17023SJohn Marinostatements; others represent labels to jump to or various sorts of
3332*e4b17023SJohn Marinodeclarative information.
3333*e4b17023SJohn Marino
3334*e4b17023SJohn MarinoIn addition to its own specific data, each insn must have a unique
3335*e4b17023SJohn Marinoid-number that distinguishes it from all other insns in the current
3336*e4b17023SJohn Marinofunction (after delayed branch scheduling, copies of an insn with the
3337*e4b17023SJohn Marinosame id-number may be present in multiple places in a function, but
3338*e4b17023SJohn Marinothese copies will always be identical and will only appear inside a
3339*e4b17023SJohn Marino@code{sequence}), and chain pointers to the preceding and following
3340*e4b17023SJohn Marinoinsns.  These three fields occupy the same position in every insn,
3341*e4b17023SJohn Marinoindependent of the expression code of the insn.  They could be accessed
3342*e4b17023SJohn Marinowith @code{XEXP} and @code{XINT}, but instead three special macros are
3343*e4b17023SJohn Marinoalways used:
3344*e4b17023SJohn Marino
3345*e4b17023SJohn Marino@table @code
3346*e4b17023SJohn Marino@findex INSN_UID
3347*e4b17023SJohn Marino@item INSN_UID (@var{i})
3348*e4b17023SJohn MarinoAccesses the unique id of insn @var{i}.
3349*e4b17023SJohn Marino
3350*e4b17023SJohn Marino@findex PREV_INSN
3351*e4b17023SJohn Marino@item PREV_INSN (@var{i})
3352*e4b17023SJohn MarinoAccesses the chain pointer to the insn preceding @var{i}.
3353*e4b17023SJohn MarinoIf @var{i} is the first insn, this is a null pointer.
3354*e4b17023SJohn Marino
3355*e4b17023SJohn Marino@findex NEXT_INSN
3356*e4b17023SJohn Marino@item NEXT_INSN (@var{i})
3357*e4b17023SJohn MarinoAccesses the chain pointer to the insn following @var{i}.
3358*e4b17023SJohn MarinoIf @var{i} is the last insn, this is a null pointer.
3359*e4b17023SJohn Marino@end table
3360*e4b17023SJohn Marino
3361*e4b17023SJohn Marino@findex get_insns
3362*e4b17023SJohn Marino@findex get_last_insn
3363*e4b17023SJohn MarinoThe first insn in the chain is obtained by calling @code{get_insns}; the
3364*e4b17023SJohn Marinolast insn is the result of calling @code{get_last_insn}.  Within the
3365*e4b17023SJohn Marinochain delimited by these insns, the @code{NEXT_INSN} and
3366*e4b17023SJohn Marino@code{PREV_INSN} pointers must always correspond: if @var{insn} is not
3367*e4b17023SJohn Marinothe first insn,
3368*e4b17023SJohn Marino
3369*e4b17023SJohn Marino@smallexample
3370*e4b17023SJohn MarinoNEXT_INSN (PREV_INSN (@var{insn})) == @var{insn}
3371*e4b17023SJohn Marino@end smallexample
3372*e4b17023SJohn Marino
3373*e4b17023SJohn Marino@noindent
3374*e4b17023SJohn Marinois always true and if @var{insn} is not the last insn,
3375*e4b17023SJohn Marino
3376*e4b17023SJohn Marino@smallexample
3377*e4b17023SJohn MarinoPREV_INSN (NEXT_INSN (@var{insn})) == @var{insn}
3378*e4b17023SJohn Marino@end smallexample
3379*e4b17023SJohn Marino
3380*e4b17023SJohn Marino@noindent
3381*e4b17023SJohn Marinois always true.
3382*e4b17023SJohn Marino
3383*e4b17023SJohn MarinoAfter delay slot scheduling, some of the insns in the chain might be
3384*e4b17023SJohn Marino@code{sequence} expressions, which contain a vector of insns.  The value
3385*e4b17023SJohn Marinoof @code{NEXT_INSN} in all but the last of these insns is the next insn
3386*e4b17023SJohn Marinoin the vector; the value of @code{NEXT_INSN} of the last insn in the vector
3387*e4b17023SJohn Marinois the same as the value of @code{NEXT_INSN} for the @code{sequence} in
3388*e4b17023SJohn Marinowhich it is contained.  Similar rules apply for @code{PREV_INSN}.
3389*e4b17023SJohn Marino
3390*e4b17023SJohn MarinoThis means that the above invariants are not necessarily true for insns
3391*e4b17023SJohn Marinoinside @code{sequence} expressions.  Specifically, if @var{insn} is the
3392*e4b17023SJohn Marinofirst insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))}
3393*e4b17023SJohn Marinois the insn containing the @code{sequence} expression, as is the value
3394*e4b17023SJohn Marinoof @code{PREV_INSN (NEXT_INSN (@var{insn}))} if @var{insn} is the last
3395*e4b17023SJohn Marinoinsn in the @code{sequence} expression.  You can use these expressions
3396*e4b17023SJohn Marinoto find the containing @code{sequence} expression.
3397*e4b17023SJohn Marino
3398*e4b17023SJohn MarinoEvery insn has one of the following expression codes:
3399*e4b17023SJohn Marino
3400*e4b17023SJohn Marino@table @code
3401*e4b17023SJohn Marino@findex insn
3402*e4b17023SJohn Marino@item insn
3403*e4b17023SJohn MarinoThe expression code @code{insn} is used for instructions that do not jump
3404*e4b17023SJohn Marinoand do not do function calls.  @code{sequence} expressions are always
3405*e4b17023SJohn Marinocontained in insns with code @code{insn} even if one of those insns
3406*e4b17023SJohn Marinoshould jump or do function calls.
3407*e4b17023SJohn Marino
3408*e4b17023SJohn MarinoInsns with code @code{insn} have four additional fields beyond the three
3409*e4b17023SJohn Marinomandatory ones listed above.  These four are described in a table below.
3410*e4b17023SJohn Marino
3411*e4b17023SJohn Marino@findex jump_insn
3412*e4b17023SJohn Marino@item jump_insn
3413*e4b17023SJohn MarinoThe expression code @code{jump_insn} is used for instructions that may
3414*e4b17023SJohn Marinojump (or, more generally, may contain @code{label_ref} expressions to
3415*e4b17023SJohn Marinowhich @code{pc} can be set in that instruction).  If there is an
3416*e4b17023SJohn Marinoinstruction to return from the current function, it is recorded as a
3417*e4b17023SJohn Marino@code{jump_insn}.
3418*e4b17023SJohn Marino
3419*e4b17023SJohn Marino@findex JUMP_LABEL
3420*e4b17023SJohn Marino@code{jump_insn} insns have the same extra fields as @code{insn} insns,
3421*e4b17023SJohn Marinoaccessed in the same way and in addition contain a field
3422*e4b17023SJohn Marino@code{JUMP_LABEL} which is defined once jump optimization has completed.
3423*e4b17023SJohn Marino
3424*e4b17023SJohn MarinoFor simple conditional and unconditional jumps, this field contains
3425*e4b17023SJohn Marinothe @code{code_label} to which this insn will (possibly conditionally)
3426*e4b17023SJohn Marinobranch.  In a more complex jump, @code{JUMP_LABEL} records one of the
3427*e4b17023SJohn Marinolabels that the insn refers to; other jump target labels are recorded
3428*e4b17023SJohn Marinoas @code{REG_LABEL_TARGET} notes.  The exception is @code{addr_vec}
3429*e4b17023SJohn Marinoand @code{addr_diff_vec}, where @code{JUMP_LABEL} is @code{NULL_RTX}
3430*e4b17023SJohn Marinoand the only way to find the labels is to scan the entire body of the
3431*e4b17023SJohn Marinoinsn.
3432*e4b17023SJohn Marino
3433*e4b17023SJohn MarinoReturn insns count as jumps, but since they do not refer to any
3434*e4b17023SJohn Marinolabels, their @code{JUMP_LABEL} is @code{NULL_RTX}.
3435*e4b17023SJohn Marino
3436*e4b17023SJohn Marino@findex call_insn
3437*e4b17023SJohn Marino@item call_insn
3438*e4b17023SJohn MarinoThe expression code @code{call_insn} is used for instructions that may do
3439*e4b17023SJohn Marinofunction calls.  It is important to distinguish these instructions because
3440*e4b17023SJohn Marinothey imply that certain registers and memory locations may be altered
3441*e4b17023SJohn Marinounpredictably.
3442*e4b17023SJohn Marino
3443*e4b17023SJohn Marino@findex CALL_INSN_FUNCTION_USAGE
3444*e4b17023SJohn Marino@code{call_insn} insns have the same extra fields as @code{insn} insns,
3445*e4b17023SJohn Marinoaccessed in the same way and in addition contain a field
3446*e4b17023SJohn Marino@code{CALL_INSN_FUNCTION_USAGE}, which contains a list (chain of
3447*e4b17023SJohn Marino@code{expr_list} expressions) containing @code{use} and @code{clobber}
3448*e4b17023SJohn Marinoexpressions that denote hard registers and @code{MEM}s used or
3449*e4b17023SJohn Marinoclobbered by the called function.
3450*e4b17023SJohn Marino
3451*e4b17023SJohn MarinoA @code{MEM} generally points to a stack slots in which arguments passed
3452*e4b17023SJohn Marinoto the libcall by reference (@pxref{Register Arguments,
3453*e4b17023SJohn MarinoTARGET_PASS_BY_REFERENCE}) are stored.  If the argument is
3454*e4b17023SJohn Marinocaller-copied (@pxref{Register Arguments, TARGET_CALLEE_COPIES}),
3455*e4b17023SJohn Marinothe stack slot will be mentioned in @code{CLOBBER} and @code{USE}
3456*e4b17023SJohn Marinoentries; if it's callee-copied, only a @code{USE} will appear, and the
3457*e4b17023SJohn Marino@code{MEM} may point to addresses that are not stack slots.
3458*e4b17023SJohn Marino
3459*e4b17023SJohn Marino@code{CLOBBER}ed registers in this list augment registers specified in
3460*e4b17023SJohn Marino@code{CALL_USED_REGISTERS} (@pxref{Register Basics}).
3461*e4b17023SJohn Marino
3462*e4b17023SJohn Marino@findex code_label
3463*e4b17023SJohn Marino@findex CODE_LABEL_NUMBER
3464*e4b17023SJohn Marino@item code_label
3465*e4b17023SJohn MarinoA @code{code_label} insn represents a label that a jump insn can jump
3466*e4b17023SJohn Marinoto.  It contains two special fields of data in addition to the three
3467*e4b17023SJohn Marinostandard ones.  @code{CODE_LABEL_NUMBER} is used to hold the @dfn{label
3468*e4b17023SJohn Marinonumber}, a number that identifies this label uniquely among all the
3469*e4b17023SJohn Marinolabels in the compilation (not just in the current function).
3470*e4b17023SJohn MarinoUltimately, the label is represented in the assembler output as an
3471*e4b17023SJohn Marinoassembler label, usually of the form @samp{L@var{n}} where @var{n} is
3472*e4b17023SJohn Marinothe label number.
3473*e4b17023SJohn Marino
3474*e4b17023SJohn MarinoWhen a @code{code_label} appears in an RTL expression, it normally
3475*e4b17023SJohn Marinoappears within a @code{label_ref} which represents the address of
3476*e4b17023SJohn Marinothe label, as a number.
3477*e4b17023SJohn Marino
3478*e4b17023SJohn MarinoBesides as a @code{code_label}, a label can also be represented as a
3479*e4b17023SJohn Marino@code{note} of type @code{NOTE_INSN_DELETED_LABEL}.
3480*e4b17023SJohn Marino
3481*e4b17023SJohn Marino@findex LABEL_NUSES
3482*e4b17023SJohn MarinoThe field @code{LABEL_NUSES} is only defined once the jump optimization
3483*e4b17023SJohn Marinophase is completed.  It contains the number of times this label is
3484*e4b17023SJohn Marinoreferenced in the current function.
3485*e4b17023SJohn Marino
3486*e4b17023SJohn Marino@findex LABEL_KIND
3487*e4b17023SJohn Marino@findex SET_LABEL_KIND
3488*e4b17023SJohn Marino@findex LABEL_ALT_ENTRY_P
3489*e4b17023SJohn Marino@cindex alternate entry points
3490*e4b17023SJohn MarinoThe field @code{LABEL_KIND} differentiates four different types of
3491*e4b17023SJohn Marinolabels: @code{LABEL_NORMAL}, @code{LABEL_STATIC_ENTRY},
3492*e4b17023SJohn Marino@code{LABEL_GLOBAL_ENTRY}, and @code{LABEL_WEAK_ENTRY}.  The only labels
3493*e4b17023SJohn Marinothat do not have type @code{LABEL_NORMAL} are @dfn{alternate entry
3494*e4b17023SJohn Marinopoints} to the current function.  These may be static (visible only in
3495*e4b17023SJohn Marinothe containing translation unit), global (exposed to all translation
3496*e4b17023SJohn Marinounits), or weak (global, but can be overridden by another symbol with the
3497*e4b17023SJohn Marinosame name).
3498*e4b17023SJohn Marino
3499*e4b17023SJohn MarinoMuch of the compiler treats all four kinds of label identically.  Some
3500*e4b17023SJohn Marinoof it needs to know whether or not a label is an alternate entry point;
3501*e4b17023SJohn Marinofor this purpose, the macro @code{LABEL_ALT_ENTRY_P} is provided.  It is
3502*e4b17023SJohn Marinoequivalent to testing whether @samp{LABEL_KIND (label) == LABEL_NORMAL}.
3503*e4b17023SJohn MarinoThe only place that cares about the distinction between static, global,
3504*e4b17023SJohn Marinoand weak alternate entry points, besides the front-end code that creates
3505*e4b17023SJohn Marinothem, is the function @code{output_alternate_entry_point}, in
3506*e4b17023SJohn Marino@file{final.c}.
3507*e4b17023SJohn Marino
3508*e4b17023SJohn MarinoTo set the kind of a label, use the @code{SET_LABEL_KIND} macro.
3509*e4b17023SJohn Marino
3510*e4b17023SJohn Marino@findex barrier
3511*e4b17023SJohn Marino@item barrier
3512*e4b17023SJohn MarinoBarriers are placed in the instruction stream when control cannot flow
3513*e4b17023SJohn Marinopast them.  They are placed after unconditional jump instructions to
3514*e4b17023SJohn Marinoindicate that the jumps are unconditional and after calls to
3515*e4b17023SJohn Marino@code{volatile} functions, which do not return (e.g., @code{exit}).
3516*e4b17023SJohn MarinoThey contain no information beyond the three standard fields.
3517*e4b17023SJohn Marino
3518*e4b17023SJohn Marino@findex note
3519*e4b17023SJohn Marino@findex NOTE_LINE_NUMBER
3520*e4b17023SJohn Marino@findex NOTE_SOURCE_FILE
3521*e4b17023SJohn Marino@item note
3522*e4b17023SJohn Marino@code{note} insns are used to represent additional debugging and
3523*e4b17023SJohn Marinodeclarative information.  They contain two nonstandard fields, an
3524*e4b17023SJohn Marinointeger which is accessed with the macro @code{NOTE_LINE_NUMBER} and a
3525*e4b17023SJohn Marinostring accessed with @code{NOTE_SOURCE_FILE}.
3526*e4b17023SJohn Marino
3527*e4b17023SJohn MarinoIf @code{NOTE_LINE_NUMBER} is positive, the note represents the
3528*e4b17023SJohn Marinoposition of a source line and @code{NOTE_SOURCE_FILE} is the source file name
3529*e4b17023SJohn Marinothat the line came from.  These notes control generation of line
3530*e4b17023SJohn Marinonumber data in the assembler output.
3531*e4b17023SJohn Marino
3532*e4b17023SJohn MarinoOtherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a
3533*e4b17023SJohn Marinocode with one of the following values (and @code{NOTE_SOURCE_FILE}
3534*e4b17023SJohn Marinomust contain a null pointer):
3535*e4b17023SJohn Marino
3536*e4b17023SJohn Marino@table @code
3537*e4b17023SJohn Marino@findex NOTE_INSN_DELETED
3538*e4b17023SJohn Marino@item NOTE_INSN_DELETED
3539*e4b17023SJohn MarinoSuch a note is completely ignorable.  Some passes of the compiler
3540*e4b17023SJohn Marinodelete insns by altering them into notes of this kind.
3541*e4b17023SJohn Marino
3542*e4b17023SJohn Marino@findex NOTE_INSN_DELETED_LABEL
3543*e4b17023SJohn Marino@item NOTE_INSN_DELETED_LABEL
3544*e4b17023SJohn MarinoThis marks what used to be a @code{code_label}, but was not used for other
3545*e4b17023SJohn Marinopurposes than taking its address and was transformed to mark that no
3546*e4b17023SJohn Marinocode jumps to it.
3547*e4b17023SJohn Marino
3548*e4b17023SJohn Marino@findex NOTE_INSN_BLOCK_BEG
3549*e4b17023SJohn Marino@findex NOTE_INSN_BLOCK_END
3550*e4b17023SJohn Marino@item NOTE_INSN_BLOCK_BEG
3551*e4b17023SJohn Marino@itemx NOTE_INSN_BLOCK_END
3552*e4b17023SJohn MarinoThese types of notes indicate the position of the beginning and end
3553*e4b17023SJohn Marinoof a level of scoping of variable names.  They control the output
3554*e4b17023SJohn Marinoof debugging information.
3555*e4b17023SJohn Marino
3556*e4b17023SJohn Marino@findex NOTE_INSN_EH_REGION_BEG
3557*e4b17023SJohn Marino@findex NOTE_INSN_EH_REGION_END
3558*e4b17023SJohn Marino@item NOTE_INSN_EH_REGION_BEG
3559*e4b17023SJohn Marino@itemx NOTE_INSN_EH_REGION_END
3560*e4b17023SJohn MarinoThese types of notes indicate the position of the beginning and end of a
3561*e4b17023SJohn Marinolevel of scoping for exception handling.  @code{NOTE_BLOCK_NUMBER}
3562*e4b17023SJohn Marinoidentifies which @code{CODE_LABEL} or @code{note} of type
3563*e4b17023SJohn Marino@code{NOTE_INSN_DELETED_LABEL} is associated with the given region.
3564*e4b17023SJohn Marino
3565*e4b17023SJohn Marino@findex NOTE_INSN_LOOP_BEG
3566*e4b17023SJohn Marino@findex NOTE_INSN_LOOP_END
3567*e4b17023SJohn Marino@item NOTE_INSN_LOOP_BEG
3568*e4b17023SJohn Marino@itemx NOTE_INSN_LOOP_END
3569*e4b17023SJohn MarinoThese types of notes indicate the position of the beginning and end
3570*e4b17023SJohn Marinoof a @code{while} or @code{for} loop.  They enable the loop optimizer
3571*e4b17023SJohn Marinoto find loops quickly.
3572*e4b17023SJohn Marino
3573*e4b17023SJohn Marino@findex NOTE_INSN_LOOP_CONT
3574*e4b17023SJohn Marino@item NOTE_INSN_LOOP_CONT
3575*e4b17023SJohn MarinoAppears at the place in a loop that @code{continue} statements jump to.
3576*e4b17023SJohn Marino
3577*e4b17023SJohn Marino@findex NOTE_INSN_LOOP_VTOP
3578*e4b17023SJohn Marino@item NOTE_INSN_LOOP_VTOP
3579*e4b17023SJohn MarinoThis note indicates the place in a loop where the exit test begins for
3580*e4b17023SJohn Marinothose loops in which the exit test has been duplicated.  This position
3581*e4b17023SJohn Marinobecomes another virtual start of the loop when considering loop
3582*e4b17023SJohn Marinoinvariants.
3583*e4b17023SJohn Marino
3584*e4b17023SJohn Marino@findex NOTE_INSN_FUNCTION_BEG
3585*e4b17023SJohn Marino@item NOTE_INSN_FUNCTION_BEG
3586*e4b17023SJohn MarinoAppears at the start of the function body, after the function
3587*e4b17023SJohn Marinoprologue.
3588*e4b17023SJohn Marino
3589*e4b17023SJohn Marino@findex NOTE_INSN_VAR_LOCATION
3590*e4b17023SJohn Marino@findex NOTE_VAR_LOCATION
3591*e4b17023SJohn Marino@item NOTE_INSN_VAR_LOCATION
3592*e4b17023SJohn MarinoThis note is used to generate variable location debugging information.
3593*e4b17023SJohn MarinoIt indicates that the user variable in its @code{VAR_LOCATION} operand
3594*e4b17023SJohn Marinois at the location given in the RTL expression, or holds a value that
3595*e4b17023SJohn Marinocan be computed by evaluating the RTL expression from that static
3596*e4b17023SJohn Marinopoint in the program up to the next such note for the same user
3597*e4b17023SJohn Marinovariable.
3598*e4b17023SJohn Marino
3599*e4b17023SJohn Marino@end table
3600*e4b17023SJohn Marino
3601*e4b17023SJohn MarinoThese codes are printed symbolically when they appear in debugging dumps.
3602*e4b17023SJohn Marino
3603*e4b17023SJohn Marino@findex debug_insn
3604*e4b17023SJohn Marino@findex INSN_VAR_LOCATION
3605*e4b17023SJohn Marino@item debug_insn
3606*e4b17023SJohn MarinoThe expression code @code{debug_insn} is used for pseudo-instructions
3607*e4b17023SJohn Marinothat hold debugging information for variable tracking at assignments
3608*e4b17023SJohn Marino(see @option{-fvar-tracking-assignments} option).  They are the RTL
3609*e4b17023SJohn Marinorepresentation of @code{GIMPLE_DEBUG} statements
3610*e4b17023SJohn Marino(@ref{@code{GIMPLE_DEBUG}}), with a @code{VAR_LOCATION} operand that
3611*e4b17023SJohn Marinobinds a user variable tree to an RTL representation of the
3612*e4b17023SJohn Marino@code{value} in the corresponding statement.  A @code{DEBUG_EXPR} in
3613*e4b17023SJohn Marinoit stands for the value bound to the corresponding
3614*e4b17023SJohn Marino@code{DEBUG_EXPR_DECL}.
3615*e4b17023SJohn Marino
3616*e4b17023SJohn MarinoThroughout optimization passes, binding information is kept in
3617*e4b17023SJohn Marinopseudo-instruction form, so that, unlike notes, it gets the same
3618*e4b17023SJohn Marinotreatment and adjustments that regular instructions would.  It is the
3619*e4b17023SJohn Marinovariable tracking pass that turns these pseudo-instructions into var
3620*e4b17023SJohn Marinolocation notes, analyzing control flow, value equivalences and changes
3621*e4b17023SJohn Marinoto registers and memory referenced in value expressions, propagating
3622*e4b17023SJohn Marinothe values of debug temporaries and determining expressions that can
3623*e4b17023SJohn Marinobe used to compute the value of each user variable at as many points
3624*e4b17023SJohn Marino(ranges, actually) in the program as possible.
3625*e4b17023SJohn Marino
3626*e4b17023SJohn MarinoUnlike @code{NOTE_INSN_VAR_LOCATION}, the value expression in an
3627*e4b17023SJohn Marino@code{INSN_VAR_LOCATION} denotes a value at that specific point in the
3628*e4b17023SJohn Marinoprogram, rather than an expression that can be evaluated at any later
3629*e4b17023SJohn Marinopoint before an overriding @code{VAR_LOCATION} is encountered.  E.g.,
3630*e4b17023SJohn Marinoif a user variable is bound to a @code{REG} and then a subsequent insn
3631*e4b17023SJohn Marinomodifies the @code{REG}, the note location would keep mapping the user
3632*e4b17023SJohn Marinovariable to the register across the insn, whereas the insn location
3633*e4b17023SJohn Marinowould keep the variable bound to the value, so that the variable
3634*e4b17023SJohn Marinotracking pass would emit another location note for the variable at the
3635*e4b17023SJohn Marinopoint in which the register is modified.
3636*e4b17023SJohn Marino
3637*e4b17023SJohn Marino@end table
3638*e4b17023SJohn Marino
3639*e4b17023SJohn Marino@cindex @code{TImode}, in @code{insn}
3640*e4b17023SJohn Marino@cindex @code{HImode}, in @code{insn}
3641*e4b17023SJohn Marino@cindex @code{QImode}, in @code{insn}
3642*e4b17023SJohn MarinoThe machine mode of an insn is normally @code{VOIDmode}, but some
3643*e4b17023SJohn Marinophases use the mode for various purposes.
3644*e4b17023SJohn Marino
3645*e4b17023SJohn MarinoThe common subexpression elimination pass sets the mode of an insn to
3646*e4b17023SJohn Marino@code{QImode} when it is the first insn in a block that has already
3647*e4b17023SJohn Marinobeen processed.
3648*e4b17023SJohn Marino
3649*e4b17023SJohn MarinoThe second Haifa scheduling pass, for targets that can multiple issue,
3650*e4b17023SJohn Marinosets the mode of an insn to @code{TImode} when it is believed that the
3651*e4b17023SJohn Marinoinstruction begins an issue group.  That is, when the instruction
3652*e4b17023SJohn Marinocannot issue simultaneously with the previous.  This may be relied on
3653*e4b17023SJohn Marinoby later passes, in particular machine-dependent reorg.
3654*e4b17023SJohn Marino
3655*e4b17023SJohn MarinoHere is a table of the extra fields of @code{insn}, @code{jump_insn}
3656*e4b17023SJohn Marinoand @code{call_insn} insns:
3657*e4b17023SJohn Marino
3658*e4b17023SJohn Marino@table @code
3659*e4b17023SJohn Marino@findex PATTERN
3660*e4b17023SJohn Marino@item PATTERN (@var{i})
3661*e4b17023SJohn MarinoAn expression for the side effect performed by this insn.  This must
3662*e4b17023SJohn Marinobe one of the following codes: @code{set}, @code{call}, @code{use},
3663*e4b17023SJohn Marino@code{clobber}, @code{return}, @code{simple_return}, @code{asm_input},
3664*e4b17023SJohn Marino@code{asm_output}, @code{addr_vec}, @code{addr_diff_vec},
3665*e4b17023SJohn Marino@code{trap_if}, @code{unspec}, @code{unspec_volatile},
3666*e4b17023SJohn Marino@code{parallel}, @code{cond_exec}, or @code{sequence}.  If it is a
3667*e4b17023SJohn Marino@code{parallel}, each element of the @code{parallel} must be one these
3668*e4b17023SJohn Marinocodes, except that @code{parallel} expressions cannot be nested and
3669*e4b17023SJohn Marino@code{addr_vec} and @code{addr_diff_vec} are not permitted inside a
3670*e4b17023SJohn Marino@code{parallel} expression.
3671*e4b17023SJohn Marino
3672*e4b17023SJohn Marino@findex INSN_CODE
3673*e4b17023SJohn Marino@item INSN_CODE (@var{i})
3674*e4b17023SJohn MarinoAn integer that says which pattern in the machine description matches
3675*e4b17023SJohn Marinothis insn, or @minus{}1 if the matching has not yet been attempted.
3676*e4b17023SJohn Marino
3677*e4b17023SJohn MarinoSuch matching is never attempted and this field remains @minus{}1 on an insn
3678*e4b17023SJohn Marinowhose pattern consists of a single @code{use}, @code{clobber},
3679*e4b17023SJohn Marino@code{asm_input}, @code{addr_vec} or @code{addr_diff_vec} expression.
3680*e4b17023SJohn Marino
3681*e4b17023SJohn Marino@findex asm_noperands
3682*e4b17023SJohn MarinoMatching is also never attempted on insns that result from an @code{asm}
3683*e4b17023SJohn Marinostatement.  These contain at least one @code{asm_operands} expression.
3684*e4b17023SJohn MarinoThe function @code{asm_noperands} returns a non-negative value for
3685*e4b17023SJohn Marinosuch insns.
3686*e4b17023SJohn Marino
3687*e4b17023SJohn MarinoIn the debugging output, this field is printed as a number followed by
3688*e4b17023SJohn Marinoa symbolic representation that locates the pattern in the @file{md}
3689*e4b17023SJohn Marinofile as some small positive or negative offset from a named pattern.
3690*e4b17023SJohn Marino
3691*e4b17023SJohn Marino@findex LOG_LINKS
3692*e4b17023SJohn Marino@item LOG_LINKS (@var{i})
3693*e4b17023SJohn MarinoA list (chain of @code{insn_list} expressions) giving information about
3694*e4b17023SJohn Marinodependencies between instructions within a basic block.  Neither a jump
3695*e4b17023SJohn Marinonor a label may come between the related insns.  These are only used by
3696*e4b17023SJohn Marinothe schedulers and by combine.  This is a deprecated data structure.
3697*e4b17023SJohn MarinoDef-use and use-def chains are now preferred.
3698*e4b17023SJohn Marino
3699*e4b17023SJohn Marino@findex REG_NOTES
3700*e4b17023SJohn Marino@item REG_NOTES (@var{i})
3701*e4b17023SJohn MarinoA list (chain of @code{expr_list} and @code{insn_list} expressions)
3702*e4b17023SJohn Marinogiving miscellaneous information about the insn.  It is often
3703*e4b17023SJohn Marinoinformation pertaining to the registers used in this insn.
3704*e4b17023SJohn Marino@end table
3705*e4b17023SJohn Marino
3706*e4b17023SJohn MarinoThe @code{LOG_LINKS} field of an insn is a chain of @code{insn_list}
3707*e4b17023SJohn Marinoexpressions.  Each of these has two operands: the first is an insn,
3708*e4b17023SJohn Marinoand the second is another @code{insn_list} expression (the next one in
3709*e4b17023SJohn Marinothe chain).  The last @code{insn_list} in the chain has a null pointer
3710*e4b17023SJohn Marinoas second operand.  The significant thing about the chain is which
3711*e4b17023SJohn Marinoinsns appear in it (as first operands of @code{insn_list}
3712*e4b17023SJohn Marinoexpressions).  Their order is not significant.
3713*e4b17023SJohn Marino
3714*e4b17023SJohn MarinoThis list is originally set up by the flow analysis pass; it is a null
3715*e4b17023SJohn Marinopointer until then.  Flow only adds links for those data dependencies
3716*e4b17023SJohn Marinowhich can be used for instruction combination.  For each insn, the flow
3717*e4b17023SJohn Marinoanalysis pass adds a link to insns which store into registers values
3718*e4b17023SJohn Marinothat are used for the first time in this insn.
3719*e4b17023SJohn Marino
3720*e4b17023SJohn MarinoThe @code{REG_NOTES} field of an insn is a chain similar to the
3721*e4b17023SJohn Marino@code{LOG_LINKS} field but it includes @code{expr_list} expressions in
3722*e4b17023SJohn Marinoaddition to @code{insn_list} expressions.  There are several kinds of
3723*e4b17023SJohn Marinoregister notes, which are distinguished by the machine mode, which in a
3724*e4b17023SJohn Marinoregister note is really understood as being an @code{enum reg_note}.
3725*e4b17023SJohn MarinoThe first operand @var{op} of the note is data whose meaning depends on
3726*e4b17023SJohn Marinothe kind of note.
3727*e4b17023SJohn Marino
3728*e4b17023SJohn Marino@findex REG_NOTE_KIND
3729*e4b17023SJohn Marino@findex PUT_REG_NOTE_KIND
3730*e4b17023SJohn MarinoThe macro @code{REG_NOTE_KIND (@var{x})} returns the kind of
3731*e4b17023SJohn Marinoregister note.  Its counterpart, the macro @code{PUT_REG_NOTE_KIND
3732*e4b17023SJohn Marino(@var{x}, @var{newkind})} sets the register note type of @var{x} to be
3733*e4b17023SJohn Marino@var{newkind}.
3734*e4b17023SJohn Marino
3735*e4b17023SJohn MarinoRegister notes are of three classes: They may say something about an
3736*e4b17023SJohn Marinoinput to an insn, they may say something about an output of an insn, or
3737*e4b17023SJohn Marinothey may create a linkage between two insns.  There are also a set
3738*e4b17023SJohn Marinoof values that are only used in @code{LOG_LINKS}.
3739*e4b17023SJohn Marino
3740*e4b17023SJohn MarinoThese register notes annotate inputs to an insn:
3741*e4b17023SJohn Marino
3742*e4b17023SJohn Marino@table @code
3743*e4b17023SJohn Marino@findex REG_DEAD
3744*e4b17023SJohn Marino@item REG_DEAD
3745*e4b17023SJohn MarinoThe value in @var{op} dies in this insn; that is to say, altering the
3746*e4b17023SJohn Marinovalue immediately after this insn would not affect the future behavior
3747*e4b17023SJohn Marinoof the program.
3748*e4b17023SJohn Marino
3749*e4b17023SJohn MarinoIt does not follow that the register @var{op} has no useful value after
3750*e4b17023SJohn Marinothis insn since @var{op} is not necessarily modified by this insn.
3751*e4b17023SJohn MarinoRather, no subsequent instruction uses the contents of @var{op}.
3752*e4b17023SJohn Marino
3753*e4b17023SJohn Marino@findex REG_UNUSED
3754*e4b17023SJohn Marino@item REG_UNUSED
3755*e4b17023SJohn MarinoThe register @var{op} being set by this insn will not be used in a
3756*e4b17023SJohn Marinosubsequent insn.  This differs from a @code{REG_DEAD} note, which
3757*e4b17023SJohn Marinoindicates that the value in an input will not be used subsequently.
3758*e4b17023SJohn MarinoThese two notes are independent; both may be present for the same
3759*e4b17023SJohn Marinoregister.
3760*e4b17023SJohn Marino
3761*e4b17023SJohn Marino@findex REG_INC
3762*e4b17023SJohn Marino@item REG_INC
3763*e4b17023SJohn MarinoThe register @var{op} is incremented (or decremented; at this level
3764*e4b17023SJohn Marinothere is no distinction) by an embedded side effect inside this insn.
3765*e4b17023SJohn MarinoThis means it appears in a @code{post_inc}, @code{pre_inc},
3766*e4b17023SJohn Marino@code{post_dec} or @code{pre_dec} expression.
3767*e4b17023SJohn Marino
3768*e4b17023SJohn Marino@findex REG_NONNEG
3769*e4b17023SJohn Marino@item REG_NONNEG
3770*e4b17023SJohn MarinoThe register @var{op} is known to have a nonnegative value when this
3771*e4b17023SJohn Marinoinsn is reached.  This is used so that decrement and branch until zero
3772*e4b17023SJohn Marinoinstructions, such as the m68k dbra, can be matched.
3773*e4b17023SJohn Marino
3774*e4b17023SJohn MarinoThe @code{REG_NONNEG} note is added to insns only if the machine
3775*e4b17023SJohn Marinodescription has a @samp{decrement_and_branch_until_zero} pattern.
3776*e4b17023SJohn Marino
3777*e4b17023SJohn Marino@findex REG_LABEL_OPERAND
3778*e4b17023SJohn Marino@item REG_LABEL_OPERAND
3779*e4b17023SJohn MarinoThis insn uses @var{op}, a @code{code_label} or a @code{note} of type
3780*e4b17023SJohn Marino@code{NOTE_INSN_DELETED_LABEL}, but is not a @code{jump_insn}, or it
3781*e4b17023SJohn Marinois a @code{jump_insn} that refers to the operand as an ordinary
3782*e4b17023SJohn Marinooperand.  The label may still eventually be a jump target, but if so
3783*e4b17023SJohn Marinoin an indirect jump in a subsequent insn.  The presence of this note
3784*e4b17023SJohn Marinoallows jump optimization to be aware that @var{op} is, in fact, being
3785*e4b17023SJohn Marinoused, and flow optimization to build an accurate flow graph.
3786*e4b17023SJohn Marino
3787*e4b17023SJohn Marino@findex REG_LABEL_TARGET
3788*e4b17023SJohn Marino@item REG_LABEL_TARGET
3789*e4b17023SJohn MarinoThis insn is a @code{jump_insn} but not an @code{addr_vec} or
3790*e4b17023SJohn Marino@code{addr_diff_vec}.  It uses @var{op}, a @code{code_label} as a
3791*e4b17023SJohn Marinodirect or indirect jump target.  Its purpose is similar to that of
3792*e4b17023SJohn Marino@code{REG_LABEL_OPERAND}.  This note is only present if the insn has
3793*e4b17023SJohn Marinomultiple targets; the last label in the insn (in the highest numbered
3794*e4b17023SJohn Marinoinsn-field) goes into the @code{JUMP_LABEL} field and does not have a
3795*e4b17023SJohn Marino@code{REG_LABEL_TARGET} note.  @xref{Insns, JUMP_LABEL}.
3796*e4b17023SJohn Marino
3797*e4b17023SJohn Marino@findex REG_CROSSING_JUMP
3798*e4b17023SJohn Marino@item REG_CROSSING_JUMP
3799*e4b17023SJohn MarinoThis insn is a branching instruction (either an unconditional jump or
3800*e4b17023SJohn Marinoan indirect jump) which crosses between hot and cold sections, which
3801*e4b17023SJohn Marinocould potentially be very far apart in the executable.  The presence
3802*e4b17023SJohn Marinoof this note indicates to other optimizations that this branching
3803*e4b17023SJohn Marinoinstruction should not be ``collapsed'' into a simpler branching
3804*e4b17023SJohn Marinoconstruct.  It is used when the optimization to partition basic blocks
3805*e4b17023SJohn Marinointo hot and cold sections is turned on.
3806*e4b17023SJohn Marino
3807*e4b17023SJohn Marino@findex REG_SETJMP
3808*e4b17023SJohn Marino@item REG_SETJMP
3809*e4b17023SJohn MarinoAppears attached to each @code{CALL_INSN} to @code{setjmp} or a
3810*e4b17023SJohn Marinorelated function.
3811*e4b17023SJohn Marino@end table
3812*e4b17023SJohn Marino
3813*e4b17023SJohn MarinoThe following notes describe attributes of outputs of an insn:
3814*e4b17023SJohn Marino
3815*e4b17023SJohn Marino@table @code
3816*e4b17023SJohn Marino@findex REG_EQUIV
3817*e4b17023SJohn Marino@findex REG_EQUAL
3818*e4b17023SJohn Marino@item REG_EQUIV
3819*e4b17023SJohn Marino@itemx REG_EQUAL
3820*e4b17023SJohn MarinoThis note is only valid on an insn that sets only one register and
3821*e4b17023SJohn Marinoindicates that that register will be equal to @var{op} at run time; the
3822*e4b17023SJohn Marinoscope of this equivalence differs between the two types of notes.  The
3823*e4b17023SJohn Marinovalue which the insn explicitly copies into the register may look
3824*e4b17023SJohn Marinodifferent from @var{op}, but they will be equal at run time.  If the
3825*e4b17023SJohn Marinooutput of the single @code{set} is a @code{strict_low_part} expression,
3826*e4b17023SJohn Marinothe note refers to the register that is contained in @code{SUBREG_REG}
3827*e4b17023SJohn Marinoof the @code{subreg} expression.
3828*e4b17023SJohn Marino
3829*e4b17023SJohn MarinoFor @code{REG_EQUIV}, the register is equivalent to @var{op} throughout
3830*e4b17023SJohn Marinothe entire function, and could validly be replaced in all its
3831*e4b17023SJohn Marinooccurrences by @var{op}.  (``Validly'' here refers to the data flow of
3832*e4b17023SJohn Marinothe program; simple replacement may make some insns invalid.)  For
3833*e4b17023SJohn Marinoexample, when a constant is loaded into a register that is never
3834*e4b17023SJohn Marinoassigned any other value, this kind of note is used.
3835*e4b17023SJohn Marino
3836*e4b17023SJohn MarinoWhen a parameter is copied into a pseudo-register at entry to a function,
3837*e4b17023SJohn Marinoa note of this kind records that the register is equivalent to the stack
3838*e4b17023SJohn Marinoslot where the parameter was passed.  Although in this case the register
3839*e4b17023SJohn Marinomay be set by other insns, it is still valid to replace the register
3840*e4b17023SJohn Marinoby the stack slot throughout the function.
3841*e4b17023SJohn Marino
3842*e4b17023SJohn MarinoA @code{REG_EQUIV} note is also used on an instruction which copies a
3843*e4b17023SJohn Marinoregister parameter into a pseudo-register at entry to a function, if
3844*e4b17023SJohn Marinothere is a stack slot where that parameter could be stored.  Although
3845*e4b17023SJohn Marinoother insns may set the pseudo-register, it is valid for the compiler to
3846*e4b17023SJohn Marinoreplace the pseudo-register by stack slot throughout the function,
3847*e4b17023SJohn Marinoprovided the compiler ensures that the stack slot is properly
3848*e4b17023SJohn Marinoinitialized by making the replacement in the initial copy instruction as
3849*e4b17023SJohn Marinowell.  This is used on machines for which the calling convention
3850*e4b17023SJohn Marinoallocates stack space for register parameters.  See
3851*e4b17023SJohn Marino@code{REG_PARM_STACK_SPACE} in @ref{Stack Arguments}.
3852*e4b17023SJohn Marino
3853*e4b17023SJohn MarinoIn the case of @code{REG_EQUAL}, the register that is set by this insn
3854*e4b17023SJohn Marinowill be equal to @var{op} at run time at the end of this insn but not
3855*e4b17023SJohn Marinonecessarily elsewhere in the function.  In this case, @var{op}
3856*e4b17023SJohn Marinois typically an arithmetic expression.  For example, when a sequence of
3857*e4b17023SJohn Marinoinsns such as a library call is used to perform an arithmetic operation,
3858*e4b17023SJohn Marinothis kind of note is attached to the insn that produces or copies the
3859*e4b17023SJohn Marinofinal value.
3860*e4b17023SJohn Marino
3861*e4b17023SJohn MarinoThese two notes are used in different ways by the compiler passes.
3862*e4b17023SJohn Marino@code{REG_EQUAL} is used by passes prior to register allocation (such as
3863*e4b17023SJohn Marinocommon subexpression elimination and loop optimization) to tell them how
3864*e4b17023SJohn Marinoto think of that value.  @code{REG_EQUIV} notes are used by register
3865*e4b17023SJohn Marinoallocation to indicate that there is an available substitute expression
3866*e4b17023SJohn Marino(either a constant or a @code{mem} expression for the location of a
3867*e4b17023SJohn Marinoparameter on the stack) that may be used in place of a register if
3868*e4b17023SJohn Marinoinsufficient registers are available.
3869*e4b17023SJohn Marino
3870*e4b17023SJohn MarinoExcept for stack homes for parameters, which are indicated by a
3871*e4b17023SJohn Marino@code{REG_EQUIV} note and are not useful to the early optimization
3872*e4b17023SJohn Marinopasses and pseudo registers that are equivalent to a memory location
3873*e4b17023SJohn Marinothroughout their entire life, which is not detected until later in
3874*e4b17023SJohn Marinothe compilation, all equivalences are initially indicated by an attached
3875*e4b17023SJohn Marino@code{REG_EQUAL} note.  In the early stages of register allocation, a
3876*e4b17023SJohn Marino@code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if
3877*e4b17023SJohn Marino@var{op} is a constant and the insn represents the only set of its
3878*e4b17023SJohn Marinodestination register.
3879*e4b17023SJohn Marino
3880*e4b17023SJohn MarinoThus, compiler passes prior to register allocation need only check for
3881*e4b17023SJohn Marino@code{REG_EQUAL} notes and passes subsequent to register allocation
3882*e4b17023SJohn Marinoneed only check for @code{REG_EQUIV} notes.
3883*e4b17023SJohn Marino@end table
3884*e4b17023SJohn Marino
3885*e4b17023SJohn MarinoThese notes describe linkages between insns.  They occur in pairs: one
3886*e4b17023SJohn Marinoinsn has one of a pair of notes that points to a second insn, which has
3887*e4b17023SJohn Marinothe inverse note pointing back to the first insn.
3888*e4b17023SJohn Marino
3889*e4b17023SJohn Marino@table @code
3890*e4b17023SJohn Marino@findex REG_CC_SETTER
3891*e4b17023SJohn Marino@findex REG_CC_USER
3892*e4b17023SJohn Marino@item REG_CC_SETTER
3893*e4b17023SJohn Marino@itemx REG_CC_USER
3894*e4b17023SJohn MarinoOn machines that use @code{cc0}, the insns which set and use @code{cc0}
3895*e4b17023SJohn Marinoset and use @code{cc0} are adjacent.  However, when branch delay slot
3896*e4b17023SJohn Marinofilling is done, this may no longer be true.  In this case a
3897*e4b17023SJohn Marino@code{REG_CC_USER} note will be placed on the insn setting @code{cc0} to
3898*e4b17023SJohn Marinopoint to the insn using @code{cc0} and a @code{REG_CC_SETTER} note will
3899*e4b17023SJohn Marinobe placed on the insn using @code{cc0} to point to the insn setting
3900*e4b17023SJohn Marino@code{cc0}.
3901*e4b17023SJohn Marino@end table
3902*e4b17023SJohn Marino
3903*e4b17023SJohn MarinoThese values are only used in the @code{LOG_LINKS} field, and indicate
3904*e4b17023SJohn Marinothe type of dependency that each link represents.  Links which indicate
3905*e4b17023SJohn Marinoa data dependence (a read after write dependence) do not use any code,
3906*e4b17023SJohn Marinothey simply have mode @code{VOIDmode}, and are printed without any
3907*e4b17023SJohn Marinodescriptive text.
3908*e4b17023SJohn Marino
3909*e4b17023SJohn Marino@table @code
3910*e4b17023SJohn Marino@findex REG_DEP_TRUE
3911*e4b17023SJohn Marino@item REG_DEP_TRUE
3912*e4b17023SJohn MarinoThis indicates a true dependence (a read after write dependence).
3913*e4b17023SJohn Marino
3914*e4b17023SJohn Marino@findex REG_DEP_OUTPUT
3915*e4b17023SJohn Marino@item REG_DEP_OUTPUT
3916*e4b17023SJohn MarinoThis indicates an output dependence (a write after write dependence).
3917*e4b17023SJohn Marino
3918*e4b17023SJohn Marino@findex REG_DEP_ANTI
3919*e4b17023SJohn Marino@item REG_DEP_ANTI
3920*e4b17023SJohn MarinoThis indicates an anti dependence (a write after read dependence).
3921*e4b17023SJohn Marino
3922*e4b17023SJohn Marino@end table
3923*e4b17023SJohn Marino
3924*e4b17023SJohn MarinoThese notes describe information gathered from gcov profile data.  They
3925*e4b17023SJohn Marinoare stored in the @code{REG_NOTES} field of an insn as an
3926*e4b17023SJohn Marino@code{expr_list}.
3927*e4b17023SJohn Marino
3928*e4b17023SJohn Marino@table @code
3929*e4b17023SJohn Marino@findex REG_BR_PROB
3930*e4b17023SJohn Marino@item REG_BR_PROB
3931*e4b17023SJohn MarinoThis is used to specify the ratio of branches to non-branches of a
3932*e4b17023SJohn Marinobranch insn according to the profile data.  The value is stored as a
3933*e4b17023SJohn Marinovalue between 0 and REG_BR_PROB_BASE; larger values indicate a higher
3934*e4b17023SJohn Marinoprobability that the branch will be taken.
3935*e4b17023SJohn Marino
3936*e4b17023SJohn Marino@findex REG_BR_PRED
3937*e4b17023SJohn Marino@item REG_BR_PRED
3938*e4b17023SJohn MarinoThese notes are found in JUMP insns after delayed branch scheduling
3939*e4b17023SJohn Marinohas taken place.  They indicate both the direction and the likelihood
3940*e4b17023SJohn Marinoof the JUMP@.  The format is a bitmask of ATTR_FLAG_* values.
3941*e4b17023SJohn Marino
3942*e4b17023SJohn Marino@findex REG_FRAME_RELATED_EXPR
3943*e4b17023SJohn Marino@item REG_FRAME_RELATED_EXPR
3944*e4b17023SJohn MarinoThis is used on an RTX_FRAME_RELATED_P insn wherein the attached expression
3945*e4b17023SJohn Marinois used in place of the actual insn pattern.  This is done in cases where
3946*e4b17023SJohn Marinothe pattern is either complex or misleading.
3947*e4b17023SJohn Marino@end table
3948*e4b17023SJohn Marino
3949*e4b17023SJohn MarinoFor convenience, the machine mode in an @code{insn_list} or
3950*e4b17023SJohn Marino@code{expr_list} is printed using these symbolic codes in debugging dumps.
3951*e4b17023SJohn Marino
3952*e4b17023SJohn Marino@findex insn_list
3953*e4b17023SJohn Marino@findex expr_list
3954*e4b17023SJohn MarinoThe only difference between the expression codes @code{insn_list} and
3955*e4b17023SJohn Marino@code{expr_list} is that the first operand of an @code{insn_list} is
3956*e4b17023SJohn Marinoassumed to be an insn and is printed in debugging dumps as the insn's
3957*e4b17023SJohn Marinounique id; the first operand of an @code{expr_list} is printed in the
3958*e4b17023SJohn Marinoordinary way as an expression.
3959*e4b17023SJohn Marino
3960*e4b17023SJohn Marino@node Calls
3961*e4b17023SJohn Marino@section RTL Representation of Function-Call Insns
3962*e4b17023SJohn Marino@cindex calling functions in RTL
3963*e4b17023SJohn Marino@cindex RTL function-call insns
3964*e4b17023SJohn Marino@cindex function-call insns
3965*e4b17023SJohn Marino
3966*e4b17023SJohn MarinoInsns that call subroutines have the RTL expression code @code{call_insn}.
3967*e4b17023SJohn MarinoThese insns must satisfy special rules, and their bodies must use a special
3968*e4b17023SJohn MarinoRTL expression code, @code{call}.
3969*e4b17023SJohn Marino
3970*e4b17023SJohn Marino@cindex @code{call} usage
3971*e4b17023SJohn MarinoA @code{call} expression has two operands, as follows:
3972*e4b17023SJohn Marino
3973*e4b17023SJohn Marino@smallexample
3974*e4b17023SJohn Marino(call (mem:@var{fm} @var{addr}) @var{nbytes})
3975*e4b17023SJohn Marino@end smallexample
3976*e4b17023SJohn Marino
3977*e4b17023SJohn Marino@noindent
3978*e4b17023SJohn MarinoHere @var{nbytes} is an operand that represents the number of bytes of
3979*e4b17023SJohn Marinoargument data being passed to the subroutine, @var{fm} is a machine mode
3980*e4b17023SJohn Marino(which must equal as the definition of the @code{FUNCTION_MODE} macro in
3981*e4b17023SJohn Marinothe machine description) and @var{addr} represents the address of the
3982*e4b17023SJohn Marinosubroutine.
3983*e4b17023SJohn Marino
3984*e4b17023SJohn MarinoFor a subroutine that returns no value, the @code{call} expression as
3985*e4b17023SJohn Marinoshown above is the entire body of the insn, except that the insn might
3986*e4b17023SJohn Marinoalso contain @code{use} or @code{clobber} expressions.
3987*e4b17023SJohn Marino
3988*e4b17023SJohn Marino@cindex @code{BLKmode}, and function return values
3989*e4b17023SJohn MarinoFor a subroutine that returns a value whose mode is not @code{BLKmode},
3990*e4b17023SJohn Marinothe value is returned in a hard register.  If this register's number is
3991*e4b17023SJohn Marino@var{r}, then the body of the call insn looks like this:
3992*e4b17023SJohn Marino
3993*e4b17023SJohn Marino@smallexample
3994*e4b17023SJohn Marino(set (reg:@var{m} @var{r})
3995*e4b17023SJohn Marino     (call (mem:@var{fm} @var{addr}) @var{nbytes}))
3996*e4b17023SJohn Marino@end smallexample
3997*e4b17023SJohn Marino
3998*e4b17023SJohn Marino@noindent
3999*e4b17023SJohn MarinoThis RTL expression makes it clear (to the optimizer passes) that the
4000*e4b17023SJohn Marinoappropriate register receives a useful value in this insn.
4001*e4b17023SJohn Marino
4002*e4b17023SJohn MarinoWhen a subroutine returns a @code{BLKmode} value, it is handled by
4003*e4b17023SJohn Marinopassing to the subroutine the address of a place to store the value.
4004*e4b17023SJohn MarinoSo the call insn itself does not ``return'' any value, and it has the
4005*e4b17023SJohn Marinosame RTL form as a call that returns nothing.
4006*e4b17023SJohn Marino
4007*e4b17023SJohn MarinoOn some machines, the call instruction itself clobbers some register,
4008*e4b17023SJohn Marinofor example to contain the return address.  @code{call_insn} insns
4009*e4b17023SJohn Marinoon these machines should have a body which is a @code{parallel}
4010*e4b17023SJohn Marinothat contains both the @code{call} expression and @code{clobber}
4011*e4b17023SJohn Marinoexpressions that indicate which registers are destroyed.  Similarly,
4012*e4b17023SJohn Marinoif the call instruction requires some register other than the stack
4013*e4b17023SJohn Marinopointer that is not explicitly mentioned in its RTL, a @code{use}
4014*e4b17023SJohn Marinosubexpression should mention that register.
4015*e4b17023SJohn Marino
4016*e4b17023SJohn MarinoFunctions that are called are assumed to modify all registers listed in
4017*e4b17023SJohn Marinothe configuration macro @code{CALL_USED_REGISTERS} (@pxref{Register
4018*e4b17023SJohn MarinoBasics}) and, with the exception of @code{const} functions and library
4019*e4b17023SJohn Marinocalls, to modify all of memory.
4020*e4b17023SJohn Marino
4021*e4b17023SJohn MarinoInsns containing just @code{use} expressions directly precede the
4022*e4b17023SJohn Marino@code{call_insn} insn to indicate which registers contain inputs to the
4023*e4b17023SJohn Marinofunction.  Similarly, if registers other than those in
4024*e4b17023SJohn Marino@code{CALL_USED_REGISTERS} are clobbered by the called function, insns
4025*e4b17023SJohn Marinocontaining a single @code{clobber} follow immediately after the call to
4026*e4b17023SJohn Marinoindicate which registers.
4027*e4b17023SJohn Marino
4028*e4b17023SJohn Marino@node Sharing
4029*e4b17023SJohn Marino@section Structure Sharing Assumptions
4030*e4b17023SJohn Marino@cindex sharing of RTL components
4031*e4b17023SJohn Marino@cindex RTL structure sharing assumptions
4032*e4b17023SJohn Marino
4033*e4b17023SJohn MarinoThe compiler assumes that certain kinds of RTL expressions are unique;
4034*e4b17023SJohn Marinothere do not exist two distinct objects representing the same value.
4035*e4b17023SJohn MarinoIn other cases, it makes an opposite assumption: that no RTL expression
4036*e4b17023SJohn Marinoobject of a certain kind appears in more than one place in the
4037*e4b17023SJohn Marinocontaining structure.
4038*e4b17023SJohn Marino
4039*e4b17023SJohn MarinoThese assumptions refer to a single function; except for the RTL
4040*e4b17023SJohn Marinoobjects that describe global variables and external functions,
4041*e4b17023SJohn Marinoand a few standard objects such as small integer constants,
4042*e4b17023SJohn Marinono RTL objects are common to two functions.
4043*e4b17023SJohn Marino
4044*e4b17023SJohn Marino@itemize @bullet
4045*e4b17023SJohn Marino@cindex @code{reg}, RTL sharing
4046*e4b17023SJohn Marino@item
4047*e4b17023SJohn MarinoEach pseudo-register has only a single @code{reg} object to represent it,
4048*e4b17023SJohn Marinoand therefore only a single machine mode.
4049*e4b17023SJohn Marino
4050*e4b17023SJohn Marino@cindex symbolic label
4051*e4b17023SJohn Marino@cindex @code{symbol_ref}, RTL sharing
4052*e4b17023SJohn Marino@item
4053*e4b17023SJohn MarinoFor any symbolic label, there is only one @code{symbol_ref} object
4054*e4b17023SJohn Marinoreferring to it.
4055*e4b17023SJohn Marino
4056*e4b17023SJohn Marino@cindex @code{const_int}, RTL sharing
4057*e4b17023SJohn Marino@item
4058*e4b17023SJohn MarinoAll @code{const_int} expressions with equal values are shared.
4059*e4b17023SJohn Marino
4060*e4b17023SJohn Marino@cindex @code{pc}, RTL sharing
4061*e4b17023SJohn Marino@item
4062*e4b17023SJohn MarinoThere is only one @code{pc} expression.
4063*e4b17023SJohn Marino
4064*e4b17023SJohn Marino@cindex @code{cc0}, RTL sharing
4065*e4b17023SJohn Marino@item
4066*e4b17023SJohn MarinoThere is only one @code{cc0} expression.
4067*e4b17023SJohn Marino
4068*e4b17023SJohn Marino@cindex @code{const_double}, RTL sharing
4069*e4b17023SJohn Marino@item
4070*e4b17023SJohn MarinoThere is only one @code{const_double} expression with value 0 for
4071*e4b17023SJohn Marinoeach floating point mode.  Likewise for values 1 and 2.
4072*e4b17023SJohn Marino
4073*e4b17023SJohn Marino@cindex @code{const_vector}, RTL sharing
4074*e4b17023SJohn Marino@item
4075*e4b17023SJohn MarinoThere is only one @code{const_vector} expression with value 0 for
4076*e4b17023SJohn Marinoeach vector mode, be it an integer or a double constant vector.
4077*e4b17023SJohn Marino
4078*e4b17023SJohn Marino@cindex @code{label_ref}, RTL sharing
4079*e4b17023SJohn Marino@cindex @code{scratch}, RTL sharing
4080*e4b17023SJohn Marino@item
4081*e4b17023SJohn MarinoNo @code{label_ref} or @code{scratch} appears in more than one place in
4082*e4b17023SJohn Marinothe RTL structure; in other words, it is safe to do a tree-walk of all
4083*e4b17023SJohn Marinothe insns in the function and assume that each time a @code{label_ref}
4084*e4b17023SJohn Marinoor @code{scratch} is seen it is distinct from all others that are seen.
4085*e4b17023SJohn Marino
4086*e4b17023SJohn Marino@cindex @code{mem}, RTL sharing
4087*e4b17023SJohn Marino@item
4088*e4b17023SJohn MarinoOnly one @code{mem} object is normally created for each static
4089*e4b17023SJohn Marinovariable or stack slot, so these objects are frequently shared in all
4090*e4b17023SJohn Marinothe places they appear.  However, separate but equal objects for these
4091*e4b17023SJohn Marinovariables are occasionally made.
4092*e4b17023SJohn Marino
4093*e4b17023SJohn Marino@cindex @code{asm_operands}, RTL sharing
4094*e4b17023SJohn Marino@item
4095*e4b17023SJohn MarinoWhen a single @code{asm} statement has multiple output operands, a
4096*e4b17023SJohn Marinodistinct @code{asm_operands} expression is made for each output operand.
4097*e4b17023SJohn MarinoHowever, these all share the vector which contains the sequence of input
4098*e4b17023SJohn Marinooperands.  This sharing is used later on to test whether two
4099*e4b17023SJohn Marino@code{asm_operands} expressions come from the same statement, so all
4100*e4b17023SJohn Marinooptimizations must carefully preserve the sharing if they copy the
4101*e4b17023SJohn Marinovector at all.
4102*e4b17023SJohn Marino
4103*e4b17023SJohn Marino@item
4104*e4b17023SJohn MarinoNo RTL object appears in more than one place in the RTL structure
4105*e4b17023SJohn Marinoexcept as described above.  Many passes of the compiler rely on this
4106*e4b17023SJohn Marinoby assuming that they can modify RTL objects in place without unwanted
4107*e4b17023SJohn Marinoside-effects on other insns.
4108*e4b17023SJohn Marino
4109*e4b17023SJohn Marino@findex unshare_all_rtl
4110*e4b17023SJohn Marino@item
4111*e4b17023SJohn MarinoDuring initial RTL generation, shared structure is freely introduced.
4112*e4b17023SJohn MarinoAfter all the RTL for a function has been generated, all shared
4113*e4b17023SJohn Marinostructure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c},
4114*e4b17023SJohn Marinoafter which the above rules are guaranteed to be followed.
4115*e4b17023SJohn Marino
4116*e4b17023SJohn Marino@findex copy_rtx_if_shared
4117*e4b17023SJohn Marino@item
4118*e4b17023SJohn MarinoDuring the combiner pass, shared structure within an insn can exist
4119*e4b17023SJohn Marinotemporarily.  However, the shared structure is copied before the
4120*e4b17023SJohn Marinocombiner is finished with the insn.  This is done by calling
4121*e4b17023SJohn Marino@code{copy_rtx_if_shared}, which is a subroutine of
4122*e4b17023SJohn Marino@code{unshare_all_rtl}.
4123*e4b17023SJohn Marino@end itemize
4124*e4b17023SJohn Marino
4125*e4b17023SJohn Marino@node Reading RTL
4126*e4b17023SJohn Marino@section Reading RTL
4127*e4b17023SJohn Marino
4128*e4b17023SJohn MarinoTo read an RTL object from a file, call @code{read_rtx}.  It takes one
4129*e4b17023SJohn Marinoargument, a stdio stream, and returns a single RTL object.  This routine
4130*e4b17023SJohn Marinois defined in @file{read-rtl.c}.  It is not available in the compiler
4131*e4b17023SJohn Marinoitself, only the various programs that generate the compiler back end
4132*e4b17023SJohn Marinofrom the machine description.
4133*e4b17023SJohn Marino
4134*e4b17023SJohn MarinoPeople frequently have the idea of using RTL stored as text in a file as
4135*e4b17023SJohn Marinoan interface between a language front end and the bulk of GCC@.  This
4136*e4b17023SJohn Marinoidea is not feasible.
4137*e4b17023SJohn Marino
4138*e4b17023SJohn MarinoGCC was designed to use RTL internally only.  Correct RTL for a given
4139*e4b17023SJohn Marinoprogram is very dependent on the particular target machine.  And the RTL
4140*e4b17023SJohn Marinodoes not contain all the information about the program.
4141*e4b17023SJohn Marino
4142*e4b17023SJohn MarinoThe proper way to interface GCC to a new language front end is with
4143*e4b17023SJohn Marinothe ``tree'' data structure, described in the files @file{tree.h} and
4144*e4b17023SJohn Marino@file{tree.def}.  The documentation for this structure (@pxref{GENERIC})
4145*e4b17023SJohn Marinois incomplete.
4146