28 const auto ecc_BOTH_NON_INF = (
FF(1) - in.get(C::ecc_p_is_inf)) * (
FF(1) - in.get(C::ecc_q_is_inf));
29 const auto ecc_EITHER_INF = ((in.get(C::ecc_p_is_inf) + in.get(C::ecc_q_is_inf)) -
FF(2) * ecc_BOTH_INF);
32 using View =
typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
33 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_sel)));
37 using View =
typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
38 auto tmp =
static_cast<View
>(in.get(C::ecc_double_op)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_double_op)));
42 using View =
typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
43 auto tmp =
static_cast<View
>(in.get(C::ecc_add_op)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_add_op)));
47 using View =
typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
48 auto tmp = (
static_cast<View
>(in.get(C::ecc_sel)) -
49 (
static_cast<View
>(in.get(C::ecc_double_op)) +
static_cast<View
>(in.get(C::ecc_add_op)) +
50 CView(ecc_INVERSE_PRED)));
54 using View =
typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
55 auto tmp =
static_cast<View
>(in.get(C::ecc_p_is_inf)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_p_is_inf)));
59 using View =
typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
60 auto tmp =
static_cast<View
>(in.get(C::ecc_q_is_inf)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_q_is_inf)));
64 using View =
typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
65 auto tmp =
static_cast<View
>(in.get(C::ecc_x_match)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_x_match)));
69 using View =
typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
70 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) *
71 ((
CView(ecc_X_DIFF) * (
static_cast<View
>(in.get(C::ecc_x_match)) *
72 (
FF(1) -
static_cast<View
>(in.get(C::ecc_inv_x_diff))) +
73 static_cast<View
>(in.get(C::ecc_inv_x_diff))) -
75 static_cast<View
>(in.get(C::ecc_x_match)));
79 using View =
typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
80 auto tmp =
static_cast<View
>(in.get(C::ecc_y_match)) * (
FF(1) -
static_cast<View
>(in.get(C::ecc_y_match)));
84 using View =
typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
85 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) *
86 ((
CView(ecc_Y_DIFF) * (
static_cast<View
>(in.get(C::ecc_y_match)) *
87 (
FF(1) -
static_cast<View
>(in.get(C::ecc_inv_y_diff))) +
88 static_cast<View
>(in.get(C::ecc_inv_y_diff))) -
90 static_cast<View
>(in.get(C::ecc_y_match)));
94 using View =
typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
95 auto tmp = (
static_cast<View
>(in.get(C::ecc_double_op)) -
96 static_cast<View
>(in.get(C::ecc_x_match)) *
static_cast<View
>(in.get(C::ecc_y_match)));
100 using View =
typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
101 auto tmp =
static_cast<View
>(in.get(C::ecc_double_op)) *
102 (
static_cast<View
>(in.get(C::ecc_p_is_inf)) -
static_cast<View
>(in.get(C::ecc_q_is_inf)));
106 using View =
typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
108 (
FF(1) -
static_cast<View
>(in.get(C::ecc_result_infinity))) *
static_cast<View
>(in.get(C::ecc_double_op)) *
109 (
FF(2) *
static_cast<View
>(in.get(C::ecc_p_y)) *
static_cast<View
>(in.get(C::ecc_inv_2_p_y)) -
FF(1));
113 using View =
typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
114 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) *
115 (
static_cast<View
>(in.get(C::ecc_lambda)) -
116 (
static_cast<View
>(in.get(C::ecc_double_op)) *
FF(3) *
static_cast<View
>(in.get(C::ecc_p_x)) *
117 static_cast<View
>(in.get(C::ecc_p_x)) *
static_cast<View
>(in.get(C::ecc_inv_2_p_y)) +
118 static_cast<View
>(in.get(C::ecc_add_op)) *
CView(ecc_Y_DIFF) *
119 static_cast<View
>(in.get(C::ecc_inv_x_diff))));
123 using View =
typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
125 (
static_cast<View
>(in.get(C::ecc_use_computed_result)) -
126 static_cast<View
>(in.get(C::ecc_sel)) *
CView(ecc_BOTH_NON_INF) * (
FF(1) -
CView(ecc_INVERSE_PRED)));
130 using View =
typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
131 auto tmp = (
static_cast<View
>(in.get(C::ecc_result_infinity)) -
132 (
CView(ecc_INVERSE_PRED) *
CView(ecc_BOTH_NON_INF) +
CView(ecc_BOTH_INF)));
136 using View =
typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
137 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) *
138 (((
static_cast<View
>(in.get(C::ecc_r_x)) -
139 CView(ecc_EITHER_INF) *
140 (
static_cast<View
>(in.get(C::ecc_p_is_inf)) *
static_cast<View
>(in.get(C::ecc_q_x)) +
141 static_cast<View
>(in.get(C::ecc_q_is_inf)) *
static_cast<View
>(in.get(C::ecc_p_x)))) -
142 static_cast<View
>(in.get(C::ecc_result_infinity)) *
CView(ecc_INFINITY_X)) -
143 static_cast<View
>(in.get(C::ecc_use_computed_result)) *
CView(ecc_COMPUTED_R_X));
147 using View =
typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
148 auto tmp =
static_cast<View
>(in.get(C::ecc_sel)) *
149 (((
static_cast<View
>(in.get(C::ecc_r_y)) -
150 CView(ecc_EITHER_INF) *
151 (
static_cast<View
>(in.get(C::ecc_p_is_inf)) *
static_cast<View
>(in.get(C::ecc_q_y)) +
152 static_cast<View
>(in.get(C::ecc_q_is_inf)) *
static_cast<View
>(in.get(C::ecc_p_y)))) -
153 static_cast<View
>(in.get(C::ecc_result_infinity)) *
CView(ecc_INFINITY_Y)) -
154 static_cast<View
>(in.get(C::ecc_use_computed_result)) *
CView(ecc_COMPUTED_R_Y));