* math/Makefile (calls): Add s_frexp, s_ldexp.

(routines): Remove them and &f from here.

	* sys/socket.h: New file, wrapper for socket/sys/socket.h.

Thu Jul 11 00:22:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_frexpl.c: New file.  `long double'
	implementation of frexp() function.
	* sysdeps/libm-ieee754/s_ldexpl.c: New file.  `long double'
	implementation of ldexp() function.

	* sysdeps/libm-i387/s_isnanl.c (isnanl): Mask explicit one
	out before or'ing.
This commit is contained in:
Roland McGrath 1996-07-12 00:43:28 +00:00
parent adc6ff7f81
commit e6c9a67a0b
6 changed files with 172 additions and 10 deletions

View File

@ -1,5 +1,10 @@
Thu Jul 11 20:09:55 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (calls): Add s_frexp, s_ldexp.
(routines): Remove them and &f from here.
* sys/socket.h: New file, wrapper for socket/sys/socket.h.
* nss/nss_files/files-service.c (getservbyname): Take second arg PROTO
and check it.
@ -33,6 +38,16 @@ Thu Jul 11 03:21:10 1996 Ulrich Drepper <drepper@cygnus.com>
* catgets/gencat.c (write_out): Move code to determine new
best size out of inner loop.
Thu Jul 11 00:22:40 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-ieee754/s_frexpl.c: New file. `long double'
implementation of frexp() function.
* sysdeps/libm-ieee754/s_ldexpl.c: New file. `long double'
implementation of ldexp() function.
* sysdeps/libm-i387/s_isnanl.c (isnanl): Mask explicit one
out before or'ing.
Wed Jul 10 05:24:40 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c: Include <sys/types.h>.

47
FAQ
View File

@ -43,6 +43,9 @@ please let me know.
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
systems?''
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q1] ``What systems does the GNU C Library run on?''
@ -133,12 +136,12 @@ Library.
form the tools from the GNU gettext package are necessary. See
ftp://prep.ai.mit.edu/pub/gnu or better any mirror site.
* lots of diskspace (for i386-linux this means, e.g., ~70MB).
* lots of diskspace (for i?86-linux this means, e.g., ~70MB).
You should avoid compiling on a NFS mounted device. This is very
slow.
* plenty of time (approx 1h for i386-linux on i586@133 or 2.5h on
* plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
i486@66 or 4.5h on i486@33).
If you have some more measurements let me know.
@ -191,7 +194,7 @@ For Linux there are today two libc versions:
libc-5 current ELF libc
GNU libc will have the major number 6 and therefore you can have this
additionally installed. For more information consult documenation for
additionally installed. For more information consult documentation for
shared library handling. The Makefiles of GNU libc will automatically
generate the needed symbolic links which the linker will use.
@ -296,6 +299,44 @@ Instead GNU libc contains the zone database handling and compatibility
code for POSIX TZ environment variable handling.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
[A12] {UD} Unlike the author of the `gencat' program which is distributed
with Linux libc I have read the underlying standards before writing the
code. It is completely compatible with the specification given in
X/Open Portability Guide.
To ease the transition from the Linux version some of the non-standard
features are also present in the `gencat' program of GNU libc. This
mainly includes the use of symbols for the message number and the automatic
generation of header files which contain the needed #defines to map the
symbols to integers.
Here is a simple SED script to convert at least some Linux specific
catalog files to the XPG4 form:
-----------------------------------------------------------------------
# Change catalog source in Linux specific format to standard XPG format.
# Ulrich Drepper <drepper@cygnus.com>, 1996.
#
/^\$ #/ {
h
s/\$ #\([^ ]*\).*/\1/
x
s/\$ #[^ ]* *\(.*\)/\$ \1/
}
/^# / {
s/^# \(.*\)/\1/
G
s/\(.*\)\n\(.*\)/\2 \1/
}
-----------------------------------------------------------------------
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Answers were given by:

View File

@ -55,9 +55,8 @@ long-m-routines = $(patsubst %_rl,%l_r,$(libm-calls:=l)) # not ready yet
# These functions are in libc instead of libm because __printf_fp
# calls them, so any program using printf will need them linked in,
# and we don't want to have to link every program with -lm.
calls = s_isinf s_isnan s_finite s_copysign s_modf s_scalbn
routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts)) \
s_frexp s_ldexp s_frexpf s_ldexpf
calls = s_isinf s_isnan s_finite s_copysign s_modf s_scalbn s_frexp s_ldexp
routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts))
long-c-yes = $(calls:=l)
distribute += $(long-c-yes:=.c)

View File

@ -36,10 +36,11 @@ static char rcsid[] = "$NetBSD: $";
int32_t se,hx,lx;
GET_LDOUBLE_WORDS(se,hx,lx,x);
se = (se & 0x7fff) << 1;
lx |= hx;
/* The additional &hx is required because Intel's extended format
has the normally implicit 1 explicit present. Sigh! */
se |= (u_int32_t)((lx|(-lx))&hx)>>31;
/* The additional & 0x7fffffff is required because Intel's
extended format has the normally implicit 1 explicit
present. Sigh! */
lx |= hx & 0x7fffffff;
se |= (u_int32_t)(lx|(-lx))>>31;
se = 0xfffe - se;
return (int)((u_int32_t)(se))>>16;
}

View File

@ -0,0 +1,69 @@
/* s_frexpl.c -- long double version of s_frexp.c.
* Conversion to long double by Ulrich Drepper,
* Cygnus Support, drepper@cygnus.com.
*/
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
#if defined(LIBM_SCCS) && !defined(lint)
static char rcsid[] = "$NetBSD: $";
#endif
/*
* for non-zero x
* x = frexpl(arg,&exp);
* return a long double fp quantity x such that 0.5 <= |x| <1.0
* and the corresponding binary exponent "exp". That is
* arg = x*2^exp.
* If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg
* with *exp=0.
*/
#include "math.h"
#include "math_private.h"
#ifdef __STDC__
static const long double
#else
static long double
#endif
#if LDBL_MANT_DIG == 64
two65 = 3.68934881474191032320e+19L; /* 0x4040, 0x80000000, 0x00000000 */
#else
# error "Cannot handle this MANT_DIG"
#endif
#ifdef __STDC__
long double __frexpl(long double x, int *eptr)
#else
long double __frexpl(x, eptr)
long double x; int *eptr;
#endif
{
u_int32_t se, hx, ix, lx;
GET_LDOUBLE_WORDS(se,hx,lx,x);
ix = 0x7fff&se;
*eptr = 0;
if(ix==0x7fff||((ix|hx|lx)==0)) return x; /* 0,inf,nan */
if (ix==0x0000) { /* subnormal */
x *= two65;
GET_LDOUBLE_EXP(se,x);
ix = se&0x7fff;
*eptr = -65;
}
*eptr += ix-16382;
se = (se & 0x8000) | 0x3ffe;
SET_LDOUBLE_EXP(x,se);
return x;
}
weak_alias (__frexpl, frexpl)

View File

@ -0,0 +1,37 @@
/* s_ldexpl.c -- long double version of s_ldexp.c.
* Conversion to long double by Ulrich Drepper,
* Cygnus Support, drepper@cygnus.com.
*/
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
#if defined(LIBM_SCCS) && !defined(lint)
static char rcsid[] = "$NetBSD: $";
#endif
#include "math.h"
#include "math_private.h"
#include <errno.h>
#ifdef __STDC__
long double __ldexpl(long double value, int exp)
#else
long double __ldexpl(value, exp)
long double value; int exp;
#endif
{
if(!__finitel(value)||value==0.0) return value;
value = __scalbnl(value,exp);
if(!__finitel(value)||value==0.0) errno = ERANGE;
return value;
}
weak_alias (__ldexpl, ldexpl)