Assembler directives are instructions to the assembler to perform various bookkeeping tasks, storage reservation, and other control functions. To distinquish them from other instructions, directive names begin with a period. Table 5-1 lists the assembler directives by category.
Category | Directives |
Compiler-Use-Only Directives |
.bgnb
.endb .file .gjsrlive .gjsrsaved .lab .livereg .loc .option .ugen .vreg |
Location Control Directives |
.align
.data .rdata .sdata .space .text |
Symbol Declaration Directives |
.extern
.globl .struct symbolic equate .weakext |
Routine Entry Point Definition Directives |
.aent
.ent |
Data Storage Directives |
.ascii
.asciiz .byte .comm .double .d_floating .extended .float .f_floating .gprel32 .g_floating .lcomm .lit4 .lit8 .long .quad .s_floating .t_floating .word .x_floating |
Repeat Block Directives |
.endr
.repeat |
Assembler Option Directive | .set |
Procedure Attribute Directives |
.edata
.eflag .end .fmask .frame .mask .prologue .save_ra |
Version Control Directive | .verstamp |
Scheduling and Architecture Subset
Directives |
.arch
.tune |
The following list contains descriptions of the assembly directives (in
alphabetical order):
If the .align directive advances the location counter, the assembler fills the skipped bytes with zeros in data sections and nop instructions in text sections.
Normally, the .word, .long, .quad, .float, .double, .extended, .d_floating, .f_floating, .g_floating, .s_floating, .t_floating, and .x_floating directives automatically align their data appropriately. For example, .word does an implicit .align 1, and .double does an implicit .align 3.
You can disable the automatic alignment feature with .align 0. The assembler reinstates automatic alignment at the next .text, .data, .rdata, or .sdata directive that it encounters.
Labels immediately preceding an automatic or explicit alignment are also realigned. For example,
foo: .align 3
.word 0
is the same as
.align 3
foo: .word 0
The operands for the .byte directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is an 8-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The operands for the .d_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 64-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .d_floating directive automatically aligns its data and any preceding labels on a double-word boundary. You can disable this feature with the .align 0 directive .
If flag is zero, the assembler adds all subsequent data to the .xdata section.
If flag is 1 or 2, the assembler creates a function table entry for the next .ent directive. The function table entry contains the language-specific handler (lang-handler) and data (relocatable-expression or constant-expression).
The lex-level operand indicates the number of procedures that statically surround the current procedure. This operand is only informational. It does not affect the assembly process; the assembler ignores it.
The operands for the .f_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 32-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .f_floating directive automatically aligns its data and preceding labels on a longword boundary. You can disable this feature by using the .align 0 directive.
You must use .ent before .fmask, and you can use only one .fmask for each .ent. Space should be allocated for those registers specified in the .fmask.
You must use .ent before .frame, and you can use only one .frame for each .ent. No stack traces can be done in the debugger without the .frame directive.
The operands for the .g_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 64-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .g_floating directive automatically aligns its data and any preceding labels on a quadword boundary. You can disable this feature with the .align 0 directive.
The operands for the .gprel32 directive can optionally have the following form:
addressVal [ : addressRep ]
The addressVal is the address value. The optional addressRep is a non-negative expression that specifies how many times to replicate the value of addressVal. The expression value (addressVal) and repetition count (addressRep) must be absolute.
The .gprel32 directive automatically aligns its data and preceding labels on a longword boundary. You can disable this feature with the .align 0 directive.
The assembler puts bss symbols in one of two bss areas. If the defined size is less than or equal to the size specified by the assembler or compiler's -G command line option, the assembler puts the symbols in the sbss area.
To avoid unsafe optimizations by the reorganizer, .livereg notes to the assembler those registers that are live before a jump. The directive .livereg takes two arguments, int_bitmask and fp_bitmask, which are 32-bit bitmasks with a bit turned on for each register that is live before a jump. The most significant bit corresponds to register $0 (which is opposite to that used in other assembly directives, for example, .mask and .fmask). The first bitmap indicates live integer registers and the second indicates live floating-point registers.
When present, this directive causes the assembler to be more conservative and to preserve the indicated register contents. If omitted, the assembler assumes the default masks. The .livereg directive can be coded before any of the following instructions: bsr, jsr, ret, jmp, and call_pal callsys.
The operands for the .long directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 32-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The
.long
directive automatically aligns its data and preceding labels
on a longword boundary. You can disable this feature with the
.align 0
directive.
You must use .ent before .mask, and you can use only one .mask for each .ent. Space should be allocated for those registers specified in the .mask.
A flag of zero indicates that the procedure does not use $gp; the caller does not need to set up $pv prior to calling the procedure or restore $gp on return from the procedure.
A flag of one indicates that the procedure does use $gp; the caller must set up $pv prior to calling the procedure and restore $gp on return from the procedure.
If flag is not specified, the behavior is as if a value of one was specified.
The operands for the .quad directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 64-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .quad directive automatically aligns its data and preceding labels on a quadword boundary. You can disable this feature with the .align 0 directive.
The noreorder option prevents the assembler from reordering machine-language instructions. If a machine-language instruction violates the hardware pipeline constraints, the assembler issues a warning message.
The nomacro option causes the assembler to print a warning whenever an assembler operation generates more than one machine-language instruction. You must select the noreorder option before using the nomacro option; otherwise, an error results.
When you use the noat option and an assembler operation requires the $at register, the assembler issues a warning message; however, the noat option does permit source programs to use $at without warnings being issued.
The move option cancels the effect of nomove.
The novolatile option cancels the effect of the volatile option.
The operands for the .s_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 32-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .s_floating directive automatically aligns its data and preceding labels on a longword boundary. You can disable this feature with the .align 0 directive.
The operands for the .t_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 64-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .t_floating directive automatically aligns its data and any preceding labels on a quadword boundary. You can disable this feature with the .align 0 directive.
The operands for the .word directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 16-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .word directive automatically aligns its data and preceding labels on a word boundary. You can disable this feature with the .align 0 directive.
The operands for the .x_floating directive can optionally have the following form:
expressionVal [ : expressionRep ]
The expressionVal is a 128-bit value. The optional expressionRep is a non-negative expression that specifies how many times to replicate the value of expressionVal. The expression value (expressionVal) and repetition count (expressionRep) must be absolute.
The .x_floating directive automatically aligns its data and preceding labels on an octaword boundary. You can disable this feature with the .align 0 directive.