unsigned int popcount(unsigned int n) { return (n &= n - 1u) ? (1u + popcount(n)) : 0u; }
popcount: mov eax, -1 .LBB0_1: lea ecx, [rdi - 1] inc eax and ecx, edi mov edi, ecx jne .LBB0_1 ret
popcount: blsr edi, edi popcnt eax, edi ret
return n ? (1u + popcount(n & n - 1u)) : 0u;