Skip to contentSkip to conversation

Question about powerpc branch instructions

DISCUSSION HongWoo Lee 3 participants 3 messages Aug 7, 2009

lore
Share & tools
lore
#0 lore raw

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.

#1 lore raw
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

#2 lore raw
In reply to HongWoo Lee
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