Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 30 Apr 1999 09:36:37 +0000 (09:36 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 30 Apr 1999 09:36:37 +0000 (09:36 +0000)
1999-04-30 09:02 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

* string/bits/string2.h (memset): Avoid arithmetic overflow at
compile time, which produces obnoxious warnings.  If GCCv2 is
in use, map __bzero to __builtin_memset to enable that
optimization.

ChangeLog
string/bits/string2.h

index 9626720316fd1a1ac4a99f3cde5231826ed23bbf..2a55750c77793c8508aa11722c38f627674e08ed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+1999-04-30 09:02 -0400  Zack Weinberg  <zack@rabi.columbia.edu>
+
+       * string/bits/string2.h (memset): Avoid arithmetic overflow at
+       compile time, which produces obnoxious warnings.  If GCCv2 is
+       in use, map __bzero to __builtin_memset to enable that
+       optimization.
+
 1999-04-29  Ulrich Drepper  <drepper@cygnus.com>
 
        * string/bits/string2.h: Add more memset optimizations.
index d9ed80b3b5a798a4bdae79e6b8b985673e057d93..391859a91b9e9780d7a727e560d7b091022f663b 100644 (file)
@@ -95,13 +95,15 @@ __STRING2_COPY_TYPE (8);
 #ifndef _HAVE_STRING_ARCH_memset
 # define memset(s, c, n) \
   (__extension__ (__builtin_constant_p (n) && (n) <= 16                              \
-                 ? (__builtin_constant_p (c)                                 \
-                    ? __memset_gc (s, (c) * 0x01010101, n)                   \
-                    : __memset_gc (s, (n) == 1 ? (c) : (c) * 0x01010101, n)) \
+                 ? ((n) == 1                                                 \
+                    ? __memset_1 (s, c)                                      \
+                    : __memset_gc (s, (((__uint8_t) c) * 0x1010101), n))     \
                  : (__builtin_constant_p (c) && (c) == '\0'                  \
                     ? ({ void *__s = (s); __bzero (__s, n); __s; })          \
                     : memset (s, c, n))))
 
+#define __memset_1(s, c) ({ void *__s = (s); *((__uint8_t *) __s) = c; __s; })
+
 #define __memset_gc(s, c, n) \
   ({ void *__s = (s);                                                        \
      __uint32_t *__ts = (__uint32_t *) __s;                                  \
@@ -153,6 +155,11 @@ __STRING2_COPY_TYPE (8);
        }                                                                     \
                                                                              \
      __s; })
+/* GCC optimizes memset(s, 0, n) but not bzero(s, n).  */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define __bzero(s, n) __builtin_memset(s, '\0', n)
+#endif
+
 #endif