From the PPC ISA (PDF Link), bl
is:
bits value
0-5 18
6-29 LI
30 AA (0)
31 LK (1)
The LK
bit being set indicates that the next instruction address should be placed into the link register. When AA
is 0
, the branch target address is the sum of LI << 2
, sign extended, with the address of the current instruction. So for you, since you want to jump to 0x14
and the current location is 0xC
, you just want to put 0x14 - 0xC == 0x8
into the register. Chopping off the two bottom zeroes (to account for the instruction doing the opposite operation at runtime) leaves you with an encoding LI == 0x2
. So finally, the encoding is:
18 LI AA LK
10010 000000000000000000000010 0 1