Question about powerpc branch instructions
Hi~
I want to know about bl instruction and the difference between branch instructions. I found this code segment.
{{{
....
bl go_to_real
insrdi r18, r19, 32, 0
....
}}}
And I found the explanation about branch instructions in PowerISA 2.06 document.
{{{
b target_addr (AA=0 LK=0)
ba target_addr (AA=1 LK=0)
bl target_addr (AA=0 LK=1)
bla target_addr (AA=1 LK=1)
If AA=0 then the branch target address is the sum of LI || 0b00 sign-extended and the address of this instruction, with the high-order 32 bits of the branch target address set to 0 in 32-bit mode.
If AA=1 then the branch target address is the value LI || 0b00 sign-extended, with the high-order 32 bits of the branch target address set to 0 in 32-bit mode.
If LK=1 then the effective address of the instruction following the Branch instruction is placed into the Link Register. }}}
Questions
#1: Is there any special reason to concatenate 0b00 ? Why 0b00 ?? #2: Is b similar to the jmp in x86 ? and bl is similar to the call in x86 ?
Thanks in advance.
HongWoo.
Quoted 1 line · HongWoo Lee
#1: Is there any special reason to concatenate 0b00 ? Why 0b00 ??
Because instructions have to be aligned on 4 bytes boundaries ?
Quoted 1 line
#2: Is b similar to the jmp in x86 ? and bl is similar to the call in x86 ?
I'm not totally familiar with x86 but I "sounds" like it, though of course they can be (ab)used in some more subtle ways.
Cheers,
Ben.
Quoted 7 lines
Thanks in advance.
HongWoo.
_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://lists.ozlabs.org/listinfo/linuxppc-dev
Quoted 1 line · HongWoo Lee
#2: Is b similar to the jmp in x86 ?
Yes, specifically a relative near jmp.
Quoted 1 line
and bl is similar to the call in x86 ?
Sort of (and again, specifically a relative near call). Call on x86 pushes the return address on the stack, while bl on powerpc puts the return address in a special register (lr) that the called function has to save on the stack itself if it wants to call another function.
-Scott