Name Spaces

There are three classes of names in the Itanium(TM) architecture assembly language:

The assembler places names in three separate name spaces, according to their class. A name may not be defined twice in the same namespace, but it may be defined once in each namespace. When a name is defined in both the register and symbol namespaces, the register name takes precedence over the symbol unless the identifier is “protected” by terminating it with the # operator; this forces the assembler to look up the identifier in the symbol namespace.

The # operator in conjunction with a symbol is legal only when the symbol is an operand.

The following examples illustrate the correct use of the # operator:

r5:           //label named r5, where label is the symbol name

movl r4=r5#   //;moves the r5 label address to register r4

.global r5#   //declares label r5 as global

The # operator is unnecessary and illegal when included in the symbol definition, as shown:

r5#:          //illegal