aboutsummaryrefslogtreecommitdiff
path: root/benchtests/bench-strnlen.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-strnlen.c
parent93eebae5168e5cf2abfb4b6266e3fb2ab860cd60 (diff)
downloadglibc-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.c31
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