cbnz

Compare and Branch Not Zero

CBNZ <Wt>, <label>

Branches if register is not zero.

Pseudocode Operation

if Wt != 0 then PC ← PC + (imm19 << 2)

Example

CBNZ w3, label

Encoding

Binary Layout
0
31
011010
30:25
1
24
imm19
23:5
Rt
4:0
 
Format Branch
Opcode 0x35000000
Extension Base

Operands

  • Wt
    Reg
  • label
    Label

Related

Other forms of cbnz

  • cbnz Compare and Branch Not Zero (64-bit)
  • cbnz Compare and Branch Non-Zero (Thumb)

Across architectures

Compare and Branch : how x86, ARM, RISC-V, and PowerISA each do this.

More in Base

Reference

Instruction Forms

Encoding Instruction ISA Bit pattern
0x35000000 CBNZ <Wt>, <label> A64 0 | 011010 | 1 | imm19 | Rt
0xB5000000 CBNZ <Xt>, <label> A64 1 | 011010 | 1 | imm19 | Rt

Description

Compare and Branch on Nonzero compares the value in a register with zero, and conditionally branches to a label at a PC-relative offset if the comparison is not equal. It provides a hint that this is not a subroutine call or return. This instruction does not affect the condition flags.

Operation

bits(datasize) operand1 = X[t, datasize];
if IsZero(operand1) == FALSE then
    BranchTo(PC64 + offset, BranchType_DIR, TRUE);
else
    BranchNotTaken(BranchType_DIR, TRUE);