@@ -48,60 +48,11 @@ namespace nil {
48
48
49
49
constexpr static const std::size_t chunk_amount = 16 ;
50
50
constexpr static const std::size_t carry_amount = 16 / 3 + 1 ;
51
- constexpr static const value_type two_15 = 32768 ;
52
- constexpr static const value_type two_16 = 65536 ;
53
- constexpr static const value_type two_32 = 4294967296 ;
54
- constexpr static const value_type two_48 = 281474976710656 ;
55
- constexpr static const value_type two_64 = 0x10000000000000000_big_uint254;
56
- constexpr static const value_type two_128 =
57
- 0x100000000000000000000000000000000_big_uint254;
58
- constexpr static const value_type two_192 =
59
- 0x1000000000000000000000000000000000000000000000000_big_uint254;
60
51
61
52
public:
62
53
using typename generic_component<FieldType, stage>::TYPE;
63
54
using typename generic_component<FieldType, stage>::context_type;
64
55
65
- template <typename T, typename V = T>
66
- T chunk_sum_64 (const std::vector<V> &chunks, const unsigned char chunk_idx) const {
67
- BOOST_ASSERT (chunk_idx < 4 );
68
- return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1 ] * two_16 +
69
- chunks[4 * chunk_idx + 2 ] * two_32 + chunks[4 * chunk_idx + 3 ] * two_48;
70
- }
71
-
72
- template <typename T>
73
- T first_carryless_construct (const std::vector<T> &a_64_chunks,
74
- const std::vector<T> &b_64_chunks,
75
- const std::vector<T> &r_64_chunks,
76
- const std::vector<T> &q_64_chunks) const {
77
- return r_64_chunks[0 ] * b_64_chunks[0 ] + q_64_chunks[0 ] +
78
- two_64 * (r_64_chunks[0 ] * b_64_chunks[1 ] +
79
- r_64_chunks[1 ] * b_64_chunks[0 ] + q_64_chunks[1 ]) -
80
- a_64_chunks[0 ] - two_64 * a_64_chunks[1 ];
81
- }
82
-
83
- template <typename T>
84
- T second_carryless_construct (const std::vector<T> &a_64_chunks,
85
- const std::vector<T> &b_64_chunks,
86
- const std::vector<T> &r_64_chunks,
87
- const std::vector<T> &q_64_chunks) const {
88
- return (r_64_chunks[0 ] * b_64_chunks[2 ] + r_64_chunks[1 ] * b_64_chunks[1 ] +
89
- r_64_chunks[2 ] * b_64_chunks[0 ] + q_64_chunks[2 ] - a_64_chunks[2 ]) +
90
- two_64 *
91
- (r_64_chunks[0 ] * b_64_chunks[3 ] + r_64_chunks[1 ] * b_64_chunks[2 ] +
92
- r_64_chunks[2 ] * b_64_chunks[1 ] + r_64_chunks[3 ] * b_64_chunks[0 ] +
93
- q_64_chunks[3 ] - a_64_chunks[3 ]);
94
- }
95
-
96
- template <typename T>
97
- T third_carryless_construct (const std::vector<T> &b_64_chunks,
98
- const std::vector<T> &r_64_chunks) const {
99
- return (r_64_chunks[1 ] * b_64_chunks[3 ] + r_64_chunks[2 ] * b_64_chunks[2 ] +
100
- r_64_chunks[3 ] * b_64_chunks[1 ]) +
101
- two_64 *
102
- (r_64_chunks[2 ] * b_64_chunks[3 ] + r_64_chunks[3 ] * b_64_chunks[2 ]);
103
- }
104
-
105
56
TYPE carry_on_addition_constraint (TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1,
106
57
TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2,
107
58
TYPE last_carry, TYPE result_carry,
@@ -245,7 +196,7 @@ namespace nil {
245
196
// caluclate first row carries
246
197
auto first_row_carries = first_carryless.data .base () >> 128 ;
247
198
value_type c_1 =
248
- static_cast <value_type>(first_row_carries & (two_64 - 1 ). data . base () );
199
+ static_cast <value_type>(first_row_carries & (two_64 - 1 ));
249
200
c_2 = static_cast <value_type>(first_row_carries >> 64 );
250
201
c_1_chunks = chunk_64_to_16<FieldType>(c_1);
251
202
// no need for c_2 chunks as there is only a single chunk
@@ -608,4 +559,4 @@ namespace nil {
608
559
};
609
560
} // namespace bbf
610
561
} // namespace blueprint
611
- } // namespace nil
562
+ } // namespace nil
0 commit comments