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_RELATIVE_EFFECTIVE_5_ =
31 in.get(C::execution_sel_op_is_relative_wire_5_) * in.get(C::execution_sel_op_is_address_5_);
32 const auto execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_ =
33 in.get(C::execution_sel_op_is_relative_wire_6_) * in.get(C::execution_sel_op_is_address_6_);
34 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_0_ =
35 in.get(C::execution_sel_op_is_indirect_wire_0_) * in.get(C::execution_sel_op_is_address_0_);
36 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_1_ =
37 in.get(C::execution_sel_op_is_indirect_wire_1_) * in.get(C::execution_sel_op_is_address_1_);
38 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_2_ =
39 in.get(C::execution_sel_op_is_indirect_wire_2_) * in.get(C::execution_sel_op_is_address_2_);
40 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_3_ =
41 in.get(C::execution_sel_op_is_indirect_wire_3_) * in.get(C::execution_sel_op_is_address_3_);
42 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_4_ =
43 in.get(C::execution_sel_op_is_indirect_wire_4_) * in.get(C::execution_sel_op_is_address_4_);
44 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_5_ =
45 in.get(C::execution_sel_op_is_indirect_wire_5_) * in.get(C::execution_sel_op_is_address_5_);
46 const auto execution_SEL_OP_IS_INDIRECT_EFFECTIVE_6_ =
47 in.get(C::execution_sel_op_is_indirect_wire_6_) * in.get(C::execution_sel_op_is_address_6_);
48 const auto execution_NUM_RELATIVE_OPERANDS =
49 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_ + execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_ +
50 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_ + execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_ +
51 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_ + execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_ +
52 execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_;
53 const auto execution_NUM_RELATIVE_X = execution_NUM_RELATIVE_OPERANDS;
54 const auto execution_NUM_RELATIVE_Y = in.get(C::execution_num_relative_operands_inv);
55 const auto execution_NUM_RELATIVE_E = (FF(1) - in.get(C::execution_sel_do_base_check));
56 const auto execution_BASE_CHECK_X =
57 in.get(C::execution_sel_do_base_check) * (in.get(C::execution_base_address_tag) - constants_MEM_TAG_U32);
58 const auto execution_BASE_CHECK_Y = in.get(C::execution_base_address_tag_diff_inv);
59 const auto execution_BASE_CHECK_E = (FF(1) - in.get(C::execution_sel_base_address_failure));
60 const auto execution_RELATIVE_RESOLUTION_FILTER =
61 (FF(1) - in.get(C::execution_sel_base_address_failure)) * in.get(C::execution_base_address_val);
62 const auto execution_BATCHED_TAGS_DIFF = in.get(C::execution_sel_should_apply_indirection_0_) * FF(1) *
63 (in.get(C::execution_rop_tag_0_) - constants_MEM_TAG_U32) +
64 in.get(C::execution_sel_should_apply_indirection_1_) * FF(8) *
65 (in.get(C::execution_rop_tag_1_) - constants_MEM_TAG_U32) +
66 in.get(C::execution_sel_should_apply_indirection_2_) * FF(64) *
67 (in.get(C::execution_rop_tag_2_) - constants_MEM_TAG_U32) +
68 in.get(C::execution_sel_should_apply_indirection_3_) * FF(512) *
69 (in.get(C::execution_rop_tag_3_) - constants_MEM_TAG_U32) +
70 in.get(C::execution_sel_should_apply_indirection_4_) * FF(4096) *
71 (in.get(C::execution_rop_tag_4_) - constants_MEM_TAG_U32) +
72 in.get(C::execution_sel_should_apply_indirection_5_) * FF(32768) *
73 (in.get(C::execution_rop_tag_5_) - constants_MEM_TAG_U32) +
74 in.get(C::execution_sel_should_apply_indirection_6_) * FF(262144) *
75 (in.get(C::execution_rop_tag_6_) - constants_MEM_TAG_U32);
76 const auto execution_BATCHED_TAGS_DIFF_X = execution_BATCHED_TAGS_DIFF;
77 const auto execution_BATCHED_TAGS_DIFF_Y = in.get(C::execution_batched_tags_diff_inv);
78 const auto execution_BATCHED_TAGS_DIFF_E = (FF(1) - in.get(C::execution_sel_some_final_check_failed));
79 const auto execution_BATCHED_TAGS_DIFF_EQ =
80 (execution_BATCHED_TAGS_DIFF_X *
81 (execution_BATCHED_TAGS_DIFF_E * (FF(1) - execution_BATCHED_TAGS_DIFF_Y) + execution_BATCHED_TAGS_DIFF_Y) -
82 FF(1)) +
83 execution_BATCHED_TAGS_DIFF_E;
84 const auto execution_ADDRESSING_ERROR_COLLECTION =
85 in.get(C::execution_sel_base_address_failure) + in.get(C::execution_sel_relative_overflow_0_) +
86 in.get(C::execution_sel_relative_overflow_1_) + in.get(C::execution_sel_relative_overflow_2_) +
87 in.get(C::execution_sel_relative_overflow_3_) + in.get(C::execution_sel_relative_overflow_4_) +
88 in.get(C::execution_sel_relative_overflow_5_) + in.get(C::execution_sel_relative_overflow_6_) +
89 in.get(C::execution_sel_some_final_check_failed);
90 const auto execution_ADDRESSING_COLLECTION_X = execution_ADDRESSING_ERROR_COLLECTION;
91 const auto execution_ADDRESSING_COLLECTION_Y = in.get(C::execution_addressing_error_collection_inv);
92 const auto execution_ADDRESSING_COLLECTION_E = (FF(1) - in.get(C::execution_sel_addressing_error));
93 const auto execution_ADDRESSING_COLLECTION_EQ =
94 (execution_ADDRESSING_COLLECTION_X *
95 (execution_ADDRESSING_COLLECTION_E * (FF(1) - execution_ADDRESSING_COLLECTION_Y) +
96 execution_ADDRESSING_COLLECTION_Y) -
97 FF(1)) +
98 execution_ADDRESSING_COLLECTION_E;
99 const auto execution_SEL_SHOULD_RESOLVE_ADDRESS = in.get(C::execution_sel_instruction_fetching_success);
100
101 {
102 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
103 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)) *
104 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)));
105 std::get<0>(evals) += (tmp * scaling_factor);
106 }
107 {
108 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
109 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)) *
110 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)));
111 std::get<1>(evals) += (tmp * scaling_factor);
112 }
113 {
114 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
115 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)) *
116 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)));
117 std::get<2>(evals) += (tmp * scaling_factor);
118 }
119 {
120 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
121 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)) *
122 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)));
123 std::get<3>(evals) += (tmp * scaling_factor);
124 }
125 {
126 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
127 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)) *
128 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)));
129 std::get<4>(evals) += (tmp * scaling_factor);
130 }
131 {
132 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
133 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)) *
134 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)));
135 std::get<5>(evals) += (tmp * scaling_factor);
136 }
137 {
138 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
139 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)) *
140 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)));
141 std::get<6>(evals) += (tmp * scaling_factor);
142 }
143 {
144 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
145 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_)) *
146 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_)));
147 std::get<7>(evals) += (tmp * scaling_factor);
148 }
149 {
150 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
151 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)) *
152 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)));
153 std::get<8>(evals) += (tmp * scaling_factor);
154 }
155 {
156 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
157 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)) *
158 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)));
159 std::get<9>(evals) += (tmp * scaling_factor);
160 }
161 {
162 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
163 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)) *
164 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)));
165 std::get<10>(evals) += (tmp * scaling_factor);
166 }
167 {
168 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
169 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)) *
170 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)));
171 std::get<11>(evals) += (tmp * scaling_factor);
172 }
173 {
174 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
175 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)) *
176 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)));
177 std::get<12>(evals) += (tmp * scaling_factor);
178 }
179 {
180 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
181 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)) *
182 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)));
183 std::get<13>(evals) += (tmp * scaling_factor);
184 }
185 {
186 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
187 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)) *
188 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)));
189 std::get<14>(evals) += (tmp * scaling_factor);
190 }
191 {
192 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
193 auto tmp = static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)) *
194 (FF(1) - static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)));
195 std::get<15>(evals) += (tmp * scaling_factor);
196 }
197 { // ADDRESSING_MODE_RECONSTRUCTION
198 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
199 auto tmp =
200 (CView(execution_SEL_SHOULD_RESOLVE_ADDRESS) * static_cast<View>(in.get(C::execution_addressing_mode)) -
201 (FF(1) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)) +
202 FF(2) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)) +
203 FF(4) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)) +
204 FF(8) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)) +
205 FF(16) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)) +
206 FF(32) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)) +
207 FF(64) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)) +
208 FF(128) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)) +
209 FF(256) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)) +
210 FF(512) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)) +
211 FF(1024) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)) +
212 FF(2048) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)) +
213 FF(4096) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)) +
214 FF(8192) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)) +
215 FF(16384) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)) +
216 FF(32768) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_))));
217 std::get<16>(evals) += (tmp * scaling_factor);
218 }
219 {
220 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
221 auto tmp = static_cast<View>(in.get(C::execution_sel_do_base_check)) *
222 (FF(1) - static_cast<View>(in.get(C::execution_sel_do_base_check)));
223 std::get<17>(evals) += (tmp * scaling_factor);
224 }
225 { // NUM_RELATIVE_INV_CHECK
226 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
227 auto tmp = ((CView(execution_NUM_RELATIVE_X) *
228 (CView(execution_NUM_RELATIVE_E) * (FF(1) - CView(execution_NUM_RELATIVE_Y)) +
229 CView(execution_NUM_RELATIVE_Y)) -
230 FF(1)) +
231 CView(execution_NUM_RELATIVE_E));
232 std::get<18>(evals) += (tmp * scaling_factor);
233 }
234 {
235 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
236 auto tmp = static_cast<View>(in.get(C::execution_sel_base_address_failure)) *
237 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure)));
238 std::get<19>(evals) += (tmp * scaling_factor);
239 }
240 { // BASE_ADDRESS_CHECK
241 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
242 auto tmp =
243 ((CView(execution_BASE_CHECK_X) * (CView(execution_BASE_CHECK_E) * (FF(1) - CView(execution_BASE_CHECK_Y)) +
244 CView(execution_BASE_CHECK_Y)) -
245 FF(1)) +
246 CView(execution_BASE_CHECK_E));
247 std::get<20>(evals) += (tmp * scaling_factor);
248 }
249 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_0
250 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
251 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_0_)) *
252 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_)) +
253 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
254 std::get<21>(evals) += (tmp * scaling_factor);
255 }
256 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_1
257 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
258 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_1_)) *
259 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_)) +
260 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
261 std::get<22>(evals) += (tmp * scaling_factor);
262 }
263 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_2
264 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
265 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_2_)) *
266 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_)) +
267 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
268 std::get<23>(evals) += (tmp * scaling_factor);
269 }
270 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_3
271 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
272 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_3_)) *
273 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_)) +
274 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
275 std::get<24>(evals) += (tmp * scaling_factor);
276 }
277 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_4
278 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
279 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_4_)) *
280 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_)) +
281 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
282 std::get<25>(evals) += (tmp * scaling_factor);
283 }
284 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_5
285 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
286 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_5_)) *
287 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_)) +
288 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
289 std::get<26>(evals) += (tmp * scaling_factor);
290 }
291 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_6
292 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
293 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_6_)) *
294 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_)) +
295 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
296 std::get<27>(evals) += (tmp * scaling_factor);
297 }
298 { // RELATIVE_RESOLUTION_0
299 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
300 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_0_)) -
301 (static_cast<View>(in.get(C::execution_op_0_)) +
302 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
303 std::get<28>(evals) += (tmp * scaling_factor);
304 }
305 { // RELATIVE_RESOLUTION_1
306 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
307 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_1_)) -
308 (static_cast<View>(in.get(C::execution_op_1_)) +
309 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
310 std::get<29>(evals) += (tmp * scaling_factor);
311 }
312 { // RELATIVE_RESOLUTION_2
313 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
314 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_2_)) -
315 (static_cast<View>(in.get(C::execution_op_2_)) +
316 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
317 std::get<30>(evals) += (tmp * scaling_factor);
318 }
319 { // RELATIVE_RESOLUTION_3
320 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
321 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_3_)) -
322 (static_cast<View>(in.get(C::execution_op_3_)) +
323 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
324 std::get<31>(evals) += (tmp * scaling_factor);
325 }
326 { // RELATIVE_RESOLUTION_4
327 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
328 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_4_)) -
329 (static_cast<View>(in.get(C::execution_op_4_)) +
330 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
331 std::get<32>(evals) += (tmp * scaling_factor);
332 }
333 { // RELATIVE_RESOLUTION_5
334 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
335 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_5_)) -
336 (static_cast<View>(in.get(C::execution_op_5_)) +
337 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
338 std::get<33>(evals) += (tmp * scaling_factor);
339 }
340 { // RELATIVE_RESOLUTION_6
341 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
342 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_6_)) -
343 (static_cast<View>(in.get(C::execution_op_6_)) +
344 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
345 std::get<34>(evals) += (tmp * scaling_factor);
346 }
347 {
348 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
349 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_0_)) -
350 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) *
351 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
352 std::get<35>(evals) += (tmp * scaling_factor);
353 }
354 {
355 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
356 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_1_)) -
357 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) *
358 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
359 std::get<36>(evals) += (tmp * scaling_factor);
360 }
361 {
362 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
363 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_2_)) -
364 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) *
365 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
366 std::get<37>(evals) += (tmp * scaling_factor);
367 }
368 {
369 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
370 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_3_)) -
371 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) *
372 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
373 std::get<38>(evals) += (tmp * scaling_factor);
374 }
375 {
376 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
377 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_4_)) -
378 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) *
379 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
380 std::get<39>(evals) += (tmp * scaling_factor);
381 }
382 {
383 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
384 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_5_)) -
385 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_) *
386 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
387 std::get<40>(evals) += (tmp * scaling_factor);
388 }
389 {
390 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
391 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_6_)) -
392 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_) *
393 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
394 std::get<41>(evals) += (tmp * scaling_factor);
395 }
396 {
397 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
398 auto tmp = CView(execution_SEL_SHOULD_RESOLVE_ADDRESS) *
399 (static_cast<View>(in.get(C::execution_highest_address)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
400 std::get<42>(evals) += (tmp * scaling_factor);
401 }
402 { // INDIRECT_GATING_0
403 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
404 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_0_)) -
405 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_0_) *
406 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_0_))) -
407 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
408 std::get<43>(evals) += (tmp * scaling_factor);
409 }
410 { // INDIRECT_GATING_1
411 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
412 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_1_)) -
413 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_1_) *
414 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_1_))) -
415 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
416 std::get<44>(evals) += (tmp * scaling_factor);
417 }
418 { // INDIRECT_GATING_2
419 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
420 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_2_)) -
421 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_2_) *
422 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_2_))) -
423 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
424 std::get<45>(evals) += (tmp * scaling_factor);
425 }
426 { // INDIRECT_GATING_3
427 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
428 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_3_)) -
429 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_3_) *
430 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_3_))) -
431 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
432 std::get<46>(evals) += (tmp * scaling_factor);
433 }
434 { // INDIRECT_GATING_4
435 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
436 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_4_)) -
437 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_4_) *
438 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_4_))) -
439 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
440 std::get<47>(evals) += (tmp * scaling_factor);
441 }
442 { // INDIRECT_GATING_5
443 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
444 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_5_)) -
445 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_5_) *
446 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_5_))) -
447 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
448 std::get<48>(evals) += (tmp * scaling_factor);
449 }
450 { // INDIRECT_GATING_6
451 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
452 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_6_)) -
453 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_6_) *
454 ((FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_6_))) -
455 static_cast<View>(in.get(C::execution_sel_base_address_failure))));
456 std::get<49>(evals) += (tmp * scaling_factor);
457 }
458 { // INDIRECT_PROPAGATION_0
459 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
460 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_0_))) *
461 (static_cast<View>(in.get(C::execution_rop_0_)) -
462 static_cast<View>(in.get(C::execution_op_after_relative_0_)));
463 std::get<50>(evals) += (tmp * scaling_factor);
464 }
465 { // INDIRECT_PROPAGATION_1
466 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
467 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_1_))) *
468 (static_cast<View>(in.get(C::execution_rop_1_)) -
469 static_cast<View>(in.get(C::execution_op_after_relative_1_)));
470 std::get<51>(evals) += (tmp * scaling_factor);
471 }
472 { // INDIRECT_PROPAGATION_2
473 using View = typename std::tuple_element_t<52, ContainerOverSubrelations>::View;
474 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_2_))) *
475 (static_cast<View>(in.get(C::execution_rop_2_)) -
476 static_cast<View>(in.get(C::execution_op_after_relative_2_)));
477 std::get<52>(evals) += (tmp * scaling_factor);
478 }
479 { // INDIRECT_PROPAGATION_3
480 using View = typename std::tuple_element_t<53, ContainerOverSubrelations>::View;
481 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_3_))) *
482 (static_cast<View>(in.get(C::execution_rop_3_)) -
483 static_cast<View>(in.get(C::execution_op_after_relative_3_)));
484 std::get<53>(evals) += (tmp * scaling_factor);
485 }
486 { // INDIRECT_PROPAGATION_4
487 using View = typename std::tuple_element_t<54, ContainerOverSubrelations>::View;
488 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_4_))) *
489 (static_cast<View>(in.get(C::execution_rop_4_)) -
490 static_cast<View>(in.get(C::execution_op_after_relative_4_)));
491 std::get<54>(evals) += (tmp * scaling_factor);
492 }
493 { // INDIRECT_PROPAGATION_5
494 using View = typename std::tuple_element_t<55, ContainerOverSubrelations>::View;
495 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_5_))) *
496 (static_cast<View>(in.get(C::execution_rop_5_)) -
497 static_cast<View>(in.get(C::execution_op_after_relative_5_)));
498 std::get<55>(evals) += (tmp * scaling_factor);
499 }
500 { // INDIRECT_PROPAGATION_6
501 using View = typename std::tuple_element_t<56, ContainerOverSubrelations>::View;
502 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_6_))) *
503 (static_cast<View>(in.get(C::execution_rop_6_)) -
504 static_cast<View>(in.get(C::execution_op_after_relative_6_)));
505 std::get<56>(evals) += (tmp * scaling_factor);
506 }
507 {
508 using View = typename std::tuple_element_t<57, ContainerOverSubrelations>::View;
509 auto tmp = static_cast<View>(in.get(C::execution_sel_some_final_check_failed)) *
510 (FF(1) - static_cast<View>(in.get(C::execution_sel_some_final_check_failed)));
511 std::get<57>(evals) += (tmp * scaling_factor);
512 }
513 { // BATCHED_TAGS_DIFF_CHECK
514 using View = typename std::tuple_element_t<58, ContainerOverSubrelations>::View;
515 auto tmp = CView(execution_BATCHED_TAGS_DIFF_EQ);
516 std::get<58>(evals) += (tmp * scaling_factor);
517 }
518 {
519 using View = typename std::tuple_element_t<59, ContainerOverSubrelations>::View;
520 auto tmp = static_cast<View>(in.get(C::execution_sel_addressing_error)) *
521 (FF(1) - static_cast<View>(in.get(C::execution_sel_addressing_error)));
522 std::get<59>(evals) += (tmp * scaling_factor);
523 }
524 { // ADDRESSING_COLLECTION_INV_CHECK
525 using View = typename std::tuple_element_t<60, ContainerOverSubrelations>::View;
526 auto tmp = CView(execution_ADDRESSING_COLLECTION_EQ);
527 std::get<60>(evals) += (tmp * scaling_factor);
528 }
529 { // NO_ADDRESSING_ERROR_IF_NOT_RESOLVING
530 using View = typename std::tuple_element_t<61, ContainerOverSubrelations>::View;
531 auto tmp = (FF(1) - CView(execution_SEL_SHOULD_RESOLVE_ADDRESS)) *
532 static_cast<View>(in.get(C::execution_sel_addressing_error));
533 std::get<61>(evals) += (tmp * scaling_factor);
534 }
535}
536
537} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:34
AvmFlavorSettings::FF FF
Definition field.hpp:10
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.