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-strncpy.c | |
parent | 93eebae5168e5cf2abfb4b6266e3fb2ab860cd60 (diff) | |
download | glibc-648279f4af423c4783ec1dfa63cb7b46a7640217.tar.gz |
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-strncpy.c')
-rw-r--r-- | benchtests/bench-strncpy.c | 43 |
1 files changed, 8 insertions, 35 deletions
diff --git a/benchtests/bench-strncpy.c b/benchtests/bench-strncpy.c index 35744c1bd6..93bd6d54bf 100644 --- a/benchtests/bench-strncpy.c +++ b/benchtests/bench-strncpy.c @@ -31,49 +31,22 @@ # define TEST_NAME "strncpy" # else # define TEST_NAME "wcsncpy" +# define generic_strncpy generic_wcsncpy # endif /* WIDE */ # include "bench-string.h" -# ifndef WIDE -# define SIMPLE_STRNCPY simple_strncpy -# define STUPID_STRNCPY stupid_strncpy -# else -# define SIMPLE_STRNCPY simple_wcsncpy -# define STUPID_STRNCPY stupid_wcsncpy -# endif /* WIDE */ - -CHAR *SIMPLE_STRNCPY (CHAR *, const CHAR *, size_t); -CHAR *STUPID_STRNCPY (CHAR *, const CHAR *, size_t); - -IMPL (STUPID_STRNCPY, 0) -IMPL (SIMPLE_STRNCPY, 0) -IMPL (STRNCPY, 1) CHAR * -SIMPLE_STRNCPY (CHAR *dst, const CHAR *src, size_t n) +generic_strncpy (CHAR *dst, const CHAR *src, size_t n) { - CHAR *ret = dst; - while (n--) - if ((*dst++ = *src++) == '\0') - { - while (n--) - *dst++ = '\0'; - return ret; - } - return ret; + size_t nc = STRNLEN (src, n); + if (nc != n) + MEMSET (dst + nc, 0, n - nc); + return MEMCPY (dst, src, nc); } -CHAR * -STUPID_STRNCPY (CHAR *dst, const CHAR *src, size_t n) -{ - size_t nc = STRNLEN (src, n); - size_t i; +IMPL (STRNCPY, 1) +IMPL (generic_strncpy, 0) - for (i = 0; i < nc; ++i) - dst[i] = src[i]; - for (; i < n; ++i) - dst[i] = '\0'; - return dst; -} #endif /* !STRNCPY_RESULT */ typedef CHAR *(*proto_t) (CHAR *, const CHAR *, size_t); |