Home | History | Annotate | Download | only in dmg_fp
      1 diff --git a/base/third_party/dmg_fp/dtoa.cc b/base/third_party/dmg_fp/dtoa.cc
      2 index 3312fa4..502c16c 100644
      3 --- a/base/third_party/dmg_fp/dtoa.cc
      4 +++ b/base/third_party/dmg_fp/dtoa.cc
      5 @@ -548,8 +548,10 @@ Balloc
      6  	ACQUIRE_DTOA_LOCK(0);
      7  	/* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */
      8  	/* but this case seems very unlikely. */
      9 -	if (k <= Kmax && (rv = freelist[k]))
     10 +	if (k <= Kmax && freelist[k]) {
     11 +		rv = freelist[k];
     12  		freelist[k] = rv->next;
     13 +		}
     14  	else {
     15  		x = 1 << k;
     16  #ifdef Omit_Private_Memory
     17 @@ -650,7 +652,7 @@ multadd
     18  			Bfree(b);
     19  			b = b1;
     20  			}
     21 -		b->x[wds++] = carry;
     22 +		b->x[wds++] = (ULong)carry;
     23  		b->wds = wds;
     24  		}
     25  	return b;
     26 @@ -834,7 +836,8 @@ mult
     27  	xc0 = c->x;
     28  #ifdef ULLong
     29  	for(; xb < xbe; xc0++) {
     30 -		if ((y = *xb++)) {
     31 +		y = *xb++;
     32 +		if (y) {
     33  			x = xa;
     34  			xc = xc0;
     35  			carry = 0;
     36 @@ -844,7 +847,7 @@ mult
     37  				*xc++ = z & FFFFFFFF;
     38  				}
     39  				while(x < xae);
     40 -			*xc = carry;
     41 +			*xc = (ULong)carry;
     42  			}
     43  		}
     44  #else
     45 @@ -916,16 +919,19 @@ pow5mult
     46  	int i;
     47  	static int p05[3] = { 5, 25, 125 };
     48  
     49 -	if ((i = k & 3))
     50 +	i = k & 3;
     51 +	if (i)
     52  		b = multadd(b, p05[i-1], 0);
     53  
     54  	if (!(k >>= 2))
     55  		return b;
     56 -	if (!(p5 = p5s)) {
     57 +	p5 = p5s;
     58 +	if (!p5) {
     59  		/* first time */
     60  #ifdef MULTIPLE_THREADS
     61  		ACQUIRE_DTOA_LOCK(1);
     62 -		if (!(p5 = p5s)) {
     63 +		p5 = p5s;
     64 +		if (!p5) {
     65  			p5 = p5s = i2b(625);
     66  			p5->next = 0;
     67  			}
     68 @@ -943,10 +949,12 @@ pow5mult
     69  			}
     70  		if (!(k >>= 1))
     71  			break;
     72 -		if (!(p51 = p5->next)) {
     73 +		p51 = p5->next;
     74 +		if (!p51) {
     75  #ifdef MULTIPLE_THREADS
     76  			ACQUIRE_DTOA_LOCK(1);
     77 -			if (!(p51 = p5->next)) {
     78 +			p51 = p5->next;
     79 +			if (!p51) {
     80  				p51 = p5->next = mult(p5,p5);
     81  				p51->next = 0;
     82  				}
     83 @@ -997,7 +1005,8 @@ lshift
     84  			z = *x++ >> k1;
     85  			}
     86  			while(x < xe);
     87 -		if ((*x1 = z))
     88 +		*x1 = z;
     89 +		if (*x1)
     90  			++n1;
     91  		}
     92  #else
     93 @@ -1299,21 +1308,25 @@ d2b
     94  	z |= Exp_msk11;
     95  #endif
     96  #else
     97 -	if ((de = (int)(d0 >> Exp_shift)))
     98 +	de = (int)(d0 >> Exp_shift);
     99 +	if (de)
    100  		z |= Exp_msk1;
    101  #endif
    102  #ifdef Pack_32
    103 -	if ((y = d1)) {
    104 -		if ((k = lo0bits(&y))) {
    105 +	y = d1;
    106 +	if (y) {
    107 +		k = lo0bits(&y);
    108 +		if (k) {
    109  			x[0] = y | z << (32 - k);
    110  			z >>= k;
    111  			}
    112  		else
    113  			x[0] = y;
    114 +		x[1] = z;
    115 +		b->wds = x[1] ? 2 : 1;
    116  #ifndef Sudden_Underflow
    117 -		i =
    118 +		i = b->wds;
    119  #endif
    120 -		    b->wds = (x[1] = z) ? 2 : 1;
    121  		}
    122  	else {
    123  		k = lo0bits(&z);
    124 @@ -1498,7 +1511,7 @@ htinit(unsigned char *h, unsigned char *s, int inc)
    125  {
    126  	int i, j;
    127  	for(i = 0; (j = s[i]) !=0; i++)
    128 -		h[j] = i + inc;
    129 +		h[j] = (unsigned char)(i + inc);
    130  	}
    131  
    132   static void
    133 @@ -1536,7 +1549,7 @@ match
    134  	int c, d;
    135  	CONST char *s = *sp;
    136  
    137 -	while((d = *t++)) {
    138 +	for(d = *t++; d; d = *t++) {
    139  		if ((c = *++s) >= 'A' && c <= 'Z')
    140  			c += 'a' - 'A';
    141  		if (c != d)
    142 @@ -1566,12 +1579,13 @@ hexnan
    143  	udx0 = 1;
    144  	s = *sp;
    145  	/* allow optional initial 0x or 0X */
    146 -	while((c = *(CONST unsigned char*)(s+1)) && c <= ' ')
    147 +	for(c = *(CONST unsigned char*)(s+1); c && c <= ' '; c = *(CONST unsigned char*)(s+1))
    148  		++s;
    149  	if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
    150  		s += 2;
    151 -	while((c = *(CONST unsigned char*)++s)) {
    152 -		if ((c1 = hexdig[c]))
    153 +	for(c = *(CONST unsigned char*)++s; c; c = *(CONST unsigned char*)++s) {
    154 +		c1 = hexdig[c];
    155 +		if (c1)
    156  			c  = c1 & 0xf;
    157  		else if (c <= ' ') {
    158  			if (udx0 && havedig) {
    159 @@ -1594,7 +1608,8 @@ hexnan
    160  					*sp = s + 1;
    161  					break;
    162  					}
    163 -				} while((c = *++s));
    164 +				c = *++s;
    165 +				} while(c);
    166  			break;
    167  			}
    168  #endif
    169 @@ -2328,7 +2343,8 @@ bigcomp
    170  	/* Now b/d = exactly half-way between the two floating-point values */
    171  	/* on either side of the input string.  Compute first digit of b/d. */
    172  
    173 -	if (!(dig = quorem(b,d))) {
    174 +	dig = quorem(b,d);
    175 +	if (!dig) {
    176  		b = multadd(b, 10, 0);	/* very unlikely */
    177  		dig = quorem(b,d);
    178  		}
    179 @@ -2336,7 +2352,8 @@ bigcomp
    180  	/* Compare b/d with s0 */
    181  
    182  	for(i = 0; i < nd0; ) {
    183 -		if ((dd = s0[i++] - '0' - dig))
    184 +		dd = s0[i++] - '0' - dig;
    185 +		if (dd)
    186  			goto ret;
    187  		if (!b->x[0] && b->wds == 1) {
    188  			if (i < nd)
    189 @@ -2347,7 +2364,8 @@ bigcomp
    190  		dig = quorem(b,d);
    191  		}
    192  	for(j = bc->dp1; i++ < nd;) {
    193 -		if ((dd = s0[j++] - '0' - dig))
    194 +		dd = s0[j++] - '0' - dig;
    195 +		if (dd)
    196  			goto ret;
    197  		if (!b->x[0] && b->wds == 1) {
    198  			if (i < nd)
    199 @@ -2747,7 +2765,8 @@ strtod
    200  	/* Get starting approximation = rv * 10**e1 */
    201  
    202  	if (e1 > 0) {
    203 -		if ((i = e1 & 15))
    204 +		i = e1 & 15;
    205 +		if (i)
    206  			dval(&rv) *= tens[i];
    207  		if (e1 &= ~15) {
    208  			if (e1 > DBL_MAX_10_EXP) {
    209 @@ -2805,7 +2824,8 @@ strtod
    210  		}
    211  	else if (e1 < 0) {
    212  		e1 = -e1;
    213 -		if ((i = e1 & 15))
    214 +		i = e1 & 15;
    215 +		if (i)
    216  			dval(&rv) /= tens[i];
    217  		if (e1 >>= 4) {
    218  			if (e1 >= 1 << n_bigtens)
    219 @@ -3283,7 +3303,7 @@ strtod
    220  #ifdef Avoid_Underflow
    221  			if (bc.scale && y <= 2*P*Exp_msk1) {
    222  				if (aadj <= 0x7fffffff) {
    223 -					if ((z = aadj) <= 0)
    224 +					if ((z = (ULong)aadj) <= 0)
    225  						z = 1;
    226  					aadj = z;
    227  					aadj1 = bc.dsign ? aadj : -aadj;
    228 @@ -3456,7 +3476,7 @@ nrv_alloc(CONST char *s, char **rve, int n)
    229  	char *rv, *t;
    230  
    231  	t = rv = rv_alloc(n);
    232 -	while((*t = *s++)) t++;
    233 +	for(*t = *s++; *t; *t = *s++) t++;
    234  	if (rve)
    235  		*rve = t;
    236  	return rv;
    237 @@ -3569,7 +3589,7 @@ dtoa
    238  	int denorm;
    239  	ULong x;
    240  #endif
    241 -	Bigint *b, *b1, *delta, *mlo, *mhi, *S;
    242 +	Bigint *b, *b1, *delta, *mlo = NULL, *mhi, *S;
    243  	U d2, eps, u;
    244  	double ds;
    245  	char *s, *s0;
    246 @@ -3645,10 +3665,9 @@ dtoa
    247  #endif
    248  
    249  	b = d2b(&u, &be, &bbits);
    250 -#ifdef Sudden_Underflow
    251  	i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
    252 -#else
    253 -	if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
    254 +#ifndef Sudden_Underflow
    255 +	if (i) {
    256  #endif
    257  		dval(&d2) = dval(&u);
    258  		word0(&d2) &= Frac_mask1;
    259 @@ -3803,13 +3822,16 @@ dtoa
    260  					}
    261  			dval(&u) /= ds;
    262  			}
    263 -		else if ((j1 = -k)) {
    264 -			dval(&u) *= tens[j1 & 0xf];
    265 -			for(j = j1 >> 4; j; j >>= 1, i++)
    266 -				if (j & 1) {
    267 -					ieps++;
    268 -					dval(&u) *= bigtens[i];
    269 -					}
    270 +		else {
    271 +			j1 = -k;
    272 +			if (j1) {
    273 +				dval(&u) *= tens[j1 & 0xf];
    274 +				for(j = j1 >> 4; j; j >>= 1, i++)
    275 +					if (j & 1) {
    276 +						ieps++;
    277 +						dval(&u) *= bigtens[i];
    278 +						}
    279 +				}
    280  			}
    281  		if (k_check && dval(&u) < 1. && ilim > 0) {
    282  			if (ilim1 <= 0)
    283 @@ -3837,9 +3859,9 @@ dtoa
    284  			 */
    285  			dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
    286  			for(i = 0;;) {
    287 -				L = dval(&u);
    288 +				L = (long)dval(&u);
    289  				dval(&u) -= L;
    290 -				*s++ = '0' + (int)L;
    291 +				*s++ = '0' + (char)L;
    292  				if (dval(&u) < dval(&eps))
    293  					goto ret1;
    294  				if (1. - dval(&u) < dval(&eps))
    295 @@ -3858,7 +3880,7 @@ dtoa
    296  				L = (Long)(dval(&u));
    297  				if (!(dval(&u) -= L))
    298  					ilim = i;
    299 -				*s++ = '0' + (int)L;
    300 +				*s++ = '0' + (char)L;
    301  				if (i == ilim) {
    302  					if (dval(&u) > 0.5 + dval(&eps))
    303  						goto bump_up;
    304 @@ -3901,7 +3923,7 @@ dtoa
    305  				dval(&u) += ds;
    306  				}
    307  #endif
    308 -			*s++ = '0' + (int)L;
    309 +			*s++ = '0' + (char)L;
    310  			if (!dval(&u)) {
    311  #ifdef SET_INEXACT
    312  				inexact = 0;
    313 @@ -3964,7 +3986,8 @@ dtoa
    314  				Bfree(b);
    315  				b = b1;
    316  				}
    317 -			if ((j = b5 - m5))
    318 +			j = b5 - m5;
    319 +			if (j)
    320  				b = pow5mult(b, j);
    321  			}
    322  		else
    323 @@ -4002,7 +4025,8 @@ dtoa
    324  	 * can do shifts and ors to compute the numerator for q.
    325  	 */
    326  #ifdef Pack_32
    327 -	if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
    328 +	i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f;
    329 +	if (i)
    330  		i = 32 - i;
    331  #define iInc 28
    332  #else
    333 @@ -4077,7 +4101,7 @@ dtoa
    334  				else if (!b->x[0] && b->wds <= 1)
    335  					inexact = 0;
    336  #endif
    337 -				*s++ = dig;
    338 +				*s++ = (char)dig;
    339  				goto ret;
    340  				}
    341  #endif
    342 @@ -4107,7 +4131,7 @@ dtoa
    343  						goto round_9_up;
    344  					}
    345   accept_dig:
    346 -				*s++ = dig;
    347 +				*s++ = (char)dig;
    348  				goto ret;
    349  				}
    350  			if (j1 > 0) {
    351 @@ -4120,13 +4144,13 @@ dtoa
    352  					*s++ = '9';
    353  					goto roundoff;
    354  					}
    355 -				*s++ = dig + 1;
    356 +				*s++ = (char)dig + 1;
    357  				goto ret;
    358  				}
    359  #ifdef Honor_FLT_ROUNDS
    360   keep_dig:
    361  #endif
    362 -			*s++ = dig;
    363 +			*s++ = (char)dig;
    364  			if (i == ilim)
    365  				break;
    366  			b = multadd(b, 10, 0);
    367 @@ -4140,7 +4164,8 @@ dtoa
    368  		}
    369  	else
    370  		for(i = 1;; i++) {
    371 -			*s++ = dig = quorem(b,S) + '0';
    372 +			dig = quorem(b,S) + '0';
    373 +			*s++ = (char)dig;
    374  			if (!b->x[0] && b->wds <= 1) {
    375  #ifdef SET_INEXACT
    376  				inexact = 0;
    377 diff --git a/base/third_party/dmg_fp/g_fmt.cc b/base/third_party/dmg_fp/g_fmt.cc
    378 index d864eb7..bfa358d 100644
    379 --- a/base/third_party/dmg_fp/g_fmt.cc
    380 +++ b/base/third_party/dmg_fp/g_fmt.cc
    381 @@ -46,14 +46,14 @@ g_fmt(register char *b, double x)
    382  	if (sign)
    383  		*b++ = '-';
    384  	if (decpt == 9999) /* Infinity or Nan */ {
    385 -		while((*b++ = *s++)) {}
    386 +		for(*b = *s++; *b++; *b = *s++) {}
    387  		goto done0;
    388  		}
    389  	if (decpt <= -4 || decpt > se - s + 5) {
    390  		*b++ = *s++;
    391  		if (*s) {
    392  			*b++ = '.';
    393 -			while((*b = *s++))
    394 +			for(*b = *s++; *b; *b = *s++)
    395  				b++;
    396  			}
    397  		*b++ = 'e';
    398 @@ -67,7 +67,7 @@ g_fmt(register char *b, double x)
    399  		for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10) {}
    400  		for(;;) {
    401  			i = decpt / k;
    402 -			*b++ = i + '0';
    403 +			*b++ = (char)i + '0';
    404  			if (--j <= 0)
    405  				break;
    406  			decpt -= i*k;
    407 @@ -79,10 +79,10 @@ g_fmt(register char *b, double x)
    408  		*b++ = '.';
    409  		for(; decpt < 0; decpt++)
    410  			*b++ = '0';
    411 -		while((*b++ = *s++)) {}
    412 +		for(*b = *s++; *b++; *b = *s++) {}
    413  		}
    414  	else {
    415 -		while((*b = *s++)) {
    416 +		for(*b = *s++; *b; *b = *s++) {
    417  			b++;
    418  			if (--decpt == 0 && *s)
    419  				*b++ = '.';
    420