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