Language Implementation
7-79
7
Argument Categories
An argument category can be any of the following:
General-register is a register-resident value (e.g., a register
variable variable). Depending on the level of
optimization, this category can include a more
complex expression. During compilation, the
expression must evaluate to a register-resident
variable that is one of the operands in the
expression. For example, the expressions
x+0
and x*y/y both evaluate to x.
Memory is a memory-resident value.
General-register- indicates an expression that the compiler cannot
temporary evaluate to a single variable or constant. This
category includes most expressions containing an
operator. A common exception is an expression
in which the top-level operator implies
indirection (that is,
*, [ ], or ->). Such an
expression falls into the memory category.
Depending on the optimization level, the
general-register-temporary category can include
an expression in which the top-level operator is
an assignment to a register-resident variable.
Floating-point values can also fall into this
category.
Floating-point- indicates a floating-point expression that can be
register-temporary classified more efficiently into a floating-point
register than into a general register. This
category is available only on processors with
on-chip floating-point support.
Integer constant is a constant integer value. Depending on the
level of optimization, this category can include
an expression containing variable operands, if
the compiler can evaluate the expression to a