cpop
Count set bits
This instruction is defined by:
Synopsis
This instructions 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.
Execution
-
Pruned, XLEN == 64
-
Original
XReg bitcount = 0;
XReg rs1_val = X[rs1];
for (U32 i = 0; i < 64; i++) {
if (rs1_val[i] == 1'b1) {
bitcount = 1;
}
}
X[rd] = bitcount;
if (implemented?(ExtensionName::B) && (CSR[misa].B == 1'b0)) {
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
}
XReg bitcount = 0;
XReg rs1_val = X[rs1];
for (U32 i = 0; i < xlen(); i++) {
if (rs1_val[i] == 1'b1) {
bitcount = bitcount + 1;
}
}
X[rd] = bitcount;