--- kdelibs/kjs/dtoa.cpp 2009/04/28 10:20:35 960320 +++ kdelibs/kjs/dtoa.cpp 2009/04/28 10:28:50 960321 @@ -203,11 +203,7 @@ #endif #ifdef MALLOC -#ifdef KR_headers -extern char *MALLOC(); -#else extern void *MALLOC(size_t); -#endif #else #define MALLOC malloc #endif @@ -277,12 +273,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 Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined. @@ -290,37 +282,19 @@ typedef union { double d; ULong L[2]; } U; -#ifdef YES_ALIAS -#define dval(x) x +#define dval(x) (x).d #ifdef IEEE_8087 -#define word0(x) ((ULong *)&x)[1] -#define word1(x) ((ULong *)&x)[0] +#define word0(x) (x).L[1] +#define word1(x) (x).L[0] #else -#define word0(x) ((ULong *)&x)[0] -#define word1(x) ((ULong *)&x)[1] -#endif -#else -#ifdef IEEE_8087 -#define word0(x) ((U*)&x)->L[1] -#define word1(x) ((U*)&x)->L[0] -#else -#define word0(x) ((U*)&x)->L[0] -#define word1(x) ((U*)&x)->L[1] -#endif -#define dval(x) ((U*)&x)->d +#define word0(x) (x).L[0] +#define word1(x) (x).L[1] #endif /* The following definition of Storeinc is appropriate for MIPS processors. * An alternative that might be better on some machines is - * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) */ -#if defined(IEEE_8087) + defined(VAX) -#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ -((unsigned short *)a)[0] = (unsigned short)c, a++) -#else -#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ -((unsigned short *)a)[1] = (unsigned short)c, a++) -#endif +#define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) /* #define P DBL_MANT_DIG */ /* Ten_pmax = floor(P*log(2)/log(5)) */ @@ -444,11 +418,7 @@ #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 @@ -461,11 +431,7 @@ #define Pack_32 #endif -#ifdef KR_headers -#define FFFFFFFF ((((unsigned long)0xffff)<<16)|(unsigned long)0xffff) -#else #define FFFFFFFF 0xffffffffUL -#endif #ifdef NO_LONG_LONG #undef ULLong @@ -506,11 +472,7 @@ static Bigint * Balloc -#ifdef KR_headers - (k) int k; -#else (int k) -#endif { int x; Bigint *rv; @@ -546,11 +508,7 @@ static void Bfree -#ifdef KR_headers - (v) Bigint *v; -#else (Bigint *v) -#endif { if (v) { ACQUIRE_DTOA_LOCK(0); @@ -565,11 +523,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 @@ -622,11 +576,7 @@ static Bigint * s2b -#ifdef KR_headers - (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9; -#else (CONST char *s, int nd0, int nd, ULong y9) -#endif { Bigint *b; int i, k; @@ -660,11 +610,7 @@ static int hi0bits -#ifdef KR_headers - (x) register ULong x; -#else (register ULong x) -#endif { register int k = 0; @@ -694,11 +640,7 @@ static int lo0bits -#ifdef KR_headers - (y) ULong *y; -#else (ULong *y) -#endif { register int k; register ULong x = *y; @@ -742,11 +684,7 @@ static Bigint * i2b -#ifdef KR_headers - (i) int i; -#else (int i) -#endif { Bigint *b; @@ -758,11 +696,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; @@ -870,11 +804,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; @@ -927,11 +857,7 @@ 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; @@ -987,11 +913,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; @@ -1021,11 +943,7 @@ static Bigint * diff -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else (Bigint *a, Bigint *b) -#endif { Bigint *c; int i, wa, wb; @@ -1115,15 +1033,12 @@ static double ulp -#ifdef KR_headers - (x) double x; -#else - (double x) -#endif + (double dx) { register Long L; - double a; + U x, a; + dval(x) = dx; L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; #ifndef Avoid_Underflow #ifndef Sudden_Underflow @@ -1157,15 +1072,11 @@ 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; - double d; + U d; #ifdef VAX ULong d0, d1; #else @@ -1227,12 +1138,9 @@ static Bigint * d2b -#ifdef KR_headers - (d, e, bits) double d; int *e, *bits; -#else - (double d, int *e, int *bits) -#endif + (double dd, int *e, int *bits) { + U d; Bigint *b; int de, k; ULong *x, y, z; @@ -1241,6 +1149,9 @@ #endif #ifdef VAX ULong d0, d1; +#endif + dval(d) = dd; +#ifdef VAX d0 = word0(d) >> 16 | word0(d) << 16; d1 = word1(d) >> 16 | word1(d) << 16; #else @@ -1365,13 +1276,9 @@ static double ratio -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else (Bigint *a, Bigint *b) -#endif { - double da, db; + U da, db; int k, ka, kb; dval(da) = b2d(a, &ka); @@ -1457,11 +1364,7 @@ static int match -#ifdef KR_headers - (sp, t) char **sp, *t; -#else (CONST char **sp, CONST char *t) -#endif { int c, d; CONST char *s = *sp; @@ -1479,11 +1382,7 @@ #ifndef No_Hex_NaN static void hexnan -#ifdef KR_headers - (rvp, sp) double *rvp; CONST char **sp; -#else - (double *rvp, CONST char **sp) -#endif + (U *rvp, CONST char **sp) { ULong c, x[2]; CONST char *s; @@ -1533,11 +1432,7 @@ double strtod -#ifdef KR_headers - (s00, se) CONST char *s00; char **se; -#else (CONST char *s00, char **se) -#endif { #ifdef Avoid_Underflow int scale; @@ -1545,7 +1440,8 @@ int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; CONST char *s, *s0, *s1; - double aadj, aadj1, adj, rv, rv0; + double aadj, aadj1, adj; + U aadj2, rv, rv0; Long L; ULong y, z; Bigint *bb = NULL, *bb1 = NULL, *bd = NULL, *bd0 = NULL, *bs = NULL, *delta = NULL; @@ -2306,7 +2202,9 @@ aadj = z; aadj1 = dsign ? aadj : -aadj; } - word0(aadj1) += (2*P+1)*Exp_msk1 - y; + dval(aadj2) = aadj1; + word0(aadj2) += (2*P+1)*Exp_msk1 - y; + aadj1 = dval(aadj2); } adj = aadj1 * ulp(dval(rv)); dval(rv) += adj; @@ -2423,11 +2321,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; @@ -2544,11 +2438,7 @@ #endif static char * -#ifdef KR_headers -rv_alloc(i) int i; -#else rv_alloc(int i) -#endif { int j, k, *r; @@ -2567,11 +2457,7 @@ } static char * -#ifdef KR_headers -nrv_alloc(s, rve, n) char *s, **rve; int n; -#else nrv_alloc(CONST char *s, char **rve, int n) -#endif { char *rv, *t; @@ -2589,11 +2475,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); @@ -2640,12 +2522,7 @@ char * dtoa -#ifdef KR_headers - (d, mode, ndigits, decpt, sign, rve) - double d; int mode, ndigits, *decpt, *sign; char **rve; -#else - (double d, int mode, int ndigits, int *decpt, int *sign, char **rve) -#endif + (double dd, int mode, int ndigits, int *decpt, int *sign, char **rve) { /* Arguments ndigits, decpt, sign are similar to those of ecvt and fcvt; trailing zeros are suppressed from @@ -2690,7 +2567,8 @@ ULong x; #endif Bigint *b, *b1, *delta, *mlo = NULL, *mhi, *S; - double d2, ds, eps; + U d, d2, eps; + double ds; char *s, *s0; #ifdef Honor_FLT_ROUNDS int rounding; @@ -2706,6 +2584,7 @@ } #endif + dval(d) = dd; if (word0(d) & Sign_bit) { /* set sign for everything, including 0's and NaNs */ *sign = 1;