summaryrefslogtreecommitdiff
path: root/benchtests/bench-strncpy.c
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2019-04-09 11:54:34 +0100
committerWilco Dijkstra <wdijkstr@arm.com>2019-04-09 11:54:34 +0100
commit648279f4af423c4783ec1dfa63cb7b46a7640217 (patch)
treefb9277130379baddc55546b600f2c1b0d4b947ad /benchtests/bench-strncpy.c
parent93eebae5168e5cf2abfb4b6266e3fb2ab860cd60 (diff)
downloadglibc-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.c43
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);