10.3 Access to Operands
Operands of expressions are accessed using the macros
XSTR. Each of these macros takes
two arguments: an expression-pointer (RTX) and an operand number
(counting from zero). Thus,
XEXP (x, 2)
accesses operand 2 of expression x, as an expression.
XINT (x, 2)
accesses the same operand as an integer.
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 x is a
subreg expression, you know that it has
two operands which can be correctly accessed as
, 1). If you did
, 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
(int) XEXP (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
, 28) either,
but this will access memory past the end of the expression with
- Access the vector-pointer which is operand number idx in exp.
- Access the length (number of elements) in the vector which is
in operand number idx in exp. This value is an
- Access element number eltnum in the vector which is
in operand number idx in exp. This value is an RTX.
It is up to you to make sure that eltnum is not negative and is less than
All the macros defined in this section expand into lvalues and therefore can be used to assign the operands, lengths and vector elements as well as to access them.