34 offset_total += window_offset;
42 projective[0] = window_offset;
43 for (
size_t k = 1; k < ts; ++k) {
44 projective[k] = projective[k - 1] + window_step;
47 for (
size_t k = 0; k < ts; ++k) {
52 for (
size_t i = 0; i < wb; ++i) {
53 window_step = window_step.dbl();
69 constexpr uint64_t NUM_LIMB_BITS = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
72 auto limb_pair = [&](
const uint256_t& val,
size_t low_limb_idx) {
74 bb::fr((val >> ((low_limb_idx + 1) * NUM_LIMB_BITS)) & LIMB_MASK) };
82 return limb_pair(x_uint, 0);
84 return limb_pair(x_uint, 2);
86 return limb_pair(y_uint, 0);
88 return limb_pair(y_uint, 2);
96 const size_t index =
static_cast<size_t>(
key[0]);
101template <table::AxisIndex axis,
size_t window_
idx>
115 for (
size_t k = 0; k < TS; ++k) {
133template <table::AxisIndex axis> generate_fn_ptr generate_fn_for_window(
size_t window_idx)
135 static constexpr auto fns = []() {
138 ((arr[Is] = &table::generate_basic_table<axis, Is>), ...);
142 return fns[window_idx];
146template <table::AxisIndex axis>
150 return generate_fn_for_window<axis>(window_idx)(id, table_index);
164template <table::AxisIndex axis> get_values_fn_ptr get_values_fn_for_window(
size_t window_idx)
166 static constexpr auto fns = []() {
169 ((arr[Is] = &table::get_values<axis, Is>), ...);
173 return fns[window_idx];
176get_values_fn_ptr lookup_get_values(
table::AxisIndex axis,
size_t window_idx)
181 return get_values_fn_for_window<table::AXIS_XLO>(window_idx);
183 return get_values_fn_for_window<table::AXIS_XHI>(window_idx);
185 return get_values_fn_for_window<table::AXIS_YLO>(window_idx);
187 return get_values_fn_for_window<table::AXIS_YHI>(window_idx);
205 for (
size_t i = 0; i < num_windows; ++i) {
206 const size_t window_idx = start_window + i;
#define BB_ASSERT_LT(left, right,...)
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
static element infinity()
static void batch_normalize(element *elements, size_t num_elements) noexcept
static constexpr affine_element affine_one
G1::affine_element AffineElement
static std::array< bb::fr, 2 > get_values(std::array< uint64_t, 2 > key)
Native lookup callback used by BasicTable::get_values_from_key. axis_window_packed encodes the window...
static std::array< bb::fr, 2 > extract_axis(const AffineElement &point, AxisIndex axis)
Split an affine point into the (limb_a, limb_b) pair for the requested axis. Used by the BasicTable g...
static std::once_flag init_flag
static MultiTable get_multitable(MultiTableId id, AxisIndex axis, bool is_lo)
Construct one of the 10 MultiTables described in the file-header docstring. is_lo = true chains windo...
static AffineElement cached_total_offset
static void init_tables()
Precompute the 32 × 256 native points (idempotent, thread-safe). The (limb_a, limb_b) pairs for each ...
static AffineElement total_offset()
Sum of all per-window offsets (2^0 + 2^1 + ... + 2^31) · H. Subtracted from the chain-add result of t...
static BasicTable generate_basic_table_runtime(BasicTableId id, size_t window_idx, size_t table_index)
Runtime dispatch helper used by plookup_tables.cpp::create_basic_table. Selects table contents using ...
static constexpr BasicTableId axis_start_id(AxisIndex axis)
Maps a per-axis BasicTableId range start to its AxisIndex; used by the create_basic_table dispatch.
static BasicTable generate_basic_table(BasicTableId id, size_t table_index)
Construct one BasicTable instance for (axis, window_idx). id is the BasicTableId assigned by the call...
static std::array< std::array< AffineElement, TABLE_SIZE_BIG >, NUM_WINDOWS > native_table
field< Bn254FrParams > fr
constexpr std::span< const typename Group::affine_element > get_precomputed_generators()
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
A basic table from which we can perform lookups (for example, an xor table)
bb::fr column_2_step_size
bb::fr column_1_step_size
std::vector< bb::fr > column_3
std::vector< bb::fr > column_2
std::array< bb::fr, 2 >(* get_values_from_key)(const std::array< uint64_t, 2 >)
std::vector< bb::fr > column_1
bb::fr column_3_step_size
Container for managing multiple BasicTables plus the data needed to combine basic table outputs (e....
std::vector< BasicTableId > basic_table_ids
std::vector< uint64_t > slice_sizes
std::vector< table_out(*)(table_in)> get_table_values
static constexpr size_t NUM_WINDOWS_HI
static constexpr size_t table_size(size_t w)
static constexpr size_t TABLE_SIZE_BIG
static constexpr size_t NUM_WINDOWS_LO
static constexpr size_t window_bits(size_t w)
static constexpr size_t NUM_WINDOWS