Re: [PATCH 11/20] alpha: add assembly mempcpy sharing the ev6 memcpy

Adhemerval Zanella Netto <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Organization Linaro
Message-ID <[email protected]>

On 11/08/26 22:19, Matt Turner wrote:
> Alpha had no assembly mempcpy and used the generic C.  mempcpy differs from
> memcpy only in its return value (dest + n rather than dest), so build it from
> the ev6 memcpy with USE_AS_MEMPCPY, following the established convention used
> by other architectures.
> 
> memcpy.S gains two small, behaviour-preserving changes so it can be reused:
> the entry computes the return value through USE_AS_MEMPCPY, and the misaligned
> path now derives its working dest pointer and alignment from the (still
> original) $16 instead of $0, freeing $0 to carry dest + n for mempcpy.  The
> plain memcpy path is unchanged ($0 == $16 on entry).

Do we really need to essentially duplicate the memcpy code for this optimization?
The alpha ABI cost us a bit more instruction for the function call (compare to
aarch64 for instance), but it does cost a lot less i-cache.

The aarch64 uses the generic mempcpy.c and it seems not be a problem.

> ---
>  sysdeps/alpha/alphaev6/memcpy.S  | 13 ++++++++++---
>  sysdeps/alpha/alphaev6/mempcpy.S | 27 +++++++++++++++++++++++++++
>  2 files changed, 37 insertions(+), 3 deletions(-)
>  create mode 100644 sysdeps/alpha/alphaev6/mempcpy.S
> 
> diff --git ./sysdeps/alpha/alphaev6/memcpy.S ./sysdeps/alpha/alphaev6/memcpy.S
> index d5b72d4961..d11138420d 100644
> --- ./sysdeps/alpha/alphaev6/memcpy.S
> +++ ./sysdeps/alpha/alphaev6/memcpy.S
> @@ -40,7 +40,11 @@
>  ENTRY(memcpy)
>  	.prologue 0
>  
> -	mov	$16, $0			# E : copy dest to return
> +#ifdef USE_AS_MEMPCPY
> +	addq	$16, $18, $0		# E : mempcpy returns dest + n
> +#else
> +	mov	$16, $0			# E : memcpy returns dest
> +#endif
>  	ble	$18, $nomoredata	# U : done with the copy?
>  	xor	$16, $17, $1		# E : are source and dest alignments the same?
>  	and	$1, 7, $1		# E : are they the same mod 8?
> @@ -289,8 +293,9 @@ $tail_bytes:
>  	nop				# E :
>  
>  $misaligned:
> -	mov	$0, $4			# E : dest temp
> -	and	$0, 7, $1		# E : dest alignment mod8
> +	mov	$16, $4			# E : dest temp (orig dest still in $16 here;
> +					#     $0 may hold dest+n for mempcpy)
> +	and	$16, 7, $1		# E : dest alignment mod8
>  	beq	$1, $dest_0mod8		# U : life doesn't totally suck
>  	nop
>  
> @@ -367,4 +372,6 @@ $nomoredata:
>  	nop				# E :
>  
>  END(memcpy)
> +#ifndef USE_AS_MEMPCPY
>  libc_hidden_builtin_def (memcpy)
> +#endif
> diff --git ./sysdeps/alpha/alphaev6/mempcpy.S ./sysdeps/alpha/alphaev6/mempcpy.S
> new file mode 100644
> index 0000000000..95385e4111
> --- /dev/null
> +++ ./sysdeps/alpha/alphaev6/mempcpy.S
> @@ -0,0 +1,27 @@
> +/* Copyright (C) 2026 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +/* mempcpy is the ev6 memcpy with USE_AS_MEMPCPY, which only changes the
> +   return value (dest + n instead of dest) and the exported symbol.  */
> +
> +#define USE_AS_MEMPCPY
> +#define memcpy __mempcpy
> +#include <sysdeps/alpha/alphaev6/memcpy.S>
> +
> +libc_hidden_def (__mempcpy)
> +weak_alias (__mempcpy, mempcpy)
> +libc_hidden_builtin_def (mempcpy)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.