Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 14 Jan 2003 07:52:31 +0000 (07:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 14 Jan 2003 07:52:31 +0000 (07:52 +0000)
2003-01-13  Ulrich Drepper  <drepper@redhat.com>

* string/tester.c (test_strcpy): Use the previously #if 0'ed code
to test void* parameters.

* sysdeps/i386/i486/bits/string.h (__STRING_SMALLL_GET16): Cast
source pointer before dereferencing.
(__STRING_SMALLL_GET32): Likewise.
(__memset_gc): Add missing parenthesis around macro arguments.
Patch by Denis Zaitsev<zzz@cd-club.ru>.

* sysdeps/i386/i486/bits/string.h (__strspn_cg): Tell the compiler
that %eax is modified.  Reported by Denis Zaitsev<zzz@cd-club.ru>.

ChangeLog
string/tester.c
sysdeps/i386/i486/bits/string.h

index 8a1704a438edb585da358bc39c995bc48fafb843..49b5cac2db9dc81598f0b431efbe1ffb6679e986 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2003-01-13  Ulrich Drepper  <drepper@redhat.com>
+
+       * string/tester.c (test_strcpy): Use the previously #if 0'ed code
+       to test void* parameters.
+
+       * sysdeps/i386/i486/bits/string.h (__STRING_SMALLL_GET16): Cast
+       source pointer before dereferencing.
+       (__STRING_SMALLL_GET32): Likewise.
+       (__memset_gc): Add missing parenthesis around macro arguments.
+       Patch by Denis Zaitsev<zzz@cd-club.ru>.
+
+       * sysdeps/i386/i486/bits/string.h (__strspn_cg): Tell the compiler
+       that %eax is modified.  Reported by Denis Zaitsev<zzz@cd-club.ru>.
+
 2003-01-14  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/alpha/sysdep.h (INLINE_SYSCALL): Undefined before
index 0a69d2639ff70f9a4a77ceebf83c8bbfc75e1ebb..dab570500cc0ee05f70d818ea13d6ee12b5d0ea6 100644 (file)
@@ -174,13 +174,11 @@ test_strcpy (void)
   SIMPLE_COPY(strcpy, 15, "555555555555555", 56);
   SIMPLE_COPY(strcpy, 16, "6666666666666666", 57);
 
-#if 0
   /* Simple test using implicitly coerced `void *' arguments.  */
   const void *src = "frobozz";
   void *dst = one;
   check (strcpy (dst, src) == dst, 1);
   equal (dst, "frobozz", 2);
-#endif
 }
 
 static void
index 604d990bebd1b24833d8b270cb5bc79ade755390..54ff2e06e22b576826edad27d818f178f9e5fb6b 100644 (file)
 
 /* The macros are used in some of the optimized implementations below.  */
 #define __STRING_SMALL_GET16(src, idx) \
-  (((src)[idx + 1] << 8) | (src)[idx])
+  ((((__const unsigned char *) (src))[idx + 1] << 8)                         \
+   | ((__const unsigned char *) (src))[idx])
 #define __STRING_SMALL_GET32(src, idx) \
-  ((((src)[idx + 3] << 8 | (src)[idx + 2]) << 8                                      \
-    | (src)[idx + 1]) << 8 | (src)[idx])
+  (((((__const unsigned char *) (src))[idx + 3] << 8                         \
+     | ((__const unsigned char *) (src))[idx + 2]) << 8                              \
+    | ((__const unsigned char *) (src))[idx + 1]) << 8                       \
+   | ((__const unsigned char *) (src))[idx])
 
 
 /* Copy N bytes of SRC to DEST.  */
@@ -230,7 +233,7 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n)
        assignments using immediate operands.  But this uses to much          \
        memory (7, instead of 4 bytes).  So we force the value in a           \
        registers.  */                                                        \
-     if (n == 3 || n >= 5)                                                   \
+     if ((n) == 3 || (n) >= 5)                                               \
        __asm__ __volatile__ ("" : "=r" (__c) : "0" (__c));                   \
                                                                              \
      /* This `switch' statement will be removed at compile-time.  */         \
@@ -1650,14 +1653,15 @@ __strspn_cg (__const char *__s, __const char __accept[], size_t __accept_len)
      "lodsb\n\t"
      "testb    %%al,%%al\n\t"
      "je       2f\n\t"
-     "movl     %1,%%edi\n\t"
+     "movl     %5,%%edi\n\t"
      "movl     %6,%%ecx\n\t"
      "repne; scasb\n\t"
      "je       1b\n"
      "2:"
-     : "=S" (__res), "=&d" (__d0), "=&c" (__d1), "=&D" (__d2)
-     : "0" (__s), "1" (__accept), "g" (__accept_len),
-       /* Since we do not know how large the memory we access it, use a really large amount.  */
+     : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2)
+     : "0" (__s), "g" (__accept), "g" (__accept_len),
+       /* Since we do not know how large the memory we access it, use a
+         really large amount.  */
        "m" ( *(struct { char __x[0xfffffff]; } *)__s),
        "m" ( *(struct { __extension__ char __x[__accept_len]; } *)__accept)
      : "cc");