[Python-checkins] r71211 - python/branches/py3k-short-float-repr/Python/dtoa.c

mark.dickinson python-checkins at python.org
Sun Apr 5 12:16:09 CEST 2009


Author: mark.dickinson
Date: Sun Apr  5 12:16:09 2009
New Revision: 71211

Log:
Remove much of the #ifdef stuff in Gay's code.

In detail
---------
Assume: that we're using IEEE 754 floating-point with the usual
round-half-to-even rounding, that divisions are accurate, that our
float.h contains everything that C89 says it should.

We don't want: K&R headers, Hex nans, Hex floats,
correct setting of the inexact flag, rounding to respect FPU
rounding mode.

We *do* want:  errno to be set appropriately, checks
for infinities and nans.



Modified:
   python/branches/py3k-short-float-repr/Python/dtoa.c

Modified: python/branches/py3k-short-float-repr/Python/dtoa.c
==============================================================================
--- python/branches/py3k-short-float-repr/Python/dtoa.c	(original)
+++ python/branches/py3k-short-float-repr/Python/dtoa.c	Sun Apr  5 12:16:09 2009
@@ -221,22 +221,10 @@
 #include "stdlib.h"
 #include "string.h"
 
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
 
-#ifdef Honor_FLT_ROUNDS
-#ifndef Trust_FLT_ROUNDS
-#include <fenv.h>
-#endif
-#endif
 
 #ifdef MALLOC
-#ifdef KR_headers
-extern char *MALLOC();
-#else
 extern void *MALLOC(size_t);
-#endif
 #else
 #define MALLOC malloc
 #endif
@@ -258,50 +246,12 @@
 #define IEEE_Arith
 #endif
 
-#ifdef IEEE_Arith
-#ifndef NO_INFNAN_CHECK
 #undef INFNAN_CHECK
 #define INFNAN_CHECK
-#endif
-#else
-#undef INFNAN_CHECK
-#define NO_STRTOD_BIGCOMP
-#endif
 
 #include "errno.h"
 
-#ifdef Bad_float_h
-
-#ifdef IEEE_Arith
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#define FLT_RADIX 2
-#endif /*IEEE_Arith*/
-
-#ifdef IBM
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 75
-#define DBL_MAX_EXP 63
-#define FLT_RADIX 16
-#define DBL_MAX 7.2370055773322621e+75
-#endif
-
-#ifdef VAX
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 38
-#define DBL_MAX_EXP 127
-#define FLT_RADIX 2
-#define DBL_MAX 1.7014118346046923e+38
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647
-#endif
-
-#else /* ifndef Bad_float_h */
 #include "float.h"
-#endif /* Bad_float_h */
 
 #ifndef __MATH_H__
 #include "math.h"
@@ -312,12 +262,8 @@
 #endif
 
 #ifndef CONST
-#ifdef KR_headers
-#define CONST /* blank */
-#else
 #define CONST const
 #endif
-#endif
 
 #if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
 #error "Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined."
@@ -362,7 +308,6 @@
 /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
 /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
 
-#ifdef IEEE_Arith
 #define Exp_shift  20
 #define Exp_shift1 20
 #define Exp_msk1    0x100000
@@ -389,12 +334,10 @@
 #define Tiny1 1
 #define Quick_max 14
 #define Int_max 14
-#ifndef NO_IEEE_Scale
 #define Avoid_Underflow
 #ifdef Flush_Denorm	/* debugging option */
 #undef Sudden_Underflow
 #endif
-#endif
 
 #ifndef Flt_Rounds
 #ifdef FLT_ROUNDS
@@ -404,124 +347,25 @@
 #endif
 #endif /*Flt_Rounds*/
 
-#ifdef Honor_FLT_ROUNDS
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
 #define Rounding Flt_Rounds
-#endif
 
-#else /* ifndef IEEE_Arith */
-#undef Check_FLT_ROUNDS
-#undef Honor_FLT_ROUNDS
-#undef SET_INEXACT
-#undef  Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#undef Flt_Rounds
-#define Flt_Rounds 0
-#define Exp_shift  24
-#define Exp_shift1 24
-#define Exp_msk1   0x1000000
-#define Exp_msk11  0x1000000
-#define Exp_mask  0x7f000000
-#define P 14
-#define Nbits 56
-#define Bias 65
-#define Emax 248
-#define Emin (-260)
-#define Exp_1  0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8	/* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask  0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask  0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#undef Flt_Rounds
-#define Flt_Rounds 1
-#define Exp_shift  23
-#define Exp_shift1 7
-#define Exp_msk1    0x80
-#define Exp_msk11   0x800000
-#define Exp_mask  0x7f80
-#define P 56
-#define Nbits 56
-#define Bias 129
-#define Emax 126
-#define Emin (-129)
-#define Exp_1  0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask  0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask  0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif /* IBM, VAX */
-#endif /* IEEE_Arith */
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-#ifdef KR_headers
-extern double rnd_prod(), rnd_quot();
-#else
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#endif
-#else
+
+
 #define rounded_product(a,b) a *= b
 #define rounded_quotient(a,b) a /= b
-#endif
 
 #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
 #define Big1 0xffffffff
 
-#ifndef Pack_32
-#define Pack_32
-#endif
 
 typedef struct BCinfo BCinfo;
  struct
 BCinfo { int dp0, dp1, dplen, dsign, e0, inexact, nd, nd0, rounding, scale, uflchk; };
 
-#ifdef KR_headers
-#define FFFFFFFF ((((unsigned long)0xffff)<<16)|(unsigned long)0xffff)
-#else
 #define FFFFFFFF 0xffffffffUL
-#endif
 
 #ifdef NO_LONG_LONG
 #undef ULLong
-#ifdef Just_16
-#undef Pack_32
-/* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
- * This makes some inner loops simpler and sometimes saves work
- * during multiplications, but it often seems to make things slightly
- * slower.  Hence the default is now to store 32 bits per Long.
- */
-#endif
 #else	/* long long available */
 #ifndef Llong
 #define Llong long long
@@ -551,11 +395,7 @@
 
  static Bigint *
 Balloc
-#ifdef KR_headers
-	(k) int k;
-#else
 	(int k)
-#endif
 {
 	int x;
 	Bigint *rv;
@@ -592,11 +432,7 @@
 
  static void
 Bfree
-#ifdef KR_headers
-	(v) Bigint *v;
-#else
 	(Bigint *v)
-#endif
 {
 	if (v) {
 		if (v->k > Kmax)
@@ -619,11 +455,7 @@
 
  static Bigint *
 multadd
-#ifdef KR_headers
-	(b, m, a) Bigint *b; int m, a;
-#else
 	(Bigint *b, int m, int a)	/* multiply by m and add a */
-#endif
 {
 	int i, wds;
 #ifdef ULLong
@@ -631,10 +463,8 @@
 	ULLong carry, y;
 #else
 	ULong carry, *x, y;
-#ifdef Pack_32
 	ULong xi, z;
 #endif
-#endif
 	Bigint *b1;
 
 	wds = b->wds;
@@ -647,17 +477,11 @@
 		carry = y >> 32;
 		*x++ = y & FFFFFFFF;
 #else
-#ifdef Pack_32
 		xi = *x;
 		y = (xi & 0xffff) * m + carry;
 		z = (xi >> 16) * m + (y >> 16);
 		carry = z >> 16;
 		*x++ = (z << 16) + (y & 0xffff);
-#else
-		y = *x * m + carry;
-		carry = y >> 16;
-		*x++ = y & 0xffff;
-#endif
 #endif
 		}
 		while(++i < wds);
@@ -676,11 +500,7 @@
 
  static Bigint *
 s2b
-#ifdef KR_headers
-	(s, nd0, nd, y9, dplen) CONST char *s; int nd0, nd, dplen; ULong y9;
-#else
 	(CONST char *s, int nd0, int nd, ULong y9, int dplen)
-#endif
 {
 	Bigint *b;
 	int i, k;
@@ -688,15 +508,9 @@
 
 	x = (nd + 8) / 9;
 	for(k = 0, y = 1; x > y; y <<= 1, k++) ;
-#ifdef Pack_32
 	b = Balloc(k);
 	b->x[0] = y9;
 	b->wds = 1;
-#else
-	b = Balloc(k+1);
-	b->x[0] = y9 & 0xffff;
-	b->wds = (b->x[1] = y9 >> 16) ? 2 : 1;
-#endif
 
 	i = 9;
 	if (9 < nd0) {
@@ -714,11 +528,7 @@
 
  static int
 hi0bits
-#ifdef KR_headers
-	(x) ULong x;
-#else
 	(ULong x)
-#endif
 {
 	int k = 0;
 
@@ -748,11 +558,7 @@
 
  static int
 lo0bits
-#ifdef KR_headers
-	(y) ULong *y;
-#else
 	(ULong *y)
-#endif
 {
 	int k;
 	ULong x = *y;
@@ -796,11 +602,7 @@
 
  static Bigint *
 i2b
-#ifdef KR_headers
-	(i) int i;
-#else
 	(int i)
-#endif
 {
 	Bigint *b;
 
@@ -812,11 +614,7 @@
 
  static Bigint *
 mult
-#ifdef KR_headers
-	(a, b) Bigint *a, *b;
-#else
 	(Bigint *a, Bigint *b)
-#endif
 {
 	Bigint *c;
 	int k, wa, wb, wc;
@@ -826,10 +624,8 @@
 	ULLong carry, z;
 #else
 	ULong carry, z;
-#ifdef Pack_32
 	ULong z2;
 #endif
-#endif
 
 	if (a->wds < b->wds) {
 		c = a;
@@ -866,7 +662,6 @@
 			}
 		}
 #else
-#ifdef Pack_32
 	for(; xb < xbe; xb++, xc0++) {
 		if (y = *xb & 0xffff) {
 			x = xa;
@@ -898,22 +693,6 @@
 			*xc = z2;
 			}
 		}
-#else
-	for(; xb < xbe; xc0++) {
-		if (y = *xb++) {
-			x = xa;
-			xc = xc0;
-			carry = 0;
-			do {
-				z = *x++ * y + *xc + carry;
-				carry = z >> 16;
-				*xc++ = z & 0xffff;
-				}
-				while(x < xae);
-			*xc = carry;
-			}
-		}
-#endif
 #endif
 	for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
 	c->wds = wc;
@@ -924,11 +703,7 @@
 
  static Bigint *
 pow5mult
-#ifdef KR_headers
-	(b, k) Bigint *b; int k;
-#else
 	(Bigint *b, int k)
-#endif
 {
 	Bigint *b1, *p5, *p51;
 	int i;
@@ -981,21 +756,13 @@
 
  static Bigint *
 lshift
-#ifdef KR_headers
-	(b, k) Bigint *b; int k;
-#else
 	(Bigint *b, int k)
-#endif
 {
 	int i, k1, n, n1;
 	Bigint *b1;
 	ULong *x, *x1, *xe, z;
 
-#ifdef Pack_32
 	n = k >> 5;
-#else
-	n = k >> 4;
-#endif
 	k1 = b->k;
 	n1 = n + b->wds + 1;
 	for(i = b->maxwds; n1 > i; i <<= 1)
@@ -1006,7 +773,6 @@
 		*x1++ = 0;
 	x = b->x;
 	xe = x + b->wds;
-#ifdef Pack_32
 	if (k &= 0x1f) {
 		k1 = 32 - k;
 		z = 0;
@@ -1018,19 +784,6 @@
 		if ((*x1 = z))
 			++n1;
 		}
-#else
-	if (k &= 0xf) {
-		k1 = 16 - k;
-		z = 0;
-		do {
-			*x1++ = *x << k  & 0xffff | z;
-			z = *x++ >> k1;
-			}
-			while(x < xe);
-		if (*x1 = z)
-			++n1;
-		}
-#endif
 	else do
 		*x1++ = *x++;
 		while(x < xe);
@@ -1041,11 +794,7 @@
 
  static int
 cmp
-#ifdef KR_headers
-	(a, b) Bigint *a, *b;
-#else
 	(Bigint *a, Bigint *b)
-#endif
 {
 	ULong *xa, *xa0, *xb, *xb0;
 	int i, j;
@@ -1075,11 +824,7 @@
 
  static Bigint *
 diff
-#ifdef KR_headers
-	(a, b) Bigint *a, *b;
-#else
 	(Bigint *a, Bigint *b)
-#endif
 {
 	Bigint *c;
 	int i, wa, wb;
@@ -1088,10 +833,8 @@
 	ULLong borrow, y;
 #else
 	ULong borrow, y;
-#ifdef Pack_32
 	ULong z;
 #endif
-#endif
 
 	i = cmp(a,b);
 	if (!i) {
@@ -1131,7 +874,6 @@
 		*xc++ = y & FFFFFFFF;
 		}
 #else
-#ifdef Pack_32
 	do {
 		y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
 		borrow = (y & 0x10000) >> 16;
@@ -1147,19 +889,6 @@
 		borrow = (z & 0x10000) >> 16;
 		Storeinc(xc, z, y);
 		}
-#else
-	do {
-		y = *xa++ - *xb++ - borrow;
-		borrow = (y & 0x10000) >> 16;
-		*xc++ = y & 0xffff;
-		}
-		while(xb < xbe);
-	while(xa < xae) {
-		y = *xa++ - borrow;
-		borrow = (y & 0x10000) >> 16;
-		*xc++ = y & 0xffff;
-		}
-#endif
 #endif
 	while(!*--xc)
 		wa--;
@@ -1169,11 +898,7 @@
 
  static double
 ulp
-#ifdef KR_headers
-	(x) U *x;
-#else
 	(U *x)
-#endif
 {
 	Long L;
 	U u;
@@ -1184,9 +909,6 @@
 	if (L > 0) {
 #endif
 #endif
-#ifdef IBM
-		L |= Exp_msk1 >> 4;
-#endif
 		word0(&u) = L;
 		word1(&u) = 0;
 #ifndef Avoid_Underflow
@@ -1211,21 +933,13 @@
 
  static double
 b2d
-#ifdef KR_headers
-	(a, e) Bigint *a; int *e;
-#else
 	(Bigint *a, int *e)
-#endif
 {
 	ULong *xa, *xa0, w, y, z;
 	int k;
 	U d;
-#ifdef VAX
-	ULong d0, d1;
-#else
 #define d0 word0(&d)
 #define d1 word1(&d)
-#endif
 
 	xa0 = a->x;
 	xa = xa0 + a->wds;
@@ -1235,7 +949,6 @@
 #endif
 	k = hi0bits(y);
 	*e = 32 - k;
-#ifdef Pack_32
 	if (k < Ebits) {
 		d0 = Exp_1 | y >> (Ebits - k);
 		w = xa > xa0 ? *--xa : 0;
@@ -1252,40 +965,15 @@
 		d0 = Exp_1 | y;
 		d1 = z;
 		}
-#else
-	if (k < Ebits + 16) {
-		z = xa > xa0 ? *--xa : 0;
-		d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
-		w = xa > xa0 ? *--xa : 0;
-		y = xa > xa0 ? *--xa : 0;
-		d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
-		goto ret_d;
-		}
-	z = xa > xa0 ? *--xa : 0;
-	w = xa > xa0 ? *--xa : 0;
-	k -= Ebits + 16;
-	d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
-	y = xa > xa0 ? *--xa : 0;
-	d1 = w << k + 16 | y << k;
-#endif
  ret_d:
-#ifdef VAX
-	word0(&d) = d0 >> 16 | d0 << 16;
-	word1(&d) = d1 >> 16 | d1 << 16;
-#else
 #undef d0
 #undef d1
-#endif
 	return dval(&d);
 	}
 
  static Bigint *
 d2b
-#ifdef KR_headers
-	(d, e, bits) U *d; int *e, *bits;
-#else
 	(U *d, int *e, int *bits)
-#endif
 {
 	Bigint *b;
 	int de, k;
@@ -1293,34 +981,21 @@
 #ifndef Sudden_Underflow
 	int i;
 #endif
-#ifdef VAX
-	ULong d0, d1;
-	d0 = word0(d) >> 16 | word0(d) << 16;
-	d1 = word1(d) >> 16 | word1(d) << 16;
-#else
 #define d0 word0(d)
 #define d1 word1(d)
-#endif
 
-#ifdef Pack_32
 	b = Balloc(1);
-#else
-	b = Balloc(2);
-#endif
 	x = b->x;
 
 	z = d0 & Frac_mask;
 	d0 &= 0x7fffffff;	/* clear sign bit, which we ignore */
 #ifdef Sudden_Underflow
 	de = (int)(d0 >> Exp_shift);
-#ifndef IBM
 	z |= Exp_msk11;
-#endif
 #else
 	if ((de = (int)(d0 >> Exp_shift)))
 		z |= Exp_msk1;
 #endif
-#ifdef Pack_32
 	if ((y = d1)) {
 		if ((k = lo0bits(&y))) {
 			x[0] = y | z << (32 - k);
@@ -1342,70 +1017,16 @@
 		    b->wds = 1;
 		k += 32;
 		}
-#else
-	if (y = d1) {
-		if (k = lo0bits(&y))
-			if (k >= 16) {
-				x[0] = y | z << 32 - k & 0xffff;
-				x[1] = z >> k - 16 & 0xffff;
-				x[2] = z >> k;
-				i = 2;
-				}
-			else {
-				x[0] = y & 0xffff;
-				x[1] = y >> 16 | z << 16 - k & 0xffff;
-				x[2] = z >> k & 0xffff;
-				x[3] = z >> k+16;
-				i = 3;
-				}
-		else {
-			x[0] = y & 0xffff;
-			x[1] = y >> 16;
-			x[2] = z & 0xffff;
-			x[3] = z >> 16;
-			i = 3;
-			}
-		}
-	else {
-#ifdef DEBUG
-		if (!z)
-			Bug("Zero passed to d2b");
-#endif
-		k = lo0bits(&z);
-		if (k >= 16) {
-			x[0] = z;
-			i = 0;
-			}
-		else {
-			x[0] = z & 0xffff;
-			x[1] = z >> 16;
-			i = 1;
-			}
-		k += 32;
-		}
-	while(!x[i])
-		--i;
-	b->wds = i + 1;
-#endif
 #ifndef Sudden_Underflow
 	if (de) {
 #endif
-#ifdef IBM
-		*e = (de - Bias - (P-1) << 2) + k;
-		*bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
-#else
 		*e = de - Bias - (P-1) + k;
 		*bits = P - k;
-#endif
 #ifndef Sudden_Underflow
 		}
 	else {
 		*e = de - Bias - (P-1) + 1 + k;
-#ifdef Pack_32
 		*bits = 32*i - hi0bits(x[i-1]);
-#else
-		*bits = (i+2)*16 - hi0bits(x[i]);
-#endif
 		}
 #endif
 	return b;
@@ -1415,42 +1036,20 @@
 
  static double
 ratio
-#ifdef KR_headers
-	(a, b) Bigint *a, *b;
-#else
 	(Bigint *a, Bigint *b)
-#endif
 {
 	U da, db;
 	int k, ka, kb;
 
 	dval(&da) = b2d(a, &ka);
 	dval(&db) = b2d(b, &kb);
-#ifdef Pack_32
 	k = ka - kb + 32*(a->wds - b->wds);
-#else
-	k = ka - kb + 16*(a->wds - b->wds);
-#endif
-#ifdef IBM
-	if (k > 0) {
-		word0(&da) += (k >> 2)*Exp_msk1;
-		if (k &= 3)
-			dval(&da) *= 1 << k;
-		}
-	else {
-		k = -k;
-		word0(&db) += (k >> 2)*Exp_msk1;
-		if (k &= 3)
-			dval(&db) *= 1 << k;
-		}
-#else
 	if (k > 0)
 		word0(&da) += k*Exp_msk1;
 	else {
 		k = -k;
 		word0(&db) += k*Exp_msk1;
 		}
-#endif
 	return dval(&da) / dval(&db);
 	}
 
@@ -1459,13 +1058,9 @@
 		1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
 		1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
 		1e20, 1e21, 1e22
-#ifdef VAX
-		, 1e23, 1e24
-#endif
 		};
 
  static CONST double
-#ifdef IEEE_Arith
 bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
 static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
 #ifdef Avoid_Underflow
@@ -1479,40 +1074,19 @@
 /* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
 #define Scale_Bit 0x10
 #define n_bigtens 5
-#else
-#ifdef IBM
-bigtens[] = { 1e16, 1e32, 1e64 };
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
-#define n_bigtens 3
-#else
-bigtens[] = { 1e16, 1e32 };
-static CONST double tinytens[] = { 1e-16, 1e-32 };
-#define n_bigtens 2
-#endif
-#endif
 
 #undef Need_Hexdig
 #ifdef INFNAN_CHECK
-#ifndef No_Hex_NaN
-#define Need_Hexdig
-#endif
 #endif
 
 #ifndef Need_Hexdig
-#ifndef NO_HEX_FP
-#define Need_Hexdig
-#endif
 #endif
 
 #ifdef Need_Hexdig /*{*/
 static unsigned char hexdig[256];
 
  static void
-#ifdef KR_headers
-htinit(h, s, inc) unsigned char *h; unsigned char *s; int inc;
-#else
 htinit(unsigned char *h, unsigned char *s, int inc)
-#endif
 {
 	int i, j;
 	for(i = 0; (j = s[i]) !=0; i++)
@@ -1520,11 +1094,7 @@
 	}
 
  static void
-#ifdef KR_headers
-hexdig_init()
-#else
 hexdig_init(void)
-#endif
 {
 #define USC (unsigned char *)
 	htinit(hexdig, USC "0123456789", 0x10);
@@ -1545,11 +1115,7 @@
 
  static int
 match
-#ifdef KR_headers
-	(sp, t) char **sp, *t;
-#else
 	(CONST char **sp, char *t)
-#endif
 {
 	int c, d;
 	CONST char *s = *sp;
@@ -1564,556 +1130,15 @@
 	return 1;
 	}
 
-#ifndef No_Hex_NaN
- static void
-hexnan
-#ifdef KR_headers
-	(rvp, sp) U *rvp; CONST char **sp;
-#else
-	(U *rvp, CONST char **sp)
-#endif
-{
-	ULong c, x[2];
-	CONST char *s;
-	int c1, havedig, udx0, xshift;
-
-	if (!hexdig['0'])
-		hexdig_init();
-	x[0] = x[1] = 0;
-	havedig = xshift = 0;
-	udx0 = 1;
-	s = *sp;
-	/* allow optional initial 0x or 0X */
-	while((c = *(CONST unsigned char*)(s+1)) && c <= ' ')
-		++s;
-	if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
-		s += 2;
-	while((c = *(CONST unsigned char*)++s)) {
-		if ((c1 = hexdig[c]))
-			c  = c1 & 0xf;
-		else if (c <= ' ') {
-			if (udx0 && havedig) {
-				udx0 = 0;
-				xshift = 1;
-				}
-			continue;
-			}
-#ifdef GDTOA_NON_PEDANTIC_NANCHECK
-		else if (/*(*/ c == ')' && havedig) {
-			*sp = s + 1;
-			break;
-			}
-		else
-			return;	/* invalid form: don't change *sp */
-#else
-		else {
-			do {
-				if (/*(*/ c == ')') {
-					*sp = s + 1;
-					break;
-					}
-				} while((c = *++s));
-			break;
-			}
-#endif
-		havedig = 1;
-		if (xshift) {
-			xshift = 0;
-			x[0] = x[1];
-			x[1] = 0;
-			}
-		if (udx0)
-			x[0] = (x[0] << 4) | (x[1] >> 28);
-		x[1] = (x[1] << 4) | c;
-		}
-	if ((x[0] &= 0xfffff) || x[1]) {
-		word0(rvp) = Exp_mask | x[0];
-		word1(rvp) = x[1];
-		}
-	}
-#endif /*No_Hex_NaN*/
 #endif /* INFNAN_CHECK */
 
-#ifdef Pack_32
 #define ULbits 32
 #define kshift 5
 #define kmask 31
-#else
-#define ULbits 16
-#define kshift 4
-#define kmask 15
-#endif
-
-#ifndef NO_HEX_FP /*{*/
-
- static void
-#ifdef KR_headers
-rshift(b, k) Bigint *b; int k;
-#else
-rshift(Bigint *b, int k)
-#endif
-{
-	ULong *x, *x1, *xe, y;
-	int n;
-
-	x = x1 = b->x;
-	n = k >> kshift;
-	if (n < b->wds) {
-		xe = x + b->wds;
-		x += n;
-		if (k &= kmask) {
-			n = 32 - k;
-			y = *x++ >> k;
-			while(x < xe) {
-				*x1++ = (y | (*x << n)) & 0xffffffff;
-				y = *x++ >> k;
-				}
-			if ((*x1 = y) !=0)
-				x1++;
-			}
-		else
-			while(x < xe)
-				*x1++ = *x++;
-		}
-	if ((b->wds = x1 - b->x) == 0)
-		b->x[0] = 0;
-	}
-
- static ULong
-#ifdef KR_headers
-any_on(b, k) Bigint *b; int k;
-#else
-any_on(Bigint *b, int k)
-#endif
-{
-	int n, nwds;
-	ULong *x, *x0, x1, x2;
-
-	x = b->x;
-	nwds = b->wds;
-	n = k >> kshift;
-	if (n > nwds)
-		n = nwds;
-	else if (n < nwds && (k &= kmask)) {
-		x1 = x2 = x[n];
-		x1 >>= k;
-		x1 <<= k;
-		if (x1 != x2)
-			return 1;
-		}
-	x0 = x;
-	x += n;
-	while(x > x0)
-		if (*--x)
-			return 1;
-	return 0;
-	}
-
-enum {	/* rounding values: same as FLT_ROUNDS */
-	Round_zero = 0,
-	Round_near = 1,
-	Round_up = 2,
-	Round_down = 3
-	};
-
- static Bigint *
-#ifdef KR_headers
-increment(b) Bigint *b;
-#else
-increment(Bigint *b)
-#endif
-{
-	ULong *x, *xe;
-	Bigint *b1;
-
-	x = b->x;
-	xe = x + b->wds;
-	do {
-		if (*x < (ULong)0xffffffffL) {
-			++*x;
-			return b;
-			}
-		*x++ = 0;
-		} while(x < xe);
-	{
-		if (b->wds >= b->maxwds) {
-			b1 = Balloc(b->k+1);
-			Bcopy(b1,b);
-			Bfree(b);
-			b = b1;
-			}
-		b->x[b->wds++] = 1;
-		}
-	return b;
-	}
-
- void
-#ifdef KR_headers
-gethex(sp, rvp, rounding, sign)
-	CONST char **sp; U *rvp; int rounding, sign;
-#else
-gethex( CONST char **sp, U *rvp, int rounding, int sign)
-#endif
-{
-	Bigint *b;
-	CONST unsigned char *decpt, *s0, *s, *s1;
-	Long e, e1;
-	ULong L, lostbits, *x;
-	int big, denorm, esign, havedig, k, n, nbits, up, zret;
-#ifdef IBM
-	int j;
-#endif
-	enum {
-#ifdef IEEE_Arith /*{{*/
-		emax = 0x7fe - Bias - P + 1,
-		emin = Emin - P + 1
-#else /*}{*/
-		emin = Emin - P,
-#ifdef VAX
-		emax = 0x7ff - Bias - P + 1
-#endif
-#ifdef IBM
-		emax = 0x7f - Bias - P
-#endif
-#endif /*}}*/
-		};
-#ifdef USE_LOCALE
-	int i;
-#ifdef NO_LOCALE_CACHE
-	const unsigned char *decimalpoint = (unsigned char*)
-		localeconv()->decimal_point;
-#else
-	const unsigned char *decimalpoint;
-	static unsigned char *decimalpoint_cache;
-	if (!(s0 = decimalpoint_cache)) {
-		s0 = (unsigned char*)localeconv()->decimal_point;
-		if ((decimalpoint_cache = (unsigned char*)
-				MALLOC(strlen((CONST char*)s0) + 1))) {
-			strcpy((char*)decimalpoint_cache, (CONST char*)s0);
-			s0 = decimalpoint_cache;
-			}
-		}
-	decimalpoint = s0;
-#endif
-#endif
 
-	if (!hexdig['0'])
-		hexdig_init();
-	havedig = 0;
-	s0 = *(CONST unsigned char **)sp + 2;
-	while(s0[havedig] == '0')
-		havedig++;
-	s0 += havedig;
-	s = s0;
-	decpt = 0;
-	zret = 0;
-	e = 0;
-	if (hexdig[*s])
-		havedig++;
-	else {
-		zret = 1;
-#ifdef USE_LOCALE
-		for(i = 0; decimalpoint[i]; ++i) {
-			if (s[i] != decimalpoint[i])
-				goto pcheck;
-			}
-		decpt = s += i;
-#else
-		if (*s != '.')
-			goto pcheck;
-		decpt = ++s;
-#endif
-		if (!hexdig[*s])
-			goto pcheck;
-		while(*s == '0')
-			s++;
-		if (hexdig[*s])
-			zret = 0;
-		havedig = 1;
-		s0 = s;
-		}
-	while(hexdig[*s])
-		s++;
-#ifdef USE_LOCALE
-	if (*s == *decimalpoint && !decpt) {
-		for(i = 1; decimalpoint[i]; ++i) {
-			if (s[i] != decimalpoint[i])
-				goto pcheck;
-			}
-		decpt = s += i;
-#else
-	if (*s == '.' && !decpt) {
-		decpt = ++s;
-#endif
-		while(hexdig[*s])
-			s++;
-		}/*}*/
-	if (decpt)
-		e = -(((Long)(s-decpt)) << 2);
- pcheck:
-	s1 = s;
-	big = esign = 0;
-	switch(*s) {
-	  case 'p':
-	  case 'P':
-		switch(*++s) {
-		  case '-':
-			esign = 1;
-			/* no break */
-		  case '+':
-			s++;
-		  }
-		if ((n = hexdig[*s]) == 0 || n > 0x19) {
-			s = s1;
-			break;
-			}
-		e1 = n - 0x10;
-		while((n = hexdig[*++s]) !=0 && n <= 0x19) {
-			if (e1 & 0xf8000000)
-				big = 1;
-			e1 = 10*e1 + n - 0x10;
-			}
-		if (esign)
-			e1 = -e1;
-		e += e1;
-	  }
-	*sp = (char*)s;
-	if (!havedig)
-		*sp = (char*)s0 - 1;
-	if (zret)
-		goto retz1;
-	if (big) {
-		if (esign) {
-#ifdef IEEE_Arith
-			switch(rounding) {
-			  case Round_up:
-				if (sign)
-					break;
-				goto ret_tiny;
-			  case Round_down:
-				if (!sign)
-					break;
-				goto ret_tiny;
-			  }
-#endif
-			goto retz;
-#ifdef IEEE_Arith
- ret_tiny:
-#ifndef NO_ERRNO
-			errno = ERANGE;
-#endif
-			word0(rvp) = 0;
-			word1(rvp) = 1;
-			return;
-#endif /* IEEE_Arith */
-			}
-		switch(rounding) {
-		  case Round_near:
-			goto ovfl1;
-		  case Round_up:
-			if (!sign)
-				goto ovfl1;
-			goto ret_big;
-		  case Round_down:
-			if (sign)
-				goto ovfl1;
-			goto ret_big;
-		  }
- ret_big:
-		word0(rvp) = Big0;
-		word1(rvp) = Big1;
-		return;
-		}
-	n = s1 - s0 - 1;
-	for(k = 0; n > (1 << (kshift-2)) - 1; n >>= 1)
-		k++;
-	b = Balloc(k);
-	x = b->x;
-	n = 0;
-	L = 0;
-#ifdef USE_LOCALE
-	for(i = 0; decimalpoint[i+1]; ++i);
-#endif
-	while(s1 > s0) {
-#ifdef USE_LOCALE
-		if (*--s1 == decimalpoint[i]) {
-			s1 -= i;
-			continue;
-			}
-#else
-		if (*--s1 == '.')
-			continue;
-#endif
-		if (n == ULbits) {
-			*x++ = L;
-			L = 0;
-			n = 0;
-			}
-		L |= (hexdig[*s1] & 0x0f) << n;
-		n += 4;
-		}
-	*x++ = L;
-	b->wds = n = x - b->x;
-	n = ULbits*n - hi0bits(L);
-	nbits = Nbits;
-	lostbits = 0;
-	x = b->x;
-	if (n > nbits) {
-		n -= nbits;
-		if (any_on(b,n)) {
-			lostbits = 1;
-			k = n - 1;
-			if (x[k>>kshift] & 1 << (k & kmask)) {
-				lostbits = 2;
-				if (k > 0 && any_on(b,k))
-					lostbits = 3;
-				}
-			}
-		rshift(b, n);
-		e += n;
-		}
-	else if (n < nbits) {
-		n = nbits - n;
-		b = lshift(b, n);
-		e -= n;
-		x = b->x;
-		}
-	if (e > Emax) {
- ovfl:
-		Bfree(b);
- ovfl1:
-#ifndef NO_ERRNO
-		errno = ERANGE;
-#endif
-		word0(rvp) = Exp_mask;
-		word1(rvp) = 0;
-		return;
-		}
-	denorm = 0;
-	if (e < emin) {
-		denorm = 1;
-		n = emin - e;
-		if (n >= nbits) {
-#ifdef IEEE_Arith /*{*/
-			switch (rounding) {
-			  case Round_near:
-				if (n == nbits && (n < 2 || any_on(b,n-1)))
-					goto ret_tiny;
-				break;
-			  case Round_up:
-				if (!sign)
-					goto ret_tiny;
-				break;
-			  case Round_down:
-				if (sign)
-					goto ret_tiny;
-			  }
-#endif /* } IEEE_Arith */
-			Bfree(b);
- retz:
-#ifndef NO_ERRNO
-			errno = ERANGE;
-#endif
- retz1:
-			rvp->d = 0.;
-			return;
-			}
-		k = n - 1;
-		if (lostbits)
-			lostbits = 1;
-		else if (k > 0)
-			lostbits = any_on(b,k);
-		if (x[k>>kshift] & 1 << (k & kmask))
-			lostbits |= 2;
-		nbits -= n;
-		rshift(b,n);
-		e = emin;
-		}
-	if (lostbits) {
-		up = 0;
-		switch(rounding) {
-		  case Round_zero:
-			break;
-		  case Round_near:
-			if (lostbits & 2
-			 && (lostbits & 1) | (x[0] & 1))
-				up = 1;
-			break;
-		  case Round_up:
-			up = 1 - sign;
-			break;
-		  case Round_down:
-			up = sign;
-		  }
-		if (up) {
-			k = b->wds;
-			b = increment(b);
-			x = b->x;
-			if (denorm) {
-#if 0
-				if (nbits == Nbits - 1
-				 && x[nbits >> kshift] & 1 << (nbits & kmask))
-					denorm = 0; /* not currently used */
-#endif
-				}
-			else if (b->wds > k
-			 || ((n = nbits & kmask) !=0
-			     && hi0bits(x[k-1]) < 32-n)) {
-				rshift(b,1);
-				if (++e > Emax)
-					goto ovfl;
-				}
-			}
-		}
-#ifdef IEEE_Arith
-	if (denorm)
-		word0(rvp) = b->wds > 1 ? b->x[1] & ~0x100000 : 0;
-	else
-		word0(rvp) = (b->x[1] & ~0x100000) | ((e + 0x3ff + 52) << 20);
-	word1(rvp) = b->x[0];
-#endif
-#ifdef IBM
-	if ((j = e & 3)) {
-		k = b->x[0] & ((1 << j) - 1);
-		rshift(b,j);
-		if (k) {
-			switch(rounding) {
-			  case Round_up:
-				if (!sign)
-					increment(b);
-				break;
-			  case Round_down:
-				if (sign)
-					increment(b);
-				break;
-			  case Round_near:
-				j = 1 << (j-1);
-				if (k & j && ((k & (j-1)) | lostbits))
-					increment(b);
-			  }
-			}
-		}
-	e >>= 2;
-	word0(rvp) = b->x[1] | ((e + 65 + 13) << 24);
-	word1(rvp) = b->x[0];
-#endif
-#ifdef VAX
-	/* The next two lines ignore swap of low- and high-order 2 bytes. */
-	/* word0(rvp) = (b->x[1] & ~0x800000) | ((e + 129 + 55) << 23); */
-	/* word1(rvp) = b->x[0]; */
-	word0(rvp) = ((b->x[1] & ~0x800000) >> 16) | ((e + 129 + 55) << 7) | (b->x[1] << 16);
-	word1(rvp) = (b->x[0] >> 16) | (b->x[0] << 16);
-#endif
-	Bfree(b);
-	}
-#endif /*}!NO_HEX_FP*/
 
  static int
-#ifdef KR_headers
-dshift(b, p2) Bigint *b; int p2;
-#else
 dshift(Bigint *b, int p2)
-#endif
 {
 	int rv = hi0bits(b->x[b->wds-1]) - 4;
 	if (p2 > 0)
@@ -2123,11 +1148,7 @@
 
  static int
 quorem
-#ifdef KR_headers
-	(b, S) Bigint *b, *S;
-#else
 	(Bigint *b, Bigint *S)
-#endif
 {
 	int n;
 	ULong *bx, *bxe, q, *sx, *sxe;
@@ -2135,10 +1156,8 @@
 	ULLong borrow, carry, y, ys;
 #else
 	ULong borrow, carry, y, ys;
-#ifdef Pack_32
 	ULong si, z, zs;
 #endif
-#endif
 
 	n = S->wds;
 #ifdef DEBUG
@@ -2167,7 +1186,6 @@
 			borrow = y >> 32 & (ULong)1;
 			*bx++ = y & FFFFFFFF;
 #else
-#ifdef Pack_32
 			si = *sx++;
 			ys = (si & 0xffff) * q + carry;
 			zs = (si >> 16) * q + (ys >> 16);
@@ -2177,13 +1195,6 @@
 			z = (*bx >> 16) - (zs & 0xffff) - borrow;
 			borrow = (z & 0x10000) >> 16;
 			Storeinc(bx, z, y);
-#else
-			ys = *sx++ * q + carry;
-			carry = ys >> 16;
-			y = *bx - (ys & 0xffff) - borrow;
-			borrow = (y & 0x10000) >> 16;
-			*bx++ = y & 0xffff;
-#endif
 #endif
 			}
 			while(sx <= sxe);
@@ -2208,7 +1219,6 @@
 			borrow = y >> 32 & (ULong)1;
 			*bx++ = y & FFFFFFFF;
 #else
-#ifdef Pack_32
 			si = *sx++;
 			ys = (si & 0xffff) + carry;
 			zs = (si >> 16) + (ys >> 16);
@@ -2218,13 +1228,6 @@
 			z = (*bx >> 16) - (zs & 0xffff) - borrow;
 			borrow = (z & 0x10000) >> 16;
 			Storeinc(bx, z, y);
-#else
-			ys = *sx++ + carry;
-			carry = ys >> 16;
-			y = *bx - (ys & 0xffff) - borrow;
-			borrow = (y & 0x10000) >> 16;
-			*bx++ = y & 0xffff;
-#endif
 #endif
 			}
 			while(sx <= sxe);
@@ -2239,16 +1242,10 @@
 	return q;
 	}
 
-#ifndef NO_STRTOD_BIGCOMP
 
  static void
 bigcomp
-#ifdef KR_headers
-	(rv, s0, bc)
-	U *rv; CONST char *s0; BCinfo *bc;
-#else
 	(U *rv, CONST char *s0, BCinfo *bc)
-#endif
 {
 	Bigint *b, *d;
 	int b2, bbits, d2, dd, dig, dsign, i, j, nd, nd0, p2, p5, speccase;
@@ -2270,9 +1267,6 @@
 		word1(rv) = 1;
 #endif
 		i = 0;
-#ifdef Honor_FLT_ROUNDS
-		if (bc->rounding == 1)
-#endif
 			{
 			speccase = 1;
 			--p2;
@@ -2305,15 +1299,6 @@
 		i = j;
 #endif
 		}
-#ifdef Honor_FLT_ROUNDS
-	if (bc->rounding != 1) {
-		if (i > 0)
-			b = lshift(b, i);
-		if (dsign)
-			b = increment(b);
-		}
-	else
-#endif
 		{
 		b = lshift(b, ++i);
 		b->x[0] |= 1;
@@ -2381,34 +1366,6 @@
  ret:
 	Bfree(b);
 	Bfree(d);
-#ifdef Honor_FLT_ROUNDS
-	if (bc->rounding != 1) {
-		if (dd < 0) {
-			if (bc->rounding == 0) {
-				if (!dsign)
-					goto retlow1;
-				}
-			else if (dsign)
-				goto rethi1;
-			}
-		else if (dd > 0) {
-			if (bc->rounding == 0) {
-				if (dsign)
-					goto rethi1;
-				goto ret1;
-				}
-			if (!dsign)
-				goto rethi1;
-			dval(rv) += 2.*ulp(rv);
-			}
-		else {
-			bc->inexact = 0;
-			if (dsign)
-				goto rethi1;
-			}
-		}
-	else
-#endif
 	if (speccase) {
 		if (dd <= 0)
 			rv->d = 0.;
@@ -2433,20 +1390,12 @@
 			}
 		}
 
-#ifdef Honor_FLT_ROUNDS
- ret1:
-#endif
 	return;
 	}
-#endif /* NO_STRTOD_BIGCOMP */
 
  double
 _Py_dg_strtod
-#ifdef KR_headers
-	(s00, se) CONST char *s00; char **se;
-#else
 	(CONST char *s00, char **se)
-#endif
 {
 	int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, e, e1;
 	int esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
@@ -2457,24 +1406,6 @@
 	ULong y, z;
 	BCinfo bc;
 	Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
-#ifdef SET_INEXACT
-	int oldinexact;
-#endif
-#ifdef Honor_FLT_ROUNDS /*{*/
-#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */
-	bc.rounding = Flt_Rounds;
-#else /*}{*/
-	bc.rounding = 1;
-	switch(fegetround()) {
-	  case FE_TOWARDZERO:	bc.rounding = 0; break;
-	  case FE_UPWARD:	bc.rounding = 2; break;
-	  case FE_DOWNWARD:	bc.rounding = 3;
-	  }
-#endif /*}}*/
-#endif /*}*/
-#ifdef USE_LOCALE
-	CONST char *s2;
-#endif
 
 	sign = nz0 = nz = bc.dplen = bc.uflchk = 0;
 	dval(&rv) = 0.;
@@ -2500,18 +1431,6 @@
 		}
  break2:
 	if (*s == '0') {
-#ifndef NO_HEX_FP /*{*/
-		switch(s[1]) {
-		  case 'x':
-		  case 'X':
-#ifdef Honor_FLT_ROUNDS
-			gethex(&s, &rv, bc.rounding, sign);
-#else
-			gethex(&s, &rv, 1, sign);
-#endif
-			goto ret;
-		  }
-#endif /*}*/
 		nz0 = 1;
 		while(*++s == '0') ;
 		if (!*s)
@@ -2526,25 +1445,6 @@
 			z = 10*z + c - '0';
 	nd0 = nd;
 	bc.dp0 = bc.dp1 = s - s0;
-#ifdef USE_LOCALE
-	s1 = localeconv()->decimal_point;
-	if (c == *s1) {
-		c = '.';
-		if (*++s1) {
-			s2 = s;
-			for(;;) {
-				if (*++s2 != *s1) {
-					c = 0;
-					break;
-					}
-				if (!*++s1) {
-					s = s2;
-					break;
-					}
-				}
-			}
-		}
-#endif
 	if (c == '.') {
 		c = *++s;
 		bc.dp1 = s - s0;
@@ -2637,10 +1537,6 @@
 				if (match(&s, "an")) {
 					word0(&rv) = NAN_WORD0;
 					word1(&rv) = NAN_WORD1;
-#ifndef No_Hex_NaN
-					if (*s == '(') /*)*/
-						hexnan(&rv, &s);
-#endif
 					goto ret;
 					}
 			  }
@@ -2663,104 +1559,40 @@
 	k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
 	dval(&rv) = y;
 	if (k > 9) {
-#ifdef SET_INEXACT
-		if (k > DBL_DIG)
-			oldinexact = get_inexact();
-#endif
 		dval(&rv) = tens[k - 9] * dval(&rv) + z;
 		}
 	bd0 = 0;
 	if (nd <= DBL_DIG
-#ifndef RND_PRODQUOT
-#ifndef Honor_FLT_ROUNDS
 		&& Flt_Rounds == 1
-#endif
-#endif
 			) {
 		if (!e)
 			goto ret;
 		if (e > 0) {
 			if (e <= Ten_pmax) {
-#ifdef VAX
-				goto vax_ovfl_check;
-#else
-#ifdef Honor_FLT_ROUNDS
-				/* round correctly FLT_ROUNDS = 2 or 3 */
-				if (sign) {
-					rv.d = -rv.d;
-					sign = 0;
-					}
-#endif
 				/* rv = */ rounded_product(dval(&rv), tens[e]);
 				goto ret;
-#endif
 				}
 			i = DBL_DIG - nd;
 			if (e <= Ten_pmax + i) {
 				/* A fancier test would sometimes let us do
 				 * this for larger i values.
 				 */
-#ifdef Honor_FLT_ROUNDS
-				/* round correctly FLT_ROUNDS = 2 or 3 */
-				if (sign) {
-					rv.d = -rv.d;
-					sign = 0;
-					}
-#endif
 				e -= i;
 				dval(&rv) *= tens[i];
-#ifdef VAX
-				/* VAX exponent range is so narrow we must
-				 * worry about overflow here...
-				 */
- vax_ovfl_check:
-				word0(&rv) -= P*Exp_msk1;
 				/* rv = */ rounded_product(dval(&rv), tens[e]);
-				if ((word0(&rv) & Exp_mask)
-				 > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
-					goto ovfl;
-				word0(&rv) += P*Exp_msk1;
-#else
-				/* rv = */ rounded_product(dval(&rv), tens[e]);
-#endif
 				goto ret;
 				}
 			}
-#ifndef Inaccurate_Divide
 		else if (e >= -Ten_pmax) {
-#ifdef Honor_FLT_ROUNDS
-			/* round correctly FLT_ROUNDS = 2 or 3 */
-			if (sign) {
-				rv.d = -rv.d;
-				sign = 0;
-				}
-#endif
 			/* rv = */ rounded_quotient(dval(&rv), tens[-e]);
 			goto ret;
 			}
-#endif
 		}
 	e1 += nd - k;
 
-#ifdef IEEE_Arith
-#ifdef SET_INEXACT
-	bc.inexact = 1;
-	if (k <= DBL_DIG)
-		oldinexact = get_inexact();
-#endif
 #ifdef Avoid_Underflow
 	bc.scale = 0;
 #endif
-#ifdef Honor_FLT_ROUNDS
-	if (bc.rounding >= 2) {
-		if (sign)
-			bc.rounding = bc.rounding == 2 ? 0 : 2;
-		else
-			if (bc.rounding != 2)
-				bc.rounding = 0;
-		}
-#endif
-#endif /*IEEE_Arith*/
 
 	/* Get starting approximation = rv * 10**e1 */
 
@@ -2770,35 +1602,10 @@
 		if (e1 &= ~15) {
 			if (e1 > DBL_MAX_10_EXP) {
  ovfl:
-#ifndef NO_ERRNO
 				errno = ERANGE;
-#endif
 				/* Can't trust HUGE_VAL */
-#ifdef IEEE_Arith
-#ifdef Honor_FLT_ROUNDS
-				switch(bc.rounding) {
-				  case 0: /* toward 0 */
-				  case 3: /* toward -infinity */
-					word0(&rv) = Big0;
-					word1(&rv) = Big1;
-					break;
-				  default:
-					word0(&rv) = Exp_mask;
-					word1(&rv) = 0;
-				  }
-#else /*Honor_FLT_ROUNDS*/
 				word0(&rv) = Exp_mask;
 				word1(&rv) = 0;
-#endif /*Honor_FLT_ROUNDS*/
-#ifdef SET_INEXACT
-				/* set overflow bit */
-				dval(&rv0) = 1e300;
-				dval(&rv0) *= dval(&rv0);
-#endif
-#else /*IEEE_Arith*/
-				word0(&rv) = Big0;
-				word1(&rv) = Big1;
-#endif /*IEEE_Arith*/
 				goto ret;
 				}
 			e1 >>= 4;
@@ -2861,9 +1668,7 @@
 				if (!dval(&rv)) {
  undfl:
 					dval(&rv) = 0.;
-#ifndef NO_ERRNO
 					errno = ERANGE;
-#endif
 					goto ret;
 					}
 #ifndef Avoid_Underflow
@@ -2882,7 +1687,6 @@
 	/* Put digits into bd: true value = bd * 10^e */
 
 	bc.nd = nd;
-#ifndef NO_STRTOD_BIGCOMP
 	bc.nd0 = nd0;	/* Only needed if nd > strtod_diglim, but done here */
 			/* to silence an erroneous warning about bc.nd0 */
 			/* possibly not being initialized. */
@@ -2912,7 +1716,6 @@
 				y = 10*y + s0[j++] - '0';
 			}
 		}
-#endif
 	bd0 = s2b(s0, nd0, nd, y, bc.dplen);
 
 	for(;;) {
@@ -2934,10 +1737,6 @@
 		else
 			bd2 -= bbe;
 		bs2 = bb2;
-#ifdef Honor_FLT_ROUNDS
-		if (bc.rounding != 1)
-			bs2++;
-#endif
 #ifdef Avoid_Underflow
 		j = bbe - bc.scale;
 		i = j + bbbits - 1;	/* logb(rv) */
@@ -2947,11 +1746,7 @@
 			j = P + 1 - bbbits;
 #else /*Avoid_Underflow*/
 #ifdef Sudden_Underflow
-#ifdef IBM
-		j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
-#else
 		j = P + 1 - bbbits;
-#endif
 #else /*Sudden_Underflow*/
 		j = bbe;
 		i = j + bbbits - 1;	/* logb(rv) */
@@ -2992,141 +1787,30 @@
 		bc.dsign = delta->sign;
 		delta->sign = 0;
 		i = cmp(delta, bs);
-#ifndef NO_STRTOD_BIGCOMP
 		if (bc.nd > nd && i <= 0) {
 			if (bc.dsign)
 				break;	/* Must use bigcomp(). */
-#ifdef Honor_FLT_ROUNDS
-			if (bc.rounding != 1) {
-				if (i < 0)
-					break;
-				}
-			else
-#endif
 				{
 				bc.nd = nd;
 				i = -1;	/* Discarded digits make delta smaller. */
 				}
 			}
-#endif
-#ifdef Honor_FLT_ROUNDS
-		if (bc.rounding != 1) {
-			if (i < 0) {
-				/* Error is less than an ulp */
-				if (!delta->x[0] && delta->wds <= 1) {
-					/* exact */
-#ifdef SET_INEXACT
-					bc.inexact = 0;
-#endif
-					break;
-					}
-				if (bc.rounding) {
-					if (bc.dsign) {
-						adj.d = 1.;
-						goto apply_adj;
-						}
-					}
-				else if (!bc.dsign) {
-					adj.d = -1.;
-					if (!word1(&rv)
-					 && !(word0(&rv) & Frac_mask)) {
-						y = word0(&rv) & Exp_mask;
-#ifdef Avoid_Underflow
-						if (!bc.scale || y > 2*P*Exp_msk1)
-#else
-						if (y)
-#endif
-						  {
-						  delta = lshift(delta,Log2P);
-						  if (cmp(delta, bs) <= 0)
-							adj.d = -0.5;
-						  }
-						}
- apply_adj:
-#ifdef Avoid_Underflow
-					if (bc.scale && (y = word0(&rv) & Exp_mask)
-						<= 2*P*Exp_msk1)
-					  word0(&adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
-					if ((word0(&rv) & Exp_mask) <=
-							P*Exp_msk1) {
-						word0(&rv) += P*Exp_msk1;
-						dval(&rv) += adj.d*ulp(dval(&rv));
-						word0(&rv) -= P*Exp_msk1;
-						}
-					else
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-					dval(&rv) += adj.d*ulp(&rv);
-					}
-				break;
-				}
-			adj.d = ratio(delta, bs);
-			if (adj.d < 1.)
-				adj.d = 1.;
-			if (adj.d <= 0x7ffffffe) {
-				/* adj = rounding ? ceil(adj) : floor(adj); */
-				y = adj.d;
-				if (y != adj.d) {
-					if (!((bc.rounding>>1) ^ bc.dsign))
-						y++;
-					adj.d = y;
-					}
-				}
-#ifdef Avoid_Underflow
-			if (bc.scale && (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1)
-				word0(&adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
-			if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) {
-				word0(&rv) += P*Exp_msk1;
-				adj.d *= ulp(dval(&rv));
-				if (bc.dsign)
-					dval(&rv) += adj.d;
-				else
-					dval(&rv) -= adj.d;
-				word0(&rv) -= P*Exp_msk1;
-				goto cont;
-				}
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
-			adj.d *= ulp(&rv);
-			if (bc.dsign) {
-				if (word0(&rv) == Big0 && word1(&rv) == Big1)
-					goto ovfl;
-				dval(&rv) += adj.d;
-				}
-			else
-				dval(&rv) -= adj.d;
-			goto cont;
-			}
-#endif /*Honor_FLT_ROUNDS*/
 
 		if (i < 0) {
 			/* Error is less than half an ulp -- check for
 			 * special case of mantissa a power of two.
 			 */
 			if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask
-#ifdef IEEE_Arith
 #ifdef Avoid_Underflow
 			 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
 #else
 			 || (word0(&rv) & Exp_mask) <= Exp_msk1
 #endif
-#endif
 				) {
-#ifdef SET_INEXACT
-				if (!delta->x[0] && delta->wds <= 1)
-					bc.inexact = 0;
-#endif
 				break;
 				}
 			if (!delta->x[0] && delta->wds <= 1) {
 				/* exact result */
-#ifdef SET_INEXACT
-				bc.inexact = 0;
-#endif
 				break;
 				}
 			delta = lshift(delta,Log2P);
@@ -3147,9 +1831,6 @@
 					/*boundary case -- increment exponent*/
 					word0(&rv) = (word0(&rv) & Exp_mask)
 						+ Exp_msk1
-#ifdef IBM
-						| Exp_msk1 >> 4
-#endif
 						;
 					word1(&rv) = 0;
 #ifdef Avoid_Underflow
@@ -3163,15 +1844,11 @@
 				/* boundary case -- decrement exponent */
 #ifdef Sudden_Underflow /*{{*/
 				L = word0(&rv) & Exp_mask;
-#ifdef IBM
-				if (L <  Exp_msk1)
-#else
 #ifdef Avoid_Underflow
 				if (L <= (bc.scale ? (2*P+1)*Exp_msk1 : Exp_msk1))
 #else
 				if (L <= Exp_msk1)
 #endif /*Avoid_Underflow*/
-#endif /*IBM*/
 					{
 					if (bc.nd >nd) {
 						bc.uflchk = 1;
@@ -3202,19 +1879,12 @@
 #endif /*Sudden_Underflow}}*/
 				word0(&rv) = L | Bndry_mask1;
 				word1(&rv) = 0xffffffff;
-#ifdef IBM
-				goto cont;
-#else
 				break;
-#endif
 				}
-#ifndef ROUND_BIASED
 			if (!(word1(&rv) & LSB))
 				break;
-#endif
 			if (bc.dsign)
 				dval(&rv) += ulp(&rv);
-#ifndef ROUND_BIASED
 			else {
 				dval(&rv) -= ulp(&rv);
 #ifndef Sudden_Underflow
@@ -3230,7 +1900,6 @@
 #ifdef Avoid_Underflow
 			bc.dsign = 1 - bc.dsign;
 #endif
-#endif
 			break;
 			}
 		if ((aadj = ratio(delta, bs)) <= 2.) {
@@ -3319,11 +1988,7 @@
 				word0(&rv) += P*Exp_msk1;
 				adj.d = aadj1 * ulp(&rv);
 				dval(&rv) += adj.d;
-#ifdef IBM
-				if ((word0(&rv) & Exp_mask) <  P*Exp_msk1)
-#else
 				if ((word0(&rv) & Exp_mask) <= P*Exp_msk1)
-#endif
 					{
 					if (word0(&rv0) == Tiny0
 					 && word1(&rv0) == Tiny1) {
@@ -3363,7 +2028,6 @@
 #endif /*Avoid_Underflow*/
 			}
 		z = word0(&rv) & Exp_mask;
-#ifndef SET_INEXACT
 		if (bc.nd == nd) {
 #ifdef Avoid_Underflow
 		if (!bc.scale)
@@ -3381,7 +2045,6 @@
 				break;
 			}
 		}
-#endif
  cont:
 		Bfree(bb);
 		Bfree(bd);
@@ -3393,44 +2056,18 @@
 	Bfree(bs);
 	Bfree(bd0);
 	Bfree(delta);
-#ifndef NO_STRTOD_BIGCOMP
 	if (bc.nd > nd)
 		bigcomp(&rv, s0, &bc);
-#endif
-#ifdef SET_INEXACT
-	if (bc.inexact) {
-		if (!oldinexact) {
-			word0(&rv0) = Exp_1 + (70 << Exp_shift);
-			word1(&rv0) = 0;
-			dval(&rv0) += 1.;
-			}
-		}
-	else if (!oldinexact)
-		clear_inexact();
-#endif
 #ifdef Avoid_Underflow
 	if (bc.scale) {
 		word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
 		word1(&rv0) = 0;
 		dval(&rv) *= dval(&rv0);
-#ifndef NO_ERRNO
 		/* try to avoid the bug of testing an 8087 register value */
-#ifdef IEEE_Arith
 		if (!(word0(&rv) & Exp_mask))
-#else
-		if (word0(&rv) == 0 && word1(&rv) == 0)
-#endif
 			errno = ERANGE;
-#endif
 		}
 #endif /* Avoid_Underflow */
-#ifdef SET_INEXACT
-	if (bc.inexact && !(word0(&rv) & Exp_mask)) {
-		/* set underflow bit */
-		dval(&rv0) = 1e-300;
-		dval(&rv0) *= dval(&rv0);
-		}
-#endif
  ret:
 	if (se)
 		*se = (char *)s;
@@ -3442,11 +2079,7 @@
 #endif
 
  static char *
-#ifdef KR_headers
-rv_alloc(i) int i;
-#else
 rv_alloc(int i)
-#endif
 {
 	int j, k, *r;
 
@@ -3465,11 +2098,7 @@
 	}
 
  static char *
-#ifdef KR_headers
-nrv_alloc(s, rve, n) char *s, **rve; int n;
-#else
 nrv_alloc(char *s, char **rve, int n)
-#endif
 {
 	char *rv, *t;
 
@@ -3487,11 +2116,7 @@
  */
 
  void
-#ifdef KR_headers
-freedtoa(s) char *s;
-#else
 freedtoa(char *s)
-#endif
 {
 	Bigint *b = (Bigint *)((int *)s - 1);
 	b->maxwds = 1 << (b->k = *(int*)b);
@@ -3538,12 +2163,7 @@
 
  char *
 _Py_dg_dtoa
-#ifdef KR_headers
-	(dd, mode, ndigits, decpt, sign, rve)
-	double dd; int mode, ndigits, *decpt, *sign; char **rve;
-#else
 	(double dd, int mode, int ndigits, int *decpt, int *sign, char **rve)
-#endif
 {
  /*	Arguments ndigits, decpt, sign are similar to those
 	of ecvt and fcvt; trailing zeros are suppressed from
@@ -3591,22 +2211,6 @@
 	U d2, eps, u;
 	double ds;
 	char *s, *s0;
-#ifdef SET_INEXACT
-	int inexact, oldinexact;
-#endif
-#ifdef Honor_FLT_ROUNDS /*{*/
-	int Rounding;
-#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */
-	Rounding = Flt_Rounds;
-#else /*}{*/
-	Rounding = 1;
-	switch(fegetround()) {
-	  case FE_TOWARDZERO:	Rounding = 0; break;
-	  case FE_UPWARD:	Rounding = 2; break;
-	  case FE_DOWNWARD:	Rounding = 3;
-	  }
-#endif /*}}*/
-#endif /*}*/
 
 #ifndef MULTIPLE_THREADS
 	if (dtoa_result) {
@@ -3625,42 +2229,20 @@
 		*sign = 0;
 
 #if defined(IEEE_Arith) + defined(VAX)
-#ifdef IEEE_Arith
 	if ((word0(&u) & Exp_mask) == Exp_mask)
-#else
-	if (word0(&u)  == 0x8000)
-#endif
 		{
 		/* Infinity or NaN */
 		*decpt = 9999;
-#ifdef IEEE_Arith
 		if (!word1(&u) && !(word0(&u) & 0xfffff))
 			return nrv_alloc("Infinity", rve, 8);
-#endif
 		return nrv_alloc("NaN", rve, 3);
 		}
 #endif
-#ifdef IBM
-	dval(&u) += 0; /* normalize */
-#endif
 	if (!dval(&u)) {
 		*decpt = 1;
 		return nrv_alloc("0", rve, 1);
 		}
 
-#ifdef SET_INEXACT
-	try_quick = oldinexact = get_inexact();
-	inexact = 1;
-#endif
-#ifdef Honor_FLT_ROUNDS
-	if (Rounding >= 2) {
-		if (*sign)
-			Rounding = Rounding == 2 ? 0 : 2;
-		else
-			if (Rounding != 2)
-				Rounding = 0;
-		}
-#endif
 
 	b = d2b(&u, &be, &bbits);
 #ifdef Sudden_Underflow
@@ -3671,10 +2253,6 @@
 		dval(&d2) = dval(&u);
 		word0(&d2) &= Frac_mask1;
 		word0(&d2) |= Exp_11;
-#ifdef IBM
-		if (j = 11 - hi0bits(word0(&d2) & Frac_mask))
-			dval(&d2) /= 1 << j;
-#endif
 
 		/* log(x)	~=~ log(1.5) + (x-1.5)/1.5
 		 * log10(x)	 =  log(x) / log(10)
@@ -3699,10 +2277,6 @@
 		 */
 
 		i -= Bias;
-#ifdef IBM
-		i <<= 2;
-		i += j;
-#endif
 #ifndef Sudden_Underflow
 		denorm = 0;
 		}
@@ -3750,13 +2324,11 @@
 	if (mode < 0 || mode > 9)
 		mode = 0;
 
-#ifndef SET_INEXACT
 #ifdef Check_FLT_ROUNDS
 	try_quick = Rounding == 1;
 #else
 	try_quick = 1;
 #endif
-#endif /*SET_INEXACT*/
 
 	if (mode > 5) {
 		mode -= 4;
@@ -3791,10 +2363,6 @@
 		}
 	s = s0 = rv_alloc(i);
 
-#ifdef Honor_FLT_ROUNDS
-	if (mode > 1 && Rounding != 1)
-		leftright = 0;
-#endif
 
 	if (ilim >= 0 && ilim <= Quick_max && try_quick) {
 
@@ -3848,7 +2416,6 @@
 				goto no_digits;
 			goto fast_failed;
 			}
-#ifndef No_leftright
 		if (leftright) {
 			/* Use Steele & White method of only
 			 * generating digits needed.
@@ -3869,7 +2436,6 @@
 				}
 			}
 		else {
-#endif
 			/* Generate ilim digits, then fix them up. */
 			dval(&eps) *= tens[ilim-1];
 			for(i = 1;; i++, dval(&u) *= 10.) {
@@ -3888,9 +2454,7 @@
 					break;
 					}
 				}
-#ifndef No_leftright
 			}
-#endif
  fast_failed:
 		s = s0;
 		dval(&u) = dval(&d2);
@@ -3921,19 +2485,9 @@
 #endif
 			*s++ = '0' + (int)L;
 			if (!dval(&u)) {
-#ifdef SET_INEXACT
-				inexact = 0;
-#endif
 				break;
 				}
 			if (i == ilim) {
-#ifdef Honor_FLT_ROUNDS
-				if (mode > 1)
-				switch(Rounding) {
-				  case 0: goto ret1;
-				  case 2: goto bump_up;
-				  }
-#endif
 				dval(&u) += dval(&u);
 				if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
  bump_up:
@@ -3959,11 +2513,7 @@
 #ifndef Sudden_Underflow
 			denorm ? be + (Bias + (P-1) - 1 + 1) :
 #endif
-#ifdef IBM
-			1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3);
-#else
 			1 + P - bbits;
-#endif
 		b2 += i;
 		s2 += i;
 		mhi = i2b(1);
@@ -3996,9 +2546,6 @@
 
 	spec_case = 0;
 	if ((mode < 2 || leftright)
-#ifdef Honor_FLT_ROUNDS
-			&& Rounding == 1
-#endif
 				) {
 		if (!word1(&u) && !(word0(&u) & Bndry_mask)
 #ifndef Sudden_Underflow
@@ -4019,15 +2566,9 @@
 	 * and for all and pass them and a shift to quorem, so it
 	 * can do shifts and ors to compute the numerator for q.
 	 */
-#ifdef Pack_32
 	if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
 		i = 32 - i;
 #define iInc 28
-#else
-	if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf)
-		i = 16 - i;
-#define iInc 12
-#endif
 	i = dshift(S, s2);
 	b2 += i;
 	m2 += i;
@@ -4081,42 +2622,21 @@
 			delta = diff(S, mhi);
 			j1 = delta->sign ? 1 : cmp(b, delta);
 			Bfree(delta);
-#ifndef ROUND_BIASED
 			if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
-#ifdef Honor_FLT_ROUNDS
-				&& Rounding >= 1
-#endif
 								   ) {
 				if (dig == '9')
 					goto round_9_up;
 				if (j > 0)
 					dig++;
-#ifdef SET_INEXACT
-				else if (!b->x[0] && b->wds <= 1)
-					inexact = 0;
-#endif
 				*s++ = dig;
 				goto ret;
 				}
-#endif
 			if (j < 0 || (j == 0 && mode != 1
-#ifndef ROUND_BIASED
 							&& !(word1(&u) & 1)
-#endif
 					)) {
 				if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
-					inexact = 0;
-#endif
 					goto accept_dig;
 					}
-#ifdef Honor_FLT_ROUNDS
-				if (mode > 1)
-				 switch(Rounding) {
-				  case 0: goto accept_dig;
-				  case 2: goto keep_dig;
-				  }
-#endif /*Honor_FLT_ROUNDS*/
 				if (j1 > 0) {
 					b = lshift(b, 1);
 					j1 = cmp(b, S);
@@ -4129,10 +2649,6 @@
 				goto ret;
 				}
 			if (j1 > 0) {
-#ifdef Honor_FLT_ROUNDS
-				if (!Rounding)
-					goto accept_dig;
-#endif
 				if (dig == '9') { /* possible if i == 1 */
  round_9_up:
 					*s++ = '9';
@@ -4141,9 +2657,6 @@
 				*s++ = dig + 1;
 				goto ret;
 				}
-#ifdef Honor_FLT_ROUNDS
- keep_dig:
-#endif
 			*s++ = dig;
 			if (i == ilim)
 				break;
@@ -4160,9 +2673,6 @@
 		for(i = 1;; i++) {
 			*s++ = dig = quorem(b,S) + '0';
 			if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
-				inexact = 0;
-#endif
 				goto ret;
 				}
 			if (i >= ilim)
@@ -4172,12 +2682,6 @@
 
 	/* Round off last digit */
 
-#ifdef Honor_FLT_ROUNDS
-	switch(Rounding) {
-	  case 0: goto trimzeros;
-	  case 2: goto roundoff;
-	  }
-#endif
 	b = lshift(b, 1);
 	j = cmp(b, S);
 	if (j > 0 || (j == 0 && dig & 1)) {
@@ -4191,9 +2695,6 @@
 		++*s++;
 		}
 	else {
-#ifdef Honor_FLT_ROUNDS
- trimzeros:
-#endif
 		while(*--s == '0');
 		s++;
 		}
@@ -4205,17 +2706,6 @@
 		Bfree(mhi);
 		}
  ret1:
-#ifdef SET_INEXACT
-	if (inexact) {
-		if (!oldinexact) {
-			word0(&u) = Exp_1 + (70 << Exp_shift);
-			word1(&u) = 0;
-			dval(&u) += 1.;
-			}
-		}
-	else if (!oldinexact)
-		clear_inexact();
-#endif
 	Bfree(b);
 	*s = 0;
 	*decpt = k + 1;


More information about the Python-checkins mailing list