as: Xtensa Branch Relaxation

1 
1 9.55.4.1 Conditional Branch Relaxation
1 ......................................
1 
1 When the target of a branch is too far away from the branch itself,
1 i.e., when the offset from the branch to the target is too large to fit
1 in the immediate field of the branch instruction, it may be necessary to
1 replace the branch with a branch around a jump.  For example,
1 
1          beqz    a2, L
1 
1    may result in:
1 
1          bnez.n  a2, M
1          j L
1      M:
1 
1    (The 'BNEZ.N' instruction would be used in this example only if the
1 density option is available.  Otherwise, 'BNEZ' would be used.)
1 
1    This relaxation works well because the unconditional jump instruction
1 has a much larger offset range than the various conditional branches.
1 However, an error will occur if a branch target is beyond the range of a
1 jump instruction.  'as' cannot relax unconditional jumps.  Similarly, an
1 error will occur if the original input contains an unconditional jump to
1 a target that is out of range.
1 
1    Branch relaxation is enabled by default.  It can be disabled by using
1 underscore prefixes (⇒Opcode Names Xtensa Opcodes.), the
DONTPRINTYET 11 '--no-transform' command-line option (⇒Command Line Options Xtensa
 Options.), or the 'no-transform' directive (*notetransform: Transform
1DONTPRINTYET 11 '--no-transform' command-line option (⇒Command Line Options Xtensa
 Options.), or the 'no-transform' directive (⇒transform Transform

 Directive.).
1