Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
to_radix_mem_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
5
6namespace bb::avm2 {
7
8template <typename FF_>
9template <typename ContainerOverSubrelations, typename AllEntities>
10void to_radix_memImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
11 const AllEntities& in,
12 [[maybe_unused]] const RelationParameters<FF_>&,
13 [[maybe_unused]] const FF_& scaling_factor)
14{
15 using C = ColumnAndShifts;
16
17 PROFILE_THIS_NAME("accumulate/to_radix_mem");
18
19 const auto constants_MEM_TAG_U1 = FF(1);
20 const auto constants_MEM_TAG_U8 = FF(2);
21 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
22 const auto to_radix_mem_LATCH_CONDITION = in.get(C::to_radix_mem_last) + in.get(C::precomputed_first_row);
23 const auto to_radix_mem_NOT_LAST = in.get(C::to_radix_mem_sel) * (FF(1) - to_radix_mem_LATCH_CONDITION);
24 const auto to_radix_mem_SEL_NO_ERR = in.get(C::to_radix_mem_sel) * (FF(1) - in.get(C::to_radix_mem_err));
25 const auto to_radix_mem_NUM_LIMBS_MINUS_ONE = (in.get(C::to_radix_mem_num_limbs) - FF(1));
26
27 {
28 using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>;
29 auto tmp = in.get(C::to_radix_mem_start) * (FF(1) - in.get(C::to_radix_mem_start));
30 tmp *= scaling_factor;
31 std::get<0>(evals) += typename Accumulator::View(tmp);
32 }
33 {
34 using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>;
35 auto tmp = in.get(C::to_radix_mem_last) * (FF(1) - in.get(C::to_radix_mem_last));
36 tmp *= scaling_factor;
37 std::get<1>(evals) += typename Accumulator::View(tmp);
38 }
39 { // LAST_HAS_SEL_ON
40 using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>;
41 auto tmp = in.get(C::to_radix_mem_last) * (FF(1) - in.get(C::to_radix_mem_sel));
42 tmp *= scaling_factor;
43 std::get<2>(evals) += typename Accumulator::View(tmp);
44 }
45 { // START_AFTER_LAST
46 using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>;
47 auto tmp =
48 in.get(C::to_radix_mem_sel_shift) * (in.get(C::to_radix_mem_start_shift) - to_radix_mem_LATCH_CONDITION);
49 tmp *= scaling_factor;
50 std::get<3>(evals) += typename Accumulator::View(tmp);
51 }
52 { // SEL_CONTINUITY
53 using Accumulator = typename std::tuple_element_t<4, ContainerOverSubrelations>;
54 auto tmp = (FF(1) - in.get(C::precomputed_first_row)) * (FF(1) - in.get(C::to_radix_mem_sel)) *
55 in.get(C::to_radix_mem_sel_shift);
56 tmp *= scaling_factor;
57 std::get<4>(evals) += typename Accumulator::View(tmp);
58 }
59 { // EXEC_CLK_CONTINUITY
60 using Accumulator = typename std::tuple_element_t<5, ContainerOverSubrelations>;
61 auto tmp = to_radix_mem_NOT_LAST *
62 (in.get(C::to_radix_mem_execution_clk_shift) - in.get(C::to_radix_mem_execution_clk));
63 tmp *= scaling_factor;
64 std::get<5>(evals) += typename Accumulator::View(tmp);
65 }
66 { // SPACE_ID_CONTINUITY
67 using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>;
68 auto tmp = to_radix_mem_NOT_LAST * (in.get(C::to_radix_mem_space_id_shift) - in.get(C::to_radix_mem_space_id));
69 tmp *= scaling_factor;
70 std::get<6>(evals) += typename Accumulator::View(tmp);
71 }
72 { // VALUE_CONTNUITY
73 using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>;
74 auto tmp = to_radix_mem_NOT_LAST *
75 (in.get(C::to_radix_mem_value_to_decompose_shift) - in.get(C::to_radix_mem_value_to_decompose));
76 tmp *= scaling_factor;
77 std::get<7>(evals) += typename Accumulator::View(tmp);
78 }
79 { // RADIX_CONTINUITY
80 using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>;
81 auto tmp = to_radix_mem_NOT_LAST * (in.get(C::to_radix_mem_radix_shift) - in.get(C::to_radix_mem_radix));
82 tmp *= scaling_factor;
83 std::get<8>(evals) += typename Accumulator::View(tmp);
84 }
85 { // IS_OUTPUT_BITS_CONTINUITY
86 using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>;
87 auto tmp = to_radix_mem_NOT_LAST *
88 (in.get(C::to_radix_mem_is_output_bits_shift) - in.get(C::to_radix_mem_is_output_bits));
89 tmp *= scaling_factor;
90 std::get<9>(evals) += typename Accumulator::View(tmp);
91 }
92 {
93 using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>;
94 auto tmp = in.get(C::to_radix_mem_sel_dst_out_of_range_err) *
95 (FF(1) - in.get(C::to_radix_mem_sel_dst_out_of_range_err));
96 tmp *= scaling_factor;
97 std::get<10>(evals) += typename Accumulator::View(tmp);
98 }
99 {
100 using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>;
101 auto tmp =
102 in.get(C::to_radix_mem_start) * (in.get(C::to_radix_mem_max_mem_addr) - constants_AVM_HIGHEST_MEM_ADDRESS);
103 tmp *= scaling_factor;
104 std::get<11>(evals) += typename Accumulator::View(tmp);
105 }
106 {
107 using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>;
108 auto tmp = in.get(C::to_radix_mem_start) *
109 (in.get(C::to_radix_mem_max_write_addr) -
110 ((in.get(C::to_radix_mem_dst_addr) + in.get(C::to_radix_mem_num_limbs)) - FF(1)));
111 tmp *= scaling_factor;
112 std::get<12>(evals) += typename Accumulator::View(tmp);
113 }
114 {
115 using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>;
116 auto tmp = in.get(C::to_radix_mem_sel_radix_lt_2_err) * (FF(1) - in.get(C::to_radix_mem_sel_radix_lt_2_err));
117 tmp *= scaling_factor;
118 std::get<13>(evals) += typename Accumulator::View(tmp);
119 }
120 {
121 using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>;
122 auto tmp =
123 in.get(C::to_radix_mem_sel_radix_gt_256_err) * (FF(1) - in.get(C::to_radix_mem_sel_radix_gt_256_err));
124 tmp *= scaling_factor;
125 std::get<14>(evals) += typename Accumulator::View(tmp);
126 }
127 {
128 using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>;
129 auto tmp = in.get(C::to_radix_mem_sel_invalid_bitwise_radix) *
130 (FF(1) - in.get(C::to_radix_mem_sel_invalid_bitwise_radix));
131 tmp *= scaling_factor;
132 std::get<15>(evals) += typename Accumulator::View(tmp);
133 }
134 {
135 using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>;
136 auto tmp = in.get(C::to_radix_mem_start) * (in.get(C::to_radix_mem_two) - FF(2));
137 tmp *= scaling_factor;
138 std::get<16>(evals) += typename Accumulator::View(tmp);
139 }
140 {
141 using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>;
142 auto tmp = in.get(C::to_radix_mem_start) * (in.get(C::to_radix_mem_two_five_six) - FF(256));
143 tmp *= scaling_factor;
144 std::get<17>(evals) += typename Accumulator::View(tmp);
145 }
146 { // IS_OUTPUT_BITS_IMPLY_RADIX_2
147 using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>;
148 auto tmp = in.get(C::to_radix_mem_start) * in.get(C::to_radix_mem_is_output_bits) *
149 (FF(1) - in.get(C::to_radix_mem_sel_invalid_bitwise_radix)) *
150 (in.get(C::to_radix_mem_radix) - FF(2));
151 tmp *= scaling_factor;
152 std::get<18>(evals) += typename Accumulator::View(tmp);
153 }
154 {
155 using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>;
156 auto tmp =
157 in.get(C::to_radix_mem_sel_num_limbs_is_zero) * (FF(1) - in.get(C::to_radix_mem_sel_num_limbs_is_zero));
158 tmp *= scaling_factor;
159 std::get<19>(evals) += typename Accumulator::View(tmp);
160 }
161 { // ZERO_CHECK_NUM_LIMBS
162 using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>;
163 auto tmp = in.get(C::to_radix_mem_start) *
164 ((in.get(C::to_radix_mem_num_limbs) * (in.get(C::to_radix_mem_sel_num_limbs_is_zero) *
165 (FF(1) - in.get(C::to_radix_mem_num_limbs_inv)) +
166 in.get(C::to_radix_mem_num_limbs_inv)) -
167 FF(1)) +
168 in.get(C::to_radix_mem_sel_num_limbs_is_zero));
169 tmp *= scaling_factor;
170 std::get<20>(evals) += typename Accumulator::View(tmp);
171 }
172 {
173 using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>;
174 auto tmp = in.get(C::to_radix_mem_sel_value_is_zero) * (FF(1) - in.get(C::to_radix_mem_sel_value_is_zero));
175 tmp *= scaling_factor;
176 std::get<21>(evals) += typename Accumulator::View(tmp);
177 }
178 { // ZERO_CHECK_VALUE
179 using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>;
180 auto tmp = in.get(C::to_radix_mem_start) *
181 ((in.get(C::to_radix_mem_value_to_decompose) *
182 (in.get(C::to_radix_mem_sel_value_is_zero) * (FF(1) - in.get(C::to_radix_mem_value_inv)) +
183 in.get(C::to_radix_mem_value_inv)) -
184 FF(1)) +
185 in.get(C::to_radix_mem_sel_value_is_zero));
186 tmp *= scaling_factor;
187 std::get<22>(evals) += typename Accumulator::View(tmp);
188 }
189 {
190 using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>;
191 auto tmp =
192 (in.get(C::to_radix_mem_sel_invalid_num_limbs_err) -
193 in.get(C::to_radix_mem_sel_num_limbs_is_zero) * (FF(1) - in.get(C::to_radix_mem_sel_value_is_zero)));
194 tmp *= scaling_factor;
195 std::get<23>(evals) += typename Accumulator::View(tmp);
196 }
197 {
198 using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>;
199 auto tmp =
200 (in.get(C::to_radix_mem_err) - (FF(1) - (FF(1) - in.get(C::to_radix_mem_sel_dst_out_of_range_err)) *
201 (FF(1) - in.get(C::to_radix_mem_sel_radix_lt_2_err)) *
202 (FF(1) - in.get(C::to_radix_mem_sel_radix_gt_256_err)) *
203 (FF(1) - in.get(C::to_radix_mem_sel_invalid_bitwise_radix)) *
204 (FF(1) - in.get(C::to_radix_mem_sel_invalid_num_limbs_err))));
205 tmp *= scaling_factor;
206 std::get<24>(evals) += typename Accumulator::View(tmp);
207 }
208 { // DECR_NUM_LIMBS
209 using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>;
210 auto tmp = to_radix_mem_NOT_LAST *
211 (in.get(C::to_radix_mem_num_limbs_shift) - (in.get(C::to_radix_mem_num_limbs) - FF(1)));
212 tmp *= scaling_factor;
213 std::get<25>(evals) += typename Accumulator::View(tmp);
214 }
215 { // INCR_DST_ADDRESS
216 using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>;
217 auto tmp = to_radix_mem_NOT_LAST *
218 (in.get(C::to_radix_mem_dst_addr_shift) - (in.get(C::to_radix_mem_dst_addr) + FF(1)));
219 tmp *= scaling_factor;
220 std::get<26>(evals) += typename Accumulator::View(tmp);
221 }
222 { // LAST_ROW_VALID_COMPUTATION
223 using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>;
224 auto tmp = to_radix_mem_SEL_NO_ERR * (FF(1) - in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
225 ((to_radix_mem_NUM_LIMBS_MINUS_ONE *
226 (in.get(C::to_radix_mem_last) * (FF(1) - in.get(C::to_radix_mem_num_limbs_minus_one_inv)) +
227 in.get(C::to_radix_mem_num_limbs_minus_one_inv)) -
228 FF(1)) +
229 in.get(C::to_radix_mem_last));
230 tmp *= scaling_factor;
231 std::get<27>(evals) += typename Accumulator::View(tmp);
232 }
233 { // LAST_ROW_NUM_LIMBS_ZERO
234 using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>;
235 auto tmp = in.get(C::to_radix_mem_sel) * in.get(C::to_radix_mem_sel_num_limbs_is_zero) *
236 (in.get(C::to_radix_mem_last) - FF(1));
237 tmp *= scaling_factor;
238 std::get<28>(evals) += typename Accumulator::View(tmp);
239 }
240 { // LAST_ROW_ERR_COMPUTATION
241 using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>;
242 auto tmp = in.get(C::to_radix_mem_sel) * in.get(C::to_radix_mem_err) *
243 (FF(1) - in.get(C::to_radix_mem_sel_num_limbs_is_zero)) * (in.get(C::to_radix_mem_last) - FF(1));
244 tmp *= scaling_factor;
245 std::get<29>(evals) += typename Accumulator::View(tmp);
246 }
247 {
248 using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>;
249 auto tmp = (in.get(C::to_radix_mem_sel_should_exec) -
250 in.get(C::to_radix_mem_sel) * (FF(1) - in.get(C::to_radix_mem_err)) *
251 (FF(1) - in.get(C::to_radix_mem_sel_num_limbs_is_zero)));
252 tmp *= scaling_factor;
253 std::get<30>(evals) += typename Accumulator::View(tmp);
254 }
255 {
256 using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>;
257 auto tmp = (in.get(C::to_radix_mem_limb_index_to_lookup) -
258 in.get(C::to_radix_mem_sel_should_exec) * (in.get(C::to_radix_mem_num_limbs) - FF(1)));
259 tmp *= scaling_factor;
260 std::get<31>(evals) += typename Accumulator::View(tmp);
261 }
262 {
263 using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>;
264 auto tmp = (in.get(C::to_radix_mem_output_tag) -
265 in.get(C::to_radix_mem_sel_should_exec) *
266 ((constants_MEM_TAG_U1 - constants_MEM_TAG_U8) * in.get(C::to_radix_mem_is_output_bits) +
267 constants_MEM_TAG_U8));
268 tmp *= scaling_factor;
269 std::get<32>(evals) += typename Accumulator::View(tmp);
270 }
271}
272
273} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:35
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define PROFILE_THIS_NAME(name)
Definition op_count.hpp:16
Container for parameters used by the grand product (permutation, lookup) Honk relations.