diff options
Diffstat (limited to 'net-libs/webkit-gtk/files/webkit-gtk-0_p40220-gcc44-aliasing.patch')
-rw-r--r-- | net-libs/webkit-gtk/files/webkit-gtk-0_p40220-gcc44-aliasing.patch | 954 |
1 files changed, 0 insertions, 954 deletions
diff --git a/net-libs/webkit-gtk/files/webkit-gtk-0_p40220-gcc44-aliasing.patch b/net-libs/webkit-gtk/files/webkit-gtk-0_p40220-gcc44-aliasing.patch deleted file mode 100644 index 212659e31809..000000000000 --- a/net-libs/webkit-gtk/files/webkit-gtk-0_p40220-gcc44-aliasing.patch +++ /dev/null @@ -1,954 +0,0 @@ -diff -Naurp WebKit-r40220-orig/JavaScriptCore/wtf/dtoa.cpp WebKit-r40220/JavaScriptCore/wtf/dtoa.cpp ---- WebKit-r40220-orig/JavaScriptCore/wtf/dtoa.cpp 2009-01-22 17:57:26.000000000 -0600 -+++ WebKit-r40220/JavaScriptCore/wtf/dtoa.cpp 2009-04-09 14:55:22.000000000 -0600 -@@ -189,13 +189,13 @@ typedef union { double d; uint32_t L[2]; - #endif - #else - #ifdef IEEE_8087 --#define word0(x) ((U*)&x)->L[1] --#define word1(x) ((U*)&x)->L[0] -+#define word0(x) (x)->L[1] -+#define word1(x) (x)->L[0] - #else --#define word0(x) ((U*)&x)->L[0] --#define word1(x) ((U*)&x)->L[1] -+#define word0(x) (x)->L[0] -+#define word1(x) (x)->L[1] - #endif --#define dval(x) ((U*)&x)->d -+#define dval(x) (x)->d - #endif - - /* The following definition of Storeinc is appropriate for MIPS processors. -@@ -772,10 +772,10 @@ static Bigint* diff(Bigint* a, Bigint* b - return c; - } - --static double ulp(double x) -+static double ulp(U *x) - { - register int32_t L; -- double a; -+ U u; - - L = (word0(x) & Exp_mask) - (P - 1) * Exp_msk1; - #ifndef Avoid_Underflow -@@ -783,24 +783,24 @@ static double ulp(double x) - if (L > 0) { - #endif - #endif -- word0(a) = L; -- word1(a) = 0; -+ word0(&u) = L; -+ word1(&u) = 0; - #ifndef Avoid_Underflow - #ifndef Sudden_Underflow - } else { - L = -L >> Exp_shift; - if (L < Exp_shift) { -- word0(a) = 0x80000 >> L; -- word1(a) = 0; -+ word0(&u) = 0x80000 >> L; -+ word1(&u) = 0; - } else { -- word0(a) = 0; -+ word0(&u) = 0; - L -= Exp_shift; -- word1(a) = L >= 31 ? 1 : 1 << 31 - L; -+ word1(&u) = L >= 31 ? 1 : 1 << 31 - L; - } - } - #endif - #endif -- return dval(a); -+ return dval(&u); - } - - static double b2d(Bigint* a, int* e) -@@ -811,10 +811,10 @@ static double b2d(Bigint* a, int* e) - uint32_t y; - uint32_t z; - int k; -- double d; -+ U d; - --#define d0 word0(d) --#define d1 word1(d) -+#define d0 word0(&d) -+#define d1 word1(&d) - - xa0 = a->x; - xa = xa0 + a->wds; -@@ -824,16 +824,16 @@ static double b2d(Bigint* a, int* e) - *e = 32 - k; - #ifdef Pack_32 - if (k < Ebits) { -- d0 = Exp_1 | y >> Ebits - k; -+ d0 = Exp_1 | (y >> (Ebits - k)); - w = xa > xa0 ? *--xa : 0; -- d1 = y << (32 - Ebits) + k | w >> Ebits - k; -+ d1 = (y << (32 - Ebits + k)) | (w >> (Ebits - k)); - goto ret_d; - } - z = xa > xa0 ? *--xa : 0; - if (k -= Ebits) { -- d0 = Exp_1 | y << k | z >> 32 - k; -+ d0 = Exp_1 | (y << k) | (z >> (32 - k)); - y = xa > xa0 ? *--xa : 0; -- d1 = z << k | y >> 32 - k; -+ d1 = (z << k) | (y >> (32 - k)); - } else { - d0 = Exp_1 | y; - d1 = z; -@@ -857,10 +857,10 @@ static double b2d(Bigint* a, int* e) - ret_d: - #undef d0 - #undef d1 -- return dval(d); -+ return dval(&d); - } - --static Bigint* d2b(double d, int* e, int* bits) -+static Bigint* d2b(U* d, int* e, int* bits) - { - Bigint* b; - int de, k; -@@ -889,7 +889,7 @@ static Bigint* d2b(double d, int* e, int - #ifdef Pack_32 - if ((y = d1)) { - if ((k = lo0bits(&y))) { -- x[0] = y | z << 32 - k; -+ x[0] = y | (z << (32 - k)); - z >>= k; - } else - x[0] = y; -@@ -965,23 +965,23 @@ static Bigint* d2b(double d, int* e, int - - static double ratio(Bigint* a, Bigint* b) - { -- double da, db; -+ U da, db; - int k, ka, kb; - -- dval(da) = b2d(a, &ka); -- dval(db) = b2d(b, &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 - if (k > 0) -- word0(da) += k * Exp_msk1; -+ word0(&da) += k * Exp_msk1; - else { - k = -k; -- word0(db) += k * Exp_msk1; -+ word0(&db) += k * Exp_msk1; - } -- return dval(da) / dval(db); -+ return dval(&da) / dval(&db); - } - - static const double tens[] = { -@@ -1031,7 +1031,7 @@ static int match(const char** sp, const - } - - #ifndef No_Hex_NaN --static void hexnan(double* rvp, const char** sp) -+static void hexnan(U* rvp, const char** sp) - { - uint32_t c, x[2]; - const char* s; -@@ -1070,8 +1070,8 @@ static void hexnan(double* rvp, const ch - x[1] = (x[1] << 4) | c; - } - if ((x[0] &= 0xfffff) || x[1]) { -- word0(*rvp) = Exp_mask | x[0]; -- word1(*rvp) = x[1]; -+ word0(rvp) = Exp_mask | x[0]; -+ word1(rvp) = x[1]; - } - } - #endif /*No_Hex_NaN*/ -@@ -1085,7 +1085,8 @@ double strtod(const char* s00, char** se - 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; -+ U aadj2, adj, rv, rv0; - int32_t L; - uint32_t y, z; - Bigint *bb = NULL, *bb1 = NULL, *bd = NULL, *bd0 = NULL, *bs = NULL, *delta = NULL; -@@ -1094,7 +1095,7 @@ double strtod(const char* s00, char** se - #endif - - sign = nz0 = nz = 0; -- dval(rv) = 0.; -+ dval(&rv) = 0; - for (s = s00; ; s++) - switch (*s) { - case '-': -@@ -1209,16 +1210,16 @@ dig_done: - --s; - if (!match(&s,"inity")) - ++s; -- word0(rv) = 0x7ff00000; -- word1(rv) = 0; -+ word0(&rv) = 0x7ff00000; -+ word1(&rv) = 0; - goto ret; - } - break; - case 'n': - case 'N': - if (match(&s, "an")) { -- word0(rv) = NAN_WORD0; -- word1(rv) = NAN_WORD1; -+ word0(&rv) = NAN_WORD0; -+ word1(&rv) = NAN_WORD1; - #ifndef No_Hex_NaN - if (*s == '(') /*)*/ - hexnan(&rv, &s); -@@ -1243,13 +1244,13 @@ ret0: - if (!nd0) - nd0 = nd; - k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; -- dval(rv) = y; -+ 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; -+ dval(&rv) = tens[k - 9] * dval(&rv) + z; - } - bd0 = 0; - if (nd <= DBL_DIG && Flt_Rounds == 1) { -@@ -1257,7 +1258,7 @@ ret0: - goto ret; - if (e > 0) { - if (e <= Ten_pmax) { -- /* rv = */ rounded_product(dval(rv), tens[e]); -+ /* rv = */ rounded_product(dval(&rv), tens[e]); - goto ret; - } - i = DBL_DIG - nd; -@@ -1266,14 +1267,14 @@ ret0: - * this for larger i values. - */ - e -= i; -- dval(rv) *= tens[i]; -- /* rv = */ rounded_product(dval(rv), tens[e]); -+ dval(&rv) *= tens[i]; -+ /* rv = */ rounded_product(dval(&rv), tens[e]); - goto ret; - } - } - #ifndef Inaccurate_Divide - else if (e >= -Ten_pmax) { -- /* rv = */ rounded_quotient(dval(rv), tens[-e]); -+ /* rv = */ rounded_quotient(dval(&rv), tens[-e]); - goto ret; - } - #endif -@@ -1293,7 +1294,7 @@ ret0: - - if (e1 > 0) { - if ((i = e1 & 15)) -- dval(rv) *= tens[i]; -+ dval(&rv) *= tens[i]; - if (e1 &= ~15) { - if (e1 > DBL_MAX_10_EXP) { - ovfl: -@@ -1301,12 +1302,12 @@ ovfl: - errno = ERANGE; - #endif - /* Can't trust HUGE_VAL */ -- word0(rv) = Exp_mask; -- word1(rv) = 0; -+ word0(&rv) = Exp_mask; -+ word1(&rv) = 0; - #ifdef SET_INEXACT - /* set overflow bit */ -- dval(rv0) = 1e300; -- dval(rv0) *= dval(rv0); -+ dval(&rv0) = 1e300; -+ dval(&rv0) *= dval(&rv0); - #endif - if (bd0) - goto retfree; -@@ -1315,24 +1316,24 @@ ovfl: - e1 >>= 4; - for (j = 0; e1 > 1; j++, e1 >>= 1) - if (e1 & 1) -- dval(rv) *= bigtens[j]; -+ dval(&rv) *= bigtens[j]; - /* The last multiplication could overflow. */ -- word0(rv) -= P * Exp_msk1; -- dval(rv) *= bigtens[j]; -- if ((z = word0(rv) & Exp_mask) > Exp_msk1 * (DBL_MAX_EXP + Bias - P)) -+ word0(&rv) -= P * Exp_msk1; -+ dval(&rv) *= bigtens[j]; -+ if ((z = word0(&rv) & Exp_mask) > Exp_msk1 * (DBL_MAX_EXP + Bias - P)) - goto ovfl; - if (z > Exp_msk1 * (DBL_MAX_EXP + Bias - 1 - P)) { - /* set to largest number */ - /* (Can't trust DBL_MAX) */ -- word0(rv) = Big0; -- word1(rv) = Big1; -+ word0(&rv) = Big0; -+ word1(&rv) = Big1; - } else -- word0(rv) += P * Exp_msk1; -+ word0(&rv) += P * Exp_msk1; - } - } else if (e1 < 0) { - e1 = -e1; - if ((i = e1 & 15)) -- dval(rv) /= tens[i]; -+ dval(&rv) /= tens[i]; - if (e1 >>= 4) { - if (e1 >= 1 << n_bigtens) - goto undfl; -@@ -1341,32 +1342,32 @@ ovfl: - scale = 2 * P; - for (j = 0; e1 > 0; j++, e1 >>= 1) - if (e1 & 1) -- dval(rv) *= tinytens[j]; -- if (scale && (j = (2 * P) + 1 - ((word0(rv) & Exp_mask) >> Exp_shift)) > 0) { -+ dval(&rv) *= tinytens[j]; -+ if (scale && (j = (2 * P) + 1 - ((word0(&rv) & Exp_mask) >> Exp_shift)) > 0) { - /* scaled rv is denormal; zap j low bits */ - if (j >= 32) { -- word1(rv) = 0; -+ word1(&rv) = 0; - if (j >= 53) -- word0(rv) = (P + 2) * Exp_msk1; -+ word0(&rv) = (P + 2) * Exp_msk1; - else -- word0(rv) &= 0xffffffff << j - 32; -+ word0(&rv) &= 0xffffffff << (j - 32); - } else -- word1(rv) &= 0xffffffff << j; -+ word1(&rv) &= 0xffffffff << j; - } - #else - for (j = 0; e1 > 1; j++, e1 >>= 1) - if (e1 & 1) -- dval(rv) *= tinytens[j]; -+ dval(&rv) *= tinytens[j]; - /* The last multiplication could underflow. */ -- dval(rv0) = dval(rv); -- dval(rv) *= tinytens[j]; -- if (!dval(rv)) { -- dval(rv) = 2. * dval(rv0); -- dval(rv) *= tinytens[j]; -+ dval(&rv0) = dval(&rv); -+ dval(&rv) *= tinytens[j]; -+ if (!dval(&rv)) { -+ dval(&rv) = 2. * dval(&rv0); -+ dval(&rv) *= tinytens[j]; - #endif -- if (!dval(rv)) { -+ if (!dval(&rv)) { - undfl: -- dval(rv) = 0.; -+ dval(&rv) = 0.; - #ifndef NO_ERRNO - errno = ERANGE; - #endif -@@ -1375,8 +1376,8 @@ undfl: - goto ret; - } - #ifndef Avoid_Underflow -- word0(rv) = Tiny0; -- word1(rv) = Tiny1; -+ word0(&rv) = Tiny0; -+ word1(&rv) = Tiny1; - /* The refinement below will clean - * this approximation up. - */ -@@ -1394,7 +1395,7 @@ undfl: - for (;;) { - bd = Balloc(bd0->k); - Bcopy(bd, bd0); -- bb = d2b(dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */ -+ bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */ - bs = i2b(1); - - if (e >= 0) { -@@ -1464,11 +1465,11 @@ undfl: - /* Error is less than half an ulp -- check for - * special case of mantissa a power of two. - */ -- if (dsign || word1(rv) || word0(rv) & Bndry_mask -+ if (dsign || word1(&rv) || word0(&rv) & Bndry_mask - #ifdef Avoid_Underflow -- || (word0(rv) & Exp_mask) <= (2 * P + 1) * Exp_msk1 -+ || (word0(&rv) & Exp_mask) <= (2 * P + 1) * Exp_msk1 - #else -- || (word0(rv) & Exp_mask) <= Exp_msk1 -+ || (word0(&rv) & Exp_mask) <= Exp_msk1 - #endif - ) { - #ifdef SET_INEXACT -@@ -1492,26 +1493,26 @@ undfl: - if (i == 0) { - /* exactly half-way between */ - if (dsign) { -- if ((word0(rv) & Bndry_mask1) == Bndry_mask1 -- && word1(rv) == ( -+ if ((word0(&rv) & Bndry_mask1) == Bndry_mask1 -+ && word1(&rv) == ( - #ifdef Avoid_Underflow -- (scale && (y = word0(rv) & Exp_mask) <= 2 * P * Exp_msk1) -+ (scale && (y = word0(&rv) & Exp_mask) <= 2 * P * Exp_msk1) - ? (0xffffffff & (0xffffffff << (2 * P + 1 - (y >> Exp_shift)))) : - #endif - 0xffffffff)) { - /*boundary case -- increment exponent*/ -- word0(rv) = (word0(rv) & Exp_mask) + Exp_msk1; -- word1(rv) = 0; -+ word0(&rv) = (word0(&rv) & Exp_mask) + Exp_msk1; -+ word1(&rv) = 0; - #ifdef Avoid_Underflow - dsign = 0; - #endif - break; - } -- } else if (!(word0(rv) & Bndry_mask) && !word1(rv)) { -+ } else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) { - drop_down: - /* boundary case -- decrement exponent */ - #ifdef Sudden_Underflow /*{{*/ -- L = word0(rv) & Exp_mask; -+ L = word0(&rv) & Exp_mask; - #ifdef Avoid_Underflow - if (L <= (scale ? (2 * P + 1) * Exp_msk1 : Exp_msk1)) - #else -@@ -1522,7 +1523,7 @@ drop_down: - #else /*Sudden_Underflow}{*/ - #ifdef Avoid_Underflow - if (scale) { -- L = word0(rv) & Exp_mask; -+ L = word0(&rv) & Exp_mask; - if (L <= (2 * P + 1) * Exp_msk1) { - if (L > (P + 2) * Exp_msk1) - /* round even ==> */ -@@ -1533,20 +1534,20 @@ drop_down: - } - } - #endif /*Avoid_Underflow*/ -- L = (word0(rv) & Exp_mask) - Exp_msk1; -+ L = (word0(&rv) & Exp_mask) - Exp_msk1; - #endif /*Sudden_Underflow}}*/ -- word0(rv) = L | Bndry_mask1; -- word1(rv) = 0xffffffff; -+ word0(&rv) = L | Bndry_mask1; -+ word1(&rv) = 0xffffffff; - break; - } -- if (!(word1(rv) & LSB)) -+ if (!(word1(&rv) & LSB)) - break; - if (dsign) -- dval(rv) += ulp(dval(rv)); -+ dval(&rv) += ulp(&rv); - else { -- dval(rv) -= ulp(dval(rv)); -+ dval(&rv) -= ulp(&rv); - #ifndef Sudden_Underflow -- if (!dval(rv)) -+ if (!dval(&rv)) - goto undfl; - #endif - } -@@ -1558,9 +1559,9 @@ drop_down: - if ((aadj = ratio(delta, bs)) <= 2.) { - if (dsign) - aadj = aadj1 = 1.; -- else if (word1(rv) || word0(rv) & Bndry_mask) { -+ else if (word1(&rv) || word0(&rv) & Bndry_mask) { - #ifndef Sudden_Underflow -- if (word1(rv) == Tiny1 && !word0(rv)) -+ if (word1(&rv) == Tiny1 && !word0(&rv)) - goto undfl; - #endif - aadj = 1.; -@@ -1592,23 +1593,23 @@ drop_down: - aadj1 += 0.5; - #endif /*Check_FLT_ROUNDS*/ - } -- y = word0(rv) & Exp_mask; -+ y = word0(&rv) & Exp_mask; - - /* Check for overflow */ - - if (y == Exp_msk1 * (DBL_MAX_EXP + Bias - 1)) { -- dval(rv0) = dval(rv); -- word0(rv) -= P * Exp_msk1; -- adj = aadj1 * ulp(dval(rv)); -- dval(rv) += adj; -- if ((word0(rv) & Exp_mask) >= Exp_msk1 * (DBL_MAX_EXP + Bias - P)) { -- if (word0(rv0) == Big0 && word1(rv0) == Big1) -+ dval(&rv0) = dval(&rv); -+ word0(&rv) -= P * Exp_msk1; -+ adj.d = aadj1 * ulp(&rv); -+ dval(&rv) += adj.d; -+ if ((word0(&rv) & Exp_mask) >= Exp_msk1 * (DBL_MAX_EXP + Bias - P)) { -+ if (word0(&rv0) == Big0 && word1(&rv0) == Big1) - goto ovfl; -- word0(rv) = Big0; -- word1(rv) = Big1; -+ word0(&rv) = Big0; -+ word1(&rv) = Big1; - goto cont; - } else -- word0(rv) += P * Exp_msk1; -+ word0(&rv) += P * Exp_msk1; - } else { - #ifdef Avoid_Underflow - if (scale && y <= 2 * P * Exp_msk1) { -@@ -1618,30 +1619,32 @@ drop_down: - 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; -+ adj.d = aadj1 * ulp(&rv); -+ dval(&rv) += adj.d; - #else - #ifdef Sudden_Underflow -- if ((word0(rv) & Exp_mask) <= P * Exp_msk1) { -- dval(rv0) = dval(rv); -- word0(rv) += P * Exp_msk1; -- adj = aadj1 * ulp(dval(rv)); -- dval(rv) += adj; -- if ((word0(rv) & Exp_mask) <= P * Exp_msk1) -+ if ((word0(&rv) & Exp_mask) <= P * Exp_msk1) { -+ dval(&rv0) = dval(&rv); -+ word0(&rv) += P * Exp_msk1; -+ adj.d = aadj1 * ulp(&rv); -+ dval(&rv) += adj.d; -+ if ((word0(&rv) & Exp_mask) <= P * Exp_msk1) - { -- if (word0(rv0) == Tiny0 && word1(rv0) == Tiny1) -+ if (word0(&rv0) == Tiny0 && word1(&rv0) == Tiny1) - goto undfl; -- word0(rv) = Tiny0; -- word1(rv) = Tiny1; -+ word0(&rv) = Tiny0; -+ word1(&rv) = Tiny1; - goto cont; - } - else -- word0(rv) -= P * Exp_msk1; -+ word0(&rv) -= P * Exp_msk1; - } else { -- adj = aadj1 * ulp(dval(rv)); -- dval(rv) += adj; -+ adj.d = aadj1 * ulp(&rv); -+ dval(&rv) += adj.d; - } - #else /*Sudden_Underflow*/ - /* Compute adj so that the IEEE rounding rules will -@@ -1656,12 +1659,12 @@ drop_down: - if (!dsign) - aadj1 = -aadj1; - } -- adj = aadj1 * ulp(dval(rv)); -- dval(rv) += adj; -+ adj.d = aadj1 * ulp(&rv); -+ dval(&rv) += adj.d; - #endif /*Sudden_Underflow*/ - #endif /*Avoid_Underflow*/ - } -- z = word0(rv) & Exp_mask; -+ z = word0(&rv) & Exp_mask; - #ifndef SET_INEXACT - #ifdef Avoid_Underflow - if (!scale) -@@ -1671,7 +1674,7 @@ drop_down: - L = (int32_t)aadj; - aadj -= L; - /* The tolerances below are conservative. */ -- if (dsign || word1(rv) || word0(rv) & Bndry_mask) { -+ if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) { - if (aadj < .4999999 || aadj > .5000001) - break; - } else if (aadj < .4999999 / FLT_RADIX) -@@ -1687,30 +1690,30 @@ cont: - #ifdef SET_INEXACT - if (inexact) { - if (!oldinexact) { -- word0(rv0) = Exp_1 + (70 << Exp_shift); -- word1(rv0) = 0; -- dval(rv0) += 1.; -+ word0(&rv0) = Exp_1 + (70 << Exp_shift); -+ word1(&rv0) = 0; -+ dval(&rv0) += 1.; - } - } else if (!oldinexact) - clear_inexact(); - #endif - #ifdef Avoid_Underflow - if (scale) { -- word0(rv0) = Exp_1 - 2 * P * Exp_msk1; -- word1(rv0) = 0; -- dval(rv) *= dval(rv0); -+ 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 */ -- if (word0(rv) == 0 && word1(rv) == 0) -+ if (word0(&rv) == 0 && word1(&rv) == 0) - errno = ERANGE; - #endif - } - #endif /* Avoid_Underflow */ - #ifdef SET_INEXACT -- if (inexact && !(word0(rv) & Exp_mask)) { -+ if (inexact && !(word0(&rv) & Exp_mask)) { - /* set underflow bit */ -- dval(rv0) = 1e-300; -- dval(rv0) *= dval(rv0); -+ dval(&rv0) = 1e-300; -+ dval(&rv0) *= dval(&rv0); - } - #endif - retfree: -@@ -1722,7 +1725,7 @@ retfree: - ret: - if (se) - *se = const_cast<char*>(s); -- return sign ? -dval(rv) : dval(rv); -+ return sign ? -dval(&rv) : dval(&rv); - } - - static int quorem(Bigint* b, Bigint* S) -@@ -1914,7 +1917,7 @@ void freedtoa(char* s) - * calculation. - */ - --char* dtoa(double d, int ndigits, int* decpt, int* sign, char** rve) -+char* dtoa(double dd, int ndigits, int* decpt, int* sign, char** rve) - { - /* - Arguments ndigits, decpt, sign are similar to those -@@ -1934,7 +1937,8 @@ char* dtoa(double d, int ndigits, int* d - uint32_t x; - #endif - Bigint *b, *b1, *delta, *mlo = NULL, *mhi, *S; -- double d2, ds, eps; -+ U d2, eps, u; -+ double ds; - char *s, *s0; - #ifdef SET_INEXACT - int inexact, oldinexact; -@@ -1947,22 +1951,23 @@ char* dtoa(double d, int ndigits, int* d - } - #endif - -- if (word0(d) & Sign_bit) { -+ u.d = dd; -+ if (word0(&u) & Sign_bit) { - /* set sign for everything, including 0's and NaNs */ - *sign = 1; -- word0(d) &= ~Sign_bit; /* clear sign bit */ -+ word0(&u) &= ~Sign_bit; /* clear sign bit */ - } else - *sign = 0; - -- if ((word0(d) & Exp_mask) == Exp_mask) -+ if ((word0(&u) & Exp_mask) == Exp_mask) - { - /* Infinity or NaN */ - *decpt = 9999; -- if (!word1(d) && !(word0(d) & 0xfffff)) -+ if (!word1(&u) && !(word0(&u) & 0xfffff)) - return nrv_alloc("Infinity", rve, 8); - return nrv_alloc("NaN", rve, 3); - } -- if (!dval(d)) { -+ if (!dval(&u)) { - *decpt = 1; - return nrv_alloc("0", rve, 1); - } -@@ -1972,15 +1977,15 @@ char* dtoa(double d, int ndigits, int* d - inexact = 1; - #endif - -- b = d2b(dval(d), &be, &bbits); -+ b = d2b(&u, &be, &bbits); - #ifdef Sudden_Underflow -- i = (int)(word0(d) >> Exp_shift1 & (Exp_mask >> Exp_shift1)); -+ i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask >> Exp_shift1)); - #else -- if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask >> Exp_shift1)))) { -+ if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask >> Exp_shift1)))) { - #endif -- dval(d2) = dval(d); -- word0(d2) &= Frac_mask1; -- word0(d2) |= Exp_11; -+ dval(&d2) = dval(&u); -+ word0(&d2) &= Frac_mask1; -+ word0(&d2) |= Exp_11; - - /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 - * log10(x) = log(x) / log(10) -@@ -2011,21 +2016,21 @@ char* dtoa(double d, int ndigits, int* d - /* d is denormalized */ - - i = bbits + be + (Bias + (P - 1) - 1); -- x = i > 32 ? word0(d) << 64 - i | word1(d) >> i - 32 -- : word1(d) << 32 - i; -- dval(d2) = x; -- word0(d2) -= 31 * Exp_msk1; /* adjust exponent */ -+ x = (i > 32) ? (word0(&u) << (64 - i)) | (word1(&u) >> (i - 32)) -+ : word1(&u) << (32 - i); -+ dval(&d2) = x; -+ word0(&d2) -= 31 * Exp_msk1; /* adjust exponent */ - i -= (Bias + (P - 1) - 1) + 1; - denorm = 1; - } - #endif -- ds = (dval(d2) - 1.5) * 0.289529654602168 + 0.1760912590558 + (i * 0.301029995663981); -+ ds = (dval(&d2) - 1.5) * 0.289529654602168 + 0.1760912590558 + (i * 0.301029995663981); - k = (int)ds; - if (ds < 0. && ds != k) - k--; /* want k = floor(ds) */ - k_check = 1; - if (k >= 0 && k <= Ten_pmax) { -- if (dval(d) < tens[k]) -+ if (dval(&u) < tens[k]) - k--; - k_check = 0; - } -@@ -2066,7 +2071,7 @@ char* dtoa(double d, int ndigits, int* d - /* Try to get by with floating-point arithmetic. */ - - i = 0; -- dval(d2) = dval(d); -+ dval(&d2) = dval(&u); - k0 = k; - ilim0 = ilim; - ieps = 2; /* conservative */ -@@ -2076,7 +2081,7 @@ char* dtoa(double d, int ndigits, int* d - if (j & Bletch) { - /* prevent overflows */ - j &= Bletch - 1; -- dval(d) /= bigtens[n_bigtens - 1]; -+ dval(&u) /= bigtens[n_bigtens - 1]; - ieps++; - } - for (; j; j >>= 1, i++) { -@@ -2085,32 +2090,32 @@ char* dtoa(double d, int ndigits, int* d - ds *= bigtens[i]; - } - } -- dval(d) /= ds; -+ dval(&u) /= ds; - } else if ((j1 = -k)) { -- dval(d) *= tens[j1 & 0xf]; -+ dval(&u) *= tens[j1 & 0xf]; - for (j = j1 >> 4; j; j >>= 1, i++) { - if (j & 1) { - ieps++; -- dval(d) *= bigtens[i]; -+ dval(&u) *= bigtens[i]; - } - } - } -- if (k_check && dval(d) < 1. && ilim > 0) { -+ if (k_check && dval(&u) < 1. && ilim > 0) { - if (ilim1 <= 0) - goto fast_failed; - ilim = ilim1; - k--; -- dval(d) *= 10.; -+ dval(&u) *= 10.; - ieps++; - } -- dval(eps) = (ieps * dval(d)) + 7.; -- word0(eps) -= (P - 1) * Exp_msk1; -+ dval(&eps) = (ieps * dval(&u)) + 7.; -+ word0(&eps) -= (P - 1) * Exp_msk1; - if (ilim == 0) { - S = mhi = 0; -- dval(d) -= 5.; -- if (dval(d) > dval(eps)) -+ dval(&u) -= 5.; -+ if (dval(&u) > dval(&eps)) - goto one_digit; -- if (dval(d) < -dval(eps)) -+ if (dval(&u) < -dval(&eps)) - goto no_digits; - goto fast_failed; - } -@@ -2119,33 +2124,33 @@ char* dtoa(double d, int ndigits, int* d - /* Use Steele & White method of only - * generating digits needed. - */ -- dval(eps) = (0.5 / tens[ilim - 1]) - dval(eps); -+ dval(&eps) = (0.5 / tens[ilim - 1]) - dval(&eps); - for (i = 0;;) { -- L = (long int)dval(d); -- dval(d) -= L; -+ L = (long int)dval(&u); -+ dval(&u) -= L; - *s++ = '0' + (int)L; -- if (dval(d) < dval(eps)) -+ if (dval(&u) < dval(&eps)) - goto ret1; -- if (1. - dval(d) < dval(eps)) -+ if (1. - dval(&u) < dval(&eps)) - goto bump_up; - if (++i >= ilim) - break; -- dval(eps) *= 10.; -- dval(d) *= 10.; -+ dval(&eps) *= 10.; -+ dval(&u) *= 10.; - } - } else { - #endif - /* Generate ilim digits, then fix them up. */ -- dval(eps) *= tens[ilim - 1]; -- for (i = 1;; i++, dval(d) *= 10.) { -- L = (int32_t)(dval(d)); -- if (!(dval(d) -= L)) -+ dval(&eps) *= tens[ilim - 1]; -+ for (i = 1;; i++, dval(&u) *= 10.) { -+ L = (int32_t)(dval(&u)); -+ if (!(dval(&u) -= L)) - ilim = i; - *s++ = '0' + (int)L; - if (i == ilim) { -- if (dval(d) > 0.5 + dval(eps)) -+ if (dval(&u) > 0.5 + dval(&eps)) - goto bump_up; -- else if (dval(d) < 0.5 - dval(eps)) { -+ else if (dval(&u) < 0.5 - dval(&eps)) { - while (*--s == '0') { } - s++; - goto ret1; -@@ -2158,7 +2163,7 @@ char* dtoa(double d, int ndigits, int* d - #endif - fast_failed: - s = s0; -- dval(d) = dval(d2); -+ dval(&u) = dval(&d2); - k = k0; - ilim = ilim0; - } -@@ -2170,30 +2175,30 @@ fast_failed: - ds = tens[k]; - if (ndigits < 0 && ilim <= 0) { - S = mhi = 0; -- if (ilim < 0 || dval(d) <= 5 * ds) -+ if (ilim < 0 || dval(&u) <= 5 * ds) - goto no_digits; - goto one_digit; - } -- for (i = 1;; i++, dval(d) *= 10.) { -- L = (int32_t)(dval(d) / ds); -- dval(d) -= L * ds; -+ for (i = 1;; i++, dval(&u) *= 10.) { -+ L = (int32_t)(dval(&u) / ds); -+ dval(&u) -= L * ds; - #ifdef Check_FLT_ROUNDS - /* If FLT_ROUNDS == 2, L will usually be high by 1 */ -- if (dval(d) < 0) { -+ if (dval(&u) < 0) { - L--; -- dval(d) += ds; -+ dval(&u) += ds; - } - #endif - *s++ = '0' + (int)L; -- if (!dval(d)) { -+ if (!dval(&u)) { - #ifdef SET_INEXACT - inexact = 0; - #endif - break; - } - if (i == ilim) { -- dval(d) += dval(d); -- if (dval(d) > ds || dval(d) == ds && L & 1) { -+ dval(&u) += dval(&u); -+ if (dval(&u) > ds || (dval(&u) == ds && (L & 1))) { - bump_up: - while (*--s == '9') - if (s == s0) { -@@ -2248,9 +2253,9 @@ bump_up: - /* Check for special case that d is a normalized power of 2. */ - - spec_case = 0; -- if (!word1(d) && !(word0(d) & Bndry_mask) -+ if (!word1(&u) && !(word0(&u) & Bndry_mask) - #ifndef Sudden_Underflow -- && word0(d) & (Exp_mask & ~Exp_msk1) -+ && word0(&u) & (Exp_mask & ~Exp_msk1) - #endif - ) { - /* The special case */ -@@ -2322,7 +2327,7 @@ bump_up: - delta = diff(S, mhi); - j1 = delta->sign ? 1 : cmp(b, delta); - Bfree(delta); -- if (j1 == 0 && !(word1(d) & 1)) { -+ if (j1 == 0 && !(word1(&u) & 1)) { - if (dig == '9') - goto round_9_up; - if (j > 0) -@@ -2334,7 +2339,7 @@ bump_up: - *s++ = dig; - goto ret; - } -- if (j < 0 || j == 0 && !(word1(d) & 1)) { -+ if (j < 0 || (j == 0 && !(word1(&u) & 1))) { - if (!b->x[0] && b->wds <= 1) { - #ifdef SET_INEXACT - inexact = 0; -@@ -2344,7 +2349,7 @@ bump_up: - if (j1 > 0) { - b = lshift(b, 1); - j1 = cmp(b, S); -- if ((j1 > 0 || j1 == 0 && dig & 1) && dig++ == '9') -+ if ((j1 > 0 || (j1 == 0 && (dig & 1))) && dig++ == '9') - goto round_9_up; - } - accept_dig: -@@ -2389,7 +2394,7 @@ round_9_up: - - b = lshift(b, 1); - j = cmp(b, S); -- if (j > 0 || j == 0 && dig & 1) { -+ if (j > 0 || (j == 0 && (dig & 1))) { - roundoff: - while (*--s == '9') - if (s == s0) { -@@ -2421,9 +2426,9 @@ ret1: - #ifdef SET_INEXACT - if (inexact) { - if (!oldinexact) { -- word0(d) = Exp_1 + (70 << Exp_shift); -- word1(d) = 0; -- dval(d) += 1.; -+ word0(&u) = Exp_1 + (70 << Exp_shift); -+ word1(&u) = 0; -+ dval(&u) += 1.; - } - } else if (!oldinexact) - clear_inexact(); |