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
Operands
-
Wt
Reg -
label
Label
Related
Other forms of cbnz
Across architectures
Compare and Branch : how x86, ARM, RISC-V, and PowerISA each do this.
More in Base
Reference
View in Arm A64 ISA Reference ↗
Arm A64 ISA
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);