@@ -21,24 +21,20 @@ Revision History:
21
21
#include " util/buffer.h"
22
22
#include " util/mpn.h"
23
23
24
- #define max (a,b ) (((a) > (b)) ? (a) : (b))
25
-
26
24
typedef uint64_t mpn_double_digit;
27
25
static_assert (sizeof (mpn_double_digit) == 2 * sizeof(mpn_digit), "size alignment");
28
26
29
- const mpn_digit mpn_manager::zero = 0 ;
30
-
31
27
int mpn_manager::compare (mpn_digit const * a, unsigned lnga,
32
28
mpn_digit const * b, unsigned lngb) const {
33
29
int res = 0 ;
34
30
35
31
trace (a, lnga);
36
32
37
- unsigned j = max (lnga, lngb);
33
+ unsigned j = std:: max (lnga, lngb);
38
34
for (; j-- > 0 && res == 0 ;) {
39
- mpn_digit const & u_j = (j < lnga) ? a[j] : zero ;
40
- mpn_digit const & v_j = (j < lngb) ? b[j] : zero ;
41
- if (u_j > v_j)
35
+ mpn_digit u_j = (j < lnga) ? a[j] : 0 ;
36
+ mpn_digit v_j = (j < lngb) ? b[j] : 0 ;
37
+ if (u_j > v_j)
42
38
res = 1 ;
43
39
else if (u_j < v_j)
44
40
res = -1 ;
@@ -56,14 +52,14 @@ bool mpn_manager::add(mpn_digit const * a, unsigned lnga,
56
52
unsigned * plngc) const {
57
53
trace (a, lnga, b, lngb, " +" );
58
54
// Essentially Knuth's Algorithm A
59
- unsigned len = max (lnga, lngb);
55
+ unsigned len = std:: max (lnga, lngb);
60
56
SASSERT (lngc_alloc == len+1 && len > 0 );
61
57
mpn_digit k = 0 ;
62
58
mpn_digit r;
63
59
bool c1, c2;
64
60
for (unsigned j = 0 ; j < len; j++) {
65
- mpn_digit const & u_j = (j < lnga) ? a[j] : zero ;
66
- mpn_digit const & v_j = (j < lngb) ? b[j] : zero ;
61
+ mpn_digit u_j = (j < lnga) ? a[j] : 0 ;
62
+ mpn_digit v_j = (j < lngb) ? b[j] : 0 ;
67
63
r = u_j + v_j; c1 = r < u_j;
68
64
c[j] = r + k; c2 = c[j] < r;
69
65
k = c1 | c2;
@@ -81,13 +77,13 @@ bool mpn_manager::sub(mpn_digit const * a, unsigned lnga,
81
77
mpn_digit * c, mpn_digit * pborrow) const {
82
78
trace (a, lnga, b, lngb, " -" );
83
79
// Essentially Knuth's Algorithm S
84
- unsigned len = max (lnga, lngb);
80
+ unsigned len = std:: max (lnga, lngb);
85
81
mpn_digit & k = *pborrow; k = 0 ;
86
82
mpn_digit r;
87
83
bool c1, c2;
88
84
for (unsigned j = 0 ; j < len; j++) {
89
- mpn_digit const & u_j = (j < lnga) ? a[j] : zero ;
90
- mpn_digit const & v_j = (j < lngb) ? b[j] : zero;
85
+ mpn_digit u_j = (j < lnga) ? a[j] : 0 ;
86
+ mpn_digit v_j = (j < lngb) ? b[j] : 0 ;
91
87
r = u_j - v_j; c1 = r > u_j;
92
88
c[j] = r - k; c2 = c[j] > r;
93
89
k = c1 | c2;
@@ -112,14 +108,14 @@ bool mpn_manager::mul(mpn_digit const * a, unsigned lnga,
112
108
c[i] = 0 ;
113
109
114
110
for (unsigned j = 0 ; j < lngb; j++) {
115
- mpn_digit const & v_j = b[j];
111
+ mpn_digit v_j = b[j];
116
112
if (v_j == 0 ) { // This branch may be omitted according to Knuth.
117
113
c[j+lnga] = 0 ;
118
114
}
119
115
else {
120
116
k = 0 ;
121
117
for (i = 0 ; i < lnga; i++) {
122
- mpn_digit const & u_i = a[i];
118
+ mpn_digit u_i = a[i];
123
119
mpn_double_digit t;
124
120
t = ((mpn_double_digit)u_i * (mpn_double_digit)v_j) +
125
121
(mpn_double_digit) c[i+j] +
@@ -156,15 +152,6 @@ bool mpn_manager::div(mpn_digit const * numer, unsigned lnum,
156
152
return false ;
157
153
}
158
154
159
- bool all_zero = true ;
160
- for (unsigned i = 0 ; i < lden && all_zero; i++)
161
- if (denom[i] != zero) all_zero = false ;
162
-
163
- if (all_zero) {
164
- UNREACHABLE ();
165
- return res;
166
- }
167
-
168
155
SASSERT (denom[lden-1 ] != 0 );
169
156
170
157
if (lnum == 1 && lden == 1 ) {
0 commit comments