This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.18-400-g250c23b


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  250c23bdd9557f8609054c7000380e1ebbd351ee (commit)
      from  d540fc8a66507bbbdc7e6594872786527c7667fa (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=250c23bdd9557f8609054c7000380e1ebbd351ee

commit 250c23bdd9557f8609054c7000380e1ebbd351ee
Author: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Date:   Mon Nov 18 06:03:07 2013 -0600

    benchtests: Add strsep benchmark

diff --git a/ChangeLog b/ChangeLog
index 02f1ede..eccc4a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-18  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>
+
+	* benchtests/Makefile: Add strsep.
+	* benchtests/bench-strsep.c: New file: strsep benchtest.
+	* benchtests/bench-strsep-ifunc.c: New file: strsep benchtest.
+
 2013-11-18  Andreas Schwab  <schwab@suse.de>
 
 	* locale/programs/locale.c (show_info) [case byte]: Check for
diff --git a/benchtests/Makefile b/benchtests/Makefile
index 5eb65e5..5c92760 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -28,7 +28,7 @@ string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
 		mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
 		strcat strchr strchrnul strcmp strcpy strcspn strlen \
 		strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \
-		strspn strstr strcpy_chk stpcpy_chk memrchr
+		strspn strstr strcpy_chk stpcpy_chk memrchr strsep
 string-bench-ifunc := $(addsuffix -ifunc, $(string-bench))
 string-bench-all := $(string-bench) $(string-bench-ifunc)
 
diff --git a/benchtests/bench-strsep-ifunc.c b/benchtests/bench-strsep-ifunc.c
new file mode 100644
index 0000000..2d475bc
--- /dev/null
+++ b/benchtests/bench-strsep-ifunc.c
@@ -0,0 +1,20 @@
+/* Measure IFUNC implementations of strsep function.
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TEST_IFUNC 1
+#include "bench-strsep.c"
diff --git a/benchtests/bench-strsep.c b/benchtests/bench-strsep.c
new file mode 100644
index 0000000..59dbe04
--- /dev/null
+++ b/benchtests/bench-strsep.c
@@ -0,0 +1,174 @@
+/* Measure strsep functions.
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TEST_MAIN
+#define TEST_NAME "strsep"
+#include "bench-string.h"
+
+char *
+simple_strsep (char **s1, char *s2)
+{
+  char *begin;
+  char *s;
+  size_t j = 0;
+
+  begin = *s1;
+  s = begin;
+  if (begin == NULL)
+    return NULL;
+  ssize_t s2len = strlen (s2);
+  while (*s)
+    {
+      for (j = 0; j < s2len; j++)
+	{
+	  if (*s == s2[j])
+	    {
+	      s[0] = '\0';
+	      *s1 = s + 1;
+	      return begin;
+	    }
+	}
+      s++;
+    }
+  *s1 = NULL;
+  return begin;
+}
+
+typedef char *(*proto_t) (const char **, const char *);
+
+IMPL (simple_strsep, 0)
+IMPL (strsep, 1)
+
+static void
+do_one_test (impl_t * impl, const char *s1, const char *s2)
+{
+  size_t i, iters = INNER_LOOP_ITERS;
+  timing_t start, stop, cur;
+
+  TIMING_NOW (start);
+  for (i = 0; i < iters; ++i)
+    {
+      CALL (impl, &s1, s2);
+    }
+  TIMING_NOW (stop);
+
+  TIMING_DIFF (cur, start, stop);
+
+  TIMING_PRINT_MEAN ((double) cur, (double) iters);
+}
+
+static void
+do_test (size_t align1, size_t align2, size_t len1, size_t len2, int fail)
+{
+  char *s2 = (char *) (buf2 + align2);
+  static const char d[] = "1234567890abcdef";
+#define dl (sizeof (d) - 1)
+  char *ss2 = s2;
+  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
+    {
+      size_t t = l > dl ? dl : l;
+      ss2 = mempcpy (ss2, d, t);
+    }
+  s2[len2] = '\0';
+
+  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+	  len1, len2, align1, align2, fail ? "fail" : "found");
+
+  FOR_EACH_IMPL (impl, 0)
+  {
+    char *s1 = (char *) (buf1 + align1);
+    if (fail)
+      {
+	char *ss1 = s1;
+	for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
+	  {
+	    size_t t = l > dl ? dl : l;
+	    memcpy (ss1, d, t);
+	    ++ss1[len2 > 7 ? 7 : len2 - 1];
+	    ss1 += t;
+	  }
+      }
+    else
+      {
+	memset (s1, '0', len1);
+	memcpy (s1 + (len1 - len2) - 2, s2, len2);
+	if ((len1 / len2) > 4)
+	  memcpy (s1 + (len1 - len2) - (3 * len2), s2, len2);
+      }
+    s1[len1] = '\0';
+    do_one_test (impl, s1, s2);
+  }
+  putchar ('\n');
+}
+
+static int
+test_main (void)
+{
+  test_init ();
+
+  printf ("%23s", "");
+  FOR_EACH_IMPL (impl, 0)
+    printf ("\t%s", impl->name);
+  putchar ('\n');
+
+  for (size_t klen = 2; klen < 32; ++klen)
+    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
+      {
+	do_test (0, 0, hlen, klen, 0);
+	do_test (0, 0, hlen, klen, 1);
+	do_test (0, 3, hlen, klen, 0);
+	do_test (0, 3, hlen, klen, 1);
+	do_test (0, 9, hlen, klen, 0);
+	do_test (0, 9, hlen, klen, 1);
+	do_test (0, 15, hlen, klen, 0);
+	do_test (0, 15, hlen, klen, 1);
+
+	do_test (3, 0, hlen, klen, 0);
+	do_test (3, 0, hlen, klen, 1);
+	do_test (3, 3, hlen, klen, 0);
+	do_test (3, 3, hlen, klen, 1);
+	do_test (3, 9, hlen, klen, 0);
+	do_test (3, 9, hlen, klen, 1);
+	do_test (3, 15, hlen, klen, 0);
+	do_test (3, 15, hlen, klen, 1);
+
+	do_test (9, 0, hlen, klen, 0);
+	do_test (9, 0, hlen, klen, 1);
+	do_test (9, 3, hlen, klen, 0);
+	do_test (9, 3, hlen, klen, 1);
+	do_test (9, 9, hlen, klen, 0);
+	do_test (9, 9, hlen, klen, 1);
+	do_test (9, 15, hlen, klen, 0);
+	do_test (9, 15, hlen, klen, 1);
+
+	do_test (15, 0, hlen, klen, 0);
+	do_test (15, 0, hlen, klen, 1);
+	do_test (15, 3, hlen, klen, 0);
+	do_test (15, 3, hlen, klen, 1);
+	do_test (15, 9, hlen, klen, 0);
+	do_test (15, 9, hlen, klen, 1);
+	do_test (15, 15, hlen, klen, 0);
+	do_test (15, 15, hlen, klen, 1);
+      }
+  do_test (0, 0, page_size - 1, 16, 0);
+  do_test (0, 0, page_size - 1, 16, 1);
+
+  return ret;
+}
+
+#include "../test-skeleton.c"

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    6 +
 benchtests/Makefile                                |    2 +-
 .../{bench-memcmp-ifunc.c => bench-strsep-ifunc.c} |    4 +-
 benchtests/{bench-strstr.c => bench-strsep.c}      |  109 ++++++++++----------
 4 files changed, 62 insertions(+), 59 deletions(-)
 copy benchtests/{bench-memcmp-ifunc.c => bench-strsep-ifunc.c} (91%)
 copy benchtests/{bench-strstr.c => bench-strsep.c} (74%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]