diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2019-04-09 11:54:34 +0100 |
---|---|---|
committer | Wilco Dijkstra <wdijkstr@arm.com> | 2019-04-09 11:54:34 +0100 |
commit | 648279f4af423c4783ec1dfa63cb7b46a7640217 (patch) | |
tree | fb9277130379baddc55546b600f2c1b0d4b947ad /benchtests/bench-strnlen.c | |
parent | 93eebae5168e5cf2abfb4b6266e3fb2ab860cd60 (diff) | |
download | glibc-648279f4af423c4783ec1dfa63cb7b46a7640217.tar glibc-648279f4af423c4783ec1dfa63cb7b46a7640217.tar.gz glibc-648279f4af423c4783ec1dfa63cb7b46a7640217.tar.bz2 glibc-648279f4af423c4783ec1dfa63cb7b46a7640217.zip |
Improve string benchtests
Replace slow byte-oriented tests in several string benchmarks with the
generic implementations from the string/ directory so the comparisons
are more realistic and useful.
* benchtests/bench-stpcpy.c (SIMPLE_STPCPY): Remove function.
(generic_stpcpy): New function.
* benchtests/bench-stpncpy.c (SIMPLE_STPNCPY): Remove function.
(generic_stpncpy): New function.
* benchtests/bench-strcat.c (SIMPLE_STRCAT): Remove function.
(generic_strcat): New function.
* benchtests/bench-strcpy.c (SIMPLE_STRCPY): Remove function.
(generic_strcpy): New function.
* benchtests/bench-strncat.c (SIMPLE_STRNCAT): Remove function.
(STUPID_STRNCAT): Remove function.
(generic_strncat): New function.
* benchtests/bench-strncpy.c (SIMPLE_STRNCPY): Remove function.
(STUPID_STRNCPY): Remove function.
(generic_strncpy): New function.
* benchtests/bench-strnlen.c (SIMPLE_STRNLEN): Remove function.
(generic_strnlen): New function.
(memchr_strnlen): New function.
* benchtests/bench-strlen.c (generic_strlen): Define for WIDE.
(memchr_strlen): Likewise.
Diffstat (limited to 'benchtests/bench-strnlen.c')
-rw-r--r-- | benchtests/bench-strnlen.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/benchtests/bench-strnlen.c b/benchtests/bench-strnlen.c index b9039d5f3f..e9e51b27fc 100644 --- a/benchtests/bench-strnlen.c +++ b/benchtests/bench-strnlen.c @@ -21,6 +21,8 @@ # define TEST_NAME "strnlen" #else # define TEST_NAME "wcsnlen" +# define generic_strnlen generic_wcsnlen +# define memchr_strnlen wcschr_wcsnlen #endif /* WIDE */ #include "bench-string.h" @@ -28,27 +30,24 @@ #ifndef WIDE # define MIDDLE_CHAR 127 -# define SIMPLE_STRNLEN simple_strnlen #else # define MIDDLE_CHAR 1121 -# define SIMPLE_STRNLEN simple_wcsnlen #endif /* WIDE */ typedef size_t (*proto_t) (const CHAR *, size_t); -size_t SIMPLE_STRNLEN (const CHAR *, size_t); - -IMPL (SIMPLE_STRNLEN, 0) -IMPL (STRNLEN, 1) +size_t generic_strnlen (const CHAR *, size_t); size_t -SIMPLE_STRNLEN (const CHAR *s, size_t maxlen) +memchr_strnlen (const CHAR *s, size_t maxlen) { - size_t i; - - for (i = 0; i < maxlen && s[i]; ++i); - return i; + const CHAR *s1 = MEMCHR (s, 0, maxlen); + return (s1 == NULL) ? maxlen : s1 - s; } +IMPL (STRNLEN, 1) +IMPL (memchr_strnlen, 0) +IMPL (generic_strnlen, 0) + static void do_one_test (impl_t *impl, const CHAR *s, size_t maxlen, size_t exp_len) { @@ -146,3 +145,13 @@ test_main (void) } #include <support/test-driver.c> + +#define libc_hidden_def(X) +#ifndef WIDE +# undef STRNLEN +# define STRNLEN generic_strnlen +# include <string/strnlen.c> +#else +# define WCSNLEN generic_strnlen +# include <wcsmbs/wcsnlen.c> +#endif |