mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 11:20:07 +00:00
Remove the str(n)cmp inlines from string/bits/string2.h. The strncmp
optimization seems unlikely to ever be useful, but if it occurs in real code it should be added to GCC. Expanding strcmp of small strings does appear useful (benchmarking shows it is 2-3x faster), so this would be useful to implement in GCC (PR 78809). * string/bits/string2.h (strcmp): Remove define. (__strcmp_cg): Likewise. (strncmp): Likewise.
This commit is contained in:
parent
3172b27b2b
commit
f7db120f67
@ -1,3 +1,9 @@
|
|||||||
|
2017-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
|
* string/bits/string2.h (strcmp): Remove define.
|
||||||
|
(__strcmp_cg): Likewise.
|
||||||
|
(strncmp): Likewise.
|
||||||
|
|
||||||
2017-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
2017-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
* include/string.h: Add __cplusplus check.
|
* include/string.h: Add __cplusplus check.
|
||||||
|
@ -92,64 +92,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Compare characters of S1 and S2. */
|
|
||||||
#ifndef _HAVE_STRING_ARCH_strcmp
|
|
||||||
# define strcmp(s1, s2) \
|
|
||||||
__extension__ \
|
|
||||||
({ size_t __s1_len, __s2_len; \
|
|
||||||
(__builtin_constant_p (s1) && __builtin_constant_p (s2) \
|
|
||||||
&& (__s1_len = strlen (s1), __s2_len = strlen (s2), \
|
|
||||||
(!__string2_1bptr_p (s1) || __s1_len >= 4) \
|
|
||||||
&& (!__string2_1bptr_p (s2) || __s2_len >= 4)) \
|
|
||||||
? __builtin_strcmp (s1, s2) \
|
|
||||||
: (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
|
|
||||||
&& (__s1_len = strlen (s1), __s1_len < 4) \
|
|
||||||
? (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
|
|
||||||
? __builtin_strcmp (s1, s2) \
|
|
||||||
: __strcmp_cg (s1, s2, __s1_len)) \
|
|
||||||
: (__builtin_constant_p (s2) && __string2_1bptr_p (s2) \
|
|
||||||
&& (__s2_len = strlen (s2), __s2_len < 4) \
|
|
||||||
? (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
|
|
||||||
? __builtin_strcmp (s1, s2) \
|
|
||||||
: -__strcmp_cg (s2, s1, __s2_len)) \
|
|
||||||
: __builtin_strcmp (s1, s2)))); })
|
|
||||||
|
|
||||||
# define __strcmp_cg(s1, s2, l1) \
|
|
||||||
(__extension__ ({ const unsigned char *__s2 = \
|
|
||||||
(const unsigned char *) (const char *) (s2); \
|
|
||||||
int __result = \
|
|
||||||
(((const unsigned char *) (const char *) (s1))[0] \
|
|
||||||
- __s2[0]); \
|
|
||||||
if (l1 > 0 && __result == 0) \
|
|
||||||
{ \
|
|
||||||
__result = (((const unsigned char *) \
|
|
||||||
(const char *) (s1))[1] - __s2[1]); \
|
|
||||||
if (l1 > 1 && __result == 0) \
|
|
||||||
{ \
|
|
||||||
__result = (((const unsigned char *) \
|
|
||||||
(const char *) (s1))[2] - __s2[2]); \
|
|
||||||
if (l1 > 2 && __result == 0) \
|
|
||||||
__result = (((const unsigned char *) \
|
|
||||||
(const char *) (s1))[3] \
|
|
||||||
- __s2[3]); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
__result; }))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Compare N characters of S1 and S2. */
|
|
||||||
#ifndef _HAVE_STRING_ARCH_strncmp
|
|
||||||
# define strncmp(s1, s2, n) \
|
|
||||||
(__extension__ (__builtin_constant_p (n) \
|
|
||||||
&& ((__builtin_constant_p (s1) \
|
|
||||||
&& strlen (s1) < ((size_t) (n))) \
|
|
||||||
|| (__builtin_constant_p (s2) \
|
|
||||||
&& strlen (s2) < ((size_t) (n)))) \
|
|
||||||
? strcmp (s1, s2) : strncmp (s1, s2, n)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Return the length of the initial segment of S which
|
/* Return the length of the initial segment of S which
|
||||||
consists entirely of characters not in REJECT. */
|
consists entirely of characters not in REJECT. */
|
||||||
#ifndef _HAVE_STRING_ARCH_strcspn
|
#ifndef _HAVE_STRING_ARCH_strcspn
|
||||||
|
Loading…
Reference in New Issue
Block a user