diff mbox series

[v12,10/31] string: Improve generic strcpy

Message ID 20230202181149.2181553-11-adhemerval.zanella@linaro.org
State New
Headers show
Series Improve generic string routines | expand

Commit Message

Adhemerval Zanella Netto Feb. 2, 2023, 6:11 p.m. UTC
Now that stpcpy is vectorized based on op_t, it should be better to
call it instead of strlen plus memcpy.

Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64-linux-gnu,
and powerpc-linux-gnu by removing the arch-specific assembly
implementation and disabling multi-arch (it covers both LE and BE
for 64 and 32 bits).

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 string/strcpy.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Noah Goldstein Feb. 3, 2023, 11:26 p.m. UTC | #1
On Thu, Feb 2, 2023 at 12:12 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> Now that stpcpy is vectorized based on op_t, it should be better to
> call it instead of strlen plus memcpy.
>
> Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64-linux-gnu,
> and powerpc-linux-gnu by removing the arch-specific assembly
> implementation and disabling multi-arch (it covers both LE and BE
> for 64 and 32 bits).
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  string/strcpy.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/string/strcpy.c b/string/strcpy.c
> index 0345c71d15..d945d8fdf0 100644
> --- a/string/strcpy.c
> +++ b/string/strcpy.c
> @@ -19,6 +19,9 @@
>  #include <string.h>
>
>  #undef strcpy
> +/* Disable internal stpcpy optimization, otherwise the __stpcpy might it
> +   generate a strcpy call.  */
> +#undef __stpcpy
>
>  #ifndef STRCPY
>  # define STRCPY strcpy
> @@ -28,6 +31,7 @@
>  char *
>  STRCPY (char *dest, const char *src)
>  {
> -  return memcpy (dest, src, strlen (src) + 1);
> +  __stpcpy (dest, src);
> +  return dest;
>  }
>  libc_hidden_builtin_def (strcpy)
> --
> 2.34.1
>
LGTM.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
diff mbox series

Patch

diff --git a/string/strcpy.c b/string/strcpy.c
index 0345c71d15..d945d8fdf0 100644
--- a/string/strcpy.c
+++ b/string/strcpy.c
@@ -19,6 +19,9 @@ 
 #include <string.h>
 
 #undef strcpy
+/* Disable internal stpcpy optimization, otherwise the __stpcpy might it
+   generate a strcpy call.  */
+#undef __stpcpy
 
 #ifndef STRCPY
 # define STRCPY strcpy
@@ -28,6 +31,7 @@ 
 char *
 STRCPY (char *dest, const char *src)
 {
-  return memcpy (dest, src, strlen (src) + 1);
+  __stpcpy (dest, src);
+  return dest;
 }
 libc_hidden_builtin_def (strcpy)