An indirect branch can be useful to make a conditional branch, especially a multi-way branch. For instance, based on program input, a value could be looked up in a jump table of pointers to code for handling the various cases implied by the data value. The data value could be added to the address of the table, with the result stored in a register. An indirect jump could then be made based on the value of that register, efficiently dispatching program control to the code appropriate to the input.
In a similar manner, subroutine call instructions can be indirect, with the address of the subroutine to be called specified in a register or memory location.
SPARC: jmpl %o7
MIPS: jmpl %ra
X86: jmp %eax
ARM: mov pc, r2
IA64: br.ret.sptk.few rp
US Patent Issued to Apple on Oct. 8 for "Indirect Branch Target Predictor That Prevents Speculation If Mispredict Is Expected" (California, Massachusetts Inventors)
Oct 08, 2013; ALEXANDRIA, Va., Oct. 8 -- United States Patent no. 8,555,040, issued on Oct. 8, was assigned to Apple Inc. (Cupertino,...