110 using View =
typename Accumulator::View;
131 const auto& precompute_pc = View(in.precompute_pc);
132 const auto& tx = View(in.precompute_tx);
133 const auto& ty = View(in.precompute_ty);
134 const auto& precompute_round = View(in.precompute_round);
135 const auto& gamma = params.gamma;
136 const auto& beta = params.beta;
137 const auto& beta_sqr = params.beta_sqr;
138 const auto& beta_cube = params.beta_cube;
165 if constexpr (write_index == 0) {
166 const auto positive_slice_value = -(precompute_round) + 15;
167 const auto positive_term =
168 precompute_pc + gamma + positive_slice_value * beta + tx * beta_sqr + ty * beta_cube;
169 return positive_term;
171 if constexpr (write_index == 1) {
172 const auto negative_term = precompute_pc + gamma + precompute_round * beta + tx * beta_sqr - ty * beta_cube;
173 return negative_term;
175 return Accumulator(1);
181 using View =
typename Accumulator::View;
186 const auto& gamma = params.gamma;
187 const auto& beta = params.beta;
188 const auto& beta_sqr = params.beta_sqr;
189 const auto& beta_cube = params.beta_cube;
190 const auto& msm_pc = View(in.msm_pc);
191 const auto& msm_count = View(in.msm_count);
192 const auto& msm_slice1 = View(in.msm_slice1);
193 const auto& msm_slice2 = View(in.msm_slice2);
194 const auto& msm_slice3 = View(in.msm_slice3);
195 const auto& msm_slice4 = View(in.msm_slice4);
196 const auto& msm_x1 = View(in.msm_x1);
197 const auto& msm_x2 = View(in.msm_x2);
198 const auto& msm_x3 = View(in.msm_x3);
199 const auto& msm_x4 = View(in.msm_x4);
200 const auto& msm_y1 = View(in.msm_y1);
201 const auto& msm_y2 = View(in.msm_y2);
202 const auto& msm_y3 = View(in.msm_y3);
203 const auto& msm_y4 = View(in.msm_y4);
211 const auto current_pc = msm_pc - msm_count;
213 if constexpr (read_index == 0) {
214 const auto read_term1 = (current_pc) + gamma + msm_slice1 * beta + msm_x1 * beta_sqr + msm_y1 * beta_cube;
217 if constexpr (read_index == 1) {
218 const auto read_term2 =
219 (current_pc - 1) + gamma + msm_slice2 * beta + msm_x2 * beta_sqr + msm_y2 * beta_cube;
222 if constexpr (read_index == 2) {
223 const auto read_term3 =
224 (current_pc - 2) + gamma + msm_slice3 * beta + msm_x3 * beta_sqr + msm_y3 * beta_cube;
227 if constexpr (read_index == 3) {
228 const auto read_term4 =
229 (current_pc - 3) + gamma + msm_slice4 * beta + msm_x4 * beta_sqr + msm_y4 * beta_cube;
232 return Accumulator(1);