]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Improve bench-strlen
authorWilco Dijkstra <wdijkstr@arm.com>
Thu, 27 Dec 2018 14:56:23 +0000 (14:56 +0000)
committerWilco Dijkstra <wdijkstr@arm.com>
Thu, 27 Dec 2018 14:56:23 +0000 (14:56 +0000)
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.

* benchtests/bench-strlen.c (generic_strlen): New function.
(memchr_strlen): New function.

ChangeLog
benchtests/bench-strlen.c

index cb959e378908bc7545883422f0224e734a2bcf7c..ea72d5e1c7460cbd987dbb9f74bf6d20d4c384d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-27  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * benchtests/bench-strlen.c (generic_strlen): New function.
+        (memchr_strlen): New function.
+
 2018-12-26  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/x86_64/fpu/s_sincosf.S: Removed.
index 4c26890e23c2e08e2237cf0327cc4b0e4b2f2259..28ae31d6f46accfab29c524811eb5b82d4a1b200 100644 (file)
 #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, PTRDIFF_MAX) - 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