public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Wilco Dijkstra <wilco@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc] Benchtests: Remove simple_str(r)chr Date: Wed, 8 Mar 2023 18:47:01 +0000 (GMT) [thread overview] Message-ID: <20230308184701.9FFE73851143@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=10f980d31e3d65c4c5bfafd176e7e1db92e2babe commit 10f980d31e3d65c4c5bfafd176e7e1db92e2babe Author: Wilco Dijkstra <wilco.dijkstra@arm.com> Date: Fri Mar 3 16:10:55 2023 +0000 Benchtests: Remove simple_str(r)chr Instead of benchmarking slow byte oriented loops, include the optimized generic strchr and strrchr implementation. Adjust iteration count to reduce benchmark time. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Diff: --- benchtests/bench-strchr.c | 38 +++++++++++++++++++++++--------------- benchtests/bench-strrchr.c | 31 +++++++++++++++---------------- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/benchtests/bench-strchr.c b/benchtests/bench-strchr.c index 420930d558..116ec19760 100644 --- a/benchtests/bench-strchr.c +++ b/benchtests/bench-strchr.c @@ -39,7 +39,6 @@ # ifdef USE_FOR_STRCHRNUL # undef STRCHR # define STRCHR strchrnul -# define simple_STRCHR simple_STRCHRNUL # endif /* !USE_FOR_STRCHRNUL */ # define MIDDLE_CHAR 127 # define SMALL_CHAR 23 @@ -47,7 +46,6 @@ # ifdef USE_FOR_STRCHRNUL # undef STRCHR # define STRCHR wcschrnul -# define simple_STRCHR simple_WCSCHRNUL # endif /* !USE_FOR_STRCHRNUL */ # define MIDDLE_CHAR 1121 # define SMALL_CHAR 851 @@ -67,18 +65,19 @@ typedef CHAR *(*proto_t) (const CHAR *, int); -CHAR * -simple_STRCHR (const CHAR *s, int c) -{ - for (; *s != (CHAR) c; ++s) - if (*s == '\0') - return NULLRET ((CHAR *) s); - return (CHAR *) s; -} - -IMPL (simple_STRCHR, 0) IMPL (STRCHR, 1) +#ifndef WIDE +char *generic_strchr (const char *, int); +char *generic_strchrnul (const char *, int); + +# ifndef USE_FOR_STRCHRNUL +IMPL (generic_strchr, 0) +# else +IMPL (generic_strchrnul, 0) +# endif +#endif + #ifndef USE_FOR_STRCHRNUL /* Random benchmarks for strchr (if return is CHAR or NULL). The rational for the benchmark is returning null/char can be done with @@ -97,7 +96,7 @@ static void __attribute__ ((noinline, noclone)) do_one_rand_plus_branch_test (json_ctx_t *json_ctx, impl_t *impl, const CHAR *s, const CHAR *c) { - size_t i, iters = INNER_LOOP_ITERS_LARGE; + size_t i, iters = INNER_LOOP_ITERS8; int must_execute = 0; timing_t start, stop, cur; TIMING_NOW (start); @@ -122,7 +121,7 @@ static void __attribute__ ((noinline, noclone)) do_one_rand_test (json_ctx_t *json_ctx, impl_t *impl, const CHAR *s, const CHAR *c) { - size_t i, iters = INNER_LOOP_ITERS_LARGE; + size_t i, iters = INNER_LOOP_ITERS8; timing_t start, stop, cur; TIMING_NOW (start); for (i = 0; i < iters; ++i) @@ -210,7 +209,7 @@ static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, const CHAR *s, int c, const CHAR *exp_res) { - size_t i, iters = INNER_LOOP_ITERS_LARGE; + size_t i, iters = INNER_LOOP_ITERS8; timing_t start, stop, cur; const CHAR *res = CALL (impl, s, c); if (res != exp_res) @@ -401,3 +400,12 @@ test_main (void) } #include <support/test-driver.c> + +#ifndef WIDE +# undef STRCHRNUL +# define STRCHRNUL generic_strchrnul +# undef STRCHR +# define STRCHR generic_strchr +# include <string/strchrnul.c> +# include <string/strchr.c> +#endif diff --git a/benchtests/bench-strrchr.c b/benchtests/bench-strrchr.c index a33a657a27..f846797770 100644 --- a/benchtests/bench-strrchr.c +++ b/benchtests/bench-strrchr.c @@ -28,30 +28,20 @@ #define BIG_CHAR MAX_CHAR #ifdef WIDE -# define SIMPLE_STRRCHR simple_wcsrchr # define SMALL_CHAR 1273 #else -# define SIMPLE_STRRCHR simple_strrchr # define SMALL_CHAR 127 -#endif -typedef CHAR *(*proto_t) (const CHAR *, int); -CHAR *SIMPLE_STRRCHR (const CHAR *, int); +char * +generic_strrchr (const char *, int); -IMPL (SIMPLE_STRRCHR, 0) -IMPL (STRRCHR, 1) +IMPL (generic_strrchr, 0) -CHAR * -SIMPLE_STRRCHR (const CHAR *s, int c) -{ - const CHAR *ret = NULL; +#endif - for (; *s != '\0'; ++s) - if (*s == (CHAR) c) - ret = s; +typedef CHAR *(*proto_t) (const CHAR *, int); - return (CHAR *) (c == '\0' ? s : ret); -} +IMPL (STRRCHR, 1) static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, const CHAR *s, int c, @@ -237,3 +227,12 @@ test_main (void) } #include <support/test-driver.c> + +#define weak_alias(X,Y) +#define libc_hidden_builtin_def(X) +#ifndef WIDE +# undef STRRCHR +# define STRRCHR generic_strrchr +# define __memrchr memrchr +# include <string/strrchr.c> +#endif
reply other threads:[~2023-03-08 18:47 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230308184701.9FFE73851143@sourceware.org \ --to=wilco@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).