28 const AllEntities& in,
30 const FF& scaling_factor)
32 static const FF minus_one =
FF(-1);
33 static const FF minus_two =
FF(-2);
34 static const FF minus_three =
FF(-3);
35 static const size_t micro_limb_bits = 14;
36 static const auto maximum_sort_value = -
FF((1 << micro_limb_bits) - 1);
40 using View =
typename Accumulator::View;
41 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
42 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
43 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
44 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
45 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
46 auto ordered_range_constraints_0_shift = View(in.ordered_range_constraints_0_shift);
47 auto ordered_range_constraints_1_shift = View(in.ordered_range_constraints_1_shift);
48 auto ordered_range_constraints_2_shift = View(in.ordered_range_constraints_2_shift);
49 auto ordered_range_constraints_3_shift = View(in.ordered_range_constraints_3_shift);
50 auto ordered_range_constraints_4_shift = View(in.ordered_range_constraints_4_shift);
53 const auto lagrange_real_last = View(in.lagrange_real_last);
54 const auto lagrange_masking = View(in.lagrange_masking);
59 const auto not_last_or_masking = (lagrange_real_last + lagrange_masking + minus_one);
62 auto delta_1 = ordered_range_constraints_0_shift - ordered_range_constraints_0;
63 auto delta_2 = ordered_range_constraints_1_shift - ordered_range_constraints_1;
64 auto delta_3 = ordered_range_constraints_2_shift - ordered_range_constraints_2;
65 auto delta_4 = ordered_range_constraints_3_shift - ordered_range_constraints_3;
66 auto delta_5 = ordered_range_constraints_4_shift - ordered_range_constraints_4;
70 tmp_1 *= (delta_1 + minus_one);
71 tmp_1 *= (delta_1 + minus_two);
72 tmp_1 *= (delta_1 + minus_three);
73 tmp_1 *= not_last_or_masking;
74 tmp_1 *= scaling_factor;
79 tmp_2 *= (delta_2 + minus_one);
80 tmp_2 *= (delta_2 + minus_two);
81 tmp_2 *= (delta_2 + minus_three);
82 tmp_2 *= not_last_or_masking;
83 tmp_2 *= scaling_factor;
89 tmp_3 *= (delta_3 + minus_one);
90 tmp_3 *= (delta_3 + minus_two);
91 tmp_3 *= (delta_3 + minus_three);
92 tmp_3 *= not_last_or_masking;
93 tmp_3 *= scaling_factor;
98 tmp_4 *= (delta_4 + minus_one);
99 tmp_4 *= (delta_4 + minus_two);
100 tmp_4 *= (delta_4 + minus_three);
101 tmp_4 *= not_last_or_masking;
102 tmp_4 *= scaling_factor;
106 auto tmp_5 = delta_5;
107 tmp_5 *= (delta_5 + minus_one);
108 tmp_5 *= (delta_5 + minus_two);
109 tmp_5 *= (delta_5 + minus_three);
110 tmp_5 *= not_last_or_masking;
111 tmp_5 *= scaling_factor;
117 using View =
typename Accumulator::View;
118 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
119 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
120 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
121 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
122 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
123 const auto lagrange_real_last = View(in.lagrange_real_last);
128 lagrange_real_last * (ordered_range_constraints_0 + maximum_sort_value) * scaling_factor;
131 lagrange_real_last * (ordered_range_constraints_1 + maximum_sort_value) * scaling_factor;
134 lagrange_real_last * (ordered_range_constraints_2 + maximum_sort_value) * scaling_factor;
137 lagrange_real_last * (ordered_range_constraints_3 + maximum_sort_value) * scaling_factor;
140 lagrange_real_last * (ordered_range_constraints_4 + maximum_sort_value) * scaling_factor;