This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Improve bench-strlen
- From: Wilco Dijkstra <Wilco dot Dijkstra at arm dot com>
- To: 'GNU C Library' <libc-alpha at sourceware dot org>
- Cc: nd <nd at arm dot com>
- Date: Fri, 21 Dec 2018 14:56:07 +0000
- Subject: [PATCH] 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.
OK to commit?
ChangeLog:
2018-12-21 Wilco Dijkstra <wdijkstr@arm.com>
* benchtests/bench-strlen.c (generic_strlen): New function.
(memchr_strlen): New function.
--
diff --git a/benchtests/bench-strlen.c b/benchtests/bench-strlen.c
index 4c26890e23c2e08e2237cf0327cc4b0e4b2f2259..00429cc6b72826443f84f64f30f1774f16394bd8 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, SIZE_MAX/2) - 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