22 for (
const auto&
event : events) {
24 const uint256_t original_num_bits =
event.num_bits;
28 uint8_t num_bits =
event.num_bits;
32 size_t index_of_most_sig_16b_chunk = 0;
33 uint16_t dynamic_slice_register = 0;
34 uint8_t dynamic_bits = 0;
37 for (
size_t i = 0; i < 8; i++) {
40 dynamic_slice_register =
static_cast<uint16_t
>(
value);
41 index_of_most_sig_16b_chunk = i;
42 dynamic_bits = num_bits;
46 fixed_slice_registers[i] =
static_cast<uint16_t
>(
value);
51 auto dynamic_diff =
static_cast<uint16_t
>((1 << dynamic_bits) - dynamic_slice_register - 1);
55 { C::range_check_sel, 1 },
57 { C::range_check_value, original_value },
59 { C::range_check_rng_chk_bits, original_num_bits },
61 { C::range_check_is_lte_u16, index_of_most_sig_16b_chunk == 0 ? 1 : 0 },
62 { C::range_check_is_lte_u32, index_of_most_sig_16b_chunk == 1 ? 1 : 0 },
63 { C::range_check_is_lte_u48, index_of_most_sig_16b_chunk == 2 ? 1 : 0 },
64 { C::range_check_is_lte_u64, index_of_most_sig_16b_chunk == 3 ? 1 : 0 },
65 { C::range_check_is_lte_u80, index_of_most_sig_16b_chunk == 4 ? 1 : 0 },
66 { C::range_check_is_lte_u96, index_of_most_sig_16b_chunk == 5 ? 1 : 0 },
67 { C::range_check_is_lte_u112, index_of_most_sig_16b_chunk == 6 ? 1 : 0 },
68 { C::range_check_is_lte_u128, index_of_most_sig_16b_chunk == 7 ? 1 : 0 },
70 { C::range_check_u16_r0, fixed_slice_registers[0] },
71 { C::range_check_u16_r1, fixed_slice_registers[1] },
72 { C::range_check_u16_r2, fixed_slice_registers[2] },
73 { C::range_check_u16_r3, fixed_slice_registers[3] },
74 { C::range_check_u16_r4, fixed_slice_registers[4] },
75 { C::range_check_u16_r5, fixed_slice_registers[5] },
76 { C::range_check_u16_r6, fixed_slice_registers[6] },
77 { C::range_check_u16_r7, dynamic_slice_register },
79 { C::range_check_dyn_rng_chk_bits, dynamic_bits },
80 { C::range_check_dyn_rng_chk_pow_2, 1 << dynamic_bits },
81 { C::range_check_dyn_diff, dynamic_diff },
83 { C::range_check_sel_r0_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 0 ? 1 : 0 },
84 { C::range_check_sel_r1_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 1 ? 1 : 0 },
85 { C::range_check_sel_r2_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 2 ? 1 : 0 },
86 { C::range_check_sel_r3_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 3 ? 1 : 0 },
87 { C::range_check_sel_r4_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 4 ? 1 : 0 },
88 { C::range_check_sel_r5_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 5 ? 1 : 0 },
89 { C::range_check_sel_r6_16_bit_rng_lookup, index_of_most_sig_16b_chunk > 6 ? 1 : 0 },