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 { // INDIRECT_RECONSTRUCTION
198 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
199 auto tmp = (CView(execution_SEL_SHOULD_RESOLVE_ADDRESS) * static_cast<View>(in.get(C::execution_indirect)) -
200 (FF(1) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_0_)) +
201 FF(2) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_0_)) +
202 FF(4) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_1_)) +
203 FF(8) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_1_)) +
204 FF(16) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_2_)) +
205 FF(32) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_2_)) +
206 FF(64) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_3_)) +
207 FF(128) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_3_)) +
208 FF(256) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_4_)) +
209 FF(512) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_4_)) +
210 FF(1024) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_5_)) +
211 FF(2048) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_5_)) +
212 FF(4096) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_6_)) +
213 FF(8192) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_6_)) +
214 FF(16384) * static_cast<View>(in.get(C::execution_sel_op_is_indirect_wire_7_)) +
215 FF(32768) * static_cast<View>(in.get(C::execution_sel_op_is_relative_wire_7_))));
216 std::get<16>(evals) += (tmp * scaling_factor);
217 }
218 {
219 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
220 auto tmp = static_cast<View>(in.get(C::execution_sel_do_base_check)) *
221 (FF(1) - static_cast<View>(in.get(C::execution_sel_do_base_check)));
222 std::get<17>(evals) += (tmp * scaling_factor);
223 }
224 { // NUM_RELATIVE_INV_CHECK
225 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
226 auto tmp = ((CView(execution_NUM_RELATIVE_X) *
227 (CView(execution_NUM_RELATIVE_E) * (FF(1) - CView(execution_NUM_RELATIVE_Y)) +
228 CView(execution_NUM_RELATIVE_Y)) -
229 FF(1)) +
230 CView(execution_NUM_RELATIVE_E));
231 std::get<18>(evals) += (tmp * scaling_factor);
232 }
233 {
234 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
235 auto tmp = static_cast<View>(in.get(C::execution_sel_base_address_failure)) *
236 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure)));
237 std::get<19>(evals) += (tmp * scaling_factor);
238 }
239 { // BASE_ADDRESS_CHECK
240 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
241 auto tmp =
242 ((CView(execution_BASE_CHECK_X) * (CView(execution_BASE_CHECK_E) * (FF(1) - CView(execution_BASE_CHECK_Y)) +
243 CView(execution_BASE_CHECK_Y)) -
244 FF(1)) +
245 CView(execution_BASE_CHECK_E));
246 std::get<20>(evals) += (tmp * scaling_factor);
247 }
248 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_0
249 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
250 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_0_)) *
251 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_)) +
252 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
253 std::get<21>(evals) += (tmp * scaling_factor);
254 }
255 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_1
256 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
257 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_1_)) *
258 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_)) +
259 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
260 std::get<22>(evals) += (tmp * scaling_factor);
261 }
262 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_2
263 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
264 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_2_)) *
265 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_)) +
266 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
267 std::get<23>(evals) += (tmp * scaling_factor);
268 }
269 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_3
270 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
271 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_3_)) *
272 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_)) +
273 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
274 std::get<24>(evals) += (tmp * scaling_factor);
275 }
276 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_4
277 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
278 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_4_)) *
279 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_)) +
280 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
281 std::get<25>(evals) += (tmp * scaling_factor);
282 }
283 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_5
284 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
285 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_5_)) *
286 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_)) +
287 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
288 std::get<26>(evals) += (tmp * scaling_factor);
289 }
290 { // NOT_RELATIVE_OR_BASE_FAILURE_NO_OVERFLOW_6
291 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
292 auto tmp = static_cast<View>(in.get(C::execution_sel_relative_overflow_6_)) *
293 ((FF(1) - CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_)) +
294 FF(2) * static_cast<View>(in.get(C::execution_sel_base_address_failure)));
295 std::get<27>(evals) += (tmp * scaling_factor);
296 }
297 { // RELATIVE_RESOLUTION_0
298 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
299 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_0_)) -
300 (static_cast<View>(in.get(C::execution_op_0_)) +
301 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
302 std::get<28>(evals) += (tmp * scaling_factor);
303 }
304 { // RELATIVE_RESOLUTION_1
305 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
306 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_1_)) -
307 (static_cast<View>(in.get(C::execution_op_1_)) +
308 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
309 std::get<29>(evals) += (tmp * scaling_factor);
310 }
311 { // RELATIVE_RESOLUTION_2
312 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
313 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_2_)) -
314 (static_cast<View>(in.get(C::execution_op_2_)) +
315 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
316 std::get<30>(evals) += (tmp * scaling_factor);
317 }
318 { // RELATIVE_RESOLUTION_3
319 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
320 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_3_)) -
321 (static_cast<View>(in.get(C::execution_op_3_)) +
322 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
323 std::get<31>(evals) += (tmp * scaling_factor);
324 }
325 { // RELATIVE_RESOLUTION_4
326 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
327 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_4_)) -
328 (static_cast<View>(in.get(C::execution_op_4_)) +
329 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
330 std::get<32>(evals) += (tmp * scaling_factor);
331 }
332 { // RELATIVE_RESOLUTION_5
333 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
334 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_5_)) -
335 (static_cast<View>(in.get(C::execution_op_5_)) +
336 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
337 std::get<33>(evals) += (tmp * scaling_factor);
338 }
339 { // RELATIVE_RESOLUTION_6
340 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
341 auto tmp = (static_cast<View>(in.get(C::execution_op_after_relative_6_)) -
342 (static_cast<View>(in.get(C::execution_op_6_)) +
343 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_) * CView(execution_RELATIVE_RESOLUTION_FILTER)));
344 std::get<34>(evals) += (tmp * scaling_factor);
345 }
346 {
347 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
348 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_0_)) -
349 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_0_) *
350 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
351 std::get<35>(evals) += (tmp * scaling_factor);
352 }
353 {
354 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
355 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_1_)) -
356 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_1_) *
357 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
358 std::get<36>(evals) += (tmp * scaling_factor);
359 }
360 {
361 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
362 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_2_)) -
363 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_2_) *
364 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
365 std::get<37>(evals) += (tmp * scaling_factor);
366 }
367 {
368 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
369 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_3_)) -
370 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_3_) *
371 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
372 std::get<38>(evals) += (tmp * scaling_factor);
373 }
374 {
375 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
376 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_4_)) -
377 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_4_) *
378 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
379 std::get<39>(evals) += (tmp * scaling_factor);
380 }
381 {
382 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
383 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_5_)) -
384 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_5_) *
385 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
386 std::get<40>(evals) += (tmp * scaling_factor);
387 }
388 {
389 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
390 auto tmp = (static_cast<View>(in.get(C::execution_sel_op_do_overflow_check_6_)) -
391 CView(execution_SEL_OP_IS_RELATIVE_EFFECTIVE_6_) *
392 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
393 std::get<41>(evals) += (tmp * scaling_factor);
394 }
395 {
396 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
397 auto tmp = CView(execution_SEL_SHOULD_RESOLVE_ADDRESS) *
398 (static_cast<View>(in.get(C::execution_highest_address)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
399 std::get<42>(evals) += (tmp * scaling_factor);
400 }
401 { // INDIRECT_GATING_0
402 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
403 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_0_)) -
404 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_0_) *
405 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_0_))) *
406 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
407 std::get<43>(evals) += (tmp * scaling_factor);
408 }
409 { // INDIRECT_GATING_1
410 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
411 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_1_)) -
412 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_1_) *
413 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_1_))) *
414 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
415 std::get<44>(evals) += (tmp * scaling_factor);
416 }
417 { // INDIRECT_GATING_2
418 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
419 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_2_)) -
420 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_2_) *
421 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_2_))) *
422 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
423 std::get<45>(evals) += (tmp * scaling_factor);
424 }
425 { // INDIRECT_GATING_3
426 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
427 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_3_)) -
428 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_3_) *
429 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_3_))) *
430 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
431 std::get<46>(evals) += (tmp * scaling_factor);
432 }
433 { // INDIRECT_GATING_4
434 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
435 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_4_)) -
436 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_4_) *
437 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_4_))) *
438 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
439 std::get<47>(evals) += (tmp * scaling_factor);
440 }
441 { // INDIRECT_GATING_5
442 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
443 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_5_)) -
444 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_5_) *
445 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_5_))) *
446 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
447 std::get<48>(evals) += (tmp * scaling_factor);
448 }
449 { // INDIRECT_GATING_6
450 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
451 auto tmp = (static_cast<View>(in.get(C::execution_sel_should_apply_indirection_6_)) -
452 CView(execution_SEL_OP_IS_INDIRECT_EFFECTIVE_6_) *
453 (FF(1) - static_cast<View>(in.get(C::execution_sel_relative_overflow_6_))) *
454 (FF(1) - static_cast<View>(in.get(C::execution_sel_base_address_failure))));
455 std::get<49>(evals) += (tmp * scaling_factor);
456 }
457 { // INDIRECT_PROPAGATION_0
458 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
459 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_0_))) *
460 (static_cast<View>(in.get(C::execution_rop_0_)) -
461 static_cast<View>(in.get(C::execution_op_after_relative_0_)));
462 std::get<50>(evals) += (tmp * scaling_factor);
463 }
464 { // INDIRECT_PROPAGATION_1
465 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
466 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_1_))) *
467 (static_cast<View>(in.get(C::execution_rop_1_)) -
468 static_cast<View>(in.get(C::execution_op_after_relative_1_)));
469 std::get<51>(evals) += (tmp * scaling_factor);
470 }
471 { // INDIRECT_PROPAGATION_2
472 using View = typename std::tuple_element_t<52, ContainerOverSubrelations>::View;
473 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_2_))) *
474 (static_cast<View>(in.get(C::execution_rop_2_)) -
475 static_cast<View>(in.get(C::execution_op_after_relative_2_)));
476 std::get<52>(evals) += (tmp * scaling_factor);
477 }
478 { // INDIRECT_PROPAGATION_3
479 using View = typename std::tuple_element_t<53, ContainerOverSubrelations>::View;
480 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_3_))) *
481 (static_cast<View>(in.get(C::execution_rop_3_)) -
482 static_cast<View>(in.get(C::execution_op_after_relative_3_)));
483 std::get<53>(evals) += (tmp * scaling_factor);
484 }
485 { // INDIRECT_PROPAGATION_4
486 using View = typename std::tuple_element_t<54, ContainerOverSubrelations>::View;
487 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_4_))) *
488 (static_cast<View>(in.get(C::execution_rop_4_)) -
489 static_cast<View>(in.get(C::execution_op_after_relative_4_)));
490 std::get<54>(evals) += (tmp * scaling_factor);
491 }
492 { // INDIRECT_PROPAGATION_5
493 using View = typename std::tuple_element_t<55, ContainerOverSubrelations>::View;
494 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_5_))) *
495 (static_cast<View>(in.get(C::execution_rop_5_)) -
496 static_cast<View>(in.get(C::execution_op_after_relative_5_)));
497 std::get<55>(evals) += (tmp * scaling_factor);
498 }
499 { // INDIRECT_PROPAGATION_6
500 using View = typename std::tuple_element_t<56, ContainerOverSubrelations>::View;
501 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_should_apply_indirection_6_))) *
502 (static_cast<View>(in.get(C::execution_rop_6_)) -
503 static_cast<View>(in.get(C::execution_op_after_relative_6_)));
504 std::get<56>(evals) += (tmp * scaling_factor);
505 }
506 {
507 using View = typename std::tuple_element_t<57, ContainerOverSubrelations>::View;
508 auto tmp = static_cast<View>(in.get(C::execution_sel_some_final_check_failed)) *
509 (FF(1) - static_cast<View>(in.get(C::execution_sel_some_final_check_failed)));
510 std::get<57>(evals) += (tmp * scaling_factor);
511 }
512 { // BATCHED_TAGS_DIFF_CHECK
513 using View = typename std::tuple_element_t<58, ContainerOverSubrelations>::View;
514 auto tmp = CView(execution_BATCHED_TAGS_DIFF_EQ);
515 std::get<58>(evals) += (tmp * scaling_factor);
516 }
517 {
518 using View = typename std::tuple_element_t<59, ContainerOverSubrelations>::View;
519 auto tmp = static_cast<View>(in.get(C::execution_sel_addressing_error)) *
520 (FF(1) - static_cast<View>(in.get(C::execution_sel_addressing_error)));
521 std::get<59>(evals) += (tmp * scaling_factor);
522 }
523 { // ADDRESSING_COLLECTION_INV_CHECK
524 using View = typename std::tuple_element_t<60, ContainerOverSubrelations>::View;
525 auto tmp = CView(execution_ADDRESSING_COLLECTION_EQ);
526 std::get<60>(evals) += (tmp * scaling_factor);
527 }
528 {
529 using View = typename std::tuple_element_t<61, ContainerOverSubrelations>::View;
530 auto tmp = (FF(1) - CView(execution_SEL_SHOULD_RESOLVE_ADDRESS)) *
531 static_cast<View>(in.get(C::execution_sel_addressing_error));
532 std::get<61>(evals) += (tmp * scaling_factor);
533 }
534}
535
536} // 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.