Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 187828 Details for
Bug 265579
strict aliasing patch for net-libs/webkit-gtk
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
webkit-gtk-0_p42162-gcc44-aliasing.patch
webkit-gtk-0_p42162-gcc44-aliasing.patch (text/plain), 26.86 KB, created by
Ryan Hill (RETIRED)
on 2009-04-09 21:17:06 UTC
(
hide
)
Description:
webkit-gtk-0_p42162-gcc44-aliasing.patch
Filename:
MIME Type:
Creator:
Ryan Hill (RETIRED)
Created:
2009-04-09 21:17:06 UTC
Size:
26.86 KB
patch
obsolete
>Index: trunk/JavaScriptCore/wtf/dtoa.cpp >=================================================================== >--- trunk/JavaScriptCore/wtf/dtoa.cpp (revision 41954) >+++ trunk/JavaScriptCore/wtf/dtoa.cpp (revision 42262) >@@ -190,11 +190,11 @@ > #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[1] >+#define word1(x) (x)->L[0] >+#else >+#define word0(x) (x)->L[0] >+#define word1(x) (x)->L[1] >+#endif >+#define dval(x) (x)->d > #endif > >@@ -773,8 +773,8 @@ > } > >-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; >@@ -784,6 +784,6 @@ > #endif > #endif >- word0(a) = L; >- word1(a) = 0; >+ word0(&u) = L; >+ word1(&u) = 0; > #ifndef Avoid_Underflow > #ifndef Sudden_Underflow >@@ -791,15 +791,15 @@ > 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; >- } >- } >-#endif >-#endif >- return dval(a); >+ word1(&u) = L >= 31 ? 1 : 1 << 31 - L; >+ } >+ } >+#endif >+#endif >+ return dval(&u); > } > >@@ -812,8 +812,8 @@ > uint32_t z; > int k; >- double d; >- >-#define d0 word0(d) >-#define d1 word1(d) >+ U d; >+ >+#define d0 word0(&d) >+#define d1 word1(&d) > > xa0 = a->x; >@@ -858,8 +858,8 @@ > #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; >@@ -966,9 +966,9 @@ > 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); >@@ -977,10 +977,10 @@ > #endif > if (k > 0) >- word0(da) += k * Exp_msk1; >+ word0(&da) += k * Exp_msk1; > else { > k = -k; >- word0(db) += k * Exp_msk1; >- } >- return dval(da) / dval(db); >+ word0(&db) += k * Exp_msk1; >+ } >+ return dval(&da) / dval(&db); > } > >@@ -1032,5 +1032,5 @@ > > #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]; >@@ -1071,6 +1071,6 @@ > } > 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]; > } > } >@@ -1086,5 +1086,6 @@ > 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; >@@ -1095,5 +1096,5 @@ > > sign = nz0 = nz = 0; >- dval(rv) = 0.; >+ dval(&rv) = 0; > for (s = s00; ; s++) > switch (*s) { >@@ -1210,6 +1211,6 @@ > if (!match(&s,"inity")) > ++s; >- word0(rv) = 0x7ff00000; >- word1(rv) = 0; >+ word0(&rv) = 0x7ff00000; >+ word1(&rv) = 0; > goto ret; > } >@@ -1218,6 +1219,6 @@ > 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 == '(') /*)*/ >@@ -1244,5 +1245,5 @@ > nd0 = nd; > k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; >- dval(rv) = y; >+ dval(&rv) = y; > if (k > 9) { > #ifdef SET_INEXACT >@@ -1250,5 +1251,5 @@ > oldinexact = get_inexact(); > #endif >- dval(rv) = tens[k - 9] * dval(rv) + z; >+ dval(&rv) = tens[k - 9] * dval(&rv) + z; > } > bd0 = 0; >@@ -1258,5 +1259,5 @@ > if (e > 0) { > if (e <= Ten_pmax) { >- /* rv = */ rounded_product(dval(rv), tens[e]); >+ /* rv = */ rounded_product(dval(&rv), tens[e]); > goto ret; > } >@@ -1267,6 +1268,6 @@ > */ > 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; > } >@@ -1274,5 +1275,5 @@ > #ifndef Inaccurate_Divide > else if (e >= -Ten_pmax) { >- /* rv = */ rounded_quotient(dval(rv), tens[-e]); >+ /* rv = */ rounded_quotient(dval(&rv), tens[-e]); > goto ret; > } >@@ -1294,5 +1295,5 @@ > if (e1 > 0) { > if ((i = e1 & 15)) >- dval(rv) *= tens[i]; >+ dval(&rv) *= tens[i]; > if (e1 &= ~15) { > if (e1 > DBL_MAX_10_EXP) { >@@ -1302,10 +1303,10 @@ > #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) >@@ -1316,22 +1317,22 @@ > 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) >@@ -1342,30 +1343,30 @@ > 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]; >-#endif >- if (!dval(rv)) { >+ dval(&rv0) = dval(&rv); >+ dval(&rv) *= tinytens[j]; >+ if (!dval(&rv)) { >+ dval(&rv) = 2. * dval(&rv0); >+ dval(&rv) *= tinytens[j]; >+#endif >+ if (!dval(&rv)) { > undfl: >- dval(rv) = 0.; >+ dval(&rv) = 0.; > #ifndef NO_ERRNO > errno = ERANGE; >@@ -1376,6 +1377,6 @@ > } > #ifndef Avoid_Underflow >- word0(rv) = Tiny0; >- word1(rv) = Tiny1; >+ word0(&rv) = Tiny0; >+ word1(&rv) = Tiny1; > /* The refinement below will clean > * this approximation up. >@@ -1395,5 +1396,5 @@ > 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); > >@@ -1465,9 +1466,9 @@ > * 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 >-#else >- || (word0(rv) & Exp_mask) <= Exp_msk1 >+ || (word0(&rv) & Exp_mask) <= (2 * P + 1) * Exp_msk1 >+#else >+ || (word0(&rv) & Exp_mask) <= Exp_msk1 > #endif > ) { >@@ -1493,14 +1494,14 @@ > /* 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; >@@ -1508,9 +1509,9 @@ > 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)) >@@ -1523,5 +1524,5 @@ > #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) >@@ -1534,18 +1535,18 @@ > } > #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 >@@ -1559,7 +1560,7 @@ > 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 >@@ -1593,21 +1594,21 @@ > #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 >@@ -1619,28 +1620,30 @@ > aadj1 = dsign ? aadj : -aadj; > } >- word0(aadj1) += (2 * P + 1) * Exp_msk1 - y; >- } >- adj = aadj1 * ulp(dval(rv)); >- dval(rv) += adj; >+ dval(&aadj2) = aadj1; >+ word0(&aadj2) += (2 * P + 1) * Exp_msk1 - y; >+ aadj1 = dval(&aadj2); >+ } >+ 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*/ >@@ -1657,10 +1660,10 @@ > 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 >@@ -1672,5 +1675,5 @@ > 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; >@@ -1688,7 +1691,7 @@ > 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) >@@ -1697,10 +1700,10 @@ > #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 >@@ -1708,8 +1711,8 @@ > #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 >@@ -1723,5 +1726,5 @@ > if (se) > *se = const_cast<char*>(s); >- return sign ? -dval(rv) : dval(rv); >+ return sign ? -dval(&rv) : dval(&rv); > } > >@@ -1915,5 +1918,5 @@ > */ > >-char* dtoa(double d, int ndigits, int* decpt, int* sign, char** rve) >+char* dtoa(double dd, int ndigits, int* decpt, int* sign, char** rve) > { > /* >@@ -1935,5 +1938,6 @@ > #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 >@@ -1948,20 +1952,21 @@ > #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); >@@ -1973,13 +1978,13 @@ > #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)); >-#else >- if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask >> Exp_shift1)))) { >-#endif >- dval(d2) = dval(d); >- word0(d2) &= Frac_mask1; >- word0(d2) |= Exp_11; >+ i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask >> Exp_shift1)); >+#else >+ if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask >> Exp_shift1)))) { >+#endif >+ dval(&d2) = dval(&u); >+ word0(&d2) &= Frac_mask1; >+ word0(&d2) |= Exp_11; > > /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 >@@ -2012,13 +2017,13 @@ > > 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) >@@ -2026,5 +2031,5 @@ > k_check = 1; > if (k >= 0 && k <= Ten_pmax) { >- if (dval(d) < tens[k]) >+ if (dval(&u) < tens[k]) > k--; > k_check = 0; >@@ -2067,5 +2072,5 @@ > > i = 0; >- dval(d2) = dval(d); >+ dval(&d2) = dval(&u); > k0 = k; > ilim0 = ilim; >@@ -2077,5 +2082,5 @@ > /* prevent overflows */ > j &= Bletch - 1; >- dval(d) /= bigtens[n_bigtens - 1]; >+ dval(&u) /= bigtens[n_bigtens - 1]; > ieps++; > } >@@ -2086,30 +2091,30 @@ > } > } >- 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; >@@ -2120,31 +2125,31 @@ > * 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++; >@@ -2159,5 +2164,5 @@ > fast_failed: > s = s0; >- dval(d) = dval(d2); >+ dval(&u) = dval(&d2); > k = k0; > ilim = ilim0; >@@ -2171,20 +2176,20 @@ > 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; >@@ -2193,6 +2198,6 @@ > } > 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') >@@ -2249,7 +2254,7 @@ > > 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 > ) { >@@ -2323,5 +2328,5 @@ > 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; >@@ -2335,5 +2340,5 @@ > 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 >@@ -2422,7 +2427,7 @@ > 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)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 265579
:
187824
| 187828