29 const AllEntities& in,
31 const FF& scaling_factor)
33 static const FF minus_one =
FF(-1);
34 static const FF minus_two =
FF(-2);
35 static const FF minus_three =
FF(-3);
36 static const size_t micro_limb_bits = 14;
37 static const auto maximum_sort_value = -
FF((1 << micro_limb_bits) - 1);
41 using View =
typename Accumulator::View;
42 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
43 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
44 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
45 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
46 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
47 auto ordered_range_constraints_0_shift = View(in.ordered_range_constraints_0_shift);
48 auto ordered_range_constraints_1_shift = View(in.ordered_range_constraints_1_shift);
49 auto ordered_range_constraints_2_shift = View(in.ordered_range_constraints_2_shift);
50 auto ordered_range_constraints_3_shift = View(in.ordered_range_constraints_3_shift);
51 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_ordered_masking = View(in.lagrange_ordered_masking);
58 const auto not_last_or_masking = lagrange_real_last + lagrange_ordered_masking + minus_one;
61 auto delta_1 = ordered_range_constraints_0_shift - ordered_range_constraints_0;
62 auto delta_2 = ordered_range_constraints_1_shift - ordered_range_constraints_1;
63 auto delta_3 = ordered_range_constraints_2_shift - ordered_range_constraints_2;
64 auto delta_4 = ordered_range_constraints_3_shift - ordered_range_constraints_3;
65 auto delta_5 = ordered_range_constraints_4_shift - ordered_range_constraints_4;
69 tmp_1 *= (delta_1 + minus_one);
70 tmp_1 *= (delta_1 + minus_two);
71 tmp_1 *= (delta_1 + minus_three);
72 tmp_1 *= not_last_or_masking;
73 tmp_1 *= scaling_factor;
78 tmp_2 *= (delta_2 + minus_one);
79 tmp_2 *= (delta_2 + minus_two);
80 tmp_2 *= (delta_2 + minus_three);
81 tmp_2 *= not_last_or_masking;
82 tmp_2 *= scaling_factor;
88 tmp_3 *= (delta_3 + minus_one);
89 tmp_3 *= (delta_3 + minus_two);
90 tmp_3 *= (delta_3 + minus_three);
91 tmp_3 *= not_last_or_masking;
92 tmp_3 *= scaling_factor;
97 tmp_4 *= (delta_4 + minus_one);
98 tmp_4 *= (delta_4 + minus_two);
99 tmp_4 *= (delta_4 + minus_three);
100 tmp_4 *= not_last_or_masking;
101 tmp_4 *= scaling_factor;
105 auto tmp_5 = delta_5;
106 tmp_5 *= (delta_5 + minus_one);
107 tmp_5 *= (delta_5 + minus_two);
108 tmp_5 *= (delta_5 + minus_three);
109 tmp_5 *= not_last_or_masking;
110 tmp_5 *= scaling_factor;
116 using View =
typename Accumulator::View;
117 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
118 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
119 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
120 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
121 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
122 const auto lagrange_real_last = View(in.lagrange_real_last);
127 lagrange_real_last * (ordered_range_constraints_0 + maximum_sort_value) * scaling_factor;
130 lagrange_real_last * (ordered_range_constraints_1 + maximum_sort_value) * scaling_factor;
133 lagrange_real_last * (ordered_range_constraints_2 + maximum_sort_value) * scaling_factor;
136 lagrange_real_last * (ordered_range_constraints_3 + maximum_sort_value) * scaling_factor;
139 lagrange_real_last * (ordered_range_constraints_4 + maximum_sort_value) * scaling_factor;