Skip to content

Commit

Permalink
benchtests: Add memrchr benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
Adhemerval Zanella committed Sep 6, 2013
1 parent bbf6e8e commit e029e2e
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 4 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2013-09-06 Adhemerval Zanella <azanella@linux.vnet.ibm.com>

* benchtests/Makefile: Add memrchr benchmark.
* benchtests/bench-memchr.c (USE_AS_MEMRCHR): Add define to use
benchmark as memrchr.
* benchtests/bench-memrchr-ifunc.c: New file.
* benchtests/bench-memrchr.c: New file.

2013-09-06 Will Newton <will.newton@linaro.org>

* benchtests/Makefile (string-bench): Add memcpy.
Expand Down
2 changes: 1 addition & 1 deletion benchtests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
strspn strstr strcpy_chk stpcpy_chk memrchr
string-bench-ifunc := $(addsuffix -ifunc, $(string-bench))
string-bench-all := $(string-bench) $(string-bench-ifunc)

Expand Down
8 changes: 5 additions & 3 deletions benchtests/bench-memchr.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */

#define TEST_MAIN
#define TEST_NAME "memchr"
#include "bench-string.h"
#ifndef USE_AS_MEMRCHR
# define TEST_MAIN
# define TEST_NAME "memchr"
# include "bench-string.h"

typedef char *(*proto_t) (const char *, int, size_t);
char *simple_memchr (const char *, int, size_t);
Expand All @@ -34,6 +35,7 @@ simple_memchr (const char *s, int c, size_t n)
return (char *) s - 1;
return NULL;
}
#endif

static void
do_one_test (impl_t *impl, const char *s, int c, size_t n, char *exp_res)
Expand Down
20 changes: 20 additions & 0 deletions benchtests/bench-memrchr-ifunc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* Measure IFUNC implementations of memrchr 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-memrchr.c"
40 changes: 40 additions & 0 deletions benchtests/bench-memrchr.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* Measure memrchr 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 "memrchr"
#include "bench-string.h"

typedef char *(*proto_t) (const char *, int, size_t);
char *simple_memrchr (const char *, int, size_t);

IMPL (simple_memrchr, 0)
IMPL (memrchr, 1)

char *
simple_memrchr (const char *s, int c, size_t n)
{
s = s + n;
while (n--)
if (*--s == (char) c)
return (char *) s;
return NULL;
}

#define USE_AS_MEMRCHR
#include "bench-memchr.c"

0 comments on commit e029e2e

Please sign in to comment.