[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The Xtensa assembler will automatically align certain instructions, both to optimize performance and to satisfy architectural requirements.
When the --target-align
command-line option is enabled
(see section Command Line Options), the assembler attempts
to widen density instructions preceding a branch target so that the
target instruction does not cross a 4-byte boundary. Similarly, the
assembler also attempts to align each instruction following a call
instruction. If there are not enough preceding safe density
instructions to align a target, no widening will be performed. This
alignment has the potential to reduce branch penalties at some expense
in code size. The assembler will not attempt to align labels with the
prefixes .Ln
and .LM
, since these labels are used for
debugging information and are not typically branch targets.
The LOOP
family of instructions must be aligned on either a 1 or
2 mod 4 byte boundary. The assembler knows about this restriction and
inserts the minimal number of 2 or 3 byte no-op instructions
to satisfy it. When no-op instructions are added, any label immediately
preceding the original loop will be moved in order to refer to the loop
instruction, not the newly generated no-op instruction.
Similarly, the ENTRY
instruction must be aligned on a 0 mod 4
byte boundary. The assembler satisfies this requirement by inserting
zero bytes when required. In addition, labels immediately preceding the
ENTRY
instruction will be moved to the newly aligned instruction
location.