Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
addressing_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void addressingImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto constants_MEM_TAG_U32 = FF(4);
19 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
20 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_ =
21 in.get(C::execution_sel_op_is_relative_wire_0_) * in.get(C::execution_sel_op_is_address_0_);
22 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_ =
23 in.get(C::execution_sel_op_is_relative_wire_1_) * in.get(C::execution_sel_op_is_address_1_);
24 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_ =
25 in.get(C::execution_sel_op_is_relative_wire_2_) * in.get(C::execution_sel_op_is_address_2_);
26 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_ =
27 in.get(C::execution_sel_op_is_relative_wire_3_) * in.get(C::execution_sel_op_is_address_3_);
28 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_ =
29 in.get(C::execution_sel_op_is_relative_wire_4_) * in.get(C::execution_sel_op_is_address_4_);
30 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_0_ =
31 in.get(C::execution_sel_op_is_indirect_wire_0_) * in.get(C::execution_sel_op_is_address_0_);
32 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_1_ =
33 in.get(C::execution_sel_op_is_indirect_wire_1_) * in.get(C::execution_sel_op_is_address_1_);
34 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_2_ =
35 in.get(C::execution_sel_op_is_indirect_wire_2_) * in.get(C::execution_sel_op_is_address_2_);
36 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_3_ =
37 in.get(C::execution_sel_op_is_indirect_wire_3_) * in.get(C::execution_sel_op_is_address_3_);
38 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_4_ =
39 in.get(C::execution_sel_op_is_indirect_wire_4_) * in.get(C::execution_sel_op_is_address_4_);
40 const auto execution_NUM_RELATIVE_OPERANDS =
41 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_ + execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_ +
42 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_ + execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_ +
43 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_;
44 const auto execution_NUM_RELATIVE_X = execution_NUM_RELATIVE_OPERANDS;
45 const auto execution_NUM_RELATIVE_Y = in.get(C::execution_num_relative_operands_inv);
46 const auto execution_NUM_RELATIVE_E = (FF(1) - in.get(C::execution_sel_do_base_check));
47 const auto execution_BASE_CHECK_X =
48 in.get(C::execution_sel_do_base_check) * (in.get(C::execution_base_address_tag) - constants_MEM_TAG_U32);
49 const auto execution_BASE_CHECK_Y = in.get(C::execution_base_address_tag_diff_inv);
50 const auto execution_BASE_CHECK_E = (FF(1) - in.get(C::execution_sel_base_address_failure));
51 const auto execution_RELATIVE_RESOLUTION_FILTER =
52 (FF(1) - in.get(C::execution_sel_base_address_failure)) * in.get(C::execution_base_address_val);
53 const auto execution_BATCHED_TAGS_DIFF = in.get(C::execution_sel_apply_indirection_0_) * FF(1) *
54 (in.get(C::execution_rop_tag_0_) - constants_MEM_TAG_U32) +
55 in.get(C::execution_sel_apply_indirection_1_) * FF(8) *
56 (in.get(C::execution_rop_tag_1_) - constants_MEM_TAG_U32) +
57 in.get(C::execution_sel_apply_indirection_2_) * FF(64) *
58 (in.get(C::execution_rop_tag_2_) - constants_MEM_TAG_U32) +
59 in.get(C::execution_sel_apply_indirection_3_) * FF(512) *
60 (in.get(C::execution_rop_tag_3_) - constants_MEM_TAG_U32) +
61 in.get(C::execution_sel_apply_indirection_4_) * FF(4096) *
62 (in.get(C::execution_rop_tag_4_) - constants_MEM_TAG_U32);
63 const auto execution_BATCHED_TAGS_DIFF_X = execution_BATCHED_TAGS_DIFF;
64 const auto execution_BATCHED_TAGS_DIFF_Y = in.get(C::execution_batched_tags_diff_inv);
65 const auto execution_BATCHED_TAGS_DIFF_E = (FF(1) - in.get(C::execution_sel_some_final_check_failed));
66 const auto execution_BATCHED_TAGS_DIFF_EQ =
67 (execution_BATCHED_TAGS_DIFF_X *
68 (execution_BATCHED_TAGS_DIFF_E * (FF(1) - execution_BATCHED_TAGS_DIFF_Y) + execution_BATCHED_TAGS_DIFF_Y) -
69 FF(1)) +
70 execution_BATCHED_TAGS_DIFF_E;
71 const auto execution_ADDRESSING_ERROR_COLLECTION =
72 in.get(C::execution_sel_base_address_failure) + in.get(C::execution_sel_relative_overflow_0_) +
73 in.get(C::execution_sel_relative_overflow_1_) + in.get(C::execution_sel_relative_overflow_2_) +
74 in.get(C::execution_sel_relative_overflow_3_) + in.get(C::execution_sel_relative_overflow_4_) +
75 in.get(C::execution_sel_some_final_check_failed);
76 const auto execution_ADDRESSING_COLLECTION_X = execution_ADDRESSING_ERROR_COLLECTION;
77 const auto execution_ADDRESSING_COLLECTION_Y = in.get(C::execution_addressing_error_collection_inv);
78 const auto execution_ADDRESSING_COLLECTION_E = (FF(1) - in.get(C::execution_sel_addressing_error));
79 const auto execution_ADDRESSING_COLLECTION_EQ =
80 (execution_ADDRESSING_COLLECTION_X *
81 (execution_ADDRESSING_COLLECTION_E * (FF(1) - execution_ADDRESSING_COLLECTION_Y) +
82 execution_ADDRESSING_COLLECTION_Y) -
83 FF(1)) +
84 execution_ADDRESSING_COLLECTION_E;
85 const auto execution_SEL_RESOLVE_ADDRESS = in.get(C::execution_sel_instruction_fetching_success);
86
87 {
88 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
89 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)) *
90 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)));
91 std::get<0>(evals) += (tmp * scaling_factor);
92 }
93 {
94 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
95 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)) *
96 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)));
97 std::get<1>(evals) += (tmp * scaling_factor);
98 }
99 {
100 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
101 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)) *
102 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)));
103 std::get<2>(evals) += (tmp * scaling_factor);
104 }
105 {
106 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
107 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)) *
108 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)));
109 std::get<3>(evals) += (tmp * scaling_factor);
110 }
111 {
112 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
113 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)) *
114 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)));
115 std::get<4>(evals) += (tmp * scaling_factor);
116 }
117 {
118 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
119 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)) *
120 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)));
121 std::get<5>(evals) += (tmp * scaling_factor);
122 }
123 {
124 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
125 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)) *
126 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)));
127 std::get<6>(evals) += (tmp * scaling_factor);
128 }
129 {
130 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
131 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_)) *
132 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_)));
133 std::get<7>(evals) += (tmp * scaling_factor);
134 }
135 {
136 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
137 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)) *
138 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)));
139 std::get<8>(evals) += (tmp * scaling_factor);
140 }
141 {
142 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
143 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)) *
144 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)));
145 std::get<9>(evals) += (tmp * scaling_factor);
146 }
147 {
148 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
149 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)) *
150 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)));
151 std::get<10>(evals) += (tmp * scaling_factor);
152 }
153 {
154 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
155 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)) *
156 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)));
157 std::get<11>(evals) += (tmp * scaling_factor);
158 }
159 {
160 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
161 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)) *
162 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)));
163 std::get<12>(evals) += (tmp * scaling_factor);
164 }
165 {
166 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
167 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)) *
168 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)));
169 std::get<13>(evals) += (tmp * scaling_factor);
170 }
171 {
172 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
173 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)) *
174 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)));
175 std::get<14>(evals) += (tmp * scaling_factor);
176 }
177 {
178 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
179 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)) *
180 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)));
181 std::get<15>(evals) += (tmp * scaling_factor);
182 }
183 { // ADDRESSING_MODE_RECONSTRUCTION
184 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
185 auto tmp = (CView(execution_SEL_RESOLVE_ADDRESS) * static_cast<View>(in.get(C::execution_addressing_mode)) -
186 (FF(1) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)) +
187 FF(2) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)) +
188 FF(4) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)) +
189 FF(8) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)) +
190 FF(16) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)) +
191 FF(32) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)) +
192 FF(64) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)) +
193 FF(128) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)) +
194 FF(256) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)) +
195 FF(512) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)) +
196 FF(1024) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)) +
197 FF(2048) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)) +
198 FF(4096) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)) +
199 FF(8192) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)) +
200 FF(16384) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)) +
201 FF(32768) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_))));
202 std::get<16>(evals) += (tmp * scaling_factor);
203 }
204 {
205 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
206 auto tmp = static_cast<View>(in.get(C::execution_sel_do_base_check)) *
207 (FF(1) - static_cast<View>(in.get(C::execution_sel_do_base_check)));
208 std::get<17>(evals) += (tmp * scaling_factor);
209 }
210 { // NUM_RELATIVE_INV_CHECK
211 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
212 auto tmp = ((CView(execution_NUM_RELATIVE_X) *
213 (CView(execution_NUM_RELATIVE_E) * (FF(1) - CView(execution_NUM_RELATIVE_Y)) +
214 CView(execution_NUM_RELATIVE_Y)) -
215 FF(1)) +
216 CView(execution_NUM_RELATIVE_E));
217 std::get<18>(evals) += (tmp * scaling_factor);
218 }
219 {
220 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
221 auto tmp = static_cast<View>(in.get(C::execution_sel_base_address_failure)) *
222 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure)));
223 std::get<19>(evals) += (tmp * scaling_factor);
224 }
225 { // BASE_ADDRESS_CHECK
226 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
227 auto tmp =
228 ((CView(execution_BASE_CHECK_X) * (CView(execution_BASE_CHECK_E) * (FF(1) - CView(execution_BASE_CHECK_Y)) +
229 CView(execution_BASE_CHECK_Y)) -
230 FF(1)) +
231 CView(execution_BASE_CHECK_E));
232 std::get<20>(evals) += (tmp * scaling_factor);
233 }
234 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_0
235 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
236 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_0_)) *
237 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_)) +
238 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
239 std::get<21>(evals) += (tmp * scaling_factor);
240 }
241 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_1
242 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
243 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_1_)) *
244 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_)) +
245 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
246 std::get<22>(evals) += (tmp * scaling_factor);
247 }
248 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_2
249 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
250 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_2_)) *
251 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_)) +
252 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
253 std::get<23>(evals) += (tmp * scaling_factor);
254 }
255 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_3
256 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
257 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_3_)) *
258 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_)) +
259 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
260 std::get<24>(evals) += (tmp * scaling_factor);
261 }
262 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_4
263 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
264 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_4_)) *
265 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_)) +
266 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
267 std::get<25>(evals) += (tmp * scaling_factor);
268 }
269 { // RELATIVE_RESOLUTION_0
270 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
271 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_0_)) -
272 (static_cast<View>(in.get(C::execution_op_0_)) +
273 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
274 std::get<26>(evals) += (tmp * scaling_factor);
275 }
276 { // RELATIVE_RESOLUTION_1
277 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
278 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_1_)) -
279 (static_cast<View>(in.get(C::execution_op_1_)) +
280 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
281 std::get<27>(evals) += (tmp * scaling_factor);
282 }
283 { // RELATIVE_RESOLUTION_2
284 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
285 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_2_)) -
286 (static_cast<View>(in.get(C::execution_op_2_)) +
287 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
288 std::get<28>(evals) += (tmp * scaling_factor);
289 }
290 { // RELATIVE_RESOLUTION_3
291 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
292 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_3_)) -
293 (static_cast<View>(in.get(C::execution_op_3_)) +
294 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
295 std::get<29>(evals) += (tmp * scaling_factor);
296 }
297 { // RELATIVE_RESOLUTION_4
298 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
299 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_4_)) -
300 (static_cast<View>(in.get(C::execution_op_4_)) +
301 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
302 std::get<30>(evals) += (tmp * scaling_factor);
303 }
304 {
305 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
306 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_0_)) -
307 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) *
308 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
309 std::get<31>(evals) += (tmp * scaling_factor);
310 }
311 {
312 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
313 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_1_)) -
314 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) *
315 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
316 std::get<32>(evals) += (tmp * scaling_factor);
317 }
318 {
319 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
320 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_2_)) -
321 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) *
322 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
323 std::get<33>(evals) += (tmp * scaling_factor);
324 }
325 {
326 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
327 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_3_)) -
328 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) *
329 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
330 std::get<34>(evals) += (tmp * scaling_factor);
331 }
332 {
333 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
334 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_4_)) -
335 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) *
336 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
337 std::get<35>(evals) += (tmp * scaling_factor);
338 }
339 {
340 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
341 auto tmp = CView(execution_SEL_RESOLVE_ADDRESS) *
342 (static_cast<View>(in.get(C::execution_highest_address)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
343 std::get<36>(evals) += (tmp * scaling_factor);
344 }
345 { // INDIRECT_GATING_0
346 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
347 auto tmp = (static_cast<View>(in.get(C::execution_sel_apply_indirection_0_)) -
348 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_0_) *
349 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_0_))) -
350 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
351 std::get<37>(evals) += (tmp * scaling_factor);
352 }
353 { // INDIRECT_GATING_1
354 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
355 auto tmp = (static_cast<View>(in.get(C::execution_sel_apply_indirection_1_)) -
356 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_1_) *
357 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_1_))) -
358 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
359 std::get<38>(evals) += (tmp * scaling_factor);
360 }
361 { // INDIRECT_GATING_2
362 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
363 auto tmp = (static_cast<View>(in.get(C::execution_sel_apply_indirection_2_)) -
364 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_2_) *
365 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_2_))) -
366 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
367 std::get<39>(evals) += (tmp * scaling_factor);
368 }
369 { // INDIRECT_GATING_3
370 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
371 auto tmp = (static_cast<View>(in.get(C::execution_sel_apply_indirection_3_)) -
372 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_3_) *
373 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_3_))) -
374 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
375 std::get<40>(evals) += (tmp * scaling_factor);
376 }
377 { // INDIRECT_GATING_4
378 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
379 auto tmp = (static_cast<View>(in.get(C::execution_sel_apply_indirection_4_)) -
380 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_4_) *
381 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_4_))) -
382 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
383 std::get<41>(evals) += (tmp * scaling_factor);
384 }
385 { // INDIRECT_PROPAGATION_0
386 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
387 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_apply_indirection_0_))) *
388 (static_cast<View>(in.get(C::execution_rop_0_)) -
389 static_cast<View>(in.get(C::execution_op_after_relative_0_)));
390 std::get<42>(evals) += (tmp * scaling_factor);
391 }
392 { // INDIRECT_PROPAGATION_1
393 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
394 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_apply_indirection_1_))) *
395 (static_cast<View>(in.get(C::execution_rop_1_)) -
396 static_cast<View>(in.get(C::execution_op_after_relative_1_)));
397 std::get<43>(evals) += (tmp * scaling_factor);
398 }
399 { // INDIRECT_PROPAGATION_2
400 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
401 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_apply_indirection_2_))) *
402 (static_cast<View>(in.get(C::execution_rop_2_)) -
403 static_cast<View>(in.get(C::execution_op_after_relative_2_)));
404 std::get<44>(evals) += (tmp * scaling_factor);
405 }
406 { // INDIRECT_PROPAGATION_3
407 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
408 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_apply_indirection_3_))) *
409 (static_cast<View>(in.get(C::execution_rop_3_)) -
410 static_cast<View>(in.get(C::execution_op_after_relative_3_)));
411 std::get<45>(evals) += (tmp * scaling_factor);
412 }
413 { // INDIRECT_PROPAGATION_4
414 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
415 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_apply_indirection_4_))) *
416 (static_cast<View>(in.get(C::execution_rop_4_)) -
417 static_cast<View>(in.get(C::execution_op_after_relative_4_)));
418 std::get<46>(evals) += (tmp * scaling_factor);
419 }
420 {
421 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
422 auto tmp = static_cast<View>(in.get(C::execution_sel_some_final_check_failed)) *
423 (FF(1) - static_cast<View>(in.get(C::execution_sel_some_final_check_failed)));
424 std::get<47>(evals) += (tmp * scaling_factor);
425 }
426 { // BATCHED_TAGS_DIFF_CHECK
427 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
428 auto tmp = CView(execution_BATCHED_TAGS_DIFF_EQ);
429 std::get<48>(evals) += (tmp * scaling_factor);
430 }
431 {
432 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
433 auto tmp = static_cast<View>(in.get(C::execution_sel_addressing_error)) *
434 (FF(1) - static_cast<View>(in.get(C::execution_sel_addressing_error)));
435 std::get<49>(evals) += (tmp * scaling_factor);
436 }
437 { // ADDRESSING_COLLECTION_INV_CHECK
438 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
439 auto tmp = CView(execution_ADDRESSING_COLLECTION_EQ);
440 std::get<50>(evals) += (tmp * scaling_factor);
441 }
442 { // NO_ADDRESSING_ERROR_IF_NOT_RESOLVING
443 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
444 auto tmp = (FF(1) - CView(execution_SEL_RESOLVE_ADDRESS)) *
445 static_cast<View>(in.get(C::execution_sel_addressing_error));
446 std::get<51>(evals) += (tmp * scaling_factor);
447 }
448}
449
450} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:35
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.