(memset): Revert to previous version if unaligned writes are not
authordrepper <drepper>
Fri, 30 Apr 1999 17:40:14 +0000 (17:40 +0000)
committerdrepper <drepper>
Fri, 30 Apr 1999 17:40:14 +0000 (17:40 +0000)
available.

string/bits/string2.h

index 3f7784e..aedadf4 100644 (file)
@@ -93,7 +93,8 @@ __STRING2_COPY_TYPE (8);
 
 /* Set N bytes of S to C.  */
 #ifndef _HAVE_STRING_ARCH_memset
-# define memset(s, c, n) \
+# if _STRING_ARCH_unaligned
+#  define memset(s, c, n) \
   (__extension__ (__builtin_constant_p (n) && (n) <= 16                              \
                  ? ((n) == 1                                                 \
                     ? __memset_1 (s, c)                                      \
@@ -102,10 +103,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);                                                        \
      __uint32_t *__ts = (__uint32_t *) __s;                                  \
      __uint8_t __c = (__uint8_t) (c);                                        \
@@ -157,10 +158,17 @@ __STRING2_COPY_TYPE (8);
        }                                                                     \
                                                                              \
      __s; })
+# 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
+
 /* 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
+# if defined __GNUC__ && __GNUC__ >= 2
+#  define __bzero(s, n) __builtin_memset(s, '\0', n)
+# endif
 
 #endif