112 using View =
typename Accumulator::View;
149 const auto& precompute_pc = View(in.precompute_pc);
150 const auto& tx = View(in.precompute_tx);
151 const auto& ty = View(in.precompute_ty);
152 const auto& precompute_round = View(in.precompute_round);
153 const auto& gamma = params.gamma;
154 const auto& beta = params.beta;
155 const auto& beta_sqr = params.beta_sqr;
156 const auto& beta_cube = params.beta_cube;
158 if constexpr (table_index == 0) {
159 const auto positive_slice_value = -(precompute_round) + 15;
160 const auto positive_term =
161 precompute_pc + gamma + positive_slice_value * beta + tx * beta_sqr + ty * beta_cube;
162 return positive_term;
164 if constexpr (table_index == 1) {
165 const auto negative_term = precompute_pc + gamma + precompute_round * beta + tx * beta_sqr - ty * beta_cube;
166 return negative_term;
168 return Accumulator(1);
174 using View =
typename Accumulator::View;
179 const auto& gamma = params.gamma;
180 const auto& beta = params.beta;
181 const auto& beta_sqr = params.beta_sqr;
182 const auto& beta_cube = params.beta_cube;
183 const auto& msm_pc = View(in.msm_pc);
184 const auto& msm_count = View(in.msm_count);
185 const auto& msm_slice1 = View(in.msm_slice1);
186 const auto& msm_slice2 = View(in.msm_slice2);
187 const auto& msm_slice3 = View(in.msm_slice3);
188 const auto& msm_slice4 = View(in.msm_slice4);
189 const auto& msm_x1 = View(in.msm_x1);
190 const auto& msm_x2 = View(in.msm_x2);
191 const auto& msm_x3 = View(in.msm_x3);
192 const auto& msm_x4 = View(in.msm_x4);
193 const auto& msm_y1 = View(in.msm_y1);
194 const auto& msm_y2 = View(in.msm_y2);
195 const auto& msm_y3 = View(in.msm_y3);
196 const auto& msm_y4 = View(in.msm_y4);
204 const auto current_pc = msm_pc - msm_count;
206 if constexpr (lookup_index == 0) {
207 const auto lookup_term1 = (current_pc) + gamma + msm_slice1 * beta + msm_x1 * beta_sqr + msm_y1 * beta_cube;
210 if constexpr (lookup_index == 1) {
211 const auto lookup_term2 =
212 (current_pc - 1) + gamma + msm_slice2 * beta + msm_x2 * beta_sqr + msm_y2 * beta_cube;
215 if constexpr (lookup_index == 2) {
216 const auto lookup_term3 =
217 (current_pc - 2) + gamma + msm_slice3 * beta + msm_x3 * beta_sqr + msm_y3 * beta_cube;
220 if constexpr (lookup_index == 3) {
221 const auto lookup_term4 =
222 (current_pc - 3) + gamma + msm_slice4 * beta + msm_x4 * beta_sqr + msm_y4 * beta_cube;
225 return Accumulator(1);