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