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
25 {
26 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
27 auto tmp = static_cast<View>(in.get(C::bitwise_sel)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel)));
28 std::get<0>(evals) += (tmp * scaling_factor);
29 }
30 {
31 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
32 auto tmp = static_cast<View>(in.get(C::bitwise_start)) * (FF(1) - static_cast<View>(in.get(C::bitwise_start)));
33 std::get<1>(evals) += (tmp * scaling_factor);
34 }
35 {
36 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
37 auto tmp = static_cast<View>(in.get(C::bitwise_start_keccak)) *
38 (FF(1) - static_cast<View>(in.get(C::bitwise_start_keccak)));
39 std::get<2>(evals) += (tmp * scaling_factor);
40 }
41 {
42 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
43 auto tmp = static_cast<View>(in.get(C::bitwise_start_sha256)) *
44 (FF(1) - static_cast<View>(in.get(C::bitwise_start_sha256)));
45 std::get<3>(evals) += (tmp * scaling_factor);
46 }
47 {
48 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
49 auto tmp =
50 (static_cast<View>(in.get(C::bitwise_start_keccak)) + static_cast<View>(in.get(C::bitwise_start_sha256))) *
51 (FF(1) - static_cast<View>(in.get(C::bitwise_start)));
52 std::get<4>(evals) += (tmp * scaling_factor);
53 }
54 { // BITW_START_ONLY_WHEN_SEL
55 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
56 auto tmp =
57 (static_cast<View>(in.get(C::bitwise_start_keccak)) + static_cast<View>(in.get(C::bitwise_start_sha256))) *
58 (FF(1) - static_cast<View>(in.get(C::bitwise_sel)));
59 std::get<5>(evals) += (tmp * scaling_factor);
60 }
61 {
62 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
63 auto tmp = static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)) *
64 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)));
65 std::get<6>(evals) += (tmp * scaling_factor);
66 }
67 {
68 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
69 auto tmp = static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)) *
70 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)));
71 std::get<7>(evals) += (tmp * scaling_factor);
72 }
73 {
74 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
75 auto tmp = (static_cast<View>(in.get(C::bitwise_err)) -
76 (FF(1) - (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err))) *
77 (FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)))));
78 std::get<8>(evals) += (tmp * scaling_factor);
79 }
80 {
81 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
82 auto tmp = static_cast<View>(in.get(C::bitwise_last)) * (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
83 std::get<9>(evals) += (tmp * scaling_factor);
84 }
85 { // LAST_ON_ERROR
86 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
87 auto tmp = static_cast<View>(in.get(C::bitwise_err)) * (static_cast<View>(in.get(C::bitwise_last)) - FF(1));
88 std::get<10>(evals) += (tmp * scaling_factor);
89 }
90 { // RES_TAG_SHOULD_MATCH_INPUT
91 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
92 auto tmp = (FF(1) - static_cast<View>(in.get(C::bitwise_err))) * static_cast<View>(in.get(C::bitwise_start)) *
93 (static_cast<View>(in.get(C::bitwise_tag_c)) - static_cast<View>(in.get(C::bitwise_tag_a)));
94 std::get<11>(evals) += (tmp * scaling_factor);
95 }
96 { // INPUT_TAG_CANNOT_BE_FF
97 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
98 auto tmp = static_cast<View>(in.get(C::bitwise_start)) *
99 ((CView(bitwise_TAG_A_DIFF) * (static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)) *
100 (FF(1) - static_cast<View>(in.get(C::bitwise_tag_a_inv))) +
101 static_cast<View>(in.get(C::bitwise_tag_a_inv))) -
102 FF(1)) +
103 static_cast<View>(in.get(C::bitwise_sel_tag_ff_err)));
104 std::get<12>(evals) += (tmp * scaling_factor);
105 }
106 { // INPUT_TAGS_SHOULD_MATCH
107 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
108 auto tmp = static_cast<View>(in.get(C::bitwise_start)) *
109 (CView(bitwise_TAG_AB_DIFF) * ((FF(1) - static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err))) *
110 (FF(1) - static_cast<View>(in.get(C::bitwise_tag_ab_diff_inv))) +
111 static_cast<View>(in.get(C::bitwise_tag_ab_diff_inv))) -
112 static_cast<View>(in.get(C::bitwise_sel_tag_mismatch_err)));
113 std::get<13>(evals) += (tmp * scaling_factor);
114 }
115 { // BITW_OP_ID_REL
116 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
117 auto tmp = (static_cast<View>(in.get(C::bitwise_op_id_shift)) - static_cast<View>(in.get(C::bitwise_op_id))) *
118 (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
119 std::get<14>(evals) += (tmp * scaling_factor);
120 }
121 { // BITW_CTR_DECREMENT
122 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
123 auto tmp =
124 static_cast<View>(in.get(C::bitwise_sel)) *
125 ((static_cast<View>(in.get(C::bitwise_ctr_shift)) - static_cast<View>(in.get(C::bitwise_ctr))) + FF(1)) *
126 (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
127 std::get<15>(evals) += (tmp * scaling_factor);
128 }
129 { // BITW_SEL_CTR_NON_ZERO
130 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
131 auto tmp =
132 (static_cast<View>(in.get(C::bitwise_ctr)) * ((FF(1) - static_cast<View>(in.get(C::bitwise_sel))) *
133 (FF(1) - static_cast<View>(in.get(C::bitwise_ctr_inv))) +
134 static_cast<View>(in.get(C::bitwise_ctr_inv))) -
135 static_cast<View>(in.get(C::bitwise_sel)));
136 std::get<16>(evals) += (tmp * scaling_factor);
137 }
138 { // BITW_LAST_FOR_CTR_ONE
139 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
140 auto tmp = static_cast<View>(in.get(C::bitwise_sel)) *
141 (((static_cast<View>(in.get(C::bitwise_ctr)) - FF(1)) *
142 (static_cast<View>(in.get(C::bitwise_last)) *
143 (FF(1) - static_cast<View>(in.get(C::bitwise_ctr_min_one_inv))) +
144 static_cast<View>(in.get(C::bitwise_ctr_min_one_inv))) +
145 static_cast<View>(in.get(C::bitwise_last))) -
146 FF(1));
147 std::get<17>(evals) += (tmp * scaling_factor);
148 }
149 { // BITW_INIT_A
150 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
151 auto tmp = static_cast<View>(in.get(C::bitwise_last)) *
152 (static_cast<View>(in.get(C::bitwise_acc_ia)) - static_cast<View>(in.get(C::bitwise_ia_byte)));
153 std::get<18>(evals) += (tmp * scaling_factor);
154 }
155 { // BITW_INIT_B
156 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
157 auto tmp = static_cast<View>(in.get(C::bitwise_last)) *
158 (static_cast<View>(in.get(C::bitwise_acc_ib)) - static_cast<View>(in.get(C::bitwise_ib_byte)));
159 std::get<19>(evals) += (tmp * scaling_factor);
160 }
161 { // BITW_INIT_C
162 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
163 auto tmp = static_cast<View>(in.get(C::bitwise_last)) *
164 (static_cast<View>(in.get(C::bitwise_acc_ic)) - static_cast<View>(in.get(C::bitwise_ic_byte)));
165 std::get<20>(evals) += (tmp * scaling_factor);
166 }
167 { // BITW_ACC_REL_A
168 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
169 auto tmp = ((static_cast<View>(in.get(C::bitwise_acc_ia)) - static_cast<View>(in.get(C::bitwise_ia_byte))) -
170 FF(256) * static_cast<View>(in.get(C::bitwise_acc_ia_shift))) *
171 (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
172 std::get<21>(evals) += (tmp * scaling_factor);
173 }
174 { // BITW_ACC_REL_B
175 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
176 auto tmp = ((static_cast<View>(in.get(C::bitwise_acc_ib)) - static_cast<View>(in.get(C::bitwise_ib_byte))) -
177 FF(256) * static_cast<View>(in.get(C::bitwise_acc_ib_shift))) *
178 (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
179 std::get<22>(evals) += (tmp * scaling_factor);
180 }
181 { // BITW_ACC_REL_C
182 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
183 auto tmp = ((static_cast<View>(in.get(C::bitwise_acc_ic)) - static_cast<View>(in.get(C::bitwise_ic_byte))) -
184 FF(256) * static_cast<View>(in.get(C::bitwise_acc_ic_shift))) *
185 (FF(1) - static_cast<View>(in.get(C::bitwise_last)));
186 std::get<23>(evals) += (tmp * scaling_factor);
187 }
188 {
189 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
190 auto tmp = (static_cast<View>(in.get(C::bitwise_sel_get_ctr)) -
191 static_cast<View>(in.get(C::bitwise_start)) * (FF(1) - static_cast<View>(in.get(C::bitwise_err))));
192 std::get<24>(evals) += (tmp * scaling_factor);
193 }
194 {
195 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
196 auto tmp =
197 static_cast<View>(in.get(C::bitwise_sel_and)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_and)));
198 std::get<25>(evals) += (tmp * scaling_factor);
199 }
200 {
201 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
202 auto tmp =
203 static_cast<View>(in.get(C::bitwise_sel_or)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_or)));
204 std::get<26>(evals) += (tmp * scaling_factor);
205 }
206 {
207 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
208 auto tmp =
209 static_cast<View>(in.get(C::bitwise_sel_xor)) * (FF(1) - static_cast<View>(in.get(C::bitwise_sel_xor)));
210 std::get<27>(evals) += (tmp * scaling_factor);
211 }
212 {
213 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
214 auto tmp = (static_cast<View>(in.get(C::bitwise_sel)) * static_cast<View>(in.get(C::bitwise_op_id)) -
215 (static_cast<View>(in.get(C::bitwise_sel_and)) * CView(constants_AVM_BITWISE_AND_OP_ID) +
216 static_cast<View>(in.get(C::bitwise_sel_or)) * CView(constants_AVM_BITWISE_OR_OP_ID) +
217 static_cast<View>(in.get(C::bitwise_sel_xor)) * CView(constants_AVM_BITWISE_XOR_OP_ID)));
218 std::get<28>(evals) += (tmp * scaling_factor);
219 }
220 {
221 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
222 auto tmp = (static_cast<View>(in.get(C::bitwise_ic_byte)) -
223 (static_cast<View>(in.get(C::bitwise_sel_and)) * static_cast<View>(in.get(C::bitwise_output_and)) +
224 static_cast<View>(in.get(C::bitwise_sel_or)) * static_cast<View>(in.get(C::bitwise_output_or)) +
225 static_cast<View>(in.get(C::bitwise_sel_xor)) * static_cast<View>(in.get(C::bitwise_output_xor))));
226 std::get<29>(evals) += (tmp * scaling_factor);
227 }
228}
229
230} // 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:34
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.