[PATCH] Improve performance of strncpy

Wilco Dijkstra wdijkstr@arm.com
Fri Oct 24 15:56:00 GMT 2014


Ping (there was some further discussion but I don't see an OK for this patch)

> -----Original Message-----
> From: Wilco Dijkstra [mailto:wdijkstr@arm.com]
> Sent: 10 September 2014 16:22
> To: 'azanella@linux.vnet.ibm.com'
> Cc: 'libc-alpha@sourceware.org'
> Subject: RE: [PATCH] Improve performance of strncpy
> 
> Adhemerval Zanella wrote:
> > Hi, the patch looks ok. I also pushed a similar modification for powerpc based on same idea.
> 
> >   zero_fill:
> > -  do
> > -    *++s1 = '\0';
> > -  while (--n > 0);
> > +  if (n >= 8)
> > +    memset (s1 + 1, '\0', n);
> > +  else
> > +    do
> > +      *++s1 = '\0';
> > +    while (--n > 0);
> 
> > I wonder if this test is really worth, my opinion is just to keep it simple
> > and just call memset on both 'goto' in loop and after 'last_chars'.
> 
> Yes, you're right, I timed it and there is actually little difference, while
> the code is now even simpler. New version below (not attaching results in bad
> characters due to various mail servers changing line endings).
> 
> OK for commit?
> 
> ---
>  string/strncpy.c |   14 +++++---------
>  1 file changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/string/strncpy.c b/string/strncpy.c
> index 0915e03..d5fa5be 100644
> --- a/string/strncpy.c
> +++ b/string/strncpy.c
> @@ -57,10 +57,10 @@ STRNCPY (char *s1, const char *s2, size_t n)
>  	  if (--n4 == 0)
>  	    goto last_chars;
>  	}
> -      n = n - (s1 - s) - 1;
> -      if (n == 0)
> -	return s;
> -      goto zero_fill;
> +      s1++;
> +      n = n - (s1 - s);
> +      memset (s1, '\0', n);
> +      return s;
>      }
> 
>   last_chars:
> @@ -77,11 +77,7 @@ STRNCPY (char *s1, const char *s2, size_t n)
>      }
>    while (c != '\0');
> 
> - zero_fill:
> -  do
> -    *++s1 = '\0';
> -  while (--n > 0);
> -
> +  memset (s1 + 1, '\0', n);
>    return s;
>  }
>  libc_hidden_builtin_def (strncpy)
> --
> 1.7.9.5




More information about the Libc-alpha mailing list