Inside the body of a macro, the parameters can be referred to by their
name, prefixed with \. When the macro is
instantiated, parameter references will be expanded to the value of
the argument.
Parameters can be qualified in these ways:
Table
B7-18 Macro parameter qualifier
Parameter qualifier
Meaning
<name>:req
This marks the parameter as
required, it is an error to instantiate the macro
with a blank value for this parameter.
<name>:varag
This parameter consumes all
remaining arguments in the instantiation. If used,
this must be the last parameter.
<name>=<value>
Sets the default value for the
parameter. If the argument in the instantiation is
not provided or left blank, then the default value
will be used.
Operation
The .macro directive defines a new macro with name
macro_name, and zero or more named parameters. The body of the
macro extends to the matching .endm directive.
Once a macro is defined, it can be instantiated by using it like an
instruction mnemonic:
macro_name argument[,
argument]...
Inside a macro body, \@ expands to a counter value which is
unique to each macro instantiation. This can be used to create unique label names,
which will not interfere with other instantiations of the same macro.
The .exitm directive allows exiting a macro instantiation before
reaching the end.
Examples
// Macro for defining global variables, with the symbol binding, type and
// size set appropriately. The 'value' parameter can be omitted, in which
// case the variable gets an initial value of 0. It is an error to not
// provide the 'name' argument.
.macro global_int, name:req, value=0
.global \name
.type \name, %object
.size \name, 4
\name:
.word \value
.endm
.data
global_int foo
global_int bar, 42
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers of your data.