亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtl.texi

?? GCC
?? TEXI
?? 第 1 頁 / 共 5 頁
字號:
@c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001
@c Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@node RTL
@chapter RTL Representation
@cindex RTL representation
@cindex representation of RTL
@cindex Register Transfer Language (RTL)

Most of the work of the compiler is done on an intermediate representation
called register transfer language.  In this language, the instructions to be
output are described, pretty much one by one, in an algebraic form that
describes what the instruction does.

RTL is inspired by Lisp lists.  It has both an internal form, made up of
structures that point at other structures, and a textual form that is used
in the machine description and in printed debugging dumps.  The textual
form uses nested parentheses to indicate the pointers in the internal form.

@menu
* RTL Objects::       Expressions vs vectors vs strings vs integers.
* RTL Classes::       Categories of RTL expression objects, and their structure.
* Accessors::         Macros to access expression operands or vector elts.
* Flags::             Other flags in an RTL expression.
* Machine Modes::     Describing the size and format of a datum.
* Constants::         Expressions with constant values.
* Regs and Memory::   Expressions representing register contents or memory.
* Arithmetic::        Expressions representing arithmetic on other expressions.
* Comparisons::       Expressions representing comparison of expressions.
* Bit-Fields::        Expressions representing bit-fields in memory or reg.
* Vector Operations:: Expressions involving vector datatypes.
* Conversions::       Extending, truncating, floating or fixing.
* RTL Declarations::  Declaring volatility, constancy, etc.
* Side Effects::      Expressions for storing in registers, etc.
* Incdec::            Embedded side-effects for autoincrement addressing.
* Assembler::         Representing @code{asm} with operands.
* Insns::             Expression types for entire insns.
* Calls::             RTL representation of function call insns.
* Sharing::           Some expressions are unique; others *must* be copied.
* Reading RTL::       Reading textual RTL from a file.
@end menu

@node RTL Objects
@section RTL Object Types
@cindex RTL object types

@cindex RTL integers
@cindex RTL strings
@cindex RTL vectors
@cindex RTL expression
@cindex RTX (See RTL)
RTL uses five kinds of objects: expressions, integers, wide integers,
strings and vectors.  Expressions are the most important ones.  An RTL
expression (``RTX'', for short) is a C structure, but it is usually
referred to with a pointer; a type that is given the typedef name
@code{rtx}.

An integer is simply an @code{int}; their written form uses decimal digits.
A wide integer is an integral object whose type is @code{HOST_WIDE_INT}
(@pxref{Config}); their written form uses decimal digits.

A string is a sequence of characters.  In core it is represented as a
@code{char *} in usual C fashion, and it is written in C syntax as well.
However, strings in RTL may never be null.  If you write an empty string in
a machine description, it is represented in core as a null pointer rather
than as a pointer to a null character.  In certain contexts, these null
pointers instead of strings are valid.  Within RTL code, strings are most
commonly found inside @code{symbol_ref} expressions, but they appear in
other contexts in the RTL expressions that make up machine descriptions.

A vector contains an arbitrary number of pointers to expressions.  The
number of elements in the vector is explicitly present in the vector.
The written form of a vector consists of square brackets
(@samp{[@dots{}]}) surrounding the elements, in sequence and with
whitespace separating them.  Vectors of length zero are not created;
null pointers are used instead.

@cindex expression codes
@cindex codes, RTL expression
@findex GET_CODE
@findex PUT_CODE
Expressions are classified by @dfn{expression codes} (also called RTX
codes).  The expression code is a name defined in @file{rtl.def}, which is
also (in upper case) a C enumeration constant.  The possible expression
codes and their meanings are machine-independent.  The code of an RTX can
be extracted with the macro @code{GET_CODE (@var{x})} and altered with
@code{PUT_CODE (@var{x}, @var{newcode})}.

The expression code determines how many operands the expression contains,
and what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
by looking at an operand what kind of object it is.  Instead, you must know
from its context---from the expression code of the containing expression.
For example, in an expression of code @code{subreg}, the first operand is
to be regarded as an expression and the second operand as an integer.  In
an expression of code @code{plus}, there are two operands, both of which
are to be regarded as expressions.  In a @code{symbol_ref} expression,
there is one operand, which is to be regarded as a string.

Expressions are written as parentheses containing the name of the
expression type, its flags and machine mode if any, and then the operands
of the expression (separated by spaces).

Expression code names in the @samp{md} file are written in lower case,
but when they appear in C code they are written in upper case.  In this
manual, they are shown as follows: @code{const_int}.

@cindex (nil)
@cindex nil
In a few contexts a null pointer is valid where an expression is normally
wanted.  The written form of this is @code{(nil)}.

@node RTL Classes
@section RTL Classes and Formats
@cindex RTL classes
@cindex classes of RTX codes
@cindex RTX codes, classes of
@findex GET_RTX_CLASS

The various expression codes are divided into several @dfn{classes},
which are represented by single characters.  You can determine the class
of an RTX code with the macro @code{GET_RTX_CLASS (@var{code})}.
Currently, @file{rtx.def} defines these classes:

@table @code
@item o
An RTX code that represents an actual object, such as a register
(@code{REG}) or a memory location (@code{MEM}, @code{SYMBOL_REF}).
Constants and basic transforms on objects (@code{ADDRESSOF},
@code{HIGH}, @code{LO_SUM}) are also included.  Note that @code{SUBREG}
and @code{STRICT_LOW_PART} are not in this class, but in class @code{x}.

@item <
An RTX code for a comparison, such as @code{NE} or @code{LT}.

@item 1
An RTX code for a unary arithmetic operation, such as @code{NEG},
@code{NOT}, or @code{ABS}.  This category also includes value extension
(sign or zero) and conversions between integer and floating point.

@item c
An RTX code for a commutative binary operation, such as @code{PLUS} or
@code{AND}.  @code{NE} and @code{EQ} are comparisons, so they have class
@code{<}.

@item 2
An RTX code for a non-commutative binary operation, such as @code{MINUS},
@code{DIV}, or @code{ASHIFTRT}.

@item b
An RTX code for a bit-field operation.  Currently only
@code{ZERO_EXTRACT} and @code{SIGN_EXTRACT}.  These have three inputs
and are lvalues (so they can be used for insertion as well).
@xref{Bit-Fields}.

@item 3
An RTX code for other three input operations.  Currently only
@code{IF_THEN_ELSE}.

@item i
An RTX code for an entire instruction:  @code{INSN}, @code{JUMP_INSN}, and
@code{CALL_INSN}. @xref{Insns}.

@item m
An RTX code for something that matches in insns, such as
@code{MATCH_DUP}.  These only occur in machine descriptions.

@item a
An RTX code for an auto-increment addressing mode, such as
@code{POST_INC}.

@item x
All other RTX codes.  This category includes the remaining codes used
only in machine descriptions (@code{DEFINE_*}, etc.).  It also includes
all the codes describing side effects (@code{SET}, @code{USE},
@code{CLOBBER}, etc.) and the non-insns that may appear on an insn
chain, such as @code{NOTE}, @code{BARRIER}, and @code{CODE_LABEL}.
@end table

@cindex RTL format
For each expression type @file{rtl.def} specifies the number of
contained objects and their kinds, with four possibilities: @samp{e} for
expression (actually a pointer to an expression), @samp{i} for integer,
@samp{w} for wide integer, @samp{s} for string, and @samp{E} for vector
of expressions.  The sequence of letters for an expression code is
called its @dfn{format}.  For example, the format of @code{subreg} is
@samp{ei}.@refill

@cindex RTL format characters
A few other format characters are used occasionally:

@table @code
@item u
@samp{u} is equivalent to @samp{e} except that it is printed differently
in debugging dumps.  It is used for pointers to insns.

@item n
@samp{n} is equivalent to @samp{i} except that it is printed differently
in debugging dumps.  It is used for the line number or code number of a
@code{note} insn.

@item S
@samp{S} indicates a string which is optional.  In the RTL objects in
core, @samp{S} is equivalent to @samp{s}, but when the object is read,
from an @samp{md} file, the string value of this operand may be omitted.
An omitted string is taken to be the null string.

@item V
@samp{V} indicates a vector which is optional.  In the RTL objects in
core, @samp{V} is equivalent to @samp{E}, but when the object is read
from an @samp{md} file, the vector value of this operand may be omitted.
An omitted vector is effectively the same as a vector of no elements.

@item 0
@samp{0} means a slot whose contents do not fit any normal category.
@samp{0} slots are not printed at all in dumps, and are often used in
special ways by small parts of the compiler.
@end table

There are macros to get the number of operands and the format
of an expression code:

@table @code
@findex GET_RTX_LENGTH
@item GET_RTX_LENGTH (@var{code})
Number of operands of an RTX of code @var{code}.

@findex GET_RTX_FORMAT
@item GET_RTX_FORMAT (@var{code})
The format of an RTX of code @var{code}, as a C string.
@end table

Some classes of RTX codes always have the same format.  For example, it
is safe to assume that all comparison operations have format @code{ee}.

@table @code
@item 1
All codes of this class have format @code{e}.

@item <
@itemx c
@itemx 2
All codes of these classes have format @code{ee}.

@item b
@itemx 3
All codes of these classes have format @code{eee}.

@item i
All codes of this class have formats that begin with @code{iuueiee}.
@xref{Insns}.  Note that not all RTL objects linked onto an insn chain
are of class @code{i}.

@item o
@itemx m
@itemx x
You can make no assumptions about the format of these codes.
@end table

@node Accessors
@section Access to Operands
@cindex accessors
@cindex access to operands
@cindex operand access

@findex XEXP
@findex XINT
@findex XWINT
@findex XSTR
Operands of expressions are accessed using the macros @code{XEXP},
@code{XINT}, @code{XWINT} and @code{XSTR}.  Each of these macros takes
two arguments: an expression-pointer (RTX) and an operand number
(counting from zero).  Thus,@refill

@example
XEXP (@var{x}, 2)
@end example

@noindent
accesses operand 2 of expression @var{x}, as an expression.

@example
XINT (@var{x}, 2)
@end example

@noindent
accesses the same operand as an integer.  @code{XSTR}, used in the same
fashion, would access it as a string.

Any operand can be accessed as an integer, as an expression or as a string.
You must choose the correct method of access for the kind of value actually
stored in the operand.  You would do this based on the expression code of
the containing expression.  That is also how you would know how many
operands there are.

For example, if @var{x} is a @code{subreg} expression, you know that it has
two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
and @code{XINT (@var{x}, 1)}.  If you did @code{XINT (@var{x}, 0)}, you
would get the address of the expression operand but cast as an integer;
that might occasionally be useful, but it would be cleaner to write
@code{(int) XEXP (@var{x}, 0)}.  @code{XEXP (@var{x}, 1)} would also
compile without error, and would return the second, integer operand cast as
an expression pointer, which would probably result in a crash when
accessed.  Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
but this will access memory past the end of the expression with
unpredictable results.@refill

Access to operands which are vectors is more complicated.  You can use the
macro @code{XVEC} to get the vector-pointer itself, or the macros
@code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
vector.

@table @code
@findex XVEC
@item XVEC (@var{exp}, @var{idx})
Access the vector-pointer which is operand number @var{idx} in @var{exp}.

@findex XVECLEN
@item XVECLEN (@var{exp}, @var{idx})
Access the length (number of elements) in the vector which is
in operand number @var{idx} in @var{exp}.  This value is an @code{int}.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区精品| 亚洲电影第三页| 亚洲大型综合色站| 日本一区二区三区dvd视频在线| 日韩精品一区在线观看| 欧美一区日韩一区| 日韩欧美国产一区二区三区| 1区2区3区国产精品| 亚洲日本在线a| 国产精品1区2区| 欧美人狂配大交3d怪物一区| 亚洲视频综合在线| 国产成人av影院| 久久久久久久久一| 喷水一区二区三区| 91精品国产综合久久久久久久| 欧美一区二区三区视频在线观看| 在线播放欧美女士性生活| 国产精品传媒视频| 国产精品69久久久久水密桃| 日韩精品一区二区三区视频在线观看| 久久久综合九色合综国产精品| 国产日韩欧美不卡| 蜜桃视频在线观看一区二区| 国产精品一区久久久久| 91丨porny丨蝌蚪视频| 国产欧美综合在线| 国产成人午夜高潮毛片| 26uuu亚洲综合色| 精品亚洲aⅴ乱码一区二区三区| 成人精品小蝌蚪| 国产日韩av一区| 成人高清伦理免费影院在线观看| 欧美在线色视频| 亚洲一区二区欧美日韩| 欧美日韩高清一区二区不卡| 亚洲成a人片在线不卡一二三区| 韩国精品主播一区二区在线观看| 色综合久久久久综合体桃花网| 3d动漫精品啪啪| 免费观看在线综合| 337p粉嫩大胆色噜噜噜噜亚洲| 椎名由奈av一区二区三区| 91日韩在线专区| 亚洲宅男天堂在线观看无病毒| 精品一区二区在线播放| 久久这里只有精品首页| 福利一区二区在线| 亚洲色图制服丝袜| 欧美在线不卡一区| 日本视频一区二区三区| 久久久久久久久久看片| 亚洲一二三区不卡| 欧美一区二区大片| 国产激情视频一区二区在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 欧美人妖巨大在线| 国产欧美一区二区三区沐欲| 成人福利视频网站| 亚洲国产aⅴ天堂久久| 精品国精品国产| 99久久综合精品| 国产日韩欧美综合在线| 久久国内精品自在自线400部| 91国在线观看| 激情久久五月天| 欧美刺激脚交jootjob| 国产成人精品免费一区二区| 欧美精品一区二区三区久久久| 亚洲一区在线观看视频| 欧美tickling网站挠脚心| 视频一区在线播放| 国产人成亚洲第一网站在线播放 | 欧美日韩三级一区| 精品一区二区精品| 日韩免费看的电影| 色综合网色综合| 国产精品影视网| 日韩黄色片在线观看| 国产精品久久久久桃色tv| 高清日韩电视剧大全免费| 亚洲午夜av在线| 欧美日本在线看| 99久久精品情趣| 亚洲一区精品在线| 欧美国产97人人爽人人喊| 欧美精品乱码久久久久久| 日韩一区精品视频| 日韩欧美国产一区在线观看| 久久国产精品72免费观看| 精品成人一区二区三区四区| 精品视频999| 麻豆精品蜜桃视频网站| 亚洲大型综合色站| 91麻豆精品国产91久久久久 | 亚洲少妇中出一区| 国产日韩三级在线| 亚洲精品在线免费播放| 欧美一区二区三区免费视频| 国产在线精品视频| 久久国产尿小便嘘嘘| 首页国产丝袜综合| 亚洲国产成人av网| 亚洲午夜免费电影| 欧美videossexotv100| 正在播放一区二区| 欧美日韩在线播放一区| 色国产精品一区在线观看| 成人免费黄色大片| 福利电影一区二区| 99久久夜色精品国产网站| 天堂蜜桃一区二区三区 | 欧美日韩精品欧美日韩精品一| 久久99精品国产麻豆婷婷洗澡| 国产日韩精品一区二区三区| 色成人在线视频| 久色婷婷小香蕉久久| 免费观看91视频大全| 国产精品每日更新在线播放网址| 欧美日韩久久不卡| 777午夜精品视频在线播放| 欧美精品丝袜中出| 7777精品伊人久久久大香线蕉经典版下载 | 国内精品国产成人国产三级粉色| 国产精品成人一区二区艾草| 亚洲视频在线一区观看| 亚洲精品国产高清久久伦理二区| 日韩久久精品一区| 精品国产乱码久久久久久久久| 91蝌蚪porny九色| 在线这里只有精品| 欧美视频一区在线观看| 欧美精品1区2区3区| 日韩精品在线一区| 国产日韩欧美a| 亚洲精品视频在线观看网站| 久久久久综合网| 亚洲视频图片小说| 天天亚洲美女在线视频| 久久国产夜色精品鲁鲁99| 亚洲成人一区二区在线观看| 日韩av中文字幕一区二区三区| 亚洲视频网在线直播| 国产日韩欧美精品电影三级在线| 日韩欧美在线网站| 欧美国产视频在线| 亚洲国产精品久久一线不卡| 亚洲日本护士毛茸茸| 日日摸夜夜添夜夜添亚洲女人| 一级做a爱片久久| 麻豆久久久久久久| av在线不卡网| 91精品国产色综合久久久蜜香臀| 91久久精品国产91性色tv| 成人动漫中文字幕| 欧美久久婷婷综合色| 国产精品丝袜久久久久久app| 久久看人人爽人人| 亚洲v中文字幕| 香蕉久久夜色精品国产使用方法| 亚洲欧美激情在线| 久久精品国产精品亚洲红杏| 蜜桃av噜噜一区二区三区小说| 天堂va蜜桃一区二区三区| 懂色av一区二区三区免费观看| 成人综合婷婷国产精品久久| 欧美日韩国产高清一区| 国产精品欧美综合在线| 国产精品国产精品国产专区不蜜 | 丁香婷婷综合网| 欧美狂野另类xxxxoooo| 国产精品国产馆在线真实露脸 | 日韩在线观看一区二区| 成人妖精视频yjsp地址| 日韩网站在线看片你懂的| 亚洲永久免费视频| av电影在线观看一区| 久久精品欧美一区二区三区不卡 | 欧美电视剧在线看免费| 亚洲伊人伊色伊影伊综合网| 午夜精品一区在线观看| 免费一级片91| 欧美视频在线观看一区| 亚洲乱码精品一二三四区日韩在线 | 久久久久国产精品麻豆ai换脸 | 精品电影一区二区三区 | 精品人在线二区三区| 亚洲成a人片在线不卡一二三区 | 日韩免费一区二区| 午夜视频久久久久久| 在线观看视频欧美| 一区二区三区四区亚洲| 99国产精品久久| 亚洲欧美一区二区三区孕妇| 99久久久无码国产精品| 1024亚洲合集| 91碰在线视频| 一区二区在线观看视频| 蜜桃一区二区三区在线| 欧美大胆一级视频|