summary refs log tree commit diff
path: root/sysdeps/i386/i486/bits/string.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-14 07:52:31 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-14 07:52:31 +0000
commit642eb2a2ed513ab3ad32c9b631cbc65543a44f57 (patch)
tree39ecee47faa4012e03c3c0d3d58f2543963ec076 /sysdeps/i386/i486/bits/string.h
parent47805511c441858d7d2c898763d844c5227905b8 (diff)
downloadglibc-642eb2a2ed513ab3ad32c9b631cbc65543a44f57.tar.gz
glibc-642eb2a2ed513ab3ad32c9b631cbc65543a44f57.tar.xz
glibc-642eb2a2ed513ab3ad32c9b631cbc65543a44f57.zip
Update.
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>.
Diffstat (limited to 'sysdeps/i386/i486/bits/string.h')
-rw-r--r--sysdeps/i386/i486/bits/string.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h
index 604d990beb..54ff2e06e2 100644
--- a/sysdeps/i386/i486/bits/string.h
+++ b/sysdeps/i386/i486/bits/string.h
@@ -41,10 +41,13 @@
 
 /* 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");