summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog43
-rw-r--r--string/bits/string2.h23
-rw-r--r--sysdeps/alpha/alphaev67/stpcpy.S3
-rw-r--r--sysdeps/alpha/stpcpy.S3
-rw-r--r--sysdeps/generic/mempcpy.c3
-rw-r--r--sysdeps/generic/stpcpy.c5
-rw-r--r--sysdeps/i386/fpu/bits/mathinline.h74
-rw-r--r--sysdeps/i386/i586/mempcpy.S1
-rw-r--r--sysdeps/i386/i586/stpcpy.S1
-rw-r--r--sysdeps/i386/i686/mempcpy.S3
-rw-r--r--sysdeps/i386/stpcpy.S4
-rw-r--r--sysdeps/powerpc/powerpc32/stpcpy.S3
-rw-r--r--sysdeps/powerpc/powerpc64/stpcpy.S3
-rw-r--r--sysdeps/sparc/fpu/bits/mathinline.h6
-rw-r--r--sysdeps/sparc/sparc32/stpcpy.S3
-rw-r--r--sysdeps/sparc/sparc64/stpcpy.S3
-rw-r--r--sysdeps/x86_64/memcpy.S4
-rw-r--r--sysdeps/x86_64/mempcpy.S1
-rw-r--r--sysdeps/x86_64/stpcpy.S1
19 files changed, 147 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index ef195a8b29..78d1b53aa7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,46 @@
+2004-05-27  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Define using
+	__builtin_expm1l for GCC 3.5+.
+	(__expl): Define using __builtin_expl for GCC 3.4+.
+	(exp, expf, expl): Don't define for GCC 3.4+.
+	(tan, tanf, tanl): Don't define for GCC 3.5+.
+	(__atan2l): Define using __builtin_atan2l for GCC 3.4+.
+	(atan2, atan2f, atan2l): Don't define for GCC 3.4+ or !__FAST_MATH__.
+	(fmod, fmodf, fmodl): Don't define for GCC 3.5+ or !__FAST_MATH__.
+	(fabsf, fabsl): Only provide if __USE_MISC or __USE_ISOC99.
+	(sin, sinf, sinl, cos, cosf, cosl, log, logf, logl): Don't define
+	for GCC 3.4+.
+	(log10, log10f, log10l, asin, asinf, asinl, acos, acosf, acosl):
+	Don't define for GCC 3.5+.
+	(atan, atanf, atanl): Don't define for GCC 3.4+ or !__FAST_MATH__.
+	(log1p, log1pf, log1pl, logb, logbf, logbl, log2, log2f, log2l): Don't
+	define for GCC 3.5+.
+	(drem, dremf, dreml): Don't define for GCC 3.5+ or !__FAST_MATH__.
+	* sysdeps/sparc/fpu/bits/mathinline.h (sqrt, sqrtf, sqrtl): Don't
+	define for GCC 3.2+.
+
+2004-05-27  Jakub Jelinek  <jakub@redhat.com>
+
+	* string/bits/string2.h (__bzero): Define even for GCC 3.0+.
+	* sysdeps/alpha/stpcpy.S (stpcpy): Add libc_hidden_builtin_def.
+	* sysdeps/alpha/alphaev67/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/powerpc/powerpc32/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/powerpc/powerpc64/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/sparc/sparc32/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/sparc/sparc64/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/i386/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/i386/i586/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/generic/stpcpy.c (stpcpy): Likewise.
+	* sysdeps/x86_64/stpcpy.S (stpcpy): Likewise.
+	* sysdeps/i386/i586/memcpy.S (memcpy): Remove
+	libc_hidden_builtin_def if MEMPCPY_P.
+	* sysdeps/x86_64/memcpy.S (memcpy): Likewise.
+	* sysdeps/i386/i686/mempcpy.S (mempcpy): Add libc_hidden_builtin_def.
+	* sysdeps/i386/i586/mempcpy.S (mempcpy): Likewise.
+	* sysdeps/generic/mempcpy.c (mempcpy): Likewise.
+	* sysdeps/x86_64/mempcpy.S (mempcpy): Likewise.
+
 2004-05-26  Roland McGrath  <roland@frob.com>
 
 	* sysdeps/generic/bits/in.h
diff --git a/string/bits/string2.h b/string/bits/string2.h
index 665a711e7d..ba84da2346 100644
--- a/string/bits/string2.h
+++ b/string/bits/string2.h
@@ -94,9 +94,10 @@ __STRING2_COPY_TYPE (8);
   ((size_t)(const void *)((__x) + 1) - (size_t)(const void *)(__x) == 1)
 
 /* Set N bytes of S to C.  */
-#if !defined _HAVE_STRING_ARCH_memset && ! __GNUC_PREREQ (3, 0)
-# if _STRING_ARCH_unaligned
-#  define memset(s, c, n) \
+#if !defined _HAVE_STRING_ARCH_memset
+# if !__GNUC_PREREQ (3, 0)
+#  if _STRING_ARCH_unaligned
+#   define memset(s, c, n) \
   (__extension__ (__builtin_constant_p (n) && (n) <= 16			      \
 		  ? ((n) == 1						      \
 		     ? __memset_1 (s, c)				      \
@@ -105,10 +106,10 @@ __STRING2_COPY_TYPE (8);
 		     ? ({ void *__s = (s); __bzero (__s, n); __s; })	      \
 		     : memset (s, c, n))))
 
-#  define __memset_1(s, c) ({ void *__s = (s);				      \
+#   define __memset_1(s, c) ({ void *__s = (s);				      \
 			    *((__uint8_t *) __s) = (__uint8_t) c; __s; })
 
-#  define __memset_gc(s, c, n) \
+#   define __memset_gc(s, c, n) \
   ({ void *__s = (s);							      \
      union {								      \
        unsigned int __ui;						      \
@@ -177,15 +178,19 @@ __STRING2_COPY_TYPE (8);
        }								      \
 									      \
      __s; })
-# else
-#  define memset(s, c, n) \
+#  else
+#   define memset(s, c, n) \
   (__extension__ (__builtin_constant_p (c) && (c) == '\0'		      \
 		  ? ({ void *__s = (s); __bzero (__s, n); __s; })	      \
 		  : memset (s, c, n)))
+#  endif
 # endif
 
-/* GCC optimizes memset(s, 0, n) but not bzero(s, n).
-   The optimization is broken before EGCS 1.1.  */
+/* GCC < 3.0 optimizes memset(s, 0, n) but not bzero(s, n).
+   The optimization is broken before EGCS 1.1.
+   GCC 3.0+ has __builtin_bzero as well, but at least till GCC 3.4
+   if it decides to call the library function, it calls memset
+   and not bzero.  */
 # if __GNUC_PREREQ (2, 91)
 #  define __bzero(s, n) __builtin_memset (s, '\0', n)
 # endif
diff --git a/sysdeps/alpha/alphaev67/stpcpy.S b/sysdeps/alpha/alphaev67/stpcpy.S
index d09babc8f5..b5da4e05d3 100644
--- a/sysdeps/alpha/alphaev67/stpcpy.S
+++ b/sysdeps/alpha/alphaev67/stpcpy.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@redhat.com>.
 
@@ -51,3 +51,4 @@ ENTRY(__stpcpy)
 
 weak_alias (__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/alpha/stpcpy.S b/sysdeps/alpha/stpcpy.S
index a37a308bb3..b73e85f217 100644
--- a/sysdeps/alpha/stpcpy.S
+++ b/sysdeps/alpha/stpcpy.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
@@ -53,3 +53,4 @@ ENTRY(__stpcpy)
 
 weak_alias (__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/generic/mempcpy.c b/sysdeps/generic/mempcpy.c
index 5fa58b4fd2..a72617e86f 100644
--- a/sysdeps/generic/mempcpy.c
+++ b/sysdeps/generic/mempcpy.c
@@ -1,7 +1,7 @@
 /* Copy memory to memory until the specified number of bytes
    has been copied, return pointer to following byte.
    Overlap is NOT handled correctly.
-   Copyright (C) 1991, 1997, 1998, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1997, 1998, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Torbjorn Granlund (tege@sics.se).
 
@@ -66,3 +66,4 @@ __mempcpy (dstpp, srcpp, len)
 }
 libc_hidden_def (__mempcpy)
 weak_alias (__mempcpy, mempcpy)
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/generic/stpcpy.c b/sysdeps/generic/stpcpy.c
index 92d3b4d25b..6e42911fde 100644
--- a/sysdeps/generic/stpcpy.c
+++ b/sysdeps/generic/stpcpy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995, 1997, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995, 1997, 2002, 2004 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
@@ -50,3 +50,6 @@ libc_hidden_def (__stpcpy)
 #ifdef weak_alias
 weak_alias (__stpcpy, stpcpy)
 #endif
+#ifdef libc_hidden_builtin_def
+libc_hidden_builtin_def (stpcpy)
+#endif
diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h
index 85d48a5c90..4256777db3 100644
--- a/sysdeps/i386/fpu/bits/mathinline.h
+++ b/sysdeps/i386/fpu/bits/mathinline.h
@@ -1,5 +1,6 @@
 /* Inline math functions for i387.
-   Copyright (C) 1995,96,97,98,99,2000,2001,2003 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by John C. Bowman <bowman@math.ualberta.ca>, 1995.
 
@@ -216,7 +217,7 @@ __signbitl (long double __x) __THROW
   __inline_mathcode_ (float, __CONCAT(func,f), arg, code)		      \
   __inline_mathcode_ (long double, __CONCAT(func,l), arg, code)
 # define __inline_mathcodeNP(func, arg, code) \
-  __inline_mathcodeNP_ (double, func, arg, code)				      \
+  __inline_mathcodeNP_ (double, func, arg, code)			      \
   __inline_mathcodeNP_ (float, __CONCAT(func,f), arg, code)		      \
   __inline_mathcodeNP_ (long double, __CONCAT(func,l), arg, code)
 # define __inline_mathcode2(func, arg1, arg2, code) \
@@ -224,7 +225,7 @@ __signbitl (long double __x) __THROW
   __inline_mathcode2_ (float, __CONCAT(func,f), arg1, arg2, code)	      \
   __inline_mathcode2_ (long double, __CONCAT(func,l), arg1, arg2, code)
 # define __inline_mathcodeNP2(func, arg1, arg2, code) \
-  __inline_mathcodeNP2_ (double, func, arg1, arg2, code)			      \
+  __inline_mathcodeNP2_ (double, func, arg1, arg2, code)		      \
   __inline_mathcodeNP2_ (float, __CONCAT(func,f), arg1, arg2, code)	      \
   __inline_mathcodeNP2_ (long double, __CONCAT(func,l), arg1, arg2, code)
 # define __inline_mathcode3(func, arg1, arg2, arg3, code) \
@@ -233,7 +234,7 @@ __signbitl (long double __x) __THROW
   __inline_mathcode3_ (long double, __CONCAT(func,l), arg1, arg2, arg3, code)
 # define __inline_mathcodeNP3(func, arg1, arg2, arg3, code) \
   __inline_mathcodeNP3_ (double, func, arg1, arg2, arg3, code)		      \
-  __inline_mathcodeNP3_ (float, __CONCAT(func,f), arg1, arg2, arg3, code)	      \
+  __inline_mathcodeNP3_ (float, __CONCAT(func,f), arg1, arg2, arg3, code)     \
   __inline_mathcodeNP3_ (long double, __CONCAT(func,l), arg1, arg2, arg3, code)
 #else
 # define __inline_mathcode(func, arg, code) \
@@ -362,7 +363,13 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx) __THROW
 /* Optimized inline implementation, sometimes with reduced precision
    and/or argument range.  */
 
-# define __expm1_code \
+# if __GNUC_PREREQ (3, 5)
+#  define __expm1_code \
+  register long double __temp;						      \
+  __temp = __builtin_expm1l (__x);					      \
+  return __temp ? __temp : __x
+# else
+#  define __expm1_code \
   register long double __value;						      \
   register long double __exponent;					      \
   register long double __temp;						      \
@@ -382,10 +389,13 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx) __THROW
   __temp -= 1.0;							      \
   __temp += __value;							      \
   return __temp ? __temp : __x
+# endif
 __inline_mathcodeNP_ (long double, __expm1l, __x, __expm1_code)
 
-
-# define __exp_code \
+# if __GNUC_PREREQ (3, 4)
+__inline_mathcodeNP_ (long double, __expl, __x, return __builtin_expl (__x))
+# else
+#  define __exp_code \
   register long double __value;						      \
   register long double __exponent;					      \
   __asm __volatile__							      \
@@ -404,8 +414,10 @@ __inline_mathcodeNP_ (long double, __expm1l, __x, __expm1_code)
   return __value
 __inline_mathcodeNP (exp, __x, __exp_code)
 __inline_mathcodeNP_ (long double, __expl, __x, __exp_code)
+# endif
 
 
+# if !__GNUC_PREREQ (3, 5)
 __inline_mathcodeNP (tan, __x, \
   register long double __value;						      \
   register long double __value2 __attribute__ ((__unused__));		      \
@@ -413,19 +425,28 @@ __inline_mathcodeNP (tan, __x, \
     ("fptan"								      \
      : "=t" (__value2), "=u" (__value) : "0" (__x));			      \
   return __value)
+# endif
 #endif /* __FAST_MATH__ */
 
 
-#define __atan2_code \
+#if __GNUC_PREREQ (3, 4)
+__inline_mathcodeNP2_ (long double, __atan2l, __y, __x,
+		       return __builtin_atan2l (__y, __x))
+#else
+# define __atan2_code \
   register long double __value;						      \
   __asm __volatile__							      \
     ("fpatan"								      \
      : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)");		      \
   return __value
+# ifdef __FAST_MATH__
 __inline_mathcodeNP2 (atan2, __y, __x, __atan2_code)
+# endif
 __inline_mathcodeNP2_ (long double, __atan2l, __y, __x, __atan2_code)
+#endif
 
 
+#if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
 __inline_mathcodeNP2 (fmod, __x, __y, \
   register long double __value;						      \
   __asm __volatile__							      \
@@ -435,6 +456,7 @@ __inline_mathcodeNP2 (fmod, __x, __y, \
      "jp	1b"							      \
      : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc");		      \
   return __value)
+#endif
 
 
 #ifdef __FAST_MATH__
@@ -449,8 +471,10 @@ __inline_mathopNP_ (long double, __sqrtl, "fsqrt")
 
 #if __GNUC_PREREQ (2, 8)
 __inline_mathcodeNP_ (double, fabs, __x, return __builtin_fabs (__x))
+# if defined __USE_MISC || defined __USE_ISOC99
 __inline_mathcodeNP_ (float, fabsf, __x, return __builtin_fabsf (__x))
 __inline_mathcodeNP_ (long double, fabsl, __x, return __builtin_fabsl (__x))
+# endif
 __inline_mathcodeNP_ (long double, __fabsl, __x, return __builtin_fabsl (__x))
 #else
 __inline_mathop (fabs, "fabs")
@@ -458,19 +482,26 @@ __inline_mathop_ (long double, __fabsl, "fabs")
 #endif
 
 #ifdef __FAST_MATH__
+# if !__GNUC_PREREQ (3, 4)
 /* The argument range of this inline version is reduced.  */
 __inline_mathopNP (sin, "fsin")
 /* The argument range of this inline version is reduced.  */
 __inline_mathopNP (cos, "fcos")
 
 __inline_mathop_declNP (log, "fldln2; fxch; fyl2x", "0" (__x) : "st(1)")
+# endif
+
+# if !__GNUC_PREREQ (3, 5)
 __inline_mathop_declNP (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)")
 
 __inline_mathcodeNP (asin, __x, return __atan2l (__x, __libc_sqrtl (1.0 - __x * __x)))
 __inline_mathcodeNP (acos, __x, return __atan2l (__libc_sqrtl (1.0 - __x * __x), __x))
-#endif /* __FAST_MATH__ */
+# endif
 
+# if !__GNUC_PREREQ (3, 4)
 __inline_mathop_declNP (atan, "fld1; fpatan", "0" (__x) : "st(1)")
+# endif
+#endif /* __FAST_MATH__ */
 
 __inline_mathcode_ (long double, __sgn1l, __x, \
   __extension__ union { long double __xld; unsigned int __xi[3]; } __n =      \
@@ -544,6 +575,7 @@ __inline_mathcodeNP (expm1, __x, __expm1_code)
    here.  */
 #  define __M_SQRT2	1.41421356237309504880L	/* sqrt(2) */
 
+#  if !__GNUC_PREREQ (3, 5)
 __inline_mathcodeNP (log1p, __x, \
   register long double __value;						      \
   if (__fabsl (__x) >= 1.0 - 0.5 * __M_SQRT2)				      \
@@ -555,6 +587,7 @@ __inline_mathcodeNP (log1p, __x, \
        "fyl2xp1"							      \
        : "=t" (__value) : "0" (__x) : "st(1)");				      \
   return __value)
+#  endif
 
 
 /* The argument range of the inline version of asinhl is slightly reduced.  */
@@ -574,6 +607,7 @@ __inline_mathcodeNP (atanh, __x, \
 __inline_mathcodeNP2 (hypot, __x, __y,
 		      return __libc_sqrtl (__x * __x + __y * __y))
 
+#  if !__GNUC_PREREQ (3, 5)
 __inline_mathcodeNP(logb, __x, \
   register long double __value;						      \
   register long double __junk;						      \
@@ -581,13 +615,17 @@ __inline_mathcodeNP(logb, __x, \
     ("fxtract\n\t"							      \
      : "=t" (__junk), "=u" (__value) : "0" (__x));			      \
   return __value)
+#  endif
 
 # endif
 #endif
 
 #ifdef __USE_ISOC99
-#ifdef __FAST_MATH__
+# ifdef __FAST_MATH__
+
+#  if !__GNUC_PREREQ (3, 5)
 __inline_mathop_declNP (log2, "fld1; fxch; fyl2x", "0" (__x) : "st(1)")
+#  endif
 
 __MATH_INLINE float
 ldexpf (float __x, int __y) __THROW
@@ -604,9 +642,9 @@ ldexpl (long double __x, int __y) __THROW
 __inline_mathcodeNP3 (fma, __x, __y, __z, return (__x * __y) + __z)
 
 __inline_mathopNP (rint, "frndint")
-#endif /* __FAST_MATH__ */
+# endif /* __FAST_MATH__ */
 
-#define __lrint_code \
+# define __lrint_code \
   long int __lrintres;							      \
   __asm__ __volatile__							      \
     ("fistpl %0"							      \
@@ -627,9 +665,9 @@ lrintl (long double __x) __THROW
 {
   __lrint_code;
 }
-#undef __lrint_code
+# undef __lrint_code
 
-#define __llrint_code \
+# define __llrint_code \
   long long int __llrintres;						      \
   __asm__ __volatile__							      \
     ("fistpll %0"							      \
@@ -650,13 +688,14 @@ llrintl (long double __x) __THROW
 {
   __llrint_code;
 }
-#undef __llrint_code
+# undef __llrint_code
 
 #endif
 
 
 #ifdef __USE_MISC
 
+# if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
 __inline_mathcodeNP2 (drem, __x, __y, \
   register double __value;						      \
   register int __clobbered;						      \
@@ -667,6 +706,7 @@ __inline_mathcodeNP2 (drem, __x, __y, \
      "jp	1b"							      \
      : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc");    \
   return __value)
+# endif
 
 
 /* This function is used in the `isfinite' macro.  */
@@ -679,7 +719,7 @@ __finite (double __x) __THROW
 }
 
 /* Miscellaneous functions */
-#ifdef __FAST_MATH__
+# ifdef __FAST_MATH__
 __inline_mathcode (__coshm1, __x, \
   register long double __exm1 = __expm1l (__fabsl (__x));		      \
   return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1)
@@ -687,7 +727,7 @@ __inline_mathcode (__coshm1, __x, \
 __inline_mathcode (__acosh1p, __x, \
   return log1pl (__x + __libc_sqrtl (__x) * __libc_sqrtl (__x + 2.0)))
 
-#endif /* __FAST_MATH__ */
+# endif /* __FAST_MATH__ */
 #endif /* __USE_MISC  */
 
 /* Undefine some of the large macros which are not used anymore.  */
diff --git a/sysdeps/i386/i586/mempcpy.S b/sysdeps/i386/i586/mempcpy.S
index dc8ab03356..0c9520e3b4 100644
--- a/sysdeps/i386/i586/mempcpy.S
+++ b/sysdeps/i386/i586/mempcpy.S
@@ -3,3 +3,4 @@
 
 libc_hidden_def (BP_SYM (__mempcpy))
 weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy))
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/i386/i586/stpcpy.S b/sysdeps/i386/i586/stpcpy.S
index 5c19237f63..8691efd01c 100644
--- a/sysdeps/i386/i586/stpcpy.S
+++ b/sysdeps/i386/i586/stpcpy.S
@@ -5,3 +5,4 @@
 
 weak_alias (__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S
index b3d8cf9997..3ea89d4a17 100644
--- a/sysdeps/i386/i686/mempcpy.S
+++ b/sysdeps/i386/i686/mempcpy.S
@@ -1,7 +1,7 @@
 /* Copy memory block and return pointer to following byte.
    For Intel 80x86, x>=6.
    This file is part of the GNU C Library.
-   Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -59,3 +59,4 @@ ENTRY (BP_SYM (__mempcpy))
 END (BP_SYM (__mempcpy))
 libc_hidden_def (BP_SYM (__mempcpy))
 weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy))
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/i386/stpcpy.S b/sysdeps/i386/stpcpy.S
index 7975a87964..50f9c5ea5f 100644
--- a/sysdeps/i386/stpcpy.S
+++ b/sysdeps/i386/stpcpy.S
@@ -1,6 +1,7 @@
 /* Copy SRC to DEST returning the address of the terminating '\0' in DEST.
    For Intel 80x86, x>=3.
-   Copyright (C) 1994,1995,1996,1997,2000,2002 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1996, 1997, 2000, 2002, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper (drepper@gnu.ai.mit.edu).
 
@@ -94,3 +95,4 @@ END (BP_SYM (__stpcpy))
 
 weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy))
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/powerpc/powerpc32/stpcpy.S b/sysdeps/powerpc/powerpc32/stpcpy.S
index 9640a5d831..819fcdb7e6 100644
--- a/sysdeps/powerpc/powerpc32/stpcpy.S
+++ b/sysdeps/powerpc/powerpc32/stpcpy.S
@@ -1,5 +1,5 @@
 /* Optimized stpcpy implementation for PowerPC.
-   Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 2002, 2004 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
@@ -119,3 +119,4 @@ END (BP_SYM (__stpcpy))
 
 weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy))
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/powerpc/powerpc64/stpcpy.S b/sysdeps/powerpc/powerpc64/stpcpy.S
index c842111ca5..deac0ea229 100644
--- a/sysdeps/powerpc/powerpc64/stpcpy.S
+++ b/sysdeps/powerpc/powerpc64/stpcpy.S
@@ -1,5 +1,5 @@
 /* Optimized stpcpy implementation for PowerPC64.
-   Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 2002, 2004 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
@@ -119,3 +119,4 @@ END (BP_SYM (__stpcpy))
 
 weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy))
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/sparc/fpu/bits/mathinline.h b/sysdeps/sparc/fpu/bits/mathinline.h
index fcbcf41f67..8811314278 100644
--- a/sysdeps/sparc/fpu/bits/mathinline.h
+++ b/sysdeps/sparc/fpu/bits/mathinline.h
@@ -26,7 +26,7 @@
 
 #ifdef __GNUC__
 
-#if defined __USE_ISOC99 && !__GNUC_PREREQ(3,0)
+#if defined __USE_ISOC99 && !__GNUC_PREREQ (3, 0)
 # undef isgreater
 # undef isgreaterequal
 # undef isless
@@ -153,7 +153,7 @@ __signbitl (long double __x) __THROW
 
 #  endif /* __USE_ISOC99 */
 
-#  ifndef __NO_MATH_INLINES
+#  if !defined __NO_MATH_INLINES && !__GNUC_PREREQ (3, 2)
 
 __MATH_INLINE double
 sqrt (double __x) __THROW
@@ -182,7 +182,7 @@ sqrtl (long double __x) __THROW
 }
 #   endif /* sparc64 */
 
-#  endif /* !__NO_MATH_INLINES */
+#  endif /* !__NO_MATH_INLINES && !GCC 3.2+ */
 
 /* This code is used internally in the GNU libc.  */
 #  ifdef __LIBC_INTERNAL_MATH_INLINES
diff --git a/sysdeps/sparc/sparc32/stpcpy.S b/sysdeps/sparc/sparc32/stpcpy.S
index f32faac9c1..937fed35f8 100644
--- a/sysdeps/sparc/sparc32/stpcpy.S
+++ b/sysdeps/sparc/sparc32/stpcpy.S
@@ -1,6 +1,6 @@
 /* Copy SRC to DEST returning the address of the terminating '\0' in DEST.
    For SPARC v7.
-   Copyright (C) 1996, 1999, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1999, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jj@ultra.linux.cz>.
 
@@ -162,3 +162,4 @@ END(__stpcpy)
 
 weak_alias(__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/sparc/sparc64/stpcpy.S b/sysdeps/sparc/sparc64/stpcpy.S
index bec0963ee0..f4366e9fc5 100644
--- a/sysdeps/sparc/sparc64/stpcpy.S
+++ b/sysdeps/sparc/sparc64/stpcpy.S
@@ -1,6 +1,6 @@
 /* Copy SRC to DEST returning the address of the terminating '\0' in DEST.
    For SPARC v9.
-   Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and
                   Jakub Jelinek <jj@ultra.linux.cz>.
@@ -272,3 +272,4 @@ END(__stpcpy)
 
 weak_alias (__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/x86_64/memcpy.S b/sysdeps/x86_64/memcpy.S
index d9fde6e459..de47688241 100644
--- a/sysdeps/x86_64/memcpy.S
+++ b/sysdeps/x86_64/memcpy.S
@@ -1,5 +1,5 @@
 /* Highly optimized version for x86-64.
-   Copyright (C) 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Based on i586 version contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -90,4 +90,6 @@ ENTRY (BP_SYM (memcpy))
 	ret
 
 END (BP_SYM (memcpy))
+#if !MEMPCPY_P
 libc_hidden_builtin_def (memcpy)
+#endif
diff --git a/sysdeps/x86_64/mempcpy.S b/sysdeps/x86_64/mempcpy.S
index 38fdd0519e..03aa743fba 100644
--- a/sysdeps/x86_64/mempcpy.S
+++ b/sysdeps/x86_64/mempcpy.S
@@ -3,3 +3,4 @@
 
 libc_hidden_def (BP_SYM (__mempcpy))
 weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy))
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/x86_64/stpcpy.S b/sysdeps/x86_64/stpcpy.S
index b9bbcd9cf6..ec23de1416 100644
--- a/sysdeps/x86_64/stpcpy.S
+++ b/sysdeps/x86_64/stpcpy.S
@@ -5,3 +5,4 @@
 
 weak_alias (__stpcpy, stpcpy)
 libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)