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