亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99久久99久久精品国产片果冻| 亚洲一区二区在线播放相泽| 亚洲午夜在线电影| 欧美日韩一区二区不卡| 亚洲在线视频网站| 亚洲最新视频在线播放| 欧美精品一二三区| 国产精品123| 亚洲图片欧美视频| 亚洲18女电影在线观看| 国产日产欧美一区| 欧美天天综合网| 国产成人免费网站| 成人国产精品免费观看| 免费久久精品视频| 中文字幕一区二区三区精华液| 欧美一区二区不卡视频| www.在线欧美| 国产美女在线精品| 一区二区高清免费观看影视大全| 亚洲高清免费在线| 看片网站欧美日韩| 亚洲国产精品久久人人爱蜜臀| 日韩精品三区四区| 亚洲成人免费观看| 九九九久久久精品| 日韩影视精彩在线| 国产高清一区日本| 欧美日韩精品欧美日韩精品一综合| 成人动漫在线一区| 欧美特级限制片免费在线观看| 日韩欧美成人一区二区| 色婷婷香蕉在线一区二区| 国产精品影视在线观看| 精品一区二区三区的国产在线播放| 粉嫩欧美一区二区三区高清影视| 国产高清不卡一区二区| 91福利视频在线| 99在线热播精品免费| 欧美一区二区三区思思人 | 国产精品乱码妇女bbbb| 色综合一区二区| 97超碰欧美中文字幕| 日韩一区二区三区在线视频| 日韩美一区二区三区| 亚洲欧美日韩电影| 男女男精品网站| 成a人片国产精品| 欧美一区二区黄色| 亚洲成在人线免费| 91看片淫黄大片一级在线观看| 国产99精品视频| 日韩欧美亚洲国产另类| 一区二区三区91| 91在线一区二区三区| 国产性做久久久久久| 国产精品毛片无遮挡高清| 久久精品999| 日韩色在线观看| 亚洲一区免费在线观看| 成人不卡免费av| 国产情人综合久久777777| 毛片不卡一区二区| a美女胸又www黄视频久久| 精品三级在线观看| 中文字幕一区二区三区四区| 国产不卡在线一区| 久久久久久久久岛国免费| 国产精品视频一二三区 | 奇米精品一区二区三区四区| 欧美亚洲一区二区在线| 亚洲女同ⅹxx女同tv| av在线一区二区三区| 中文字幕乱码一区二区免费| 亚洲精品成人悠悠色影视| 免费精品视频在线| 在线成人午夜影院| 天天av天天翘天天综合网色鬼国产 | 日韩精品一区二区三区中文精品| 亚洲国产综合人成综合网站| 在线观看视频一区| 欧美成人一区二区| 韩国av一区二区三区四区 | 亚洲精品日韩专区silk| 97国产一区二区| 亚洲精品视频在线看| 欧美日韩中文字幕一区二区| 亚洲高清免费观看| 日韩欧美国产一区在线观看| 精品一区精品二区高清| 国产日韩欧美电影| 91免费观看视频在线| 亚洲成人av一区| 精品免费视频一区二区| 粉嫩av一区二区三区粉嫩 | 日韩视频一区二区在线观看| 狠狠色丁香九九婷婷综合五月| 久久精品视频一区二区三区| 9色porny自拍视频一区二区| 亚洲第一在线综合网站| 精品国产一二三| 日本vs亚洲vs韩国一区三区二区| 欧美成人精品高清在线播放| 成人涩涩免费视频| 久久亚洲一区二区三区明星换脸| 婷婷久久综合九色国产成人| 精品国产污网站| 99精品欧美一区二区蜜桃免费 | 精品国产91乱码一区二区三区 | 亚洲美女免费在线| 欧美肥胖老妇做爰| 不卡一区二区在线| 美洲天堂一区二卡三卡四卡视频| 国产精品日日摸夜夜摸av| 欧美日韩在线播放一区| 粉嫩嫩av羞羞动漫久久久| 午夜一区二区三区视频| 国产精品日产欧美久久久久| 777午夜精品免费视频| 亚洲成a人片在线观看中文| 久久久久久毛片| 欧美日韩精品综合在线| 成人精品一区二区三区四区| 日韩精品视频网| 亚洲视频一区二区免费在线观看| 91最新地址在线播放| 美国十次了思思久久精品导航| 亚洲裸体在线观看| 国产欧美一区二区精品久导航| 91精品欧美综合在线观看最新| 色综合天天综合给合国产| 国产剧情一区在线| 日本不卡免费在线视频| 亚洲精品中文在线影院| 国产精品全国免费观看高清| 精品国产乱码久久久久久牛牛| 欧美日本一区二区三区四区| 91香蕉视频mp4| av福利精品导航| 国产乱对白刺激视频不卡| 免播放器亚洲一区| 青青草成人在线观看| 五月综合激情婷婷六月色窝| 一区二区国产盗摄色噜噜| 中文字幕一区二区三区在线不卡| 久久久精品日韩欧美| 欧美大片日本大片免费观看| 欧美一区日本一区韩国一区| 在线精品视频免费播放| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美亚洲国产一区在线观看网站 | 欧美国产欧美综合| 久久美女高清视频| 久久精品亚洲国产奇米99| 久久久精品国产99久久精品芒果| 2020国产精品久久精品美国| 精品福利在线导航| 欧美精品一区二区三区很污很色的 | 依依成人精品视频| 亚洲精品日韩专区silk| 亚洲综合成人在线| 亚洲午夜精品在线| 偷拍亚洲欧洲综合| 蜜桃视频在线观看一区二区| 久久爱另类一区二区小说| 久久99深爱久久99精品| 国产一区二区在线观看视频| 国产激情视频一区二区三区欧美| 成人免费视频一区| av亚洲精华国产精华| 色婷婷久久一区二区三区麻豆| 欧美日韩黄视频| 精品第一国产综合精品aⅴ| 国产欧美日韩精品一区| 亚洲欧美另类久久久精品2019| 亚洲成人动漫在线观看| 美国十次综合导航| kk眼镜猥琐国模调教系列一区二区| 一本到不卡精品视频在线观看| 欧美日韩在线播| 久久久噜噜噜久噜久久综合| 亚洲嫩草精品久久| 男人的j进女人的j一区| 成人午夜视频福利| 欧美日韩一区二区三区四区五区| 欧美成人一区二区三区| 综合av第一页| 久久精品国产精品亚洲红杏| 99re亚洲国产精品| 日韩欧美一区二区免费| 成人免费在线观看入口| 免费成人av资源网| 色一情一伦一子一伦一区| 亚洲精品一区二区三区蜜桃下载 | 粉嫩一区二区三区性色av| 欧美日韩精品免费| 国产精品久久久久久妇女6080| 日韩精品1区2区3区| 99精品久久只有精品| 精品国产伦一区二区三区免费|