Branch

I-Form

  • 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)

Pseudo-code:

if AA then NIA  <-iea EXTS(LI || 0b00)
else       NIA  <-iea CIA + EXTS(LI || 0b00)
if LK then LR <-iea  CIA + 4

Special Registers Altered:

LR                       (if LK=1)

Branch Conditional

B-Form

  • bc BO,BI,target_addr (AA=0 LK=0)
  • bca BO,BI,target_addr (AA=1 LK=0)
  • bcl BO,BI,target_addr (AA=0 LK=1)
  • bcla BO,BI,target_addr (AA=1 LK=1)

Pseudo-code:

if (mode_is_64bit) then M <- 0
else M <- 32
if ¬BO[2] then CTR <- CTR - 1
ctr_ok <- BO[2] | ((CTR[M:63] != 0) ^ BO[3])
cond_ok <- BO[0] | ¬(CR[BI+32] ^ BO[1])
if ctr_ok & cond_ok then
  if AA then NIA <-iea EXTS(BD || 0b00)
  else       NIA <-iea CIA + EXTS(BD || 0b00)
if LK then LR  <-iea  CIA + 4

Special Registers Altered:

CTR                    (if BO2=0)
LR                       (if LK=1)

Branch Conditional to Link Register

XL-Form

  • bclr BO,BI,BH (LK=0)
  • bclrl BO,BI,BH (LK=1)

Pseudo-code:

if (mode_is_64bit) then M <- 0
else M <- 32
if ¬BO[2]  then CTR <- CTR - 1
ctr_ok <- BO[2] | ((CTR[M:63] != 0) ^ BO[3])
cond_ok <- BO[0] | ¬(CR[BI+32] ^  BO[1])
if ctr_ok & cond_ok then NIA <-iea LR[0:61] || 0b00
if LK then LR <-iea CIA + 4

Special Registers Altered:

CTR                    (if BO2=0)
LR                       (if LK=1)

Branch Conditional to Count Register

XL-Form

  • bcctr BO,BI,BH (LK=0)
  • bcctrl BO,BI,BH (LK=1)

Pseudo-code:

cond_ok <- BO[0] | ¬(CR[BI+32] ^ BO[1])
if cond_ok then NIA <-iea CTR[0:61] || 0b00
if LK then LR <-iea CIA + 4

Special Registers Altered:

LR                     (if LK=1)

Branch Conditional to Branch Target Address Register

XL-Form

  • bctar BO,BI,BH (LK=0)
  • bctarl BO,BI,BH (LK=1)

Pseudo-code:

if (mode_is_64bit) then M <- 0
else M <- 32
if ¬BO[2] then CTR <- CTR - 1
ctr_ok <- BO[2]  | ((CTR[M:63] != 0) ^ BO[3])
cond_ok <- BO[0] | ¬(CR[BI+32] ^ BO[1])
if ctr_ok & cond_ok then NIA <-iea TAR[0:61]  || 0b00
if LK then LR <-iea  CIA + 4

Special Registers Altered:

CTR                    (if BO2=0)
LR                       (if LK=1)