cpop

Count set bits

Counts the number of 1’s (i.e., set bits) in the source register.

Software Hint
This operations is known as population count, popcount, sideways sum,
bit summation, or Hamming weight.

The GCC builtin function `__builtin_popcount (unsigned int x)` is
implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
function `__builtin_popcountl (unsigned long x)` for LP64 is
implemented by cpop on RV64.

Assembly format

cpop xd, xs1

Decode Variables

Bits<5> xs1 = $encoding[19:15];
Bits<5> xd = $encoding[11:7];

Execution

XReg bitcount = 0;
XReg xs1_val = X[xs1];
for (U32 i = 0; i < xlen(); i++) {
  if (xs1_val[i] == 1'b1) {
    bitcount = bitcount + 1;
  }
}
X[xd] = bitcount;

Encoding

svg

Defining extension

Zbb

Access

M

Always

Containing profiles

  • Mandatory: RVA22S64, RVA22U64, RVA23S64, RVA23U64, RVB23S64, RVB23U64

  • Optional: None