Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
instr_fetching_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 instr_fetchingImpl<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_AVM_PC_SIZE_IN_BITS = FF(32);
19 const auto instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR = in.get(C::instr_fetching_pc_out_of_range) +
20 in.get(C::instr_fetching_opcode_out_of_range) +
21 in.get(C::instr_fetching_instr_out_of_range);
22 const auto instr_fetching_SEL_OP_DC_17 =
23 in.get(C::instr_fetching_sel_op_dc_2) + in.get(C::instr_fetching_sel_op_dc_6);
24
25 {
26 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
27 auto tmp = static_cast<View>(in.get(C::instr_fetching_sel)) *
28 (FF(1) - static_cast<View>(in.get(C::instr_fetching_sel)));
29 std::get<0>(evals) += (tmp * scaling_factor);
30 }
31 {
32 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
33 auto tmp = static_cast<View>(in.get(C::instr_fetching_pc_out_of_range)) *
34 (FF(1) - static_cast<View>(in.get(C::instr_fetching_pc_out_of_range)));
35 std::get<1>(evals) += (tmp * scaling_factor);
36 }
37 {
38 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
39 auto tmp = static_cast<View>(in.get(C::instr_fetching_instr_out_of_range)) *
40 (FF(1) - static_cast<View>(in.get(C::instr_fetching_instr_out_of_range)));
41 std::get<2>(evals) += (tmp * scaling_factor);
42 }
43 {
44 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
45 auto tmp = static_cast<View>(in.get(C::instr_fetching_opcode_out_of_range)) *
46 (FF(1) - static_cast<View>(in.get(C::instr_fetching_opcode_out_of_range)));
47 std::get<3>(evals) += (tmp * scaling_factor);
48 }
49 {
50 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
51 auto tmp = static_cast<View>(in.get(C::instr_fetching_tag_out_of_range)) *
52 (FF(1) - static_cast<View>(in.get(C::instr_fetching_tag_out_of_range)));
53 std::get<4>(evals) += (tmp * scaling_factor);
54 }
55 {
56 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
57 auto tmp = (static_cast<View>(in.get(C::instr_fetching_sel_parsing_err)) -
58 (CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR) +
59 static_cast<View>(in.get(C::instr_fetching_tag_out_of_range))));
60 std::get<5>(evals) += (tmp * scaling_factor);
61 }
62 {
63 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
64 auto tmp = static_cast<View>(in.get(C::instr_fetching_sel_parsing_err)) *
65 (FF(1) - static_cast<View>(in.get(C::instr_fetching_sel_parsing_err)));
66 std::get<6>(evals) += (tmp * scaling_factor);
67 }
68 { // PC_OUT_OF_RANGE_TOGGLE
69 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
70 auto tmp = (static_cast<View>(in.get(C::instr_fetching_pc_abs_diff)) -
71 static_cast<View>(in.get(C::instr_fetching_sel)) *
72 (((FF(2) * static_cast<View>(in.get(C::instr_fetching_pc_out_of_range)) - FF(1)) *
73 (static_cast<View>(in.get(C::instr_fetching_pc)) -
74 static_cast<View>(in.get(C::instr_fetching_bytecode_size))) -
75 FF(1)) +
76 static_cast<View>(in.get(C::instr_fetching_pc_out_of_range))));
77 std::get<7>(evals) += (tmp * scaling_factor);
78 }
79 {
80 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
81 auto tmp =
82 static_cast<View>(in.get(C::instr_fetching_sel)) *
83 (static_cast<View>(in.get(C::instr_fetching_pc_size_in_bits)) - CView(constants_AVM_PC_SIZE_IN_BITS));
84 std::get<8>(evals) += (tmp * scaling_factor);
85 }
86 { // INSTR_OUT_OF_RANGE_TOGGLE
87 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
88 auto tmp = (static_cast<View>(in.get(C::instr_fetching_instr_abs_diff)) -
89 ((FF(2) * static_cast<View>(in.get(C::instr_fetching_instr_out_of_range)) - FF(1)) *
90 (static_cast<View>(in.get(C::instr_fetching_instr_size)) -
91 static_cast<View>(in.get(C::instr_fetching_bytes_to_read))) -
92 static_cast<View>(in.get(C::instr_fetching_instr_out_of_range))));
93 std::get<9>(evals) += (tmp * scaling_factor);
94 }
95 { // TAG_VALUE
96 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
97 auto tmp = (static_cast<View>(in.get(C::instr_fetching_tag_value)) -
98 ((static_cast<View>(in.get(C::instr_fetching_sel_has_tag)) -
99 static_cast<View>(in.get(C::instr_fetching_sel_tag_is_op2))) *
100 static_cast<View>(in.get(C::instr_fetching_op3)) +
101 static_cast<View>(in.get(C::instr_fetching_sel_tag_is_op2)) *
102 static_cast<View>(in.get(C::instr_fetching_op2))));
103 std::get<10>(evals) += (tmp * scaling_factor);
104 }
105 {
106 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
107 auto tmp = (static_cast<View>(in.get(C::instr_fetching_sel_pc_in_range)) -
108 static_cast<View>(in.get(C::instr_fetching_sel)) *
109 (FF(1) - static_cast<View>(in.get(C::instr_fetching_pc_out_of_range))));
110 std::get<11>(evals) += (tmp * scaling_factor);
111 }
112 { // INDIRECT_BYTES_DECOMPOSITION
113 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
114 auto tmp =
115 (static_cast<View>(in.get(C::instr_fetching_indirect)) -
116 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
117 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
118 (static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(256) +
119 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(1)) +
120 CView(instr_fetching_SEL_OP_DC_17) * static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(1)));
121 std::get<12>(evals) += (tmp * scaling_factor);
122 }
123 { // OP1_BYTES_DECOMPOSITION
124 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
125 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op1)) -
126 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
127 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
128 (static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(256) +
129 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1)) +
130 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_2)) *
131 (static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(256) +
132 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(1)) +
133 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_6)) *
134 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(1) +
135 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_15)) *
136 (static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(16777216) +
137 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(65536) +
138 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(256) +
139 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1))));
140 std::get<13>(evals) += (tmp * scaling_factor);
141 }
142 { // OP2_BYTES_DECOMPOSITION
143 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
144 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op2)) -
145 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
146 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
147 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(256) +
148 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1)) +
149 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_3)) *
150 (static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(256) +
151 static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(1)) +
152 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_6)) *
153 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(1) +
154 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_8)) *
155 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1) +
156 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_16)) *
157 (static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(16777216) +
158 static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(65536) +
159 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(256) +
160 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1))));
161 std::get<14>(evals) += (tmp * scaling_factor);
162 }
163 { // OP3_BYTES_DECOMPOSITION
164 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
165 auto tmp =
166 (static_cast<View>(in.get(C::instr_fetching_op3)) -
167 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
168 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
169 (static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(256) +
170 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(1)) +
171 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_4)) *
172 (static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(256) +
173 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1)) +
174 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_7)) *
175 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1) +
176 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_9)) *
177 (static_cast<View>(in.get(C::instr_fetching_bd5)) *
178 FF(uint256_t{ 0UL, 0UL, 0UL, 72057594037927936UL }) +
179 static_cast<View>(in.get(C::instr_fetching_bd6)) *
180 FF(uint256_t{ 0UL, 0UL, 0UL, 281474976710656UL }) +
181 static_cast<View>(in.get(C::instr_fetching_bd7)) *
182 FF(uint256_t{ 0UL, 0UL, 0UL, 1099511627776UL }) +
183 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(uint256_t{ 0UL, 0UL, 0UL, 4294967296UL }) +
184 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(uint256_t{ 0UL, 0UL, 0UL, 16777216UL }) +
185 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(uint256_t{ 0UL, 0UL, 0UL, 65536UL }) +
186 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(uint256_t{ 0UL, 0UL, 0UL, 256UL }) +
187 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(uint256_t{ 0UL, 0UL, 0UL, 1UL }) +
188 static_cast<View>(in.get(C::instr_fetching_bd13)) *
189 FF(uint256_t{ 0UL, 0UL, 72057594037927936UL, 0UL }) +
190 static_cast<View>(in.get(C::instr_fetching_bd14)) *
191 FF(uint256_t{ 0UL, 0UL, 281474976710656UL, 0UL }) +
192 static_cast<View>(in.get(C::instr_fetching_bd15)) *
193 FF(uint256_t{ 0UL, 0UL, 1099511627776UL, 0UL }) +
194 static_cast<View>(in.get(C::instr_fetching_bd16)) *
195 FF(uint256_t{ 0UL, 0UL, 4294967296UL, 0UL }) +
196 static_cast<View>(in.get(C::instr_fetching_bd17)) * FF(uint256_t{ 0UL, 0UL, 16777216UL, 0UL }) +
197 static_cast<View>(in.get(C::instr_fetching_bd18)) * FF(uint256_t{ 0UL, 0UL, 65536UL, 0UL }) +
198 static_cast<View>(in.get(C::instr_fetching_bd19)) * FF(uint256_t{ 0UL, 0UL, 256UL, 0UL }) +
199 static_cast<View>(in.get(C::instr_fetching_bd20)) * FF(uint256_t{ 0UL, 0UL, 1UL, 0UL }) +
200 static_cast<View>(in.get(C::instr_fetching_bd21)) *
201 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL }) +
202 static_cast<View>(in.get(C::instr_fetching_bd22)) *
203 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
204 static_cast<View>(in.get(C::instr_fetching_bd23)) *
205 FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
206 static_cast<View>(in.get(C::instr_fetching_bd24)) *
207 FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
208 static_cast<View>(in.get(C::instr_fetching_bd25)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
209 static_cast<View>(in.get(C::instr_fetching_bd26)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
210 static_cast<View>(in.get(C::instr_fetching_bd27)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
211 static_cast<View>(in.get(C::instr_fetching_bd28)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
212 static_cast<View>(in.get(C::instr_fetching_bd29)) * FF(72057594037927936UL) +
213 static_cast<View>(in.get(C::instr_fetching_bd30)) * FF(281474976710656UL) +
214 static_cast<View>(in.get(C::instr_fetching_bd31)) * FF(1099511627776UL) +
215 static_cast<View>(in.get(C::instr_fetching_bd32)) * FF(4294967296UL) +
216 static_cast<View>(in.get(C::instr_fetching_bd33)) * FF(16777216) +
217 static_cast<View>(in.get(C::instr_fetching_bd34)) * FF(65536) +
218 static_cast<View>(in.get(C::instr_fetching_bd35)) * FF(256) +
219 static_cast<View>(in.get(C::instr_fetching_bd36)) * FF(1)) +
220 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_10)) *
221 (static_cast<View>(in.get(C::instr_fetching_bd5)) *
222 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL }) +
223 static_cast<View>(in.get(C::instr_fetching_bd6)) *
224 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
225 static_cast<View>(in.get(C::instr_fetching_bd7)) *
226 FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
227 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
228 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
229 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
230 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
231 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
232 static_cast<View>(in.get(C::instr_fetching_bd13)) * FF(72057594037927936UL) +
233 static_cast<View>(in.get(C::instr_fetching_bd14)) * FF(281474976710656UL) +
234 static_cast<View>(in.get(C::instr_fetching_bd15)) * FF(1099511627776UL) +
235 static_cast<View>(in.get(C::instr_fetching_bd16)) * FF(4294967296UL) +
236 static_cast<View>(in.get(C::instr_fetching_bd17)) * FF(16777216) +
237 static_cast<View>(in.get(C::instr_fetching_bd18)) * FF(65536) +
238 static_cast<View>(in.get(C::instr_fetching_bd19)) * FF(256) +
239 static_cast<View>(in.get(C::instr_fetching_bd20)) * FF(1)) +
240 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_11)) *
241 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(72057594037927936UL) +
242 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(281474976710656UL) +
243 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1099511627776UL) +
244 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(4294967296UL) +
245 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(16777216) +
246 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(65536) +
247 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(256) +
248 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(1)) +
249 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_12)) *
250 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(16777216) +
251 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(65536) +
252 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(256) +
253 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(1)) +
254 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_13)) *
255 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(256) +
256 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1)) +
257 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_14)) *
258 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1)));
259 std::get<15>(evals) += (tmp * scaling_factor);
260 }
261 { // OP4_BYTES_DECOMPOSITION
262 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
263 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op4)) -
264 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
265 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
266 (static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(256) +
267 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(1)) +
268 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_5)) *
269 (static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(256) +
270 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(1))));
271 std::get<16>(evals) += (tmp * scaling_factor);
272 }
273 { // OP5_BYTES_DECOMPOSITION
274 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
275 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op5)) -
276 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
277 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
278 (static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(256) +
279 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(1)) +
280 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_5)) *
281 (static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(256) +
282 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(1))));
283 std::get<17>(evals) += (tmp * scaling_factor);
284 }
285 { // OP6_BYTES_DECOMPOSITION
286 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
287 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op6)) -
288 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
289 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_1)) *
290 (static_cast<View>(in.get(C::instr_fetching_bd13)) * FF(256) +
291 static_cast<View>(in.get(C::instr_fetching_bd14)) * FF(1)));
292 std::get<18>(evals) += (tmp * scaling_factor);
293 }
294 { // OP7_BYTES_DECOMPOSITION
295 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
296 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op7)) -
297 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
298 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_1)) *
299 (static_cast<View>(in.get(C::instr_fetching_bd15)) * FF(256) +
300 static_cast<View>(in.get(C::instr_fetching_bd16)) * FF(1)));
301 std::get<19>(evals) += (tmp * scaling_factor);
302 }
303}
304
305} // 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.