1999-05-01  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/i486/bits/string.h: Don't use and define __memset_gg.
	Prevent warnings from multiplication with 0x01010101 by another cast.
This commit is contained in:
Ulrich Drepper 1999-05-01 00:16:16 +00:00
parent 23f5f62d4b
commit 0d3fe819f6
2 changed files with 24 additions and 37 deletions

View file

@ -1,3 +1,8 @@
1999-05-01 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/i486/bits/string.h: Don't use and define __memset_gg.
Prevent warnings from multiplication with 0x01010101 by another cast.
1999-04-30 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* string/bits/string2.h (memset): Revert to previous version if

View file

@ -190,18 +190,16 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n)
#define _HAVE_STRING_ARCH_memset 1
#define memset(s, c, n) \
(__extension__ (__builtin_constant_p (n) && (n) <= 16 \
? (__builtin_constant_p (c) \
? __memset_gc (s, ((unsigned char) (c)) * 0x01010101, n) \
: ((n) == 1 \
? __memset_c1 (s, c) \
: __memset_gc (s, c, n))) \
? ((n) == 1 \
? __memset_c1 (s, c) \
: __memset_gc (s, c, n)) \
: (__builtin_constant_p (c) \
? (__builtin_constant_p (n) \
? __memset_ccn (s, c, n) \
: __memset_gg (s, c, n)) \
: memset (s, c, n)) \
: (__builtin_constant_p (n) \
? __memset_gcn (s, c, n) \
: __memset_gg (s, c, n)))))
: memset (s, c, n)))))
#define __memset_c1(s, c) ({ void *__s = (s); \
*((unsigned char *) __s) = (unsigned char) (c); \
@ -210,7 +208,7 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n)
#define __memset_gc(s, c, n) \
({ void *__s = (s); \
unsigned int *__ts = (unsigned int *) __s; \
unsigned int __c = ((unsigned char) (c)) * 0x01010101; \
unsigned int __c = ((unsigned int) ((unsigned char) (c))) * 0x01010101; \
\
/* We apply a trick here. `gcc' would implement the following \
assignments using absolute operands. But this uses to much \
@ -268,15 +266,19 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n)
#define __memset_ccn(s, c, n) \
(((n) % 4 == 0) \
? __memset_ccn_by4 (s, ((unsigned char) (c)) * 0x01010101, n) \
? __memset_ccn_by4 (s, ((unsigned int) ((unsigned char) (c))) * 0x01010101,\
n) \
: (((n) % 2 == 0) \
? __memset_ccn_by2 (s, ((unsigned char) (c)) * 0x01010101, n) \
: __memset_gg (s, c, n)))
? __memset_ccn_by2 (s, \
((unsigned int) ((unsigned char) (c))) * 0x01010101,\
n) \
: memset (s, c, n)))
__STRING_INLINE void *__memset_ccn_by4 (void *__s, int __c, size_t __n);
__STRING_INLINE void *__memset_ccn_by4 (void *__s, unsigned int __c,
size_t __n);
__STRING_INLINE void *
__memset_ccn_by4 (void *__s, int __c, size_t __n)
__memset_ccn_by4 (void *__s, unsigned int __c, size_t __n)
{
register void *__tmp = __s;
register unsigned long int __d0;
@ -301,10 +303,11 @@ __memset_ccn_by4 (void *__s, int __c, size_t __n)
return __s;
}
__STRING_INLINE void *__memset_ccn_by2 (void *__s, int __c, size_t __n);
__STRING_INLINE void *__memset_ccn_by2 (void *__s, unsigned int __c,
size_t __n);
__STRING_INLINE void *
__memset_ccn_by2 (void *__s, int __c, size_t __n)
__memset_ccn_by2 (void *__s, unsigned int __c, size_t __n)
{
register unsigned long int __d0, __d1;
register void *__tmp = __s;
@ -335,7 +338,7 @@ __memset_ccn_by2 (void *__s, int __c, size_t __n)
? __memset_gcn_by4 (s, c, n) \
: (((n) % 2 == 0) \
? __memset_gcn_by2 (s, c, n) \
: __memset_gg (s, c, n)))
: memset (s, c, n)))
__STRING_INLINE void *__memset_gcn_by4 (void *__s, int __c, size_t __n);
@ -384,27 +387,6 @@ __memset_gcn_by2 (void *__s, int __c, size_t __n)
return __s;
}
__STRING_INLINE void *__memset_gg (void *__s, int __c, size_t __n);
__STRING_INLINE void *
__memset_gg (void *__s, int __c, size_t __n)
{
register unsigned long int __d0, __d1;
register void *__tmp = __s;
__asm__ __volatile__
("cld\n\t"
"movb %%al,%%ah\n\t"
"shrl $1,%%ecx\n\t"
"rep; stosw\n\t"
"jnc 1f\n\t"
"movb %%al,(%%edi)\n"
"1:"
: "=&c" (__d0), "=&D" (__d1)
: "0" (__n), "1" (__tmp), "a" (__c)
: "memory", "cc");
return __s;
}
/* Search N bytes of S for C. */
#define _HAVE_STRING_ARCH_memchr 1