Next: , Previous: RTL Classes, Up: RTL


10.3 访问操作数

表达式的操作数用宏XEXPXINTXWINTXSTR访问。 所有这些宏都有两个参数:一个为表达式指针(RTX), 另一个为操作数序号 ( 从0 开始计算 )。如:

     XEXP (x, 2)

表示以表达式方式访问表达式x的第2个操作数。

     XINT (x, 2)

表示以整数方式访问x的第2个操作数。 XSTR表示以字符串方式访问。

任何一个操作数都能以整数方式、表达式方式或字符串方式来访问, 但必须根据存贮在操作数中的实际值选择正确的访问方式。 这可根据表达式的代码而获得,同样也可表达式代码获得操作数的个数。

例如:若xsubreg表达式,通过表达式代码可知它有二个操作数, 这两个操作数的访问应该是XEXP (x, 0)XINT (x, 1), 若写成XINT (x, 0),那么,你得到的表达式地址将被强制成整数, 偶尔可能会需要这样做,但在这种情况下用(int) XEXP (x, 0)表示要更好。 同样写成XEXP (x, 1) 也不会导致编译错误, 它将返回强制为表达式指针而实际为整数的1号操作数,在运行中访问该指针时, 这可能会导致出错。同样,你也可以写成XEXP (x, 28), 但这超出了此表达式的存贮边界,所得到的将是一个预料不到的结果。

对向量操作数的访问较为复杂些,可用XVEC宏来获取向量指针本身, XVECEXPXVECLEN宏访问一个向量的元素和长度。

XVEC (exp, idx)
获得exp中第idx个操作数的向量指针。


XVECLEN (exp, idx)
获得exp中第idx个操作数(为向量操作数)的向量长度(元素个数), 其值是int


XVECEXP (exp, idx, eltnum)
访问exp中第idx个操作数(为向量操作数)的第eltnum个元素, 其值是一个RTX。

需要由你来确保eltnum不为负,并且小于XVECLEN (exp, idx)

在本节中所定义的所有宏定义都被扩展成左值, 因而也可用于对操作数、长度和向量元素赋值。