Next: Expressions, Up: Insn Attributes
14.19.1 Defining Attributes and their Values
The define_attr
expression is used to define each attribute required
by the target machine. It looks like:
(define_attr name list-of-values default)
name is a string specifying the name of the attribute being defined.
list-of-values is either a string that specifies a comma-separated list of values that can be assigned to the attribute, or a null string to indicate that the attribute takes numeric values.
default is an attribute expression that gives the value of this attribute for insns that match patterns whose definition does not include an explicit value for this attribute. See Attr Example, for more information on the handling of defaults. See Constant Attributes, for information on attributes that do not depend on any particular insn.
For each defined attribute, a number of definitions are written to the insn-attr.h file. For cases where an explicit set of values is specified for an attribute, the following are defined:
- A `#define' is written for the symbol `HAVE_ATTR_name'.
- An enumerated class is defined for `attr_name' with elements of the form `upper-name_upper-value' where the attribute name and value are first converted to uppercase.
- A function `get_attr_name' is defined that is passed an insn and returns the attribute value for that insn.
For example, if the following is present in the md file:
(define_attr "type" "branch,fp,load,store,arith" ...)
the following lines will be written to the file insn-attr.h.
#define HAVE_ATTR_type enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, TYPE_STORE, TYPE_ARITH}; extern enum attr_type get_attr_type ();
If the attribute takes numeric values, no enum
type will be
defined and the function to obtain the attribute's value will return
int
.