Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
memory_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 memoryImpl<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_FF = FF(0);
19 const auto memory_GLOB_ADDR_DIFF = (in.get(C::memory_global_addr_shift) - in.get(C::memory_global_addr));
20 const auto memory_TAG_FF_DIFF = (in.get(C::memory_tag) - constants_MEM_TAG_FF);
21
22 {
23 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
24 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_base)) *
25 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_base)));
26 std::get<0>(evals) += (tmp * scaling_factor);
27 }
28 {
29 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
30 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_0_)) *
31 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_0_)));
32 std::get<1>(evals) += (tmp * scaling_factor);
33 }
34 {
35 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
36 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_1_)) *
37 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_1_)));
38 std::get<2>(evals) += (tmp * scaling_factor);
39 }
40 {
41 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
42 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_2_)) *
43 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_2_)));
44 std::get<3>(evals) += (tmp * scaling_factor);
45 }
46 {
47 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
48 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_3_)) *
49 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_3_)));
50 std::get<4>(evals) += (tmp * scaling_factor);
51 }
52 {
53 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
54 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_4_)) *
55 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_4_)));
56 std::get<5>(evals) += (tmp * scaling_factor);
57 }
58 {
59 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
60 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_5_)) *
61 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_5_)));
62 std::get<6>(evals) += (tmp * scaling_factor);
63 }
64 {
65 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
66 auto tmp = static_cast<View>(in.get(C::memory_sel_addressing_indirect_6_)) *
67 (FF(1) - static_cast<View>(in.get(C::memory_sel_addressing_indirect_6_)));
68 std::get<7>(evals) += (tmp * scaling_factor);
69 }
70 {
71 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
72 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_0_)) *
73 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_0_)));
74 std::get<8>(evals) += (tmp * scaling_factor);
75 }
76 {
77 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
78 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_1_)) *
79 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_1_)));
80 std::get<9>(evals) += (tmp * scaling_factor);
81 }
82 {
83 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
84 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_2_)) *
85 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_2_)));
86 std::get<10>(evals) += (tmp * scaling_factor);
87 }
88 {
89 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
90 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_3_)) *
91 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_3_)));
92 std::get<11>(evals) += (tmp * scaling_factor);
93 }
94 {
95 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
96 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_4_)) *
97 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_4_)));
98 std::get<12>(evals) += (tmp * scaling_factor);
99 }
100 {
101 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
102 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_5_)) *
103 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_5_)));
104 std::get<13>(evals) += (tmp * scaling_factor);
105 }
106 {
107 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
108 auto tmp = static_cast<View>(in.get(C::memory_sel_register_op_6_)) *
109 (FF(1) - static_cast<View>(in.get(C::memory_sel_register_op_6_)));
110 std::get<14>(evals) += (tmp * scaling_factor);
111 }
112 {
113 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
114 auto tmp = static_cast<View>(in.get(C::memory_sel_data_copy_read)) *
115 (FF(1) - static_cast<View>(in.get(C::memory_sel_data_copy_read)));
116 std::get<15>(evals) += (tmp * scaling_factor);
117 }
118 {
119 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
120 auto tmp = static_cast<View>(in.get(C::memory_sel_data_copy_write)) *
121 (FF(1) - static_cast<View>(in.get(C::memory_sel_data_copy_write)));
122 std::get<16>(evals) += (tmp * scaling_factor);
123 }
124 {
125 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
126 auto tmp = static_cast<View>(in.get(C::memory_sel_get_contract_instance_exists_write)) *
127 (FF(1) - static_cast<View>(in.get(C::memory_sel_get_contract_instance_exists_write)));
128 std::get<17>(evals) += (tmp * scaling_factor);
129 }
130 {
131 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
132 auto tmp = static_cast<View>(in.get(C::memory_sel_get_contract_instance_member_write)) *
133 (FF(1) - static_cast<View>(in.get(C::memory_sel_get_contract_instance_member_write)));
134 std::get<18>(evals) += (tmp * scaling_factor);
135 }
136 {
137 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
138 auto tmp = static_cast<View>(in.get(C::memory_sel_unencrypted_log_read)) *
139 (FF(1) - static_cast<View>(in.get(C::memory_sel_unencrypted_log_read)));
140 std::get<19>(evals) += (tmp * scaling_factor);
141 }
142 {
143 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
144 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_read_0_)) *
145 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_read_0_)));
146 std::get<20>(evals) += (tmp * scaling_factor);
147 }
148 {
149 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
150 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_read_1_)) *
151 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_read_1_)));
152 std::get<21>(evals) += (tmp * scaling_factor);
153 }
154 {
155 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
156 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_read_2_)) *
157 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_read_2_)));
158 std::get<22>(evals) += (tmp * scaling_factor);
159 }
160 {
161 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
162 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_read_3_)) *
163 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_read_3_)));
164 std::get<23>(evals) += (tmp * scaling_factor);
165 }
166 {
167 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
168 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_write_0_)) *
169 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_write_0_)));
170 std::get<24>(evals) += (tmp * scaling_factor);
171 }
172 {
173 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
174 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_write_1_)) *
175 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_write_1_)));
176 std::get<25>(evals) += (tmp * scaling_factor);
177 }
178 {
179 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
180 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_write_2_)) *
181 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_write_2_)));
182 std::get<26>(evals) += (tmp * scaling_factor);
183 }
184 {
185 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
186 auto tmp = static_cast<View>(in.get(C::memory_sel_poseidon2_write_3_)) *
187 (FF(1) - static_cast<View>(in.get(C::memory_sel_poseidon2_write_3_)));
188 std::get<27>(evals) += (tmp * scaling_factor);
189 }
190 {
191 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
192 auto tmp =
193 static_cast<View>(in.get(C::memory_sel_keccak)) * (FF(1) - static_cast<View>(in.get(C::memory_sel_keccak)));
194 std::get<28>(evals) += (tmp * scaling_factor);
195 }
196 {
197 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
198 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_read)) *
199 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_read)));
200 std::get<29>(evals) += (tmp * scaling_factor);
201 }
202 {
203 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
204 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_0_)) *
205 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_0_)));
206 std::get<30>(evals) += (tmp * scaling_factor);
207 }
208 {
209 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
210 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_1_)) *
211 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_1_)));
212 std::get<31>(evals) += (tmp * scaling_factor);
213 }
214 {
215 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
216 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_2_)) *
217 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_2_)));
218 std::get<32>(evals) += (tmp * scaling_factor);
219 }
220 {
221 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
222 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_3_)) *
223 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_3_)));
224 std::get<33>(evals) += (tmp * scaling_factor);
225 }
226 {
227 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
228 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_4_)) *
229 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_4_)));
230 std::get<34>(evals) += (tmp * scaling_factor);
231 }
232 {
233 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
234 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_5_)) *
235 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_5_)));
236 std::get<35>(evals) += (tmp * scaling_factor);
237 }
238 {
239 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
240 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_6_)) *
241 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_6_)));
242 std::get<36>(evals) += (tmp * scaling_factor);
243 }
244 {
245 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
246 auto tmp = static_cast<View>(in.get(C::memory_sel_sha256_op_7_)) *
247 (FF(1) - static_cast<View>(in.get(C::memory_sel_sha256_op_7_)));
248 std::get<37>(evals) += (tmp * scaling_factor);
249 }
250 {
251 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
252 auto tmp = static_cast<View>(in.get(C::memory_sel_ecc_write_0_)) *
253 (FF(1) - static_cast<View>(in.get(C::memory_sel_ecc_write_0_)));
254 std::get<38>(evals) += (tmp * scaling_factor);
255 }
256 {
257 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
258 auto tmp = static_cast<View>(in.get(C::memory_sel_ecc_write_1_)) *
259 (FF(1) - static_cast<View>(in.get(C::memory_sel_ecc_write_1_)));
260 std::get<39>(evals) += (tmp * scaling_factor);
261 }
262 {
263 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
264 auto tmp = static_cast<View>(in.get(C::memory_sel_ecc_write_2_)) *
265 (FF(1) - static_cast<View>(in.get(C::memory_sel_ecc_write_2_)));
266 std::get<40>(evals) += (tmp * scaling_factor);
267 }
268 {
269 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
270 auto tmp = static_cast<View>(in.get(C::memory_sel_to_radix_write)) *
271 (FF(1) - static_cast<View>(in.get(C::memory_sel_to_radix_write)));
272 std::get<41>(evals) += (tmp * scaling_factor);
273 }
274 { // ACTIVE_ROW_NEEDS_PERM_SELECTOR
275 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
276 auto tmp =
277 (static_cast<View>(in.get(C::memory_sel)) -
278 (static_cast<View>(in.get(C::memory_sel_addressing_base)) +
279 static_cast<View>(in.get(C::memory_sel_addressing_indirect_0_)) +
280 static_cast<View>(in.get(C::memory_sel_addressing_indirect_1_)) +
281 static_cast<View>(in.get(C::memory_sel_addressing_indirect_2_)) +
282 static_cast<View>(in.get(C::memory_sel_addressing_indirect_3_)) +
283 static_cast<View>(in.get(C::memory_sel_addressing_indirect_4_)) +
284 static_cast<View>(in.get(C::memory_sel_addressing_indirect_5_)) +
285 static_cast<View>(in.get(C::memory_sel_addressing_indirect_6_)) +
286 static_cast<View>(in.get(C::memory_sel_register_op_0_)) +
287 static_cast<View>(in.get(C::memory_sel_register_op_1_)) +
288 static_cast<View>(in.get(C::memory_sel_register_op_2_)) +
289 static_cast<View>(in.get(C::memory_sel_register_op_3_)) +
290 static_cast<View>(in.get(C::memory_sel_register_op_4_)) +
291 static_cast<View>(in.get(C::memory_sel_register_op_5_)) +
292 static_cast<View>(in.get(C::memory_sel_register_op_6_)) +
293 static_cast<View>(in.get(C::memory_sel_data_copy_read)) +
294 static_cast<View>(in.get(C::memory_sel_data_copy_write)) +
295 static_cast<View>(in.get(C::memory_sel_get_contract_instance_exists_write)) +
296 static_cast<View>(in.get(C::memory_sel_get_contract_instance_member_write)) +
297 static_cast<View>(in.get(C::memory_sel_unencrypted_log_read)) +
298 static_cast<View>(in.get(C::memory_sel_poseidon2_read_0_)) +
299 static_cast<View>(in.get(C::memory_sel_poseidon2_read_1_)) +
300 static_cast<View>(in.get(C::memory_sel_poseidon2_read_2_)) +
301 static_cast<View>(in.get(C::memory_sel_poseidon2_read_3_)) +
302 static_cast<View>(in.get(C::memory_sel_poseidon2_write_0_)) +
303 static_cast<View>(in.get(C::memory_sel_poseidon2_write_1_)) +
304 static_cast<View>(in.get(C::memory_sel_poseidon2_write_2_)) +
305 static_cast<View>(in.get(C::memory_sel_poseidon2_write_3_)) +
306 static_cast<View>(in.get(C::memory_sel_keccak)) + static_cast<View>(in.get(C::memory_sel_sha256_read)) +
307 static_cast<View>(in.get(C::memory_sel_sha256_op_0_)) +
308 static_cast<View>(in.get(C::memory_sel_sha256_op_1_)) +
309 static_cast<View>(in.get(C::memory_sel_sha256_op_2_)) +
310 static_cast<View>(in.get(C::memory_sel_sha256_op_3_)) +
311 static_cast<View>(in.get(C::memory_sel_sha256_op_4_)) +
312 static_cast<View>(in.get(C::memory_sel_sha256_op_5_)) +
313 static_cast<View>(in.get(C::memory_sel_sha256_op_6_)) +
314 static_cast<View>(in.get(C::memory_sel_sha256_op_7_)) +
315 static_cast<View>(in.get(C::memory_sel_ecc_write_0_)) +
316 static_cast<View>(in.get(C::memory_sel_ecc_write_1_)) +
317 static_cast<View>(in.get(C::memory_sel_ecc_write_2_)) +
318 static_cast<View>(in.get(C::memory_sel_to_radix_write))));
319 std::get<42>(evals) += (tmp * scaling_factor);
320 }
321 {
322 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
323 auto tmp = static_cast<View>(in.get(C::memory_sel)) * (FF(1) - static_cast<View>(in.get(C::memory_sel)));
324 std::get<43>(evals) += (tmp * scaling_factor);
325 }
326 {
327 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
328 auto tmp = static_cast<View>(in.get(C::memory_last_access)) *
329 (FF(1) - static_cast<View>(in.get(C::memory_last_access)));
330 std::get<44>(evals) += (tmp * scaling_factor);
331 }
332 {
333 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
334 auto tmp = static_cast<View>(in.get(C::memory_rw)) * (FF(1) - static_cast<View>(in.get(C::memory_rw)));
335 std::get<45>(evals) += (tmp * scaling_factor);
336 }
337 {
338 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
339 auto tmp = static_cast<View>(in.get(C::memory_sel_tag_is_ff)) *
340 (FF(1) - static_cast<View>(in.get(C::memory_sel_tag_is_ff)));
341 std::get<46>(evals) += (tmp * scaling_factor);
342 }
343 { // MEM_CONTIGUOUS
344 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
345 auto tmp = (FF(1) - static_cast<View>(in.get(C::precomputed_first_row))) *
346 (FF(1) - static_cast<View>(in.get(C::memory_sel))) * static_cast<View>(in.get(C::memory_sel_shift));
347 std::get<47>(evals) += (tmp * scaling_factor);
348 }
349 { // SEL_RNG_CHK
350 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
351 auto tmp = (static_cast<View>(in.get(C::memory_sel_rng_chk)) -
352 static_cast<View>(in.get(C::memory_sel)) * static_cast<View>(in.get(C::memory_sel_shift)));
353 std::get<48>(evals) += (tmp * scaling_factor);
354 }
355 { // GLOBAL_ADDR
356 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
357 auto tmp = (static_cast<View>(in.get(C::memory_global_addr)) -
358 (static_cast<View>(in.get(C::memory_space_id)) * FF(4294967296UL) +
359 static_cast<View>(in.get(C::memory_address))));
360 std::get<49>(evals) += (tmp * scaling_factor);
361 }
362 { // TIMESTAMP
363 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
364 auto tmp = (static_cast<View>(in.get(C::memory_timestamp)) -
365 (FF(2) * static_cast<View>(in.get(C::memory_clk)) + static_cast<View>(in.get(C::memory_rw))));
366 std::get<50>(evals) += (tmp * scaling_factor);
367 }
368 { // LAST_ACCESS
369 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
370 auto tmp =
371 static_cast<View>(in.get(C::memory_sel_rng_chk)) *
372 (CView(memory_GLOB_ADDR_DIFF) * ((FF(1) - static_cast<View>(in.get(C::memory_last_access))) *
373 (FF(1) - static_cast<View>(in.get(C::memory_glob_addr_diff_inv))) +
374 static_cast<View>(in.get(C::memory_glob_addr_diff_inv))) -
375 static_cast<View>(in.get(C::memory_last_access)));
376 std::get<51>(evals) += (tmp * scaling_factor);
377 }
378 { // DIFF
379 using View = typename std::tuple_element_t<52, ContainerOverSubrelations>::View;
380 auto tmp =
381 (static_cast<View>(in.get(C::memory_diff)) -
382 static_cast<View>(in.get(C::memory_sel_rng_chk)) *
383 (static_cast<View>(in.get(C::memory_last_access)) * CView(memory_GLOB_ADDR_DIFF) +
384 (FF(1) - static_cast<View>(in.get(C::memory_last_access))) *
385 ((static_cast<View>(in.get(C::memory_timestamp_shift)) -
386 static_cast<View>(in.get(C::memory_timestamp))) -
387 static_cast<View>(in.get(C::memory_rw_shift)) * static_cast<View>(in.get(C::memory_rw)))));
388 std::get<52>(evals) += (tmp * scaling_factor);
389 }
390 { // DIFF_DECOMP
391 using View = typename std::tuple_element_t<53, ContainerOverSubrelations>::View;
392 auto tmp =
393 (static_cast<View>(in.get(C::memory_diff)) -
394 (static_cast<View>(in.get(C::memory_limb_0_)) + static_cast<View>(in.get(C::memory_limb_1_)) * FF(65536) +
395 static_cast<View>(in.get(C::memory_limb_2_)) * FF(4294967296UL)));
396 std::get<53>(evals) += (tmp * scaling_factor);
397 }
398 { // MEMORY_INIT_VALUE
399 using View = typename std::tuple_element_t<54, ContainerOverSubrelations>::View;
400 auto tmp =
401 (static_cast<View>(in.get(C::memory_last_access)) + static_cast<View>(in.get(C::precomputed_first_row))) *
402 (FF(1) - static_cast<View>(in.get(C::memory_rw_shift))) * static_cast<View>(in.get(C::memory_value_shift));
403 std::get<54>(evals) += (tmp * scaling_factor);
404 }
405 { // MEMORY_INIT_TAG
406 using View = typename std::tuple_element_t<55, ContainerOverSubrelations>::View;
407 auto tmp =
408 (static_cast<View>(in.get(C::memory_last_access)) + static_cast<View>(in.get(C::precomputed_first_row))) *
409 (FF(1) - static_cast<View>(in.get(C::memory_rw_shift))) *
410 (static_cast<View>(in.get(C::memory_tag_shift)) - CView(constants_MEM_TAG_FF));
411 std::get<55>(evals) += (tmp * scaling_factor);
412 }
413 { // READ_WRITE_CONSISTENCY_VALUE
414 using View = typename std::tuple_element_t<56, ContainerOverSubrelations>::View;
415 auto tmp = (FF(1) - static_cast<View>(in.get(C::memory_last_access))) *
416 (FF(1) - static_cast<View>(in.get(C::memory_rw_shift))) *
417 (static_cast<View>(in.get(C::memory_value_shift)) - static_cast<View>(in.get(C::memory_value)));
418 std::get<56>(evals) += (tmp * scaling_factor);
419 }
420 { // READ_WRITE_CONSISTENCY_TAG
421 using View = typename std::tuple_element_t<57, ContainerOverSubrelations>::View;
422 auto tmp = (FF(1) - static_cast<View>(in.get(C::memory_last_access))) *
423 (FF(1) - static_cast<View>(in.get(C::memory_rw_shift))) *
424 (static_cast<View>(in.get(C::memory_tag_shift)) - static_cast<View>(in.get(C::memory_tag)));
425 std::get<57>(evals) += (tmp * scaling_factor);
426 }
427 { // TAG_IS_FF
428 using View = typename std::tuple_element_t<58, ContainerOverSubrelations>::View;
429 auto tmp = static_cast<View>(in.get(C::memory_sel)) *
430 ((CView(memory_TAG_FF_DIFF) * (static_cast<View>(in.get(C::memory_sel_tag_is_ff)) *
431 (FF(1) - static_cast<View>(in.get(C::memory_tag_ff_diff_inv))) +
432 static_cast<View>(in.get(C::memory_tag_ff_diff_inv))) +
433 static_cast<View>(in.get(C::memory_sel_tag_is_ff))) -
434 FF(1));
435 std::get<58>(evals) += (tmp * scaling_factor);
436 }
437 { // SEL_RNG_WRITE
438 using View = typename std::tuple_element_t<59, ContainerOverSubrelations>::View;
439 auto tmp =
440 (static_cast<View>(in.get(C::memory_sel_rng_write)) -
441 static_cast<View>(in.get(C::memory_rw)) * (FF(1) - static_cast<View>(in.get(C::memory_sel_tag_is_ff))));
442 std::get<59>(evals) += (tmp * scaling_factor);
443 }
444}
445
446} // 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.