From: Richard Weinberger <richard@nod.at>
To: Orestes Leal Rodriguez <lukes357@gmail.com>, bp@alien8.de
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] lib: small update for strlen, strnlen, use less cpu instructions
Date: Wed, 17 Jun 2015 22:07:27 +0200 [thread overview]
Message-ID: <5581D37F.9090400@nod.at> (raw)
In-Reply-To: <5580A87C.5020407@gmail.com>
Am 17.06.2015 um 00:51 schrieb Orestes Leal Rodriguez:
>> Use the force^Wcheckpatch.pl.
> This is the output of checkpatch.pl:
> output of checkpatch: total: 0 errors, 0 warnings, 42 lines checked
> /root/string.c.patch has no obvious style problems and is ready for submission
But it does not apply at all.
Did you test it? I fear your mail client did some whitespace damage.
>> You need to explain that in the commit message, my young padawan.
> Very small update to strlen and strnlen that now use less cpu instructions by using a counter to avoid memory address
> arithmetic, which cause that the compiler adds more machine
> instructions for computing the length of the string just before
> returning from the functions, the old machine code is like the
> following:
>
> mov -0x4(%ebp),%edx
> mov 0x8(%ebp),%eax
> sub %eax,%edx
> mov %edx,%eax
> leave
> ret
>
>
> now in the new versions the value is not calculated anymore,
> instead he value of the counter is put on eax after the
> condition inside the loop no longer holds, and then return:
>
> mov -0x4(%ebp),%eax
> leave
> ret
>
> With this a few cpu instructions are saved.
x86_32 does not matter here as we have already an optimized strlen() in
arch/x86/lib/string_32.c.
Did you check whether the optimization is worth on other archs?
Hint: grep __HAVE_ARCH_STRLEN
>
> Signed-off-by: Orestes Leal Rodriguez <lukes357@gmail.com>
> ---
>
> Signed-off-by: Orestes Leal Rodriguez <lukes357@gmail.com>
What does this 2nd SoB here?
> diff --git a/lib/string.c b/lib/string.c
> index 992bf30..c873436 100644
> --- a/lib/string.c
> +++ b/lib/string.c
> @@ -17,6 +17,10 @@
> * * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,
> * Matthew Hawkins <matt@mh.dropbear.id.au>
> * - Kissed strtok() goodbye
> + *
> + * * Tuesday June 16 2015, Orestes Leal Rodriguez <lukes357@gmail.com>
> + * - strlen, strnlen: by using a single counter we use less cpu instructions
> + * by avoiding substracting the memory addresses before return
No need to add anything here. These days we have git. :-)
> */
>
> #include <linux/types.h>
> @@ -401,11 +405,11 @@ EXPORT_SYMBOL(strim);
> */
> size_t strlen(const char *s)
> {
> - const char *sc;
> + size_t sz = 0;
>
> - for (sc = s; *sc != '\0'; ++sc)
> - /* nothing */;
> - return sc - s;
> + for (; *s++ != '\0'; sz++)
> + /* empty */;
<nitpick>
Why suddenly "empty" instead of "nothing"?
</nitpick>
> + return sz;
> }
> EXPORT_SYMBOL(strlen);
> #endif
> @@ -418,12 +422,13 @@ EXPORT_SYMBOL(strlen);
> */
> size_t strnlen(const char *s, size_t count)
> {
> - const char *sc;
> + size_t sz = 0;
>
> - for (sc = s; count-- && *sc != '\0'; ++sc)
> - /* nothing */;
> - return sc - s;
> + for (; count-- && *s++ != '\0'; sz++)
> + /* empty */;
Same here.
Thanks,
//R2D2
next prev parent reply other threads:[~2015-06-17 20:07 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-16 22:51 [PATCH 1/1] lib: small update for strlen, strnlen, use less cpu instructions Orestes Leal Rodriguez
2015-06-17 20:07 ` Richard Weinberger [this message]
2015-06-19 3:11 ` Orestes Leal Rodriguez
-- strict thread matches above, loose matches on Subject: below --
2015-06-16 18:51 Orestes Leal Rodriguez
2015-06-16 18:50 Orestes Leal Rodriguez
2015-06-16 22:16 ` Joe Perches
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=5581D37F.9090400@nod.at \
--to=richard@nod.at \
--cc=bp@alien8.de \
--cc=linux-kernel@vger.kernel.org \
--cc=lukes357@gmail.com \
/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: link
Be 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