Hi.
> From: Hans-Peter.
> Date: 5 Nov 2011 г., 5:24:20:
>> +(define_constraint "S"
>> + "PIC-constructs for symbols."
>> + (and (match_test "flag_pic")
>> + (match_code "const")
>> + (match_test "cris_valid_pic_const (op, false)")))
> Can you really have other than two operands to the RTL "and"
> these days? (I guess that's changed to "yes"; if not, the gen*
> programs should have alerted. Unless there's some bug.)
Yes, it is possible.
de facto - code of satisfies_constraint_S function is math with
define_constraint "S".
static inline bool
satisfies_constraint_S (rtx op)
{
return (
#line 155 "../../gcc/gcc/config/cris/constraints.md"
(flag_pic)) && ((GET_CODE (op) == CONST) && (
#line 157 "../../gcc/gcc/config/cris/constraints.md"
(cris_valid_pic_const (op, false))));
}
de jure:
16.8.7 Defining Machine-Specific Constraints
....
define_constraint name docstring exp
... exp is an RTL expression, obeying the same rules as the RTL
expressions in predicate definitions. See Section 16.7.2 [Defining Predicates],
page 302, for details. ....
16.7.2 Defining Machine-Specific Predicates
....
AND
IOR
NOT
IF_THEN_ELSE
... As in Common Lisp, you may give an AND or IOR expression
an arbitrary number of arguments; this has exactly the same effect as
writing a chain of two-argument AND or IOR expressions.
Anatoly.