“indirect branch” means “branching into value of register”. Usual branching jumps to the address computed from argument value and PC – PC relative address. So, there is offset limitation. But, ‘indirect jump’ can go to anywhere within supported address – usually, register size == instruction domain size == supporting memory size.
Here ARM example.
BX LR, LDR PC, XX, ADD PC, XX, XX
Then, which case can be interpreted to ‘indirect branch’ in C/C++ – Yes, it’s totally dependent on compiler. We just assume general case?
* Return from function call. (BX LR) * Function call by "function pointer" (LDR PC, XX) - using function pointer explicitly. - using virtual function pointer table of class. ... anything else???