mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-30 02:50:25 +08:00
2003-01-07 Jeff Johnston <jjohnstn@redhat.com>
* configure.host: Support long double I/O for x86-linux. * libc/stdlib/ldtoa.c (_ldtoa_r): Fix code to allocate a buffer large enough to hold formatted result. * libc/machine/powerpc/simdldtoa.c (_simdldtoa_r): Ditto.
This commit is contained in:
parent
b2294aaa30
commit
d4c3a750e7
@ -1,3 +1,10 @@
|
||||
2003-01-07 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* configure.host: Support long double I/O for x86-linux.
|
||||
* libc/stdlib/ldtoa.c (_ldtoa_r): Fix code to allocate a buffer
|
||||
large enough to hold formatted result.
|
||||
* libc/machine/powerpc/simdldtoa.c (_simdldtoa_r): Ditto.
|
||||
|
||||
2003-01-06 Charles Wilson <cwilson@ece.gatech.edu>
|
||||
|
||||
* Makefile.am: Add vasprintf.
|
||||
|
@ -338,7 +338,7 @@ case "${host}" in
|
||||
newlib_cflags="${newlib_cflags} -Wall"
|
||||
newlib_cflags="${newlib_cflags} -D_I386MACH_ALLOW_HW_INTERRUPTS"
|
||||
newlib_cflags="${newlib_cflags} -D_LOOSE_KERNEL_NAMES -DHAVE_FCNTL"
|
||||
newlib_cflags="${newlib_cflags} -DWANT_IO_POS_ARGS"
|
||||
newlib_cflags="${newlib_cflags} -DWANT_IO_POS_ARGS -DWANT_IO_LONG_DBL"
|
||||
# --- Required when building a shared library ------------------------
|
||||
newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION"
|
||||
# --- The three lines below are optional ------------------------------
|
||||
|
@ -39,6 +39,9 @@ int _simdldcheck (LONG_DOUBLE_UNION *);
|
||||
/* The exponent of 1.0 */
|
||||
#define EXONE (0x3fff)
|
||||
|
||||
/* Maximum exponent digits - base 10 */
|
||||
#define MAX_EXP_DIGITS 5
|
||||
|
||||
/* Control structure for long doublue conversion including rounding precision values.
|
||||
* rndprc can be set to 80 (if NE=6), 64, 56, 53, or 24 bits.
|
||||
*/
|
||||
@ -2701,7 +2704,7 @@ _simdldtoa_r (struct _reent *ptr, LONG_DOUBLE_UNION *d, int mode, int ndigits, i
|
||||
{
|
||||
unsigned short e[NI];
|
||||
char *s, *p;
|
||||
int k;
|
||||
int i, j, k;
|
||||
LDPARMS rnd;
|
||||
LDPARMS *ldp = &rnd;
|
||||
char *outstr;
|
||||
@ -2742,16 +2745,21 @@ if( mode != 3 )
|
||||
For now, just ask for 20 digits which is enough but sometimes too many. */
|
||||
if( mode == 0 )
|
||||
ndigits = 20;
|
||||
|
||||
/* reentrancy addition to use mprec storage pool */
|
||||
/* we want to have enough space to hold the formatted result */
|
||||
i = ndigits + (mode == 3 ? (MAX_EXP_DIGITS + 1) : 1);
|
||||
j = sizeof (__ULong);
|
||||
for (_REENT_MP_RESULT_K(ptr) = 0; sizeof (_Bigint) - sizeof (__ULong) + j <= i; j <<= 1)
|
||||
_REENT_MP_RESULT_K(ptr)++;
|
||||
_REENT_MP_RESULT(ptr) = Balloc (ptr, _REENT_MP_RESULT_K(ptr));
|
||||
outstr = (char *)_REENT_MP_RESULT(ptr);
|
||||
|
||||
/* This sanity limit must agree with the corresponding one in etoasc, to
|
||||
keep straight the returned value of outexpon. */
|
||||
if( ndigits > NDEC )
|
||||
ndigits = NDEC;
|
||||
|
||||
/* reentrancy addition to use mprec storage pool */
|
||||
_REENT_MP_RESULT(ptr) = Balloc (ptr, 3);
|
||||
_REENT_MP_RESULT_K(ptr) = 3;
|
||||
outstr = (char *)_REENT_MP_RESULT(ptr);
|
||||
|
||||
etoasc( e, outstr, ndigits, mode, ldp );
|
||||
s = outstr;
|
||||
if( eisinf(e) || eisnan(e) )
|
||||
|
@ -41,6 +41,9 @@ void _IO_ldtostr(long double *, char *, int, int, char);
|
||||
/* The exponent of 1.0 */
|
||||
#define EXONE (0x3fff)
|
||||
|
||||
/* Maximum exponent digits - base 10 */
|
||||
#define MAX_EXP_DIGITS 5
|
||||
|
||||
/* Control structure for long doublue conversion including rounding precision values.
|
||||
* rndprc can be set to 80 (if NE=6), 64, 56, 53, or 24 bits.
|
||||
*/
|
||||
@ -2703,7 +2706,7 @@ _ldtoa_r (struct _reent *ptr, long double d, int mode, int ndigits, int *decpt,
|
||||
{
|
||||
unsigned short e[NI];
|
||||
char *s, *p;
|
||||
int k;
|
||||
int i, j, k;
|
||||
LDPARMS rnd;
|
||||
LDPARMS *ldp = &rnd;
|
||||
char *outstr;
|
||||
@ -2744,16 +2747,21 @@ if( mode != 3 )
|
||||
For now, just ask for 20 digits which is enough but sometimes too many. */
|
||||
if( mode == 0 )
|
||||
ndigits = 20;
|
||||
|
||||
/* reentrancy addition to use mprec storage pool */
|
||||
/* we want to have enough space to hold the formatted result */
|
||||
i = ndigits + (mode == 3 ? (MAX_EXP_DIGITS + 1) : 1);
|
||||
j = sizeof (__ULong);
|
||||
for (_REENT_MP_RESULT_K(ptr) = 0; sizeof (_Bigint) - sizeof (__ULong) + j <= i; j <<= 1)
|
||||
_REENT_MP_RESULT_K(ptr)++;
|
||||
_REENT_MP_RESULT(ptr) = Balloc (ptr, _REENT_MP_RESULT_K(ptr));
|
||||
outstr = (char *)_REENT_MP_RESULT(ptr);
|
||||
|
||||
/* This sanity limit must agree with the corresponding one in etoasc, to
|
||||
keep straight the returned value of outexpon. */
|
||||
if( ndigits > NDEC )
|
||||
ndigits = NDEC;
|
||||
|
||||
/* reentrancy addition to use mprec storage pool */
|
||||
_REENT_MP_RESULT(ptr) = Balloc (ptr, 3);
|
||||
_REENT_MP_RESULT_K(ptr) = 3;
|
||||
outstr = (char *)_REENT_MP_RESULT(ptr);
|
||||
|
||||
etoasc( e, outstr, ndigits, mode, ldp );
|
||||
s = outstr;
|
||||
if( eisinf(e) || eisnan(e) )
|
||||
|
Loading…
x
Reference in New Issue
Block a user