Annotate noexcept and constexpr with HEDLEY, and add interval containment, ChaCha, and the dyadic range tables.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
875f09fec1
commit
0d8a5a8131
97 changed files with 9212 additions and 1159 deletions
|
|
@ -6,6 +6,8 @@
|
|||
#ifndef LIBDPF_INCLUDE_GROTTO_FIXEDPOINT_MUL_HPP__
|
||||
#define LIBDPF_INCLUDE_GROTTO_FIXEDPOINT_MUL_HPP__
|
||||
|
||||
#include "hedley/hedley.h"
|
||||
|
||||
#ifndef LIBDPF_INCLUDE_DPF_FIXEDPOINT_HPP__
|
||||
#include "grotto/fixedpoint.hpp"
|
||||
#endif
|
||||
|
|
@ -106,6 +108,7 @@ namespace detail
|
|||
|
||||
inline constexpr std::size_t fixed_mul_buf_limbs = 12;
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void mask_to_bits(std::uint64_t * limbs, std::size_t nlimbs, unsigned bits) noexcept
|
||||
{
|
||||
if (bits >= nlimbs * 64u)
|
||||
|
|
@ -129,11 +132,13 @@ constexpr void mask_to_bits(std::uint64_t * limbs, std::size_t nlimbs, unsigned
|
|||
}
|
||||
}
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr bool test_bit(const std::uint64_t * limbs, unsigned bit) noexcept
|
||||
{
|
||||
return ((limbs[bit / 64u] >> (bit % 64u)) & 1u) != 0u;
|
||||
}
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void fill_ones(std::uint64_t * limbs, unsigned from, unsigned to) noexcept
|
||||
{
|
||||
for (unsigned bit = from; bit < to; )
|
||||
|
|
@ -149,6 +154,7 @@ constexpr void fill_ones(std::uint64_t * limbs, unsigned from, unsigned to) noex
|
|||
}
|
||||
}
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void sign_extend_range(std::uint64_t * limbs, unsigned from_bits, unsigned to_bits) noexcept
|
||||
{
|
||||
if (to_bits <= from_bits || from_bits == 0u)
|
||||
|
|
@ -162,6 +168,7 @@ constexpr void sign_extend_range(std::uint64_t * limbs, unsigned from_bits, unsi
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void store_raw_limbs(const T & value, std::uint64_t out[4]) noexcept
|
||||
{
|
||||
out[0] = out[1] = out[2] = out[3] = 0;
|
||||
|
|
@ -192,6 +199,7 @@ constexpr void store_raw_limbs(const T & value, std::uint64_t out[4]) noexcept
|
|||
|
||||
/// Low `dest_bits` of `value`, sign-extended when `value` is a narrower signed integer.
|
||||
template <typename T>
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void reduce_operand(const T & value, unsigned src_bits, bool is_signed,
|
||||
unsigned dest_bits, std::uint64_t * dest, unsigned nlimbs) noexcept
|
||||
{
|
||||
|
|
@ -215,6 +223,7 @@ constexpr void reduce_operand(const T & value, unsigned src_bits, bool is_signed
|
|||
}
|
||||
|
||||
/// Product modulo `2^(64*nlimbs)`, using exactly `nlimbs` limbs of each operand.
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void mul_low_limbs(std::uint64_t * out, const std::uint64_t * lhs,
|
||||
const std::uint64_t * rhs, unsigned nlimbs) noexcept
|
||||
{
|
||||
|
|
@ -235,6 +244,7 @@ constexpr void mul_low_limbs(std::uint64_t * out, const std::uint64_t * lhs,
|
|||
}
|
||||
}
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void shift_left_limbs(std::uint64_t * limbs, std::size_t nlimbs, unsigned shift) noexcept
|
||||
{
|
||||
if (shift == 0u)
|
||||
|
|
@ -261,6 +271,7 @@ constexpr void shift_left_limbs(std::uint64_t * limbs, std::size_t nlimbs, unsig
|
|||
}
|
||||
}
|
||||
|
||||
HEDLEY_NO_THROW
|
||||
constexpr void shift_right_limbs(std::uint64_t * limbs, std::size_t nlimbs, unsigned shift) noexcept
|
||||
{
|
||||
if (shift == 0u)
|
||||
|
|
@ -288,6 +299,7 @@ constexpr void shift_right_limbs(std::uint64_t * limbs, std::size_t nlimbs, unsi
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
HEDLEY_NO_THROW
|
||||
constexpr T limbs_to_integral(const std::uint64_t * limbs) noexcept
|
||||
{
|
||||
if constexpr (std::is_same_v<T, uint256_t>)
|
||||
|
|
@ -331,6 +343,7 @@ template <unsigned IntegerBits,
|
|||
typename LhsIntegral,
|
||||
unsigned RhsFractionalBits,
|
||||
typename RhsIntegral>
|
||||
HEDLEY_NO_THROW
|
||||
constexpr auto fixed_mul(
|
||||
fixedpoint<LhsFractionalBits, LhsIntegral> lhs,
|
||||
fixedpoint<RhsFractionalBits, RhsIntegral> rhs) noexcept
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue