Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2007-09-01 01:21:27 +0400
committerJeff Johnston <jjohnstn@redhat.com>2007-09-01 01:21:27 +0400
commit6ddf8bef40f93669cbff7df85f22318bfbfcdaa0 (patch)
treeb97fc8fd4e61bbbf250e751a5cc7647c8afdae1f /newlib
parent95500c2eff0773968c36922f68d877cf5e8833e4 (diff)
2007-08-31 Antony King <antony.king@st.com>
* libc/stdlib/mprec.h [_DOUBLE_IS_32BITS}: Define IEEE_Arith bits and redefine associated dword0 macro (rvalue issue). * libc/stdio/vfieeefp.h: Ditto. * libc/stdlib/strtod.c: Add checks for _DOUBLE_IS_32BITS to prevent setting dword1 which is an rvalue only.
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog8
-rw-r--r--newlib/libc/stdio/vfieeefp.h4
-rw-r--r--newlib/libc/stdlib/mprec.h14
-rw-r--r--newlib/libc/stdlib/strtod.c12
4 files changed, 25 insertions, 13 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 4913089e7..cac330ce0 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,11 @@
+2007-08-31 Antony King <antony.king@st.com>
+
+ * libc/stdlib/mprec.h [_DOUBLE_IS_32BITS}: Define IEEE_Arith
+ bits and redefine associated dword0 macro (rvalue issue).
+ * libc/stdio/vfieeefp.h: Ditto.
+ * libc/stdlib/strtod.c: Add checks for _DOUBLE_IS_32BITS
+ to prevent setting dword1 which is an rvalue only.
+
2007-08-28 Hans Kester <hans.kester@ellips.nl>
* configure.host: Added support for x86_64.
diff --git a/newlib/libc/stdio/vfieeefp.h b/newlib/libc/stdio/vfieeefp.h
index 3691ffe73..c13f9e8dc 100644
--- a/newlib/libc/stdio/vfieeefp.h
+++ b/newlib/libc/stdio/vfieeefp.h
@@ -170,9 +170,7 @@ union double_union
#define Exp_mask ((__uint32_t)0x7f800000L)
#define P 24
#define Bias 127
-#if 0
-#define IEEE_Arith /* it is, but the code doesn't handle IEEE singles yet */
-#endif
+#define IEEE_Arith
#define Emin (-126)
#define Exp_1 ((__uint32_t)0x3f800000L)
#define Exp_11 ((__uint32_t)0x3f800000L)
diff --git a/newlib/libc/stdlib/mprec.h b/newlib/libc/stdlib/mprec.h
index 8c9ad0ef0..498de5b74 100644
--- a/newlib/libc/stdlib/mprec.h
+++ b/newlib/libc/stdlib/mprec.h
@@ -139,15 +139,7 @@ typedef union { double d; __ULong L[2]; } U;
#define P 24
#define Bias 127
#define NO_HEX_FP /* not supported in this case */
-#if 0
-#define IEEE_Arith /* it is, but the code doesn't handle IEEE singles yet */
-#endif
-/* Following is needed due to IEEE_Arith not being set on above. */
-#if defined(__v800)
-#define n_bigtens 2
-#else
-#define n_bigtens 5
-#endif
+#define IEEE_Arith
#define Emin (-126)
#define Exp_1 ((__uint32_t)0x3f800000L)
#define Exp_11 ((__uint32_t)0x3f800000L)
@@ -175,7 +167,11 @@ typedef union { double d; __ULong L[2]; } U;
#define word0(x) (x.i[0])
#define word1(x) 0
+#ifdef YES_ALIAS
#define dword0(x) ((__ULong *)&x)[0]
+#else
+#define dword0(x) ((U*)&x)->L[0]
+#endif
#define dword1(x) 0
#else
diff --git a/newlib/libc/stdlib/strtod.c b/newlib/libc/stdlib/strtod.c
index 6323f0b74..e206d0587 100644
--- a/newlib/libc/stdlib/strtod.c
+++ b/newlib/libc/stdlib/strtod.c
@@ -386,7 +386,9 @@ _DEFUN (_strtod_r, (ptr, s00, se),
if (!match(&s,"inity"))
++s;
dword0(rv) = 0x7ff00000;
+#ifndef _DOUBLE_IS_32BITS
dword1(rv) = 0;
+#endif /*!_DOUBLE_IS_32BITS*/
goto ret;
}
break;
@@ -398,12 +400,16 @@ _DEFUN (_strtod_r, (ptr, s00, se),
&& hexnan(&s, &fpinan, bits)
== STRTOG_NaNbits) {
dword0(rv) = 0x7ff00000 | bits[1];
+#ifndef _DOUBLE_IS_32BITS
dword1(rv) = bits[0];
+#endif /*!_DOUBLE_IS_32BITS*/
}
else {
#endif
dword0(rv) = NAN_WORD0;
+#ifndef _DOUBLE_IS_32BITS
dword1(rv) = NAN_WORD1;
+#endif /*!_DOUBLE_IS_32BITS*/
#ifndef No_Hex_NaN
}
#endif
@@ -627,8 +633,8 @@ _DEFUN (_strtod_r, (ptr, s00, se),
#ifndef _DOUBLE_IS_32BITS
else
dword1(rv) &= 0xffffffff << j;
- }
#endif /*!_DOUBLE_IS_32BITS*/
+ }
#else
for(j = 0; e1 > 1; j++, e1 >>= 1)
if (e1 & 1)
@@ -1109,7 +1115,9 @@ _DEFUN (_strtod_r, (ptr, s00, se),
if (inexact) {
if (!oldinexact) {
dword0(rv0) = Exp_1 + (70 << Exp_shift);
+#ifndef _DOUBLE_IS_32BITS
dword1(rv0) = 0;
+#endif /*!_DOUBLE_IS_32BITS*/
dval(rv0) += 1.;
}
}
@@ -1119,7 +1127,9 @@ _DEFUN (_strtod_r, (ptr, s00, se),
#ifdef Avoid_Underflow
if (scale) {
dword0(rv0) = Exp_1 - 2*P*Exp_msk1;
+#ifndef _DOUBLE_IS_32BITS
dword1(rv0) = 0;
+#endif /*!_DOUBLE_IS_32BITS*/
dval(rv) *= dval(rv0);
#ifndef NO_ERRNO
/* try to avoid the bug of testing an 8087 register value */