Home/Instructions/Count Leading Zeros
CLZ

RISC-V CLZ Instruction Details

Instruction ManualI-type (OP-IMM)

Count leading zero bits

Instruction Syntax

clz rd, rs1
Operand Breakdown
rd: x0–x31; receives the count, with writes to x0 discarded.
rs1: all XLEN bits participate; overlap with rd reads the source before writeback.
RV32/RV64, requiring Zbb. There is no immediate operand; imm[11:0]=011000000000 is a fixed instruction selector.
ZbbBit ManipulationInteger Operation

Instruction Behavior

clz is an RV32/RV64 Zbb instruction that scans rs1 from bit XLEN-1 toward bit 0 and writes the number of zeros before the first 1 to rd.

CLZ Decode And Execute Animation

Starts with machine-code field decoding, then shows operand reads, instruction-specific execution, and ISA-visible state update.

rd
rs1
clz
,
Execution Context

This example uses fixed initial register values and PC=0x2000; instruction fetch succeeds, with no asynchronous interrupt or extra extension checks. Exception branches stop ordinary commit; post-trap PC and handler state are EEI-dependent.

t1(x6)
0x00000014
31..20
19..15
14..12
11..7
6..0
011000000000
fixed imm[11:0]
00110
rs1
001
funct3
00101
rd
0010011
opcode
Execution Data Path
instruction
0x60031293
opcode
0010011 -> OP-IMM
funct3
001 -> CLZ
fixed imm[11:0]
011000000000 -> CLZ selector
rd / rs1
t0(x5) / t1(x6)=0x00000014
fixed imm[11:0]
011000000000 selects CLZ (not an arithmetic immediate)
zero-bit scan
Not computed
x5
t0(x5) = 0x00003001; pc = 0x00002000
Current Step

Concept Step: receive the 32-bit instruction encoding

The machine code is split by the current instruction format; the animation starts from encoding/decode.

encoding: 0x60031293
syntax : clz t0(x5), t1(x6)
Pending result: Not computed
Current architectural state
t0(x5) = 0x00003001; pc = 0x00002000

This animation shows ISA-visible decode and state changes, not any specific CPU pipeline, cache, prediction, or timing implementation.

Quick Understanding & Search Notes

clz is an RV32/RV64 Zbb instruction that scans rs1 from bit XLEN-1 toward bit 0 and writes the number of zeros before the first 1 to rd.

CLZ is an OP-IMM instruction in the Zbb basic bit-manipulation extension and operates on an XLEN-wide integer register value.
If the input is zero, the result is XLEN.

Common Usage Scenarios

clz leading-zero count

RV32/RV64 Zbb, x11=0x10: clz x10, x11 writes x10=27 on RV32 or x10=59 on RV64.

Pre-Use Checklist

Syntax Check
  • Confirm the current instruction format is I-type (OP-IMM).
  • Confirm the operand order matches the example.
Semantic Check
  • Ensure the destination register usage is compatible with the calling convention.
  • Confirm this is not the lower-level form of a pseudo-instruction expansion.

Pitfalls / Common Confusions

If the input is zero, the result is XLEN.

FAQ

Does clz access memory?

No. It reads integer register operands and writes rd only.

How does clz handle a zero input?

The count is XLEN. The entire XLEN-bit source register is examined.