2#include "../uint128/uint128.hpp"
3#include "../uint256/uint256.hpp"
15template <>
constexpr inline size_t count_leading_zeros<uint32_t>(uint32_t
const& u)
17 return static_cast<size_t>(__builtin_clz(u));
20template <>
constexpr inline size_t count_leading_zeros<uint64_t>(uint64_t
const& u)
22 return static_cast<size_t>(__builtin_clzll(u));
25template <>
constexpr inline size_t count_leading_zeros<uint128_t>(uint128_t
const& u)
27 auto hi =
static_cast<uint64_t
>(u >> 64);
29 return static_cast<size_t>(__builtin_clzll(hi));
31 auto lo =
static_cast<uint64_t
>(u);
32 return static_cast<size_t>(__builtin_clzll(lo)) + 64;
35template <>
constexpr inline size_t count_leading_zeros<uint256_t>(
uint256_t const& u)
37 if (u.data[3] != 0U) {
40 if (u.data[2] != 0U) {
43 if (u.data[1] != 0U) {
46 if (u.data[0] != 0U) {
Definition: uint256.hpp:25
Definition: field2_declarations.hpp:6
constexpr size_t count_leading_zeros(T const &u)