This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi! sparc/sparc32/strchr.S and sparc/sparc64/strchr.S are optimized even for the case where the second argument is 0, so on sparc* we should get rid of the strchr(x, '\0') -> __rawmemchr(x, '\0') optimization (rawmemchr even in assembly does not special case this and has to compute c * 0x01010101 and has to do one additional xor inside of the loop. _HAVE_STRING_ARCH macros were used for 2 purposes: to find out whether bits/string2.h should define its own and to find out whether that particular function will be expanded inline. This patch separates them into _HAVE_STRING_ARCH macros (the first meaning) and _USE_STRING_ARCH (the latter) - eventhough we define _HAVE_STRING_ARCH_strchr on sparc, we don't want strncat to be optimized into two function calls instead of one. 2000-11-08 Jakub Jelinek <jakub@redhat.com> * string/bits/string2.h: Check if _USE_STRING_ARCH_ macros are defined, not _HAVE_STRING_ARCH_. * sysdeps/i386/bits/string.h (_USE_STRING_ARCH_memset, _USE_STRING_ARCH_strchr): Define. * sysdeps/i386/i486/bits/string.h (_USE_STRING_ARCH_memset, _USE_STRING_ARCH_strchr): Define. * sysdeps/sparc/bits/string.h: New. --- libc/string/bits/string2.h.jj Thu Nov 2 08:52:18 2000 +++ libc/string/bits/string2.h Wed Nov 8 12:35:35 2000 @@ -698,7 +698,7 @@ __stpcpy_small (char *__dest, /* Copy no more than N characters of SRC to DEST. */ #ifndef _HAVE_STRING_ARCH_strncpy -# if defined _HAVE_STRING_ARCH_memset && defined _HAVE_STRING_ARCH_mempcpy +# if defined _USE_STRING_ARCH_memset && defined _USE_STRING_ARCH_mempcpy # define strncpy(dest, src, n) \ (__extension__ ({ char *__dest = (dest); \ __builtin_constant_p (src) && __builtin_constant_p (n) \ @@ -721,7 +721,7 @@ __stpcpy_small (char *__dest, /* Append no more than N characters from SRC onto DEST. */ #ifndef _HAVE_STRING_ARCH_strncat -# ifdef _HAVE_STRING_ARCH_strchr +# ifdef _USE_STRING_ARCH_strchr # define strncat(dest, src, n) \ (__extension__ ({ char *__dest = (dest); \ __builtin_constant_p (src) && __builtin_constant_p (n) \ --- libc/sysdeps/i386/bits/string.h.jj Thu Jul 27 16:04:13 2000 +++ libc/sysdeps/i386/bits/string.h Wed Nov 8 12:37:04 2000 @@ -176,6 +176,7 @@ memmove (void *__dest, __const void *__s /* Set N bytes of S to C. */ #define _HAVE_STRING_ARCH_memset 1 +#define _USE_STRING_ARCH_memset 1 #define memset(s, c, n) \ (__extension__ (__builtin_constant_p (c) \ ? (__builtin_constant_p (n) \ @@ -513,6 +514,7 @@ strncmp (__const char *__s1, __const cha /* Find the first occurrence of C in S. */ #define _HAVE_STRING_ARCH_strchr 1 +#define _USE_STRING_ARCH_strchr 1 #define strchr(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? __strchr_c (s, ((c) & 0xff) << 8) \ --- libc/sysdeps/i386/i486/bits/string.h.jj Tue Nov 7 08:40:26 2000 +++ libc/sysdeps/i386/i486/bits/string.h Wed Nov 8 12:38:05 2000 @@ -192,6 +192,7 @@ memcmp (__const void *__s1, __const void /* Set N bytes of S to C. */ #define _HAVE_STRING_ARCH_memset 1 +#define _USE_STRING_ARCH_memset 1 #define memset(s, c, n) \ (__extension__ (__builtin_constant_p (n) && (n) <= 16 \ ? ((n) == 1 \ @@ -1188,6 +1189,7 @@ __strncmp_g (__const char *__s1, __const /* Find the first occurrence of C in S. */ #define _HAVE_STRING_ARCH_strchr 1 +#define _USE_STRING_ARCH_strchr 1 #define strchr(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? ((c) == '\0' \ --- libc/sysdeps/sparc/bits/string.h.jj Wed Nov 8 12:19:43 2000 +++ libc/sysdeps/sparc/bits/string.h Wed Nov 8 12:41:15 2000 @@ -0,0 +1,26 @@ +/* Optimized, inlined string functions. SPARC version. + Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _STRING_H +# error "Never use <bits/string.h> directly; include <string.h> instead." +#endif + +/* sparc32 and sparc64 strchr(x, '\0') perform better than + __rawmemchr(x, '\0'). */ +#define _HAVE_STRING_ARCH_strchr 1 Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |