Next: Special Accessors, Previous: RTL Classes, Up: RTL
表达式的操作数用宏XEXP
、XINT
、XWINT
和XSTR
访问。
所有这些宏都有两个参数:一个为表达式指针(RTX),
另一个为操作数序号 ( 从0 开始计算 )。如:
XEXP (x, 2)
表示以表达式方式访问表达式x的第2个操作数。
XINT (x, 2)
表示以整数方式访问x
的第2个操作数。
XSTR
表示以字符串方式访问。
任何一个操作数都能以整数方式、表达式方式或字符串方式来访问, 但必须根据存贮在操作数中的实际值选择正确的访问方式。 这可根据表达式的代码而获得,同样也可表达式代码获得操作数的个数。
例如:若x是subreg
表达式,通过表达式代码可知它有二个操作数,
这两个操作数的访问应该是XEXP (
x, 0)
和XINT (
x, 1)
,
若写成XINT (
x, 0)
,那么,你得到的表达式地址将被强制成整数,
偶尔可能会需要这样做,但在这种情况下用(int) XEXP (
x, 0)
表示要更好。
同样写成XEXP (
x, 1)
也不会导致编译错误,
它将返回强制为表达式指针而实际为整数的1号操作数,在运行中访问该指针时,
这可能会导致出错。同样,你也可以写成XEXP (
x, 28)
,
但这超出了此表达式的存贮边界,所得到的将是一个预料不到的结果。
对向量操作数的访问较为复杂些,可用XVEC
宏来获取向量指针本身,
XVECEXP
和XVECLEN
宏访问一个向量的元素和长度。
XVEC (
exp,
idx)
XVECLEN (
exp,
idx)
int
。
XVECEXP (
exp,
idx,
eltnum)
需要由你来确保eltnum不为负,并且小于XVECLEN (
exp,
idx)
。
在本节中所定义的所有宏定义都被扩展成左值, 因而也可用于对操作数、长度和向量元素赋值。