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_16 =
23 in.get(C::instr_fetching_sel_op_dc_1) + in.get(C::instr_fetching_sel_op_dc_5);
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 { // SEL_HAS_TAG_ZERO
96 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
97 auto tmp = static_cast<View>(in.get(C::instr_fetching_sel_has_tag)) *
98 (FF(1) - static_cast<View>(in.get(C::instr_fetching_sel_pc_in_range)));
99 std::get<10>(evals) += (tmp * scaling_factor);
100 }
101 { // TAG_OUT_OF_RANGE_ZERO
102 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
103 auto tmp = static_cast<View>(in.get(C::instr_fetching_tag_out_of_range)) *
104 (FF(1) - static_cast<View>(in.get(C::instr_fetching_sel_has_tag)));
105 std::get<11>(evals) += (tmp * scaling_factor);
106 }
107 { // TAG_VALUE
108 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
109 auto tmp = (static_cast<View>(in.get(C::instr_fetching_tag_value)) -
110 ((static_cast<View>(in.get(C::instr_fetching_sel_has_tag)) -
111 static_cast<View>(in.get(C::instr_fetching_sel_tag_is_op2))) *
112 static_cast<View>(in.get(C::instr_fetching_op3)) +
113 static_cast<View>(in.get(C::instr_fetching_sel_tag_is_op2)) *
114 static_cast<View>(in.get(C::instr_fetching_op2))));
115 std::get<12>(evals) += (tmp * scaling_factor);
116 }
117 {
118 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
119 auto tmp = (static_cast<View>(in.get(C::instr_fetching_sel_pc_in_range)) -
120 static_cast<View>(in.get(C::instr_fetching_sel)) *
121 (FF(1) - static_cast<View>(in.get(C::instr_fetching_pc_out_of_range))));
122 std::get<13>(evals) += (tmp * scaling_factor);
123 }
124 { // ADDRESSING_MODE_BYTES_DECOMPOSITION
125 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
126 auto tmp =
127 (static_cast<View>(in.get(C::instr_fetching_addressing_mode)) -
128 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
129 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
130 (static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(256) +
131 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(1)) +
132 CView(instr_fetching_SEL_OP_DC_16) * static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(1)));
133 std::get<14>(evals) += (tmp * scaling_factor);
134 }
135 { // OP1_BYTES_DECOMPOSITION
136 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
137 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op1)) -
138 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
139 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
140 (static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(256) +
141 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1)) +
142 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_1)) *
143 (static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(256) +
144 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(1)) +
145 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_5)) *
146 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(1) +
147 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_14)) *
148 (static_cast<View>(in.get(C::instr_fetching_bd1)) * FF(16777216) +
149 static_cast<View>(in.get(C::instr_fetching_bd2)) * FF(65536) +
150 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(256) +
151 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1))));
152 std::get<15>(evals) += (tmp * scaling_factor);
153 }
154 { // OP2_BYTES_DECOMPOSITION
155 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
156 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op2)) -
157 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
158 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
159 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(256) +
160 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1)) +
161 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_2)) *
162 (static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(256) +
163 static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(1)) +
164 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_5)) *
165 static_cast<View>(in.get(C::instr_fetching_bd3)) * FF(1) +
166 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_7)) *
167 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1) +
168 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_15)) *
169 (static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(16777216) +
170 static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(65536) +
171 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(256) +
172 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1))));
173 std::get<16>(evals) += (tmp * scaling_factor);
174 }
175 { // OP3_BYTES_DECOMPOSITION
176 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
177 auto tmp =
178 (static_cast<View>(in.get(C::instr_fetching_op3)) -
179 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
180 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
181 (static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(256) +
182 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(1)) +
183 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_3)) *
184 (static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(256) +
185 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1)) +
186 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_6)) *
187 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1) +
188 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_8)) *
189 (static_cast<View>(in.get(C::instr_fetching_bd5)) *
190 FF(uint256_t{ 0UL, 0UL, 0UL, 72057594037927936UL }) +
191 static_cast<View>(in.get(C::instr_fetching_bd6)) *
192 FF(uint256_t{ 0UL, 0UL, 0UL, 281474976710656UL }) +
193 static_cast<View>(in.get(C::instr_fetching_bd7)) *
194 FF(uint256_t{ 0UL, 0UL, 0UL, 1099511627776UL }) +
195 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(uint256_t{ 0UL, 0UL, 0UL, 4294967296UL }) +
196 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(uint256_t{ 0UL, 0UL, 0UL, 16777216UL }) +
197 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(uint256_t{ 0UL, 0UL, 0UL, 65536UL }) +
198 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(uint256_t{ 0UL, 0UL, 0UL, 256UL }) +
199 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(uint256_t{ 0UL, 0UL, 0UL, 1UL }) +
200 static_cast<View>(in.get(C::instr_fetching_bd13)) *
201 FF(uint256_t{ 0UL, 0UL, 72057594037927936UL, 0UL }) +
202 static_cast<View>(in.get(C::instr_fetching_bd14)) *
203 FF(uint256_t{ 0UL, 0UL, 281474976710656UL, 0UL }) +
204 static_cast<View>(in.get(C::instr_fetching_bd15)) *
205 FF(uint256_t{ 0UL, 0UL, 1099511627776UL, 0UL }) +
206 static_cast<View>(in.get(C::instr_fetching_bd16)) *
207 FF(uint256_t{ 0UL, 0UL, 4294967296UL, 0UL }) +
208 static_cast<View>(in.get(C::instr_fetching_bd17)) * FF(uint256_t{ 0UL, 0UL, 16777216UL, 0UL }) +
209 static_cast<View>(in.get(C::instr_fetching_bd18)) * FF(uint256_t{ 0UL, 0UL, 65536UL, 0UL }) +
210 static_cast<View>(in.get(C::instr_fetching_bd19)) * FF(uint256_t{ 0UL, 0UL, 256UL, 0UL }) +
211 static_cast<View>(in.get(C::instr_fetching_bd20)) * FF(uint256_t{ 0UL, 0UL, 1UL, 0UL }) +
212 static_cast<View>(in.get(C::instr_fetching_bd21)) *
213 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL }) +
214 static_cast<View>(in.get(C::instr_fetching_bd22)) *
215 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
216 static_cast<View>(in.get(C::instr_fetching_bd23)) *
217 FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
218 static_cast<View>(in.get(C::instr_fetching_bd24)) *
219 FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
220 static_cast<View>(in.get(C::instr_fetching_bd25)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
221 static_cast<View>(in.get(C::instr_fetching_bd26)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
222 static_cast<View>(in.get(C::instr_fetching_bd27)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
223 static_cast<View>(in.get(C::instr_fetching_bd28)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
224 static_cast<View>(in.get(C::instr_fetching_bd29)) * FF(72057594037927936UL) +
225 static_cast<View>(in.get(C::instr_fetching_bd30)) * FF(281474976710656UL) +
226 static_cast<View>(in.get(C::instr_fetching_bd31)) * FF(1099511627776UL) +
227 static_cast<View>(in.get(C::instr_fetching_bd32)) * FF(4294967296UL) +
228 static_cast<View>(in.get(C::instr_fetching_bd33)) * FF(16777216) +
229 static_cast<View>(in.get(C::instr_fetching_bd34)) * FF(65536) +
230 static_cast<View>(in.get(C::instr_fetching_bd35)) * FF(256) +
231 static_cast<View>(in.get(C::instr_fetching_bd36)) * FF(1)) +
232 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_9)) *
233 (static_cast<View>(in.get(C::instr_fetching_bd5)) *
234 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL }) +
235 static_cast<View>(in.get(C::instr_fetching_bd6)) *
236 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
237 static_cast<View>(in.get(C::instr_fetching_bd7)) *
238 FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
239 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
240 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
241 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
242 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
243 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
244 static_cast<View>(in.get(C::instr_fetching_bd13)) * FF(72057594037927936UL) +
245 static_cast<View>(in.get(C::instr_fetching_bd14)) * FF(281474976710656UL) +
246 static_cast<View>(in.get(C::instr_fetching_bd15)) * FF(1099511627776UL) +
247 static_cast<View>(in.get(C::instr_fetching_bd16)) * FF(4294967296UL) +
248 static_cast<View>(in.get(C::instr_fetching_bd17)) * FF(16777216) +
249 static_cast<View>(in.get(C::instr_fetching_bd18)) * FF(65536) +
250 static_cast<View>(in.get(C::instr_fetching_bd19)) * FF(256) +
251 static_cast<View>(in.get(C::instr_fetching_bd20)) * FF(1)) +
252 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_10)) *
253 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(72057594037927936UL) +
254 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(281474976710656UL) +
255 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(1099511627776UL) +
256 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(4294967296UL) +
257 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(16777216) +
258 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(65536) +
259 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(256) +
260 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(1)) +
261 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_11)) *
262 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(16777216) +
263 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(65536) +
264 static_cast<View>(in.get(C::instr_fetching_bd7)) * FF(256) +
265 static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(1)) +
266 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_12)) *
267 (static_cast<View>(in.get(C::instr_fetching_bd5)) * FF(256) +
268 static_cast<View>(in.get(C::instr_fetching_bd6)) * FF(1)) +
269 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_13)) *
270 static_cast<View>(in.get(C::instr_fetching_bd4)) * FF(1)));
271 std::get<17>(evals) += (tmp * scaling_factor);
272 }
273 { // OP4_BYTES_DECOMPOSITION
274 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
275 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op4)) -
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_bd9)) * FF(256) +
279 static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(1)) +
280 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_4)) *
281 (static_cast<View>(in.get(C::instr_fetching_bd8)) * FF(256) +
282 static_cast<View>(in.get(C::instr_fetching_bd9)) * FF(1))));
283 std::get<18>(evals) += (tmp * scaling_factor);
284 }
285 { // OP5_BYTES_DECOMPOSITION
286 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
287 auto tmp = (static_cast<View>(in.get(C::instr_fetching_op5)) -
288 (FF(1) - CView(instr_fetching_PARSING_ERROR_EXCEPT_TAG_ERROR)) *
289 (static_cast<View>(in.get(C::instr_fetching_sel_op_dc_0)) *
290 (static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(256) +
291 static_cast<View>(in.get(C::instr_fetching_bd12)) * FF(1)) +
292 static_cast<View>(in.get(C::instr_fetching_sel_op_dc_4)) *
293 (static_cast<View>(in.get(C::instr_fetching_bd10)) * FF(256) +
294 static_cast<View>(in.get(C::instr_fetching_bd11)) * FF(1))));
295 std::get<19>(evals) += (tmp * scaling_factor);
296 }
297}
298
299} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:35
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.