From ca8d5a5f3dea0f541fc3c388b6cb01a2d27e9924 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 2 Aug 2000 01:19:29 +0000 Subject: Update. * sysdeps/ia64/bits/byteswap.h: New file. Patch by Dan Pop . * misc/sys/cdefs.h: Define __attribute_format_arg__. * intl/libintl.h: Use it here instead of using __attribute__ directly. 2000-07-13 H.J. Lu * posix/regex.c (re_max_failures): Set to 4000. 2000-08-01 Ulrich Drepper --- ChangeLog | 12 ++++++ intl/libintl.h | 23 ++++++----- math/tgmath.h | 12 +++--- misc/sys/cdefs.h | 9 +++++ posix/regex.c | 2 +- sysdeps/ia64/bits/byteswap.h | 95 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 137 insertions(+), 16 deletions(-) create mode 100644 sysdeps/ia64/bits/byteswap.h diff --git a/ChangeLog b/ChangeLog index 0108ce5edc..95dc8191bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2000-08-01 Ulrich Drepper + + * sysdeps/ia64/bits/byteswap.h: New file. + Patch by Dan Pop . + + * misc/sys/cdefs.h: Define __attribute_format_arg__. + * intl/libintl.h: Use it here instead of using __attribute__ directly. + +2000-07-13 H.J. Lu + + * posix/regex.c (re_max_failures): Set to 4000. + 2000-08-01 Ulrich Drepper * gnulib/Makefile (tests): Add tst-gcc. diff --git a/intl/libintl.h b/intl/libintl.h index 967a8cafcd..70a4706021 100644 --- a/intl/libintl.h +++ b/intl/libintl.h @@ -31,41 +31,44 @@ __BEGIN_DECLS /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ -extern char *gettext (__const char *__msgid) __THROW; +extern char *gettext (__const char *__msgid) + __THROW __attribute_format_arg__ (1); /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ -extern char *dgettext (__const char *__domainname, - __const char *__msgid) __THROW; -extern char *__dgettext (__const char *__domainname, - __const char *__msgid) __THROW; +extern char *dgettext (__const char *__domainname, __const char *__msgid) + __THROW __attribute_format_arg__ (2); +extern char *__dgettext (__const char *__domainname, __const char *__msgid) + __THROW __attribute_format_arg__ (2); /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ extern char *dcgettext (__const char *__domainname, - __const char *__msgid, int __category) __THROW; + __const char *__msgid, int __category) + __THROW __attribute_format_arg__ (2); extern char *__dcgettext (__const char *__domainname, - __const char *__msgid, int __category) __THROW; + __const char *__msgid, int __category) + __THROW __attribute_format_arg__ (2); /* Similar to `gettext' but select the plural form corresponding to the number N. */ extern char *ngettext (__const char *__msgid1, __const char *__msgid2, unsigned long int __n) - __THROW __attribute__ ((__format_arg__ (1))); + __THROW __attribute_format_arg__ (1); /* Similar to `dgettext' but select the plural form corresponding to the number N. */ extern char *dngettext (__const char *__domainname, __const char *__msgid1, __const char *__msgid2, unsigned long int __n) - __THROW __attribute__ ((__format_arg__ (2))); + __THROW __attribute_format_arg__ (2); /* Similar to `dcgettext' but select the plural form corresponding to the number N. */ extern char *dcngettext (__const char *__domainname, __const char *__msgid1, __const char *__msgid2, unsigned long int __n, int __category) - __THROW __attribute__ ((__format_arg__ (2))); + __THROW __attribute_format_arg__ (2); /* Set the current default message catalog to DOMAINNAME. diff --git a/math/tgmath.h b/math/tgmath.h index ccc304ca62..aaf0f201c7 100644 --- a/math/tgmath.h +++ b/math/tgmath.h @@ -128,7 +128,7 @@ # define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \ (__extension__ ({ __tgmath_real_type (Val) __tgmres; \ if (sizeof (__real__ (Val)) > sizeof (double) \ - && __builtin_classify_type (Val) == 8) \ + && __builtin_classify_type (__real__ (Val)) == 8) \ { \ if (sizeof (__real__ (Val)) == sizeof (Val)) \ __tgmres = Fct##l (Val); \ @@ -136,7 +136,8 @@ __tgmres = Cfct##l (Val); \ } \ else if (sizeof (__real__ (Val)) == sizeof (double) \ - || __builtin_classify_type (Val) != 8) \ + || (__builtin_classify_type (__real__ (Val)) \ + != 8) \ { \ if (sizeof (__real__ (Val)) == sizeof (Val)) \ __tgmres = Fct (Val); \ @@ -157,7 +158,7 @@ # define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \ (__extension__ ({ __tgmath_real_type (Val) __tgmres; \ if (sizeof (Val) == sizeof (__complex__ double) \ - || __builtin_classify_type (Val) != 8) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ __tgmres = Fct (Val); \ else if (sizeof (Val) == sizeof (__complex__ float)) \ __tgmres = Fct##f (Val); \ @@ -171,7 +172,7 @@ (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \ if ((sizeof (__real__ (Val1)) > sizeof (double) \ || sizeof (__real__ (Val2)) > sizeof (double)) \ - && __builtin_classify_type (Val) == 8) \ + && __builtin_classify_type (__real__ (Val)) == 8) \ { \ if (sizeof (__real__ (Val1)) == sizeof (Val1) \ && sizeof (__real__ (Val2)) == sizeof (Val2)) \ @@ -181,7 +182,8 @@ } \ else if (sizeof (__real__ (Val1)) == sizeof (double) \ || sizeof (__real__ (Val2)) == sizeof(double) \ - || __builtin_classify_type (Val) != 8) \ + || (__builtin_classify_type (__real__ (Val)) \ + != 8) \ { \ if (sizeof (__real__ (Val1)) == sizeof (Val1) \ && sizeof (__real__ (Val2)) == sizeof (Val2)) \ diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index dd06a6653a..9960239688 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -141,6 +141,15 @@ # define __attribute_pure__ /* Ignore */ #endif +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,8) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + /* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before diff --git a/posix/regex.c b/posix/regex.c index 2c967297a5..8c50446ba0 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -1234,7 +1234,7 @@ typedef struct # if defined MATCH_MAY_ALLOCATE /* 4400 was enough to cause a crash on Alpha OSF/1, whose default stack limit is 2mb. */ -int re_max_failures = 20000; +int re_max_failures = 4000; # else int re_max_failures = 2000; # endif diff --git a/sysdeps/ia64/bits/byteswap.h b/sysdeps/ia64/bits/byteswap.h new file mode 100644 index 0000000000..afcb1747e3 --- /dev/null +++ b/sysdeps/ia64/bits/byteswap.h @@ -0,0 +1,95 @@ +/* Macros to swap the order of bytes in integer values. + Copyright (C) 1997, 1998, 2000 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use directly; include instead." +#endif + +/* Swap bytes in 16 bit value. */ +#define __bswap_constant_16(x) \ + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) + +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_16(x) \ + (__extension__ \ + ({ register unsigned short int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_16 (x); \ + else \ + __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ + "mux1 %0 = %2, @rev ;;" \ + : "=r" (__v) \ + : "r" ((unsigned short int) (x)), "0" (__v));\ + __v; })) +#else +/* This is better than nothing. */ +# define __bswap_16(x) __bswap_constant_16 (x) +#endif + + +/* Swap bytes in 32 bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +#if defined __GNUC__ && __GNUC__ >= 2 +/* To swap the bytes in a word the i486 processors and up provide the + `bswap' opcode. On i386 we have to use three instructions. */ +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_32 (x); \ + else \ + __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ + "mux1 %0 = %2, @rev ;;" \ + : "=r" (__v) \ + : "r" ((unsigned int) (x)), "0" (__v)); \ + __v; })) +#else +# define __bswap_32(x) __bswap_constant_32 (x) +#endif + + +/* Swap bytes in 64 bit value. */ +#define __bswap_constant_64(x) \ + ((((x) & 0xff00000000000000ul) >> 56) \ + | (((x) & 0x00ff000000000000ul) >> 40) \ + | (((x) & 0x0000ff0000000000ul) >> 24) \ + | (((x) & 0x000000ff00000000ul) >> 8) \ + | (((x) & 0x00000000ff000000ul) << 8) \ + | (((x) & 0x0000000000ff0000ul) << 24) \ + | (((x) & 0x000000000000ff00ul) << 40) \ + | (((x) & 0x00000000000000fful) << 56)) + +#if defined __GNUC__ && __GNUC__ >= 2 +# define __bswap_64(x) \ + (__extension__ \ + ({ register unsigned long int __v; \ + if (__builtin_constant_p (x)) \ + __v = __bswap_constant_64 (x); \ + else \ + __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ + : "=r" (__v) \ + : "r" ((unsigned long int) (x))); \ + __v; })) + +#else +# define __bswap_64(x) __bswap_constant_64 (x) +#endif -- cgit v1.2.3