CBNZ
Compare and branch on nonzero
This instruction 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.
0
1
1
0
1
0
1
0
CBNZ <Wt>, <label>
1
CBNZ <Xt>, <label>
constant integer t = UInt(Rt);
constant integer datasize = 32 << UInt(sf);
constant bits(64) offset = SignExtend(imm19:'00', 64);
<Wt>
Is the 32-bit name of the general-purpose register to be tested, encoded in the "Rt" field.
<label>
Is the program label to be conditionally branched to. Its offset from the address of this instruction, in the range +/-1MB, is encoded as "imm19" times 4.
<Xt>
Is the 64-bit name of the general-purpose register to be tested, encoded in the "Rt" field.
constant boolean branch_conditional = TRUE;
constant bits(datasize) operand1 = X[t, datasize];
if !IsZero(operand1) then
BranchTo(PC64 + offset, BranchType_DIR, branch_conditional);
else
BranchNotTaken(BranchType_DIR, branch_conditional);