From ce563359aff66775c71c3e84e7d06a69c199eac0 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 21 Mar 1996 15:20:37 +0000 Subject: Wed Mar 20 11:28:49 1996 Andreas Schwab * stdio-common/printf.h, stdio-common/printf_fp.c, stdio-common/vfprintf.c: Place const in parameter list at correct place. Wed Mar 20 23:58.12 1996 Ulrich Drepper * sysdeps/i386/ldbl2mpn.c: Copy of former version of sysdeps/ieee754/ldbl2mpn.c. * sysdeps/ieee754/ldbl2mpn.c: Remove i386 specific unification. Reported by Andreas Schwab. Wed Mar 20 19:58:43 1996 Roland McGrath * version.c: Include version.h to define RELEASE and VERSION macros. (__libc_release, __libc_version): Use them. * locale/SYS_libc.c (_libc_intl_domainname): Include ../version.h and use VERSION to define domainname as `SYS_GNU_libc-VERSION'. * Make-dist (rel+vers): Snarf the macro values from version.h. * MakeTAGS (extract): Pass $(XGETTEXTFLAGS-$(@F)). (XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): New variables; pass -a for these files. * Makerules (po/%.pot): Depend on FORCE target so recursive make is always run. --- ChangeLog | 28 +++++++++++++ Make-dist | 6 +-- MakeTAGS | 8 +++- Makerules | 5 ++- locale/SYS_libc.c | 4 +- po/SYS_libc.pot | 16 +++---- stdio-common/printf.h | 2 +- stdio-common/printf_fp.c | 2 +- stdio-common/vfprintf.c | 2 +- sysdeps/i386/ldbl2mpn.c | 101 +++++++++++++++++++++++++++++++++++++++++++++ sysdeps/ieee754/ldbl2mpn.c | 7 ---- version.c | 12 +++--- version.h | 4 ++ 13 files changed, 165 insertions(+), 32 deletions(-) create mode 100644 sysdeps/i386/ldbl2mpn.c create mode 100644 version.h diff --git a/ChangeLog b/ChangeLog index f0631c3e8e..1bf429ddce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +Wed Mar 20 11:28:49 1996 Andreas Schwab + + * stdio-common/printf.h, stdio-common/printf_fp.c, + stdio-common/vfprintf.c: Place const in parameter list at + correct place. + +Wed Mar 20 23:58.12 1996 Ulrich Drepper + + * sysdeps/i386/ldbl2mpn.c: Copy of former version of + sysdeps/ieee754/ldbl2mpn.c. + * sysdeps/ieee754/ldbl2mpn.c: Remove i386 specific unification. + Reported by Andreas Schwab. + +Wed Mar 20 19:58:43 1996 Roland McGrath + + * version.c: Include version.h to define RELEASE and VERSION macros. + (__libc_release, __libc_version): Use them. + * locale/SYS_libc.c (_libc_intl_domainname): Include ../version.h and + use VERSION to define domainname as `SYS_GNU_libc-VERSION'. + * Make-dist (rel+vers): Snarf the macro values from version.h. + + * MakeTAGS (extract): Pass $(XGETTEXTFLAGS-$(@F)). + (XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): New variables; + pass -a for these files. + + * Makerules (po/%.pot): Depend on FORCE target so recursive make is + always run. + Mon Mar 18 22:54:32 1996 Andreas Schwab * sysdeps/unix/sysv/linux/wait3.c: New file. diff --git a/Make-dist b/Make-dist index feb67d191d..9ec795e9eb 100644 --- a/Make-dist +++ b/Make-dist @@ -105,9 +105,9 @@ foo:=$(shell echo '+tsrcs=$(+tsrcs)'>&2) foo:=$(shell echo foobie, dammit! >&2) ifndef tardir -rel+vers := $(shell sed -n -e 's/^.*libc_release.*\"\([^"]*\)";$$/\1/p' \ - -e 's/^.*libc_version.*\"\([^"]*\)";$$/\1/p' \ - < $(..)version.c) +rel+vers := $(shell sed -n -e 's/^.*RELEASE.*\"\([^"]*\)";$$/\1/p' \ + -e 's/^.*VERSION.*\"\([^"]*\)";$$/\1/p' \ + < $(..)version.h) release := $(word 1,$(rel+vers)) version := $(word 2,$(rel+vers)) export tardir := glibc-$(version) diff --git a/MakeTAGS b/MakeTAGS index fff024173b..1a32d6d480 100644 --- a/MakeTAGS +++ b/MakeTAGS @@ -133,15 +133,19 @@ endif define extract @rm -f $@.new $(XGETTEXT) --keyword=_ --keyword=N_ --sort-output -d - \ - > $@.new /dev/null $^ + $(XGETTEXTFLAGS-$(@F)) > $@.new /dev/null $^ mv -f $@.new $@ endef $P/$(domain).pot: $(tags_sources); $(extract) -$P/siglist.pot: $(..)sysdeps/generic/signame.c; $(extract) +$P/siglist.pot: $(common-objpfx)siglist.c; $(extract) $P/errlist.pot: $(..)sysdeps/mach/hurd/errlist.c; $(extract) +# Extract all strings from these files; their strings are not marked. +XGETTEXTFLAGS-siglist.pot = -a +XGETTEXTFLAGS-errlist.pot = -a + all-pot = $P/libc-top.pot $(subdirs:%=$P/%.pot) \ $P/siglist.pot $P/errlist.pot diff --git a/Makerules b/Makerules index 053b46786c..c68395cfd9 100644 --- a/Makerules +++ b/Makerules @@ -620,8 +620,9 @@ check: tests TAGS: distinfo $(..)MakeTAGS $(MAKE) $(addprefix -f ,$^) $@ -$(..)po/%.pot: distinfo $(..)MakeTAGS - $(MAKE) $(addprefix -f ,$^) $@ +$(..)po/%.pot: distinfo $(..)MakeTAGS FORCE + $(MAKE) $(addprefix -f ,$(filter-out FORCE,$^)) $@ +FORCE: .PHONY: echo-headers diff --git a/locale/SYS_libc.c b/locale/SYS_libc.c index 99db8e67a3..ed34903d22 100644 --- a/locale/SYS_libc.c +++ b/locale/SYS_libc.c @@ -1,4 +1,6 @@ /* Define a constant for the dgettext domainname for libc internal messages, so the string constant is not repeated in dozens of object files. */ -const char _libc_intl_domainname[] = "SYS_libc"; +#include "../version.h" + +const char _libc_intl_domainname[] = "SYS_GNU_libc-" VERSION; diff --git a/po/SYS_libc.pot b/po/SYS_libc.pot index fc21bf09e7..8b73db6630 100644 --- a/po/SYS_libc.pot +++ b/po/SYS_libc.pot @@ -306,15 +306,15 @@ msgstr "" msgid "Unknown signal %d" msgstr "" -#: getopt.c:668 +#: getopt.c:673 msgid "%s: illegal option -- %c\n" msgstr "" -#: getopt.c:671 +#: getopt.c:676 msgid "%s: invalid option -- %c\n" msgstr "" -#: getopt.c:596 +#: getopt.c:597 msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "" @@ -322,23 +322,23 @@ msgstr "" msgid "%s: option `%s' is ambiguous\n" msgstr "" -#: getopt.c:611 +#: getopt.c:614 msgid "%s: option `%s' requires an argument\n" msgstr "" -#: getopt.c:591 +#: getopt.c:592 msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "" -#: getopt.c:707 +#: getopt.c:712 msgid "%s: option requires an argument -- %c\n" msgstr "" -#: getopt.c:643 +#: getopt.c:647 msgid "%s: unrecognized option `%c%s'\n" msgstr "" -#: getopt.c:639 +#: getopt.c:643 msgid "%s: unrecognized option `--%s'\n" msgstr "" diff --git a/stdio-common/printf.h b/stdio-common/printf.h index 0f381c77f4..df7747ec38 100644 --- a/stdio-common/printf.h +++ b/stdio-common/printf.h @@ -58,7 +58,7 @@ struct printf_info typedef int printf_function __P ((FILE *__stream, __const struct printf_info *__info, - __const void **__const __args)); + __const void *__const *__args)); /* Type of a printf specifier-arginfo function. INFO gives information about the format specification. diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index e0fb742cfe..8fbb93f475 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -133,7 +133,7 @@ static char *group_number (char *buf, char *bufend, unsigned int intdig_no, int __printf_fp (FILE *fp, const struct printf_info *info, - const *const *args) + const void *const *args) { /* The floating-point value to output. */ union diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index f46c7f3528..d6b9f9a092 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -655,7 +655,7 @@ static int printf_unknown (s, info, args) FILE *s; const struct printf_info *info; - const void **const args; + const void *const *args; { int done = 0; char work[BUFSIZ]; diff --git a/sysdeps/i386/ldbl2mpn.c b/sysdeps/i386/ldbl2mpn.c new file mode 100644 index 0000000000..8db73cd27b --- /dev/null +++ b/sysdeps/i386/ldbl2mpn.c @@ -0,0 +1,101 @@ +/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include "gmp.h" +#include "gmp-impl.h" +#include "longlong.h" +#include "ieee754.h" +#include +#include + +/* Convert a `long double' in IEEE854 standard double-precision format to a + multi-precision integer representing the significand scaled up by its + number of bits (64 for long double) and an integral power of two + (MPN frexpl). */ + +mp_size_t +__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, + int *expt, int *is_neg, + long double value) +{ + union ieee854_long_double u; + u.d = value; + + *is_neg = u.ieee.negative; + *expt = (int) u.ieee.exponent - IEEE854_LONG_DOUBLE_BIAS; + +#if BITS_PER_MP_LIMB == 32 + res_ptr[0] = u.ieee.mantissa1; /* Low-order 32 bits of fraction. */ + res_ptr[1] = u.ieee.mantissa0; /* High-order 32 bits. */ + #define N 2 +#elif BITS_PER_MP_LIMB == 64 + /* Hopefully the compiler will combine the two bitfield extracts + and this composition into just the original quadword extract. */ + res_ptr[0] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; + #define N 1 +#else + #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" +#endif + + if (u.ieee.exponent == 0) + { + /* A biased exponent of zero is a special case. + Either it is a zero or it is a denormal number. */ + if (res_ptr[0] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=2. */ + /* It's zero. */ + *expt = 0; + else + { + /* It is a denormal number, meaning it has no implicit leading + one bit, and its exponent is in fact the format minimum. */ + int cnt; + + /* One problem with Intel's 80-bit format is that the explicit + leading one in the normalized representation has to be zero + for denormalized number. If it is one, the number is according + to Intel's specification an invalid number. We make the + representation unique by explicitly clearing this bit. */ + res_ptr[N - 1] &= ~(1L << ((LDBL_MANT_DIG - 1) % BITS_PER_MP_LIMB)); + + if (res_ptr[N - 1] != 0) + { + count_leading_zeros (cnt, res_ptr[N - 1]); + if (cnt != 0) + { +#if N == 2 + res_ptr[N - 1] = res_ptr[N - 1] << cnt + | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); + res_ptr[0] <<= cnt; +#else + res_ptr[N - 1] <<= cnt; +#endif + } + *expt = LDBL_MIN_EXP - 1 - cnt; + } + else + { + count_leading_zeros (cnt, res_ptr[0]); + res_ptr[N - 1] = res_ptr[0] << cnt; + res_ptr[0] = 0; + *expt = LDBL_MIN_EXP - 1 - BITS_PER_MP_LIMB - cnt; + } + } + } + + return N; +} diff --git a/sysdeps/ieee754/ldbl2mpn.c b/sysdeps/ieee754/ldbl2mpn.c index 8db73cd27b..b72af2ef47 100644 --- a/sysdeps/ieee754/ldbl2mpn.c +++ b/sysdeps/ieee754/ldbl2mpn.c @@ -65,13 +65,6 @@ __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, one bit, and its exponent is in fact the format minimum. */ int cnt; - /* One problem with Intel's 80-bit format is that the explicit - leading one in the normalized representation has to be zero - for denormalized number. If it is one, the number is according - to Intel's specification an invalid number. We make the - representation unique by explicitly clearing this bit. */ - res_ptr[N - 1] &= ~(1L << ((LDBL_MANT_DIG - 1) % BITS_PER_MP_LIMB)); - if (res_ptr[N - 1] != 0) { count_leading_zeros (cnt, res_ptr[N - 1]); diff --git a/version.c b/version.c index 4ef29e4906..3405ed5a68 100644 --- a/version.c +++ b/version.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,14 +16,14 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include #include -CONST char __libc_release[] = "alpha"; -CONST char __libc_version[] = "1.09.7"; +#include "version.h" +const char __libc_release[] = RELEASE; +const char __libc_version[] = VERSION; void -DEFUN_VOID(__libc_print_version) +__libc_print_version (void) { printf ("GNU C Library %s release version %s, by Roland McGrath et al.\n", __libc_release, __libc_version); @@ -31,7 +31,7 @@ DEFUN_VOID(__libc_print_version) printf ("Compiled by GNU CC version %s.\n", __VERSION__); #endif puts ("\ -Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.\n\ +Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.\n\ This is free software; see the source for copying conditions.\n\ There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\ PARTICULAR PURPOSE."); diff --git a/version.h b/version.h new file mode 100644 index 0000000000..bfe2e1a654 --- /dev/null +++ b/version.h @@ -0,0 +1,4 @@ +/* This file just defines the current version number of libc. */ + +#define RELEASE "alpha" +#define VERSION "1.09.7" -- cgit v1.2.3