28 const auto ecc_COMPUTED_R_Y =
29 (in.get(C::ecc_lambda) * (in.get(C::ecc_p_x) - in.get(C::ecc_r_x)) - in.get(C::ecc_p_y));
30 const auto ecc_EITHER_INF = ((in.get(C::ecc_p_is_inf) + in.get(C::ecc_q_is_inf)) -
FF(2) * ecc_BOTH_INF);
34 auto tmp = in.get(C::ecc_sel) * (
FF(1) - in.get(C::ecc_sel));
35 tmp *= scaling_factor;
36 std::get<0>(evals) +=
typename Accumulator::View(tmp);
40 auto tmp = in.get(C::ecc_double_op) * (
FF(1) - in.get(C::ecc_double_op));
41 tmp *= scaling_factor;
42 std::get<1>(evals) +=
typename Accumulator::View(tmp);
46 auto tmp = in.get(C::ecc_add_op) * (
FF(1) - in.get(C::ecc_add_op));
47 tmp *= scaling_factor;
48 std::get<2>(evals) +=
typename Accumulator::View(tmp);
52 auto tmp = (in.get(C::ecc_sel) - (in.get(C::ecc_double_op) + in.get(C::ecc_add_op) + ecc_INFINITY_PRED));
53 tmp *= scaling_factor;
54 std::get<3>(evals) +=
typename Accumulator::View(tmp);
58 auto tmp = in.get(C::ecc_p_is_inf) * (
FF(1) - in.get(C::ecc_p_is_inf));
59 tmp *= scaling_factor;
60 std::get<4>(evals) +=
typename Accumulator::View(tmp);
64 auto tmp = in.get(C::ecc_q_is_inf) * (
FF(1) - in.get(C::ecc_q_is_inf));
65 tmp *= scaling_factor;
66 std::get<5>(evals) +=
typename Accumulator::View(tmp);
70 auto tmp = in.get(C::ecc_r_is_inf) * (
FF(1) - in.get(C::ecc_r_is_inf));
71 tmp *= scaling_factor;
72 std::get<6>(evals) +=
typename Accumulator::View(tmp);
76 auto tmp = in.get(C::ecc_x_match) * (
FF(1) - in.get(C::ecc_x_match));
77 tmp *= scaling_factor;
78 std::get<7>(evals) +=
typename Accumulator::View(tmp);
84 ((ecc_X_DIFF * (in.get(C::ecc_x_match) * (
FF(1) - in.get(C::ecc_inv_x_diff)) + in.get(C::ecc_inv_x_diff)) -
86 in.get(C::ecc_x_match));
87 tmp *= scaling_factor;
88 std::get<8>(evals) +=
typename Accumulator::View(tmp);
92 auto tmp = in.get(C::ecc_y_match) * (
FF(1) - in.get(C::ecc_y_match));
93 tmp *= scaling_factor;
94 std::get<9>(evals) +=
typename Accumulator::View(tmp);
100 ((ecc_Y_DIFF * (in.get(C::ecc_y_match) * (
FF(1) - in.get(C::ecc_inv_y_diff)) + in.get(C::ecc_inv_y_diff)) -
102 in.get(C::ecc_y_match));
103 tmp *= scaling_factor;
108 auto tmp = (in.get(C::ecc_double_op) - in.get(C::ecc_x_match) * in.get(C::ecc_y_match));
109 tmp *= scaling_factor;
114 auto tmp = in.get(C::ecc_sel) *
115 (in.get(C::ecc_result_infinity) - (ecc_INFINITY_PRED * ecc_BOTH_NON_INF + ecc_BOTH_INF));
116 tmp *= scaling_factor;
121 auto tmp = (
FF(1) - in.get(C::ecc_result_infinity)) * in.get(C::ecc_double_op) *
122 (
FF(2) * in.get(C::ecc_p_y) * in.get(C::ecc_inv_2_p_y) -
FF(1));
123 tmp *= scaling_factor;
128 auto tmp = in.get(C::ecc_sel) *
129 (in.get(C::ecc_lambda) - (in.get(C::ecc_double_op) *
FF(3) * in.get(C::ecc_p_x) *
130 in.get(C::ecc_p_x) * in.get(C::ecc_inv_2_p_y) +
131 in.get(C::ecc_add_op) * ecc_Y_DIFF * in.get(C::ecc_inv_x_diff)));
132 tmp *= scaling_factor;
138 (in.get(C::ecc_use_computed_result) - in.get(C::ecc_sel) * (
FF(1) - in.get(C::ecc_p_is_inf)) *
139 (
FF(1) - in.get(C::ecc_q_is_inf)) * (
FF(1) - ecc_INFINITY_PRED));
140 tmp *= scaling_factor;
145 auto tmp = in.get(C::ecc_sel) *
146 (((in.get(C::ecc_r_x) - ecc_EITHER_INF * (in.get(C::ecc_p_is_inf) * in.get(C::ecc_q_x) +
147 in.get(C::ecc_q_is_inf) * in.get(C::ecc_p_x))) -
148 in.get(C::ecc_result_infinity) * ecc_INFINITY_X) -
149 in.get(C::ecc_use_computed_result) * ecc_COMPUTED_R_X);
150 tmp *= scaling_factor;
155 auto tmp = in.get(C::ecc_sel) *
156 (((in.get(C::ecc_r_y) - ecc_EITHER_INF * (in.get(C::ecc_p_is_inf) * in.get(C::ecc_q_y) +
157 in.get(C::ecc_q_is_inf) * in.get(C::ecc_p_y))) -
158 in.get(C::ecc_result_infinity) * ecc_INFINITY_Y) -
159 in.get(C::ecc_use_computed_result) * ecc_COMPUTED_R_Y);
160 tmp *= scaling_factor;
165 auto tmp = in.get(C::ecc_sel) * (in.get(C::ecc_r_is_inf) - in.get(C::ecc_result_infinity));
166 tmp *= scaling_factor;