Namespace std::bit
This namespace contains bit-manipulation functions that can make the ACT description more legible.
export template<pint N, W> function repeat(int<W> x) : int<N*W>;
This concatenates N
copies of the W
-bit input x
to create an output of width N*W
.
export template<pint W, W2> function sign_extend(int<W> x) : int<W2>;
This sign-extends the integer x
(bitwidth W
) to bitwidth W2
. W2
must be strictly larger than W
.
export template<pint W> function rol(int<W> x) : int<W>;
Left rotate the W
bit integer by 1. The MSB of x
becomes the LSB of the result (rotating shift).
export template<pint W> function ror(int<W> x) : int<W>;
Right rotate x
by one, with the LSB of x
becoming the MSB of the result.
export template<pint W> function find_msb_pos(int<W> x) : int<std::ceil_log2(W)>;
This function assumes that x
is non-zero, and returns the bit position of the most significant one in x
.
export template<pint W> function popcount(int<W> x) : int<std::ceil_log2(W+1)>;
This function returns a count of the number of bits of x
that are set to 1.