GNU Compiler Collection (GCC) Internals: Constraints

Next: Standard Names, Previous: Predicates, Up: Machine Desc   [Contents][Index]


16.8 Operand Constraints

Each match_operand in an instruction pattern can specify constraints for the operands allowed. The constraints allow you to fine-tune matching within the set of operands allowed by the predicate.

Constraints can say whether an operand may be in a register, and which kinds of register; whether the operand can be a memory reference, and which kinds of address; whether the operand may be an immediate constant, and which possible values it may have. Constraints can also require two operands to match. Side-effects aren’t allowed in operands of inline asm, unless ‘<’ or ‘>’ constraints are used, because there is no guarantee that the side-effects will happen exactly once in an instruction that can update the addressing register.

• Simple Constraints:    Basic use of constraints.
• Multi-Alternative:    When an insn has two alternative constraint-patterns.
• Class Preferences:    Constraints guide which hard register to put things in.
• Modifiers:    More precise control over effects of constraints.
• Machine Constraints:    Existing constraints for some particular machines.
• Disable Insn Alternatives:    Disable insn alternatives using attributes.
• Define Constraints:    How to define machine-specific constraints.
• C Constraint Interface:    How to test constraints from C code.