Improve generic stpcpy performance
Commit Message
I noticed while going through some benchmark results that the generic
stpcpy was substantially slower than the simple_stpcpy in the benchmark
itself.
So, similar to Wilko's recent strcpy patch, this patch uses the same
approach for stpcpy.
Note that it does not help to use mempcpy, since that returns a value
that points beyond the end of the copied data.
OK?
* string/stpcpy.c (__stpcpy): Rewrite using strlen and memcpy.
Comments
On 22-12-2014 09:39, Richard Earnshaw wrote:
> I noticed while going through some benchmark results that the generic
> stpcpy was substantially slower than the simple_stpcpy in the benchmark
> itself.
>
> So, similar to Wilko's recent strcpy patch, this patch uses the same
> approach for stpcpy.
>
> Note that it does not help to use mempcpy, since that returns a value
> that points beyond the end of the copied data.
>
> OK?
>
> * string/stpcpy.c (__stpcpy): Rewrite using strlen and memcpy.
>
LGTM.
On 12/22/2014 06:39 AM, Richard Earnshaw wrote:
> I noticed while going through some benchmark results that the generic
> stpcpy was substantially slower than the simple_stpcpy in the benchmark
> itself.
>
> So, similar to Wilko's recent strcpy patch, this patch uses the same
> approach for stpcpy.
>
> Note that it does not help to use mempcpy, since that returns a value
> that points beyond the end of the copied data.
>
> OK?
>
> * string/stpcpy.c (__stpcpy): Rewrite using strlen and memcpy.
>
Please check this in. Thanks for making the generic routines faster.
They will all soon depend on a fast memcpy, but that's almost expected.
Cheers,
Carlos.
On 23/12/14 15:49, Carlos O'Donell wrote:
> On 12/22/2014 06:39 AM, Richard Earnshaw wrote:
>> I noticed while going through some benchmark results that the generic
>> stpcpy was substantially slower than the simple_stpcpy in the benchmark
>> itself.
>>
>> So, similar to Wilko's recent strcpy patch, this patch uses the same
>> approach for stpcpy.
>>
>> Note that it does not help to use mempcpy, since that returns a value
>> that points beyond the end of the copied data.
>>
>> OK?
>>
>> * string/stpcpy.c (__stpcpy): Rewrite using strlen and memcpy.
>>
>
> Please check this in. Thanks for making the generic routines faster.
> They will all soon depend on a fast memcpy, but that's almost expected.
>
> Cheers,
> Carlos.
>
I currently don't have a commit bit, so could someone do this for me please?
If it's OK, I'll sort out commit bits in the new year, when I'm back
from vacation.
R.
Richard Earnshaw wrote:
> I currently don't have a commit bit, so could someone do this for me please?
Done, and thanks.
@@ -35,14 +35,8 @@ __stpcpy (dest, src)
char *dest;
const char *src;
{
- char *d = dest;
- const char *s = src;
-
- do
- *d++ = *s;
- while (*s++ != '\0');
-
- return d - 1;
+ size_t len = strlen (src);
+ return memcpy (dest, src, len + 1) + len;
}
#ifdef libc_hidden_def
libc_hidden_def (__stpcpy)