X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fdoc%2Frtl.texi;h=4cb51eec1aa5bfe050cc57f6a3b056e727cfafeb;hb=f8b63509c09c2e993edd4233c29b50791d120246;hp=6995a293c6ccc5a10b99ddbe8745941afb2ac9ce;hpb=15b474a23cd2d4b7f40c34838e3d1321946fee2b;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 6995a293c6c..4cb51eec1aa 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -1,5 +1,5 @@ @c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001, 2002, -@c 2003, 2004, 2005, 2006, 2007, 2008, 2010 +@c 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -409,15 +409,27 @@ and @code{TREE_OPERAND (@var{x}, 0)} contains the declaration, or another @code{COMPONENT_REF}, or null if there is no compile-time object associated with the reference. +@findex MEM_OFFSET_KNOWN_P +@item MEM_OFFSET_KNOWN_P (@var{x}) +True if the offset of the memory reference from @code{MEM_EXPR} is known. +@samp{MEM_OFFSET (@var{x})} provides the offset if so. + @findex MEM_OFFSET @item MEM_OFFSET (@var{x}) -The offset from the start of @code{MEM_EXPR} as a @code{CONST_INT} rtx. +The offset from the start of @code{MEM_EXPR}. The value is only valid if +@samp{MEM_OFFSET_KNOWN_P (@var{x})} is true. + +@findex MEM_SIZE_KNOWN_P +@item MEM_SIZE_KNOWN_P (@var{x}) +True if the size of the memory reference is known. +@samp{MEM_SIZE (@var{x})} provides its size if so. @findex MEM_SIZE @item MEM_SIZE (@var{x}) -The size in bytes of the memory reference as a @code{CONST_INT} rtx. +The size in bytes of the memory reference. This is mostly relevant for @code{BLKmode} references as otherwise -the size is implied by the mode. +the size is implied by the mode. The value is only valid if +@samp{MEM_SIZE_KNOWN_P (@var{x})} is true. @findex MEM_ALIGN @item MEM_ALIGN (@var{x}) @@ -2396,9 +2408,16 @@ Most often @var{m} will be a floating point mode. @item (ffs:@var{m} @var{x}) Represents one plus the index of the least significant 1-bit in @var{x}, represented as an integer of mode @var{m}. (The value is -zero if @var{x} is zero.) The mode of @var{x} need not be @var{m}; -depending on the target machine, various mode combinations may be -valid. +zero if @var{x} is zero.) The mode of @var{x} must be @var{m} +or @code{VOIDmode}. + +@findex clrsb +@item (clrsb:@var{m} @var{x}) +Represents the number of redundant leading sign bits in @var{x}, +represented as an integer of mode @var{m}, starting at the most +significant bit position. This is one less than the number of leading +sign bits (either 0 or 1), with no special cases. The mode of @var{x} +must be @var{m} or @code{VOIDmode}. @findex clz @item (clz:@var{m} @var{x}) @@ -2407,7 +2426,7 @@ integer of mode @var{m}, starting at the most significant bit position. If @var{x} is zero, the value is determined by @code{CLZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}). Note that this is one of the few expressions that is not invariant under widening. The mode of -@var{x} will usually be an integer mode. +@var{x} must be @var{m} or @code{VOIDmode}. @findex ctz @item (ctz:@var{m} @var{x}) @@ -2416,23 +2435,24 @@ integer of mode @var{m}, starting at the least significant bit position. If @var{x} is zero, the value is determined by @code{CTZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}). Except for this case, @code{ctz(x)} is equivalent to @code{ffs(@var{x}) - 1}. The mode of -@var{x} will usually be an integer mode. +@var{x} must be @var{m} or @code{VOIDmode}. @findex popcount @item (popcount:@var{m} @var{x}) Represents the number of 1-bits in @var{x}, represented as an integer of -mode @var{m}. The mode of @var{x} will usually be an integer mode. +mode @var{m}. The mode of @var{x} must be @var{m} or @code{VOIDmode}. @findex parity @item (parity:@var{m} @var{x}) Represents the number of 1-bits modulo 2 in @var{x}, represented as an -integer of mode @var{m}. The mode of @var{x} will usually be an integer -mode. +integer of mode @var{m}. The mode of @var{x} must be @var{m} or +@code{VOIDmode}. @findex bswap @item (bswap:@var{m} @var{x}) Represents the value @var{x} with the order of bytes reversed, carried out in mode @var{m}, which must be a fixed-point machine mode. +The mode of @var{x} must be @var{m} or @code{VOIDmode}. @end table @node Comparisons @@ -2895,6 +2915,13 @@ placed in @code{pc} to return to the caller. Note that an insn pattern of @code{(return)} is logically equivalent to @code{(set (pc) (return))}, but the latter form is never used. +@findex simple_return +@item (simple_return) +Like @code{(return)}, but truly represents only a function return, while +@code{(return)} may represent an insn that also performs other functions +of the function epilogue. Like @code{(return)}, this may also occur in +conditional jumps. + @findex call @item (call @var{function} @var{nargs}) Represents a function call. @var{function} is a @code{mem} expression @@ -3024,7 +3051,7 @@ Represents several side effects performed in parallel. The square brackets stand for a vector; the operand of @code{parallel} is a vector of expressions. @var{x0}, @var{x1} and so on are individual side effect expressions---expressions of code @code{set}, @code{call}, -@code{return}, @code{clobber} or @code{use}. +@code{return}, @code{simple_return}, @code{clobber} or @code{use}. ``In parallel'' means that first all the values used in the individual side-effects are computed, and second all the actual side-effects are @@ -3663,14 +3690,16 @@ and @code{call_insn} insns: @table @code @findex PATTERN @item PATTERN (@var{i}) -An expression for the side effect performed by this insn. This must be -one of the following codes: @code{set}, @code{call}, @code{use}, -@code{clobber}, @code{return}, @code{asm_input}, @code{asm_output}, -@code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec}, -@code{unspec_volatile}, @code{parallel}, @code{cond_exec}, or @code{sequence}. If it is a @code{parallel}, -each element of the @code{parallel} must be one these codes, except that -@code{parallel} expressions cannot be nested and @code{addr_vec} and -@code{addr_diff_vec} are not permitted inside a @code{parallel} expression. +An expression for the side effect performed by this insn. This must +be one of the following codes: @code{set}, @code{call}, @code{use}, +@code{clobber}, @code{return}, @code{simple_return}, @code{asm_input}, +@code{asm_output}, @code{addr_vec}, @code{addr_diff_vec}, +@code{trap_if}, @code{unspec}, @code{unspec_volatile}, +@code{parallel}, @code{cond_exec}, or @code{sequence}. If it is a +@code{parallel}, each element of the @code{parallel} must be one these +codes, except that @code{parallel} expressions cannot be nested and +@code{addr_vec} and @code{addr_diff_vec} are not permitted inside a +@code{parallel} expression. @findex INSN_CODE @item INSN_CODE (@var{i})