Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bitwise_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 bitwiseImpl<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 constants_AVM_BITWISE_AND_OP_ID = FF(1);
20 const auto constants_AVM_BITWISE_OR_OP_ID = FF(2);
21 const auto constants_AVM_BITWISE_XOR_OP_ID = FF(4);
22 const auto bitwise_TAG_A_DIFF = (in.get(C::bitwise_tag_a) - constants_MEM_TAG_FF);
23 const auto bitwise_TAG_AB_DIFF = (in.get(C::bitwise_tag_a) - in.get(C::bitwise_tag_b));
24 const auto bitwise_IC_BYTE_0 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_0_) +
25 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_0_) +
26 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_0_);
27 const auto bitwise_IC_BYTE_1 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_1_) +
28 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_1_) +
29 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_1_);
30 const auto bitwise_IC_BYTE_2 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_2_) +
31 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_2_) +
32 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_2_);
33 const auto bitwise_IC_BYTE_3 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_3_) +
34 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_3_) +
35 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_3_);
36 const auto bitwise_IC_BYTE_4 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_4_) +
37 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_4_) +
38 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_4_);
39 const auto bitwise_IC_BYTE_5 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_5_) +
40 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_5_) +
41 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_5_);
42 const auto bitwise_IC_BYTE_6 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_6_) +
43 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_6_) +
44 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_6_);
45 const auto bitwise_IC_BYTE_7 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_7_) +
46 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_7_) +
47 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_7_);
48 const auto bitwise_IC_BYTE_8 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_8_) +
49 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_8_) +
50 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_8_);
51 const auto bitwise_IC_BYTE_9 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_9_) +
52 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_9_) +
53 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_9_);
54 const auto bitwise_IC_BYTE_10 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_10_) +
55 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_10_) +
56 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_10_);
57 const auto bitwise_IC_BYTE_11 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_11_) +
58 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_11_) +
59 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_11_);
60 const auto bitwise_IC_BYTE_12 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_12_) +
61 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_12_) +
62 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_12_);
63 const auto bitwise_IC_BYTE_13 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_13_) +
64 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_13_) +
65 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_13_);
66 const auto bitwise_IC_BYTE_14 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_14_) +
67 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_14_) +
68 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_14_);
69 const auto bitwise_IC_BYTE_15 = in.get(C::bitwise_sel_and) * in.get(C::bitwise_output_and_15_) +
70 in.get(C::bitwise_sel_or) * in.get(C::bitwise_output_or_15_) +
71 in.get(C::bitwise_sel_xor) * in.get(C::bitwise_output_xor_15_);
72
73 {
74 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
75 auto tmp = static_cast<View>(in.get(C::bitwise_sel)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel)));
76 std::get<0>(evals) += (tmp * scaling_factor);
77 }
78 {
79 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
80 auto tmp = static_cast<View>(in.get(C::bitwise_sel_keccak)) *
81 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_keccak)));
82 std::get<1>(evals) += (tmp * scaling_factor);
83 }
84 {
85 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
86 auto tmp = static_cast<View>(in.get(C::bitwise_sel_sha256)) *
87 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_sha256)));
88 std::get<2>(evals) += (tmp * scaling_factor);
89 }
90 {
91 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
92 auto tmp = static_cast<View>(in.get(C::bitwise_sel_simd_64)) *
93 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_simd_64)));
94 std::get<3>(evals) += (tmp * scaling_factor);
95 }
96 {
97 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
98 auto tmp = static_cast<View>(in.get(C::bitwise_sel_bitwise_opcode)) *
99 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_bitwise_opcode)));
100 std::get<4>(evals) += (tmp * scaling_factor);
101 }
102 {
103 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
104 auto tmp =
105 (static_cast<View>(in.get(C::bitwise_sel_keccak)) + static_cast<View>(in.get(C::bitwise_sel_sha256)) +
106 static_cast<View>(in.get(C::bitwise_sel_simd_64)) +
107 static_cast<View>(in.get(C::bitwise_sel_bitwise_opcode))) *
108 (FF(1) - static_cast<View>(in.get(C::bitwise_sel)));
109 std::get<5>(evals) += (tmp * scaling_factor);
110 }
111 {
112 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
113 auto tmp = static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)) *
114 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)));
115 std::get<6>(evals) += (tmp * scaling_factor);
116 }
117 {
118 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
119 auto tmp = static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)) *
120 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)));
121 std::get<7>(evals) += (tmp * scaling_factor);
122 }
123 {
124 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
125 auto tmp = (static_cast<View>(in.get(C::bitwise_err)) -
126 (FF(1) - (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err))) *
127 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)))));
128 std::get<8>(evals) += (tmp * scaling_factor);
129 }
130 { // INPUT_TAG_CANNOT_BE_FF
131 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
132 auto tmp = static_cast<View>(in.get(C::bitwise_sel)) *
133 ((CView(bitwise_TAG_A_DIFF) * (static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)) *
134 (FF(1) - static_cast<View>(in.get(C::bitwise_tag_a_inv))) +
135 static_cast<View>(in.get(C::bitwise_tag_a_inv))) -
136 FF(1)) +
137 static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)));
138 std::get<9>(evals) += (tmp * scaling_factor);
139 }
140 { // INPUT_TAGS_SHOULD_MATCH
141 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
142 auto tmp = static_cast<View>(in.get(C::bitwise_sel)) *
143 (CView(bitwise_TAG_AB_DIFF) * ((FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err))) *
144 (FF(1) - static_cast<View>(in.get(C::bitwise_tag_ab_diff_inv))) +
145 static_cast<View>(in.get(C::bitwise_tag_ab_diff_inv))) -
146 static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)));
147 std::get<10>(evals) += (tmp * scaling_factor);
148 }
149 {
150 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
151 auto tmp = (static_cast<View>(in.get(C::bitwise_sel_compute)) -
152 static_cast<View>(in.get(C::bitwise_sel)) * (FF(1) - static_cast<View>(in.get(C::bitwise_err))));
153 std::get<11>(evals) += (tmp * scaling_factor);
154 }
155 { // RES_TAG_SHOULD_MATCH_INPUT
156 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
157 auto tmp = static_cast<View>(in.get(C::bitwise_sel_compute)) *
158 (static_cast<View>(in.get(C::bitwise_tag_c)) - static_cast<View>(in.get(C::bitwise_tag_a)));
159 std::get<12>(evals) += (tmp * scaling_factor);
160 }
161 { // BITW_NO_EXTERNAL_ON_ERROR
162 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
163 auto tmp =
164 (static_cast<View>(in.get(C::bitwise_sel_keccak)) + static_cast<View>(in.get(C::bitwise_sel_sha256)) +
165 static_cast<View>(in.get(C::bitwise_sel_simd_64))) *
166 static_cast<View>(in.get(C::bitwise_err));
167 std::get<13>(evals) += (tmp * scaling_factor);
168 }
169 {
170 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
171 auto tmp =
172 static_cast<View>(in.get(C::bitwise_sel_u16)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_u16)));
173 std::get<14>(evals) += (tmp * scaling_factor);
174 }
175 {
176 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
177 auto tmp =
178 static_cast<View>(in.get(C::bitwise_sel_u32)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_u32)));
179 std::get<15>(evals) += (tmp * scaling_factor);
180 }
181 {
182 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
183 auto tmp =
184 static_cast<View>(in.get(C::bitwise_sel_u64)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_u64)));
185 std::get<16>(evals) += (tmp * scaling_factor);
186 }
187 {
188 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
189 auto tmp =
190 static_cast<View>(in.get(C::bitwise_sel_u128)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_u128)));
191 std::get<17>(evals) += (tmp * scaling_factor);
192 }
193 { // BITW_SIMD_ONLY_ON_U128
194 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
195 auto tmp = static_cast<View>(in.get(C::bitwise_sel_simd_64)) *
196 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_u128)));
197 std::get<18>(evals) += (tmp * scaling_factor);
198 }
199 { // BITW_TAG_LEN_DECOMPOSITION
200 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
201 auto tmp = static_cast<View>(in.get(C::bitwise_sel_compute)) *
202 (((((static_cast<View>(in.get(C::bitwise_tag_byte_len)) - FF(1)) -
203 static_cast<View>(in.get(C::bitwise_sel_u16))) -
204 static_cast<View>(in.get(C::bitwise_sel_u32)) * FF(2)) -
205 static_cast<View>(in.get(C::bitwise_sel_u64)) * FF(4)) -
206 static_cast<View>(in.get(C::bitwise_sel_u128)) * FF(8));
207 std::get<19>(evals) += (tmp * scaling_factor);
208 }
209 {
210 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
211 auto tmp =
212 static_cast<View>(in.get(C::bitwise_sel_and)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_and)));
213 std::get<20>(evals) += (tmp * scaling_factor);
214 }
215 {
216 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
217 auto tmp =
218 static_cast<View>(in.get(C::bitwise_sel_or)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_or)));
219 std::get<21>(evals) += (tmp * scaling_factor);
220 }
221 {
222 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
223 auto tmp =
224 static_cast<View>(in.get(C::bitwise_sel_xor)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_xor)));
225 std::get<22>(evals) += (tmp * scaling_factor);
226 }
227 {
228 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
229 auto tmp = (static_cast<View>(in.get(C::bitwise_sel_compute)) * static_cast<View>(in.get(C::bitwise_op_id)) -
230 (static_cast<View>(in.get(C::bitwise_sel_and)) * CView(constants_AVM_BITWISE_AND_OP_ID) +
231 static_cast<View>(in.get(C::bitwise_sel_or)) * CView(constants_AVM_BITWISE_OR_OP_ID) +
232 static_cast<View>(in.get(C::bitwise_sel_xor)) * CView(constants_AVM_BITWISE_XOR_OP_ID)));
233 std::get<23>(evals) += (tmp * scaling_factor);
234 }
235 { // BITW_RECOMP_A
236 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
237 auto tmp =
238 static_cast<View>(in.get(C::bitwise_sel_compute)) *
239 (((((static_cast<View>(in.get(C::bitwise_ia)) - static_cast<View>(in.get(C::bitwise_ia_byte_0_))) -
240 static_cast<View>(in.get(C::bitwise_sel_u16)) * static_cast<View>(in.get(C::bitwise_ia_byte_1_)) *
241 FF(256)) -
242 static_cast<View>(in.get(C::bitwise_sel_u32)) *
243 (static_cast<View>(in.get(C::bitwise_ia_byte_2_)) * FF(65536) +
244 static_cast<View>(in.get(C::bitwise_ia_byte_3_)) * FF(16777216))) -
245 static_cast<View>(in.get(C::bitwise_sel_u64)) *
246 (static_cast<View>(in.get(C::bitwise_ia_byte_4_)) * FF(4294967296UL) +
247 static_cast<View>(in.get(C::bitwise_ia_byte_5_)) * FF(1099511627776UL) +
248 static_cast<View>(in.get(C::bitwise_ia_byte_6_)) * FF(281474976710656UL) +
249 static_cast<View>(in.get(C::bitwise_ia_byte_7_)) * FF(72057594037927936UL))) -
250 (static_cast<View>(in.get(C::bitwise_sel_u128)) - static_cast<View>(in.get(C::bitwise_sel_simd_64))) *
251 (static_cast<View>(in.get(C::bitwise_ia_byte_8_)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
252 static_cast<View>(in.get(C::bitwise_ia_byte_9_)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
253 static_cast<View>(in.get(C::bitwise_ia_byte_10_)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
254 static_cast<View>(in.get(C::bitwise_ia_byte_11_)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
255 static_cast<View>(in.get(C::bitwise_ia_byte_12_)) * FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
256 static_cast<View>(in.get(C::bitwise_ia_byte_13_)) * FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
257 static_cast<View>(in.get(C::bitwise_ia_byte_14_)) *
258 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
259 static_cast<View>(in.get(C::bitwise_ia_byte_15_)) *
260 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL })));
261 std::get<24>(evals) += (tmp * scaling_factor);
262 }
263 { // BITW_RECOMP_B
264 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
265 auto tmp =
266 static_cast<View>(in.get(C::bitwise_sel_compute)) *
267 (((((static_cast<View>(in.get(C::bitwise_ib)) - static_cast<View>(in.get(C::bitwise_ib_byte_0_))) -
268 static_cast<View>(in.get(C::bitwise_sel_u16)) * static_cast<View>(in.get(C::bitwise_ib_byte_1_)) *
269 FF(256)) -
270 static_cast<View>(in.get(C::bitwise_sel_u32)) *
271 (static_cast<View>(in.get(C::bitwise_ib_byte_2_)) * FF(65536) +
272 static_cast<View>(in.get(C::bitwise_ib_byte_3_)) * FF(16777216))) -
273 static_cast<View>(in.get(C::bitwise_sel_u64)) *
274 (static_cast<View>(in.get(C::bitwise_ib_byte_4_)) * FF(4294967296UL) +
275 static_cast<View>(in.get(C::bitwise_ib_byte_5_)) * FF(1099511627776UL) +
276 static_cast<View>(in.get(C::bitwise_ib_byte_6_)) * FF(281474976710656UL) +
277 static_cast<View>(in.get(C::bitwise_ib_byte_7_)) * FF(72057594037927936UL))) -
278 (static_cast<View>(in.get(C::bitwise_sel_u128)) - static_cast<View>(in.get(C::bitwise_sel_simd_64))) *
279 (static_cast<View>(in.get(C::bitwise_ib_byte_8_)) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
280 static_cast<View>(in.get(C::bitwise_ib_byte_9_)) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
281 static_cast<View>(in.get(C::bitwise_ib_byte_10_)) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
282 static_cast<View>(in.get(C::bitwise_ib_byte_11_)) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
283 static_cast<View>(in.get(C::bitwise_ib_byte_12_)) * FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
284 static_cast<View>(in.get(C::bitwise_ib_byte_13_)) * FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
285 static_cast<View>(in.get(C::bitwise_ib_byte_14_)) *
286 FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
287 static_cast<View>(in.get(C::bitwise_ib_byte_15_)) *
288 FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL })));
289 std::get<25>(evals) += (tmp * scaling_factor);
290 }
291 { // BITW_RECOMP_C
292 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
293 auto tmp =
294 static_cast<View>(in.get(C::bitwise_sel_compute)) *
295 (((((static_cast<View>(in.get(C::bitwise_ic)) - CView(bitwise_IC_BYTE_0)) -
296 static_cast<View>(in.get(C::bitwise_sel_u16)) * CView(bitwise_IC_BYTE_1) * FF(256)) -
297 static_cast<View>(in.get(C::bitwise_sel_u32)) *
298 (CView(bitwise_IC_BYTE_2) * FF(65536) + CView(bitwise_IC_BYTE_3) * FF(16777216))) -
299 static_cast<View>(in.get(C::bitwise_sel_u64)) *
300 (CView(bitwise_IC_BYTE_4) * FF(4294967296UL) + CView(bitwise_IC_BYTE_5) * FF(1099511627776UL) +
301 CView(bitwise_IC_BYTE_6) * FF(281474976710656UL) +
302 CView(bitwise_IC_BYTE_7) * FF(72057594037927936UL))) -
303 (static_cast<View>(in.get(C::bitwise_sel_u128)) - static_cast<View>(in.get(C::bitwise_sel_simd_64))) *
304 (CView(bitwise_IC_BYTE_8) * FF(uint256_t{ 0UL, 1UL, 0UL, 0UL }) +
305 CView(bitwise_IC_BYTE_9) * FF(uint256_t{ 0UL, 256UL, 0UL, 0UL }) +
306 CView(bitwise_IC_BYTE_10) * FF(uint256_t{ 0UL, 65536UL, 0UL, 0UL }) +
307 CView(bitwise_IC_BYTE_11) * FF(uint256_t{ 0UL, 16777216UL, 0UL, 0UL }) +
308 CView(bitwise_IC_BYTE_12) * FF(uint256_t{ 0UL, 4294967296UL, 0UL, 0UL }) +
309 CView(bitwise_IC_BYTE_13) * FF(uint256_t{ 0UL, 1099511627776UL, 0UL, 0UL }) +
310 CView(bitwise_IC_BYTE_14) * FF(uint256_t{ 0UL, 281474976710656UL, 0UL, 0UL }) +
311 CView(bitwise_IC_BYTE_15) * FF(uint256_t{ 0UL, 72057594037927936UL, 0UL, 0UL })));
312 std::get<26>(evals) += (tmp * scaling_factor);
313 }
314 { // BITW_RECOMP_A_SIMD
315 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
316 auto tmp = static_cast<View>(in.get(C::bitwise_sel_compute)) *
317 (static_cast<View>(in.get(C::bitwise_ia_simd)) -
318 static_cast<View>(in.get(C::bitwise_sel_simd_64)) *
319 (static_cast<View>(in.get(C::bitwise_ia_byte_8_)) +
320 static_cast<View>(in.get(C::bitwise_ia_byte_9_)) * FF(256) +
321 static_cast<View>(in.get(C::bitwise_ia_byte_10_)) * FF(65536) +
322 static_cast<View>(in.get(C::bitwise_ia_byte_11_)) * FF(16777216) +
323 static_cast<View>(in.get(C::bitwise_ia_byte_12_)) * FF(4294967296UL) +
324 static_cast<View>(in.get(C::bitwise_ia_byte_13_)) * FF(1099511627776UL) +
325 static_cast<View>(in.get(C::bitwise_ia_byte_14_)) * FF(281474976710656UL) +
326 static_cast<View>(in.get(C::bitwise_ia_byte_15_)) * FF(72057594037927936UL)));
327 std::get<27>(evals) += (tmp * scaling_factor);
328 }
329 { // BITW_RECOMP_B_SIMD
330 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
331 auto tmp = static_cast<View>(in.get(C::bitwise_sel_compute)) *
332 (static_cast<View>(in.get(C::bitwise_ib_simd)) -
333 static_cast<View>(in.get(C::bitwise_sel_simd_64)) *
334 (static_cast<View>(in.get(C::bitwise_ib_byte_8_)) +
335 static_cast<View>(in.get(C::bitwise_ib_byte_9_)) * FF(256) +
336 static_cast<View>(in.get(C::bitwise_ib_byte_10_)) * FF(65536) +
337 static_cast<View>(in.get(C::bitwise_ib_byte_11_)) * FF(16777216) +
338 static_cast<View>(in.get(C::bitwise_ib_byte_12_)) * FF(4294967296UL) +
339 static_cast<View>(in.get(C::bitwise_ib_byte_13_)) * FF(1099511627776UL) +
340 static_cast<View>(in.get(C::bitwise_ib_byte_14_)) * FF(281474976710656UL) +
341 static_cast<View>(in.get(C::bitwise_ib_byte_15_)) * FF(72057594037927936UL)));
342 std::get<28>(evals) += (tmp * scaling_factor);
343 }
344 { // BITW_RECOMP_C_SIMD
345 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
346 auto tmp =
347 static_cast<View>(in.get(C::bitwise_sel_compute)) *
348 (static_cast<View>(in.get(C::bitwise_ic_simd)) -
349 static_cast<View>(in.get(C::bitwise_sel_simd_64)) *
350 (CView(bitwise_IC_BYTE_8) + CView(bitwise_IC_BYTE_9) * FF(256) +
351 CView(bitwise_IC_BYTE_10) * FF(65536) + CView(bitwise_IC_BYTE_11) * FF(16777216) +
352 CView(bitwise_IC_BYTE_12) * FF(4294967296UL) + CView(bitwise_IC_BYTE_13) * FF(1099511627776UL) +
353 CView(bitwise_IC_BYTE_14) * FF(281474976710656UL) +
354 CView(bitwise_IC_BYTE_15) * FF(72057594037927936UL)));
355 std::get<29>(evals) += (tmp * scaling_factor);
356 }
357}
358
359} // 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.