Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
data_copy_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
5
6namespace bb::avm2 {
7
8template <typename FF_>
9template <typename ContainerOverSubrelations, typename AllEntities>
10void data_copyImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
11 const AllEntities& in,
12 [[maybe_unused]] const RelationParameters<FF_>&,
13 [[maybe_unused]] const FF_& scaling_factor)
14{
15 using C = ColumnAndShifts;
16
17 PROFILE_THIS_NAME("accumulate/data_copy");
18
19 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
20 const auto data_copy_SEL = in.get(C::data_copy_sel_rd_copy) + in.get(C::data_copy_sel_cd_copy);
21 const auto data_copy_MAX_READ_ADDR = in.get(C::data_copy_src_addr) + in.get(C::data_copy_max_read_index);
22 const auto data_copy_MAX_WRITE_ADDR = in.get(C::data_copy_dst_addr) + in.get(C::data_copy_copy_size);
23 const auto data_copy_SEL_PERFORM_COPY =
24 data_copy_SEL * (FF(1) - in.get(C::data_copy_err)) * (FF(1) - in.get(C::data_copy_sel_write_count_is_zero));
25 const auto data_copy_WRITE_COUNT_MINUS_ONE = (in.get(C::data_copy_copy_size) - FF(1));
26
27 {
28 using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>;
29 auto tmp = in.get(C::data_copy_sel_cd_copy) * (FF(1) - in.get(C::data_copy_sel_cd_copy));
30 tmp *= scaling_factor;
31 std::get<0>(evals) += typename Accumulator::View(tmp);
32 }
33 {
34 using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>;
35 auto tmp = in.get(C::data_copy_sel_rd_copy) * (FF(1) - in.get(C::data_copy_sel_rd_copy));
36 tmp *= scaling_factor;
37 std::get<1>(evals) += typename Accumulator::View(tmp);
38 }
39 {
40 using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>;
41 auto tmp = data_copy_SEL * (in.get(C::data_copy_thirty_two) - FF(32));
42 tmp *= scaling_factor;
43 std::get<2>(evals) += typename Accumulator::View(tmp);
44 }
45 {
46 using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>;
47 auto tmp = in.get(C::data_copy_sel_start) * (FF(1) - data_copy_SEL);
48 tmp *= scaling_factor;
49 std::get<3>(evals) += typename Accumulator::View(tmp);
50 }
51 {
52 using Accumulator = typename std::tuple_element_t<4, ContainerOverSubrelations>;
53 auto tmp = in.get(C::data_copy_sel_end) * (FF(1) - data_copy_SEL);
54 tmp *= scaling_factor;
55 std::get<4>(evals) += typename Accumulator::View(tmp);
56 }
57 {
58 using Accumulator = typename std::tuple_element_t<5, ContainerOverSubrelations>;
59 auto tmp = in.get(C::data_copy_is_top_level) * (FF(1) - in.get(C::data_copy_is_top_level));
60 tmp *= scaling_factor;
61 std::get<5>(evals) += typename Accumulator::View(tmp);
62 }
63 { // TOP_LEVEL_COND
64 using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>;
65 auto tmp = in.get(C::data_copy_sel_cd_copy) *
66 ((in.get(C::data_copy_src_context_id) *
67 (in.get(C::data_copy_is_top_level) * (FF(1) - in.get(C::data_copy_parent_id_inv)) +
68 in.get(C::data_copy_parent_id_inv)) -
69 FF(1)) +
70 in.get(C::data_copy_is_top_level));
71 tmp *= scaling_factor;
72 std::get<6>(evals) += typename Accumulator::View(tmp);
73 }
74 {
75 using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>;
76 auto tmp = (in.get(C::data_copy_offset_plus_size) -
77 in.get(C::data_copy_sel_start) * (in.get(C::data_copy_offset) + in.get(C::data_copy_copy_size)));
78 tmp *= scaling_factor;
79 std::get<7>(evals) += typename Accumulator::View(tmp);
80 }
81 {
82 using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>;
83 auto tmp = (in.get(C::data_copy_max_read_index) -
84 in.get(C::data_copy_sel_start) *
85 ((in.get(C::data_copy_src_data_size) - in.get(C::data_copy_offset_plus_size)) *
86 in.get(C::data_copy_offset_plus_size_is_gt) +
87 in.get(C::data_copy_offset_plus_size)));
88 tmp *= scaling_factor;
89 std::get<8>(evals) += typename Accumulator::View(tmp);
90 }
91 {
92 using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>;
93 auto tmp = in.get(C::data_copy_src_out_of_range_err) * (FF(1) - in.get(C::data_copy_src_out_of_range_err));
94 tmp *= scaling_factor;
95 std::get<9>(evals) += typename Accumulator::View(tmp);
96 }
97 {
98 using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>;
99 auto tmp = in.get(C::data_copy_dst_out_of_range_err) * (FF(1) - in.get(C::data_copy_dst_out_of_range_err));
100 tmp *= scaling_factor;
101 std::get<10>(evals) += typename Accumulator::View(tmp);
102 }
103 {
104 using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>;
105 auto tmp =
106 in.get(C::data_copy_sel_start) * (in.get(C::data_copy_max_mem_addr) - constants_AVM_HIGHEST_MEM_ADDRESS);
107 tmp *= scaling_factor;
108 std::get<11>(evals) += typename Accumulator::View(tmp);
109 }
110 {
111 using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>;
112 auto tmp = (in.get(C::data_copy_max_read_addr) - in.get(C::data_copy_sel_start) * data_copy_MAX_READ_ADDR);
113 tmp *= scaling_factor;
114 std::get<12>(evals) += typename Accumulator::View(tmp);
115 }
116 {
117 using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>;
118 auto tmp = (in.get(C::data_copy_max_write_addr) - in.get(C::data_copy_sel_start) * data_copy_MAX_WRITE_ADDR);
119 tmp *= scaling_factor;
120 std::get<13>(evals) += typename Accumulator::View(tmp);
121 }
122 {
123 using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>;
124 auto tmp = (in.get(C::data_copy_err) - (FF(1) - (FF(1) - in.get(C::data_copy_dst_out_of_range_err)) *
125 (FF(1) - in.get(C::data_copy_src_out_of_range_err))));
126 tmp *= scaling_factor;
127 std::get<14>(evals) += typename Accumulator::View(tmp);
128 }
129 {
130 using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>;
131 auto tmp = in.get(C::data_copy_sel_start_no_err) * (FF(1) - in.get(C::data_copy_sel_start_no_err));
132 tmp *= scaling_factor;
133 std::get<15>(evals) += typename Accumulator::View(tmp);
134 }
135 {
136 using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>;
137 auto tmp = (in.get(C::data_copy_sel_start_no_err) -
138 in.get(C::data_copy_sel_start) * (FF(1) - in.get(C::data_copy_err)));
139 tmp *= scaling_factor;
140 std::get<16>(evals) += typename Accumulator::View(tmp);
141 }
142 { // START_AFTER_END
143 using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>;
144 auto tmp = (in.get(C::data_copy_sel_cd_copy_shift) + in.get(C::data_copy_sel_rd_copy_shift)) *
145 in.get(C::data_copy_sel_end) * (in.get(C::data_copy_sel_start_shift) - FF(1));
146 tmp *= scaling_factor;
147 std::get<17>(evals) += typename Accumulator::View(tmp);
148 }
149 { // ZERO_SIZED_WRITE
150 using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>;
151 auto tmp = in.get(C::data_copy_sel_start_no_err) *
152 ((in.get(C::data_copy_copy_size) * (in.get(C::data_copy_sel_write_count_is_zero) *
153 (FF(1) - in.get(C::data_copy_write_count_zero_inv)) +
154 in.get(C::data_copy_write_count_zero_inv)) -
155 FF(1)) +
156 in.get(C::data_copy_sel_write_count_is_zero));
157 tmp *= scaling_factor;
158 std::get<18>(evals) += typename Accumulator::View(tmp);
159 }
160 { // END_IF_WRITE_IS_ZERO
161 using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>;
162 auto tmp = in.get(C::data_copy_sel_start_no_err) * in.get(C::data_copy_sel_write_count_is_zero) *
163 (in.get(C::data_copy_sel_end) - FF(1));
164 tmp *= scaling_factor;
165 std::get<19>(evals) += typename Accumulator::View(tmp);
166 }
167 { // END_WRITE_CONDITION
168 using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>;
169 auto tmp = data_copy_SEL_PERFORM_COPY *
170 ((data_copy_WRITE_COUNT_MINUS_ONE *
171 (in.get(C::data_copy_sel_end) * (FF(1) - in.get(C::data_copy_write_count_minus_one_inv)) +
172 in.get(C::data_copy_write_count_minus_one_inv)) -
173 FF(1)) +
174 in.get(C::data_copy_sel_end));
175 tmp *= scaling_factor;
176 std::get<20>(evals) += typename Accumulator::View(tmp);
177 }
178 { // END_ON_ERR
179 using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>;
180 auto tmp = in.get(C::data_copy_err) * (in.get(C::data_copy_sel_end) - FF(1));
181 tmp *= scaling_factor;
182 std::get<21>(evals) += typename Accumulator::View(tmp);
183 }
184 { // INIT_READS_LEFT
185 using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>;
186 auto tmp =
187 in.get(C::data_copy_sel_start_no_err) * (FF(1) - in.get(C::data_copy_sel_write_count_is_zero)) *
188 (in.get(C::data_copy_reads_left) - (in.get(C::data_copy_max_read_index) - in.get(C::data_copy_offset)) *
189 (FF(1) - in.get(C::data_copy_offset_gt_max_read_index)));
190 tmp *= scaling_factor;
191 std::get<22>(evals) += typename Accumulator::View(tmp);
192 }
193 {
194 using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>;
195 auto tmp = (in.get(C::data_copy_sel_mem_write) - data_copy_SEL_PERFORM_COPY);
196 tmp *= scaling_factor;
197 std::get<23>(evals) += typename Accumulator::View(tmp);
198 }
199 { // DECR_COPY_SIZE
200 using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>;
201 auto tmp = data_copy_SEL * (FF(1) - in.get(C::data_copy_sel_end)) *
202 ((in.get(C::data_copy_copy_size_shift) - in.get(C::data_copy_copy_size)) + FF(1));
203 tmp *= scaling_factor;
204 std::get<24>(evals) += typename Accumulator::View(tmp);
205 }
206 { // INCR_WRITE_ADDR
207 using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>;
208 auto tmp = (FF(1) - in.get(C::precomputed_first_row)) * data_copy_SEL * (FF(1) - in.get(C::data_copy_sel_end)) *
209 ((in.get(C::data_copy_dst_addr_shift) - in.get(C::data_copy_dst_addr)) - FF(1));
210 tmp *= scaling_factor;
211 std::get<25>(evals) += typename Accumulator::View(tmp);
212 }
213 { // INIT_READ_ADDR
214 using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>;
215 auto tmp = in.get(C::data_copy_sel_start_no_err) * (FF(1) - in.get(C::data_copy_sel_write_count_is_zero)) *
216 ((in.get(C::data_copy_read_addr) - in.get(C::data_copy_src_addr)) - in.get(C::data_copy_offset));
217 tmp *= scaling_factor;
218 std::get<26>(evals) += typename Accumulator::View(tmp);
219 }
220 { // INCR_READ_ADDR
221 using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>;
222 auto tmp = data_copy_SEL * (FF(1) - in.get(C::data_copy_padding)) * (FF(1) - in.get(C::data_copy_sel_end)) *
223 ((in.get(C::data_copy_read_addr_shift) - in.get(C::data_copy_read_addr)) - FF(1));
224 tmp *= scaling_factor;
225 std::get<27>(evals) += typename Accumulator::View(tmp);
226 }
227 { // DECR_READ_COUNT
228 using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>;
229 auto tmp = data_copy_SEL * (FF(1) - in.get(C::data_copy_padding)) * (FF(1) - in.get(C::data_copy_sel_end)) *
230 ((in.get(C::data_copy_reads_left_shift) - in.get(C::data_copy_reads_left)) + FF(1));
231 tmp *= scaling_factor;
232 std::get<28>(evals) += typename Accumulator::View(tmp);
233 }
234 { // PADDING_CONDITION
235 using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>;
236 auto tmp = data_copy_SEL_PERFORM_COPY *
237 ((in.get(C::data_copy_reads_left) *
238 (in.get(C::data_copy_padding) * (FF(1) - in.get(C::data_copy_reads_left_inv)) +
239 in.get(C::data_copy_reads_left_inv)) -
240 FF(1)) +
241 in.get(C::data_copy_padding));
242 tmp *= scaling_factor;
243 std::get<29>(evals) += typename Accumulator::View(tmp);
244 }
245 {
246 using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>;
247 auto tmp = (in.get(C::data_copy_sel_mem_read) - data_copy_SEL_PERFORM_COPY *
248 (FF(1) - in.get(C::data_copy_is_top_level)) *
249 (FF(1) - in.get(C::data_copy_padding)));
250 tmp *= scaling_factor;
251 std::get<30>(evals) += typename Accumulator::View(tmp);
252 }
253 { // PAD_VALUE
254 using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>;
255 auto tmp = data_copy_SEL_PERFORM_COPY * in.get(C::data_copy_padding) * in.get(C::data_copy_value);
256 tmp *= scaling_factor;
257 std::get<31>(evals) += typename Accumulator::View(tmp);
258 }
259 { // CD_COPY_COLUMN
260 using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>;
261 auto tmp = (in.get(C::data_copy_cd_copy_col_read) -
262 data_copy_SEL_PERFORM_COPY * (FF(1) - in.get(C::data_copy_padding)) *
263 in.get(C::data_copy_is_top_level) * in.get(C::data_copy_sel_cd_copy));
264 tmp *= scaling_factor;
265 std::get<32>(evals) += typename Accumulator::View(tmp);
266 }
267 {
268 using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>;
269 auto tmp = (in.get(C::data_copy_sel_cd_copy_start) -
270 in.get(C::data_copy_sel_start) * in.get(C::data_copy_sel_cd_copy));
271 tmp *= scaling_factor;
272 std::get<33>(evals) += typename Accumulator::View(tmp);
273 }
274 {
275 using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>;
276 auto tmp = (in.get(C::data_copy_sel_rd_copy_start) -
277 in.get(C::data_copy_sel_start) * in.get(C::data_copy_sel_rd_copy));
278 tmp *= scaling_factor;
279 std::get<34>(evals) += typename Accumulator::View(tmp);
280 }
281}
282
283} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:35
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define PROFILE_THIS_NAME(name)
Definition op_count.hpp:16
Container for parameters used by the grand product (permutation, lookup) Honk relations.