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.