diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-03-27 13:33:56 +0000 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-04-01 10:44:45 -0300 |
commit | 282b71f07eb5e24ddf1308f92c37cb42f7c7d86b (patch) | |
tree | d6d79415c05a70ebf19c604c702b3dc96084d551 /string/strpbrk.c | |
parent | 91f3b75f47c9eca3299098c3dcc2f5d9dad320b1 (diff) | |
download | glibc-282b71f07eb5e24ddf1308f92c37cb42f7c7d86b.zip glibc-282b71f07eb5e24ddf1308f92c37cb42f7c7d86b.tar.gz glibc-282b71f07eb5e24ddf1308f92c37cb42f7c7d86b.tar.bz2 |
Improve generic strpbrk performance
With now a faster strcspn implementation, it is faster to just use
it with some return tests than reimplementing strpbrk itself.
As for strcspn optimization, it is generally at least 10 times faster
than the existing implementation on bench-strspn on a few AArch64
implementations.
Also the string/bits/string2.h inlines make no longer sense, as current
implementation will already implement most of the optimizations.
Tested on x86_64, i386, and aarch64.
* string/strpbrk.c (strpbrk): Rewrite function.
* string/bits/string2.h (strpbrk): Use __builtin_strpbrk.
(__strpbrk_c2): Likewise.
(__strpbrk_c3): Likewise.
* string/string-inlines.c
[SHLIB_COMPAT(libc, GLIBC_2_1_1, GLIBC_2_24)] (__strpbrk_c2):
Likewise.
[SHLIB_COMPAT(libc, GLIBC_2_1_1, GLIBC_2_24)] (__strpbrk_c3):
Likewise.
Diffstat (limited to 'string/strpbrk.c')
-rw-r--r-- | string/strpbrk.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/string/strpbrk.c b/string/strpbrk.c index fddd473..1ede719 100644 --- a/string/strpbrk.c +++ b/string/strpbrk.c @@ -27,15 +27,7 @@ char * STRPBRK (const char *s, const char *accept) { - while (*s != '\0') - { - const char *a = accept; - while (*a != '\0') - if (*a++ == *s) - return (char *) s; - ++s; - } - - return NULL; + s += strcspn (s, accept); + return *s ? (char *)s : NULL; } libc_hidden_builtin_def (strpbrk) |