120 using View =
typename Accumulator::View;
157 const auto& precompute_pc = View(in.precompute_pc);
158 const auto& tx = View(in.precompute_tx);
159 const auto& ty = View(in.precompute_ty);
160 const auto& precompute_round = View(in.precompute_round);
161 const auto& gamma = params.gamma;
162 const auto& beta = params.beta;
163 const auto& beta_sqr = params.beta_sqr;
164 const auto& beta_cube = params.beta_cube;
166 if constexpr (table_index == 0) {
167 const auto positive_slice_value = -(precompute_round) + 15;
168 const auto positive_term =
169 precompute_pc + gamma + positive_slice_value * beta + tx * beta_sqr + ty * beta_cube;
170 return positive_term;
172 if constexpr (table_index == 1) {
173 const auto negative_term = precompute_pc + gamma + precompute_round * beta + tx * beta_sqr - ty * beta_cube;
174 return negative_term;
176 return Accumulator(1);
182 using View =
typename Accumulator::View;
187 const auto& gamma = params.gamma;
188 const auto& beta = params.beta;
189 const auto& beta_sqr = params.beta_sqr;
190 const auto& beta_cube = params.beta_cube;
191 const auto& msm_pc = View(in.msm_pc);
192 const auto& msm_count = View(in.msm_count);
193 const auto& msm_slice1 = View(in.msm_slice1);
194 const auto& msm_slice2 = View(in.msm_slice2);
195 const auto& msm_slice3 = View(in.msm_slice3);
196 const auto& msm_slice4 = View(in.msm_slice4);
197 const auto& msm_x1 = View(in.msm_x1);
198 const auto& msm_x2 = View(in.msm_x2);
199 const auto& msm_x3 = View(in.msm_x3);
200 const auto& msm_x4 = View(in.msm_x4);
201 const auto& msm_y1 = View(in.msm_y1);
202 const auto& msm_y2 = View(in.msm_y2);
203 const auto& msm_y3 = View(in.msm_y3);
204 const auto& msm_y4 = View(in.msm_y4);
212 const auto current_pc = msm_pc - msm_count;
214 if constexpr (lookup_index == 0) {
215 const auto lookup_term1 = (current_pc) + gamma + msm_slice1 * beta + msm_x1 * beta_sqr + msm_y1 * beta_cube;
218 if constexpr (lookup_index == 1) {
219 const auto lookup_term2 =
220 (current_pc - 1) + gamma + msm_slice2 * beta + msm_x2 * beta_sqr + msm_y2 * beta_cube;
223 if constexpr (lookup_index == 2) {
224 const auto lookup_term3 =
225 (current_pc - 2) + gamma + msm_slice3 * beta + msm_x3 * beta_sqr + msm_y3 * beta_cube;
228 if constexpr (lookup_index == 3) {
229 const auto lookup_term4 =
230 (current_pc - 3) + gamma + msm_slice4 * beta + msm_x4 * beta_sqr + msm_y4 * beta_cube;
233 return Accumulator(1);