From 6ddf8bef40f93669cbff7df85f22318bfbfcdaa0 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Fri, 31 Aug 2007 21:21:27 +0000 Subject: 2007-08-31 Antony King * 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/libc/stdlib/strtod.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'newlib/libc/stdlib/strtod.c') diff --git a/newlib/libc/stdlib/strtod.c b/newlib/libc/stdlib/strtod.c index 6323f0b..e206d05 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 */ -- cgit v1.1