diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2018-12-27 14:56:23 +0000 |
---|---|---|
committer | Wilco Dijkstra <wdijkstr@arm.com> | 2018-12-27 14:56:23 +0000 |
commit | 5289f1f56b7174da6b036d24a7626d9cd658fb01 (patch) | |
tree | 4d91f4f0319dba42323b1dbe1b9a241aa871c47e /benchtests/bench-strlen.c | |
parent | ba4b8fab20d52e4c3c52fcff805c77219a9e8b5e (diff) | |
download | glibc-5289f1f56b7174da6b036d24a7626d9cd658fb01.zip glibc-5289f1f56b7174da6b036d24a7626d9cd658fb01.tar.gz glibc-5289f1f56b7174da6b036d24a7626d9cd658fb01.tar.bz2 |
Improve bench-strlen
The current bench-strlen compares against a slow byte-oriented strlen which
is not useful given it's too easy to beat. Remove it and compare against the
generic C strlen version and memchr.
* benchtests/bench-strlen.c (generic_strlen): New function.
(memchr_strlen): New function.
Diffstat (limited to 'benchtests/bench-strlen.c')
-rw-r--r-- | benchtests/bench-strlen.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/benchtests/bench-strlen.c b/benchtests/bench-strlen.c index 4c26890..28ae31d 100644 --- a/benchtests/bench-strlen.c +++ b/benchtests/bench-strlen.c @@ -24,24 +24,15 @@ #endif #include "bench-string.h" -#ifndef WIDE -# define MAX_CHAR CHAR_MAX -#else -# define MAX_CHAR WCHAR_MAX -#endif - #include "json-lib.h" typedef size_t (*proto_t) (const CHAR *); -size_t -simple_STRLEN (const CHAR *s) -{ - const CHAR *p; +size_t generic_strlen (const CHAR *); +size_t memchr_strlen (const CHAR *); - for (p = s; *p; ++p); - return p - s; -} +IMPL (memchr_strlen, 0) +IMPL (generic_strlen, 0) #ifndef WIDE size_t @@ -52,7 +43,12 @@ builtin_strlen (const CHAR *p) IMPL (builtin_strlen, 0) #endif -IMPL (simple_STRLEN, 0) +size_t +memchr_strlen (const CHAR *p) +{ + return (const CHAR *)MEMCHR (p, 0, PTRDIFF_MAX) - p; +} + IMPL (STRLEN, 1) @@ -161,3 +157,13 @@ test_main (void) } #include <support/test-driver.c> + +#define libc_hidden_builtin_def(X) +#ifndef WIDE +# undef STRLEN +# define STRLEN generic_strlen +# include <string/strlen.c> +#else +# define WCSLEN generic_strlen +# include <wcsmbs/wcslen.c> +#endif |