113 using View =
typename Accumulator::View;
150 const auto& precompute_pc = View(in.precompute_pc);
151 const auto& tx = View(in.precompute_tx);
152 const auto& ty = View(in.precompute_ty);
153 const auto& precompute_round = View(in.precompute_round);
154 const auto& gamma = params.gamma;
155 const auto& beta = params.beta;
156 const auto& beta_sqr = params.beta_sqr;
157 const auto& beta_cube = params.beta_cube;
159 if constexpr (write_index == 0) {
160 const auto positive_slice_value = -(precompute_round) + 15;
161 const auto positive_term =
162 precompute_pc + gamma + positive_slice_value * beta + tx * beta_sqr + ty * beta_cube;
163 return positive_term;
165 if constexpr (write_index == 1) {
166 const auto negative_term = precompute_pc + gamma + precompute_round * beta + tx * beta_sqr - ty * beta_cube;
167 return negative_term;
169 return Accumulator(1);
175 using View =
typename Accumulator::View;
180 const auto& gamma = params.gamma;
181 const auto& beta = params.beta;
182 const auto& beta_sqr = params.beta_sqr;
183 const auto& beta_cube = params.beta_cube;
184 const auto& msm_pc = View(in.msm_pc);
185 const auto& msm_count = View(in.msm_count);
186 const auto& msm_slice1 = View(in.msm_slice1);
187 const auto& msm_slice2 = View(in.msm_slice2);
188 const auto& msm_slice3 = View(in.msm_slice3);
189 const auto& msm_slice4 = View(in.msm_slice4);
190 const auto& msm_x1 = View(in.msm_x1);
191 const auto& msm_x2 = View(in.msm_x2);
192 const auto& msm_x3 = View(in.msm_x3);
193 const auto& msm_x4 = View(in.msm_x4);
194 const auto& msm_y1 = View(in.msm_y1);
195 const auto& msm_y2 = View(in.msm_y2);
196 const auto& msm_y3 = View(in.msm_y3);
197 const auto& msm_y4 = View(in.msm_y4);
205 const auto current_pc = msm_pc - msm_count;
207 if constexpr (read_index == 0) {
208 const auto read_term1 = (current_pc) + gamma + msm_slice1 * beta + msm_x1 * beta_sqr + msm_y1 * beta_cube;
211 if constexpr (read_index == 1) {
212 const auto read_term2 =
213 (current_pc - 1) + gamma + msm_slice2 * beta + msm_x2 * beta_sqr + msm_y2 * beta_cube;
216 if constexpr (read_index == 2) {
217 const auto read_term3 =
218 (current_pc - 2) + gamma + msm_slice3 * beta + msm_x3 * beta_sqr + msm_y3 * beta_cube;
221 if constexpr (read_index == 3) {
222 const auto read_term4 =
223 (current_pc - 3) + gamma + msm_slice4 * beta + msm_x4 * beta_sqr + msm_y4 * beta_cube;
226 return Accumulator(1);