OSDN Git Service

2007-08-31 Antony King <antony.king@st.com>
authorjjohnstn <jjohnstn>
Fri, 31 Aug 2007 21:21:26 +0000 (21:21 +0000)
committerjjohnstn <jjohnstn>
Fri, 31 Aug 2007 21:21:26 +0000 (21:21 +0000)
        * 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.

newlib/ChangeLog
newlib/libc/stdio/vfieeefp.h
newlib/libc/stdlib/mprec.h
newlib/libc/stdlib/strtod.c

index 4913089..cac330c 100644 (file)
@@ -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.
index 3691ffe..c13f9e8 100644 (file)
@@ -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)
index 8c9ad0e..498de5b 100644 (file)
@@ -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
 
index 6323f0b..e206d05 100644 (file)
@@ -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 */