diff mbox series

sparc: Remove optimize md5, sha256, and sha512

Message ID 20230717144859.2299315-1-adhemerval.zanella@linaro.org
State New
Headers show
Series sparc: Remove optimize md5, sha256, and sha512 | expand

Commit Message

Adhemerval Zanella Netto July 17, 2023, 2:48 p.m. UTC
The libcrypt was maked to phase out on 2.28, and better projects
already exist that provide both compatibility and better API
(libxcrypt).  The sparc optimizations add the burden to extra
build-many-glibcs.py configurations.

Checked on sparc64 and sparcv9.
---
 .../sparc/sparc32/sparcv9/multiarch/Makefile  |   8 --
 .../sparc32/sparcv9/multiarch/md5-block.c     |   1 -
 .../sparc32/sparcv9/multiarch/md5-crop.S      |   1 -
 .../sparc32/sparcv9/multiarch/sha256-block.c  |   1 -
 .../sparc32/sparcv9/multiarch/sha256-crop.S   |   1 -
 .../sparc32/sparcv9/multiarch/sha512-block.c  |   1 -
 .../sparc32/sparcv9/multiarch/sha512-crop.S   |   1 -
 sysdeps/sparc/sparc64/multiarch/Makefile      |   8 --
 sysdeps/sparc/sparc64/multiarch/md5-block.c   |  29 ----
 sysdeps/sparc/sparc64/multiarch/md5-crop.S    | 109 ---------------
 .../sparc/sparc64/multiarch/sha256-block.c    |  32 -----
 sysdeps/sparc/sparc64/multiarch/sha256-crop.S | 100 --------------
 .../sparc/sparc64/multiarch/sha512-block.c    |  32 -----
 sysdeps/sparc/sparc64/multiarch/sha512-crop.S | 130 ------------------
 14 files changed, 454 deletions(-)
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-block.c
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-crop.S
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-block.c
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-crop.S
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-block.c
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-crop.S

Comments

Sam James July 17, 2023, 3:01 p.m. UTC | #1
Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:

> The libcrypt was maked to phase out on 2.28, and better projects
> already exist that provide both compatibility and better API
> (libxcrypt).  The sparc optimizations add the burden to extra
> build-many-glibcs.py configurations.
>

I guess. I'd personally prefer just removing it all when libcrypt
is removed, not hacking away at it beforehand.

> Checked on sparc64 and sparcv9.
> ---
>  .../sparc/sparc32/sparcv9/multiarch/Makefile  |   8 --
>  .../sparc32/sparcv9/multiarch/md5-block.c     |   1 -
>  .../sparc32/sparcv9/multiarch/md5-crop.S      |   1 -
>  .../sparc32/sparcv9/multiarch/sha256-block.c  |   1 -
>  .../sparc32/sparcv9/multiarch/sha256-crop.S   |   1 -
>  .../sparc32/sparcv9/multiarch/sha512-block.c  |   1 -
>  .../sparc32/sparcv9/multiarch/sha512-crop.S   |   1 -
>  sysdeps/sparc/sparc64/multiarch/Makefile      |   8 --
>  sysdeps/sparc/sparc64/multiarch/md5-block.c   |  29 ----
>  sysdeps/sparc/sparc64/multiarch/md5-crop.S    | 109 ---------------
>  .../sparc/sparc64/multiarch/sha256-block.c    |  32 -----
>  sysdeps/sparc/sparc64/multiarch/sha256-crop.S | 100 --------------
>  .../sparc/sparc64/multiarch/sha512-block.c    |  32 -----
>  sysdeps/sparc/sparc64/multiarch/sha512-crop.S | 130 ------------------
>  14 files changed, 454 deletions(-)
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-block.c
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-crop.S
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-block.c
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-block.c
>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
> index a6d08f3a00..d35f95e8e2 100644
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
> +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
> @@ -1,11 +1,3 @@
> -ifeq ($(subdir),crypt)
> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
> -endif
> -
> -ifeq ($(subdir),locale)
> -localedef-aux += md5-crop
> -endif
> -
>  ifeq ($(subdir),string)
>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
> deleted file mode 100644
> index 3765cabae7..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/md5-block.c>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
> deleted file mode 100644
> index 11a3a81482..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/md5-crop.S>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
> deleted file mode 100644
> index 600c602b61..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/sha256-block.c>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
> deleted file mode 100644
> index 4895405853..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/sha256-crop.S>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
> deleted file mode 100644
> index 7c7c54e5a6..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/sha512-block.c>
> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
> deleted file mode 100644
> index cc74a99d3c..0000000000
> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sparc64/multiarch/sha512-crop.S>
> diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
> index eaf758e7aa..5dcd7bbb0e 100644
> --- a/sysdeps/sparc/sparc64/multiarch/Makefile
> +++ b/sysdeps/sparc/sparc64/multiarch/Makefile
> @@ -1,11 +1,3 @@
> -ifeq ($(subdir),crypt)
> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
> -endif
> -
> -ifeq ($(subdir),locale)
> -localedef-aux += md5-crop
> -endif
> -
>  ifeq ($(subdir),string)
>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c
> deleted file mode 100644
> index 7c1a3a368f..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/md5-block.c
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -#include <sparc-ifunc.h>
> -
> -#define  __md5_process_block __md5_process_block_generic
> -extern void __md5_process_block_generic (const void *buffer, size_t len,
> -					 struct md5_ctx *ctx);
> -
> -#include <crypt/md5-block.c>
> -
> -#undef __md5_process_block
> -
> -extern void __md5_process_block_crop (const void *buffer, size_t len,
> -				      struct md5_ctx *ctx);
> -static bool cpu_supports_md5(int hwcap)
> -{
> -  unsigned long cfr;
> -
> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
> -    return false;
> -
> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
> -  if (cfr & (1 << 4))
> -    return true;
> -
> -  return false;
> -}
> -
> -extern void __md5_process_block (const void *buffer, size_t len,
> -				 struct md5_ctx *ctx);
> -sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic);
> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S
> deleted file mode 100644
> index 53c27d677d..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S
> +++ /dev/null
> @@ -1,109 +0,0 @@
> -/* MD5 using sparc crypto opcodes.
> -   Copyright (C) 2012-2023 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/>.  */
> -
> -#include <sysdep.h>
> -
> -#define ASI_PL 0x88
> -
> -#define MD5		\
> -	.word	0x81b02800;
> -
> -	.text
> -	.align	32
> -ENTRY(__md5_process_block_crop)
> -	/* %o0=buffer, %o1=len, %o2=CTX */
> -	ld	[%o2 + 0x10], %g1
> -	add	%g1, %o1, %o4
> -	st	%o4, [%o2 + 0x10]
> -	clr	%o5
> -	cmp	%o4, %g1
> -	movlu	%icc, 1, %o5
> -#ifdef __arch64__
> -	srlx	%o1, 32, %o4
> -	add	%o5, %o4, %o5
> -#endif
> -	ld	[%o2 + 0x14], %o4
> -	add	%o4, %o5, %o4
> -	st	%o4, [%o2 + 0x14]
> -	lda	[%o2] ASI_PL, %f0
> -	add	%o2, 0x4, %g1
> -	lda	[%g1] ASI_PL, %f1
> -	add	%o2, 0x8, %g1
> -	andcc	%o0, 0x7, %g0
> -	lda	[%g1] ASI_PL, %f2
> -	add	%o2, 0xc, %g1
> -	bne,pn	%xcc, 10f
> -	 lda	[%g1] ASI_PL, %f3
> -
> -1:
> -	ldd	[%o0 + 0x00], %f8
> -	ldd	[%o0 + 0x08], %f10
> -	ldd	[%o0 + 0x10], %f12
> -	ldd	[%o0 + 0x18], %f14
> -	ldd	[%o0 + 0x20], %f16
> -	ldd	[%o0 + 0x28], %f18
> -	ldd	[%o0 + 0x30], %f20
> -	ldd	[%o0 + 0x38], %f22
> -
> -	MD5
> -
> -	subcc	%o1, 64, %o1
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x40, %o0
> -
> -5:
> -	sta	%f0, [%o2] ASI_PL
> -	add	%o2, 0x4, %g1
> -	sta	%f1, [%g1] ASI_PL
> -	add	%o2, 0x8, %g1
> -	sta	%f2, [%g1] ASI_PL
> -	add	%o2, 0xc, %g1
> -	retl
> -	 sta	%f3, [%g1] ASI_PL
> -10:
> -	alignaddr %o0, %g0, %o0
> -
> -	ldd	[%o0 + 0x00], %f10
> -1:
> -	ldd	[%o0 + 0x08], %f12
> -	ldd	[%o0 + 0x10], %f14
> -	ldd	[%o0 + 0x18], %f16
> -	ldd	[%o0 + 0x20], %f18
> -	ldd	[%o0 + 0x28], %f20
> -	ldd	[%o0 + 0x30], %f22
> -	ldd	[%o0 + 0x38], %f24
> -	ldd	[%o0 + 0x40], %f26
> -
> -	faligndata %f10, %f12, %f8
> -	faligndata %f12, %f14, %f10
> -	faligndata %f14, %f16, %f12
> -	faligndata %f16, %f18, %f14
> -	faligndata %f18, %f20, %f16
> -	faligndata %f20, %f22, %f18
> -	faligndata %f22, %f24, %f20
> -	faligndata %f24, %f26, %f22
> -
> -	MD5
> -
> -	subcc	%o1, 64, %o1
> -	fsrc2	%f26, %f10
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x40, %o0
> -
> -	ba,a,pt	%xcc, 5b
> -END(__md5_process_block_crop)
> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c
> deleted file mode 100644
> index 9d65315a5a..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -#include <sparc-ifunc.h>
> -
> -#define __sha256_process_block __sha256_process_block_generic
> -extern void __sha256_process_block_generic (const void *buffer, size_t len,
> -					    struct sha256_ctx *ctx);
> -
> -#include <crypt/sha256-block.c>
> -
> -#undef __sha256_process_block
> -
> -extern void __sha256_process_block_crop (const void *buffer, size_t len,
> -					 struct sha256_ctx *ctx);
> -
> -static bool cpu_supports_sha256(int hwcap)
> -{
> -  unsigned long cfr;
> -
> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
> -    return false;
> -
> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
> -  if (cfr & (1 << 6))
> -    return true;
> -
> -  return false;
> -}
> -
> -extern void __sha256_process_block (const void *buffer, size_t len,
> -				    struct sha256_ctx *ctx);
> -sparc_libc_ifunc (__sha256_process_block,
> -		  cpu_supports_sha256(hwcap) ? __sha256_process_block_crop
> -		    : __sha256_process_block_generic);
> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
> deleted file mode 100644
> index f7d0a7e7dc..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -/* SHA256 using sparc crypto opcodes.
> -   Copyright (C) 2012-2023 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/>.  */
> -
> -#include <sysdep.h>
> -
> -#define SHA256		\
> -	.word	0x81b02840;
> -
> -	.text
> -	.align	32
> -ENTRY(__sha256_process_block_crop)
> -	/* %o0=buffer, %o1=len, %o2=CTX */
> -	ldx	[%o2 + 0x20], %g1
> -	add	%g1, %o1, %g1
> -	stx	%g1, [%o2 + 0x20]
> -
> -	ld	[%o2 + 0x00], %f0
> -	ld	[%o2 + 0x04], %f1
> -	ld	[%o2 + 0x08], %f2
> -	ld	[%o2 + 0x0c], %f3
> -	ld	[%o2 + 0x10], %f4
> -	ld	[%o2 + 0x14], %f5
> -	andcc	%o1, 0x7, %g0
> -	ld	[%o2 + 0x18], %f6
> -	bne,pn	%xcc, 10f
> -	 ld	[%o2 + 0x1c], %f7
> -
> -1:
> -	ldd	[%o0 + 0x00], %f8
> -	ldd	[%o0 + 0x08], %f10
> -	ldd	[%o0 + 0x10], %f12
> -	ldd	[%o0 + 0x18], %f14
> -	ldd	[%o0 + 0x20], %f16
> -	ldd	[%o0 + 0x28], %f18
> -	ldd	[%o0 + 0x30], %f20
> -	ldd	[%o0 + 0x38], %f22
> -
> -	SHA256
> -
> -	subcc	%o1, 0x40, %o1
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x40, %o0
> -
> -5:
> -	st	%f0, [%o2 + 0x00]
> -	st	%f1, [%o2 + 0x04]
> -	st	%f2, [%o2 + 0x08]
> -	st	%f3, [%o2 + 0x0c]
> -	st	%f4, [%o2 + 0x10]
> -	st	%f5, [%o2 + 0x14]
> -	st	%f6, [%o2 + 0x18]
> -	retl
> -	 st	%f7, [%o2 + 0x1c]
> -10:
> -	alignaddr %o0, %g0, %o0
> -
> -	ldd	[%o0 + 0x00], %f10
> -1:
> -	ldd	[%o0 + 0x08], %f12
> -	ldd	[%o0 + 0x10], %f14
> -	ldd	[%o0 + 0x18], %f16
> -	ldd	[%o0 + 0x20], %f18
> -	ldd	[%o0 + 0x28], %f20
> -	ldd	[%o0 + 0x30], %f22
> -	ldd	[%o0 + 0x38], %f24
> -	ldd	[%o0 + 0x40], %f26
> -
> -	faligndata %f10, %f12, %f8
> -	faligndata %f12, %f14, %f10
> -	faligndata %f14, %f16, %f12
> -	faligndata %f16, %f18, %f14
> -	faligndata %f18, %f20, %f16
> -	faligndata %f20, %f22, %f18
> -	faligndata %f22, %f24, %f20
> -	faligndata %f24, %f26, %f22
> -
> -	SHA256
> -
> -	subcc	%o1, 0x40, %o1
> -	fsrc2	%f26, %f10
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x40, %o0
> -
> -	ba,a,pt	%xcc, 5b
> -END(__sha256_process_block_crop)
> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c
> deleted file mode 100644
> index 2863e05d09..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -#include <sparc-ifunc.h>
> -
> -#define __sha512_process_block __sha512_process_block_generic
> -extern void __sha512_process_block_generic (const void *buffer, size_t len,
> -					    struct sha512_ctx *ctx);
> -
> -#include <crypt/sha512-block.c>
> -
> -#undef __sha512_process_block
> -
> -extern void __sha512_process_block_crop (const void *buffer, size_t len,
> -					 struct sha512_ctx *ctx);
> -
> -static bool cpu_supports_sha512(int hwcap)
> -{
> -  unsigned long cfr;
> -
> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
> -    return false;
> -
> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
> -  if (cfr & (1 << 6))
> -    return true;
> -
> -  return false;
> -}
> -
> -extern void __sha512_process_block (const void *buffer, size_t len,
> -				    struct sha512_ctx *ctx);
> -sparc_libc_ifunc (__sha512_process_block,
> -		  cpu_supports_sha512(hwcap) ? __sha512_process_block_crop
> -		    : __sha512_process_block_generic);
> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
> deleted file mode 100644
> index 035f99f469..0000000000
> --- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
> +++ /dev/null
> @@ -1,130 +0,0 @@
> -/* SHA512 using sparc crypto opcodes.
> -   Copyright (C) 2012-2023 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/>.  */
> -
> -#include <sysdep.h>
> -
> -#define SHA512		\
> -	.word	0x81b02860;
> -
> -	.text
> -	.align	32
> -ENTRY(__sha512_process_block_crop)
> -	/* %o0=buffer, %o1=len, %o2=CTX */
> -	ldx	[%o2 + 0x48], %g1
> -	add	%g1, %o1, %o4
> -	stx	%o4, [%o2 + 0x48]
> -	cmp	%o4, %g1
> -	bgeu,pt	%xcc, 1f
> -	 nop
> -	ldx	[%o2 + 0x40], %g1
> -	add	%g1, 1, %g1
> -	stx	%g1, [%o2 + 0x40]
> -
> -1:	ldd	[%o2 + 0x00], %f0
> -	ldd	[%o2 + 0x08], %f2
> -	ldd	[%o2 + 0x10], %f4
> -	ldd	[%o2 + 0x18], %f6
> -	ldd	[%o2 + 0x20], %f8
> -	ldd	[%o2 + 0x28], %f10
> -	andcc	%o1, 0x7, %g0
> -	ldd	[%o2 + 0x30], %f12
> -	bne,pn	%xcc, 10f
> -	 ldd	[%o2 + 0x38], %f14
> -
> -1:
> -	ldd	[%o0 + 0x00], %f16
> -	ldd	[%o0 + 0x08], %f18
> -	ldd	[%o0 + 0x10], %f20
> -	ldd	[%o0 + 0x18], %f22
> -	ldd	[%o0 + 0x20], %f24
> -	ldd	[%o0 + 0x28], %f26
> -	ldd	[%o0 + 0x30], %f28
> -	ldd	[%o0 + 0x38], %f30
> -	ldd	[%o0 + 0x40], %f32
> -	ldd	[%o0 + 0x48], %f34
> -	ldd	[%o0 + 0x50], %f36
> -	ldd	[%o0 + 0x58], %f38
> -	ldd	[%o0 + 0x60], %f40
> -	ldd	[%o0 + 0x68], %f42
> -	ldd	[%o0 + 0x70], %f44
> -	ldd	[%o0 + 0x78], %f46
> -
> -	SHA512
> -
> -	subcc	%o1, 0x80, %o1
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x80, %o0
> -
> -5:
> -	std	%f0, [%o2 + 0x00]
> -	std	%f2, [%o2 + 0x08]
> -	std	%f4, [%o2 + 0x10]
> -	std	%f6, [%o2 + 0x18]
> -	std	%f8, [%o2 + 0x20]
> -	std	%f10, [%o2 + 0x28]
> -	std	%f12, [%o2 + 0x30]
> -	retl
> -	 std	%f14, [%o2 + 0x38]
> -10:
> -	alignaddr %o0, %g0, %o0
> -
> -	ldd	[%o0 + 0x00], %f18
> -1:
> -	ldd	[%o0 + 0x08], %f20
> -	ldd	[%o0 + 0x10], %f22
> -	ldd	[%o0 + 0x18], %f24
> -	ldd	[%o0 + 0x20], %f26
> -	ldd	[%o0 + 0x28], %f28
> -	ldd	[%o0 + 0x30], %f30
> -	ldd	[%o0 + 0x38], %f32
> -	ldd	[%o0 + 0x40], %f34
> -	ldd	[%o0 + 0x48], %f36
> -	ldd	[%o0 + 0x50], %f38
> -	ldd	[%o0 + 0x58], %f40
> -	ldd	[%o0 + 0x60], %f42
> -	ldd	[%o0 + 0x68], %f44
> -	ldd	[%o0 + 0x70], %f46
> -	ldd	[%o0 + 0x78], %f48
> -	ldd	[%o0 + 0x80], %f50
> -
> -	faligndata %f18, %f20, %f16
> -	faligndata %f20, %f22, %f18
> -	faligndata %f22, %f24, %f20
> -	faligndata %f24, %f26, %f22
> -	faligndata %f26, %f28, %f24
> -	faligndata %f28, %f30, %f26
> -	faligndata %f30, %f32, %f28
> -	faligndata %f32, %f34, %f30
> -	faligndata %f34, %f36, %f32
> -	faligndata %f36, %f38, %f34
> -	faligndata %f38, %f40, %f36
> -	faligndata %f40, %f42, %f38
> -	faligndata %f42, %f44, %f40
> -	faligndata %f44, %f46, %f42
> -	faligndata %f46, %f48, %f44
> -	faligndata %f48, %f50, %f46
> -
> -	SHA512
> -
> -	subcc	%o1, 0x80, %o1
> -	fsrc2	%f50, %f18
> -	bne,pt	%xcc, 1b
> -	 add	%o0, 0x80, %o0
> -
> -	ba,a,pt	%xcc, 5b
> -END(__sha512_process_block_crop)
Adhemerval Zanella Netto July 17, 2023, 3:59 p.m. UTC | #2
On 17/07/23 12:01, Sam James wrote:
> 
> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
> 
>> The libcrypt was maked to phase out on 2.28, and better projects
>> already exist that provide both compatibility and better API
>> (libxcrypt).  The sparc optimizations add the burden to extra
>> build-many-glibcs.py configurations.
>>
> 
> I guess. I'd personally prefer just removing it all when libcrypt
> is removed, not hacking away at it beforehand.

I don't think we will ever be able to remove libgcrypt due compat reason.
Maybe we can make crypt return ENOSYS as default, but even though I think
if libcrypt is still enabled we will need to keep old code as compat
layer. 

> 
>> Checked on sparc64 and sparcv9.
>> ---
>>  .../sparc/sparc32/sparcv9/multiarch/Makefile  |   8 --
>>  .../sparc32/sparcv9/multiarch/md5-block.c     |   1 -
>>  .../sparc32/sparcv9/multiarch/md5-crop.S      |   1 -
>>  .../sparc32/sparcv9/multiarch/sha256-block.c  |   1 -
>>  .../sparc32/sparcv9/multiarch/sha256-crop.S   |   1 -
>>  .../sparc32/sparcv9/multiarch/sha512-block.c  |   1 -
>>  .../sparc32/sparcv9/multiarch/sha512-crop.S   |   1 -
>>  sysdeps/sparc/sparc64/multiarch/Makefile      |   8 --
>>  sysdeps/sparc/sparc64/multiarch/md5-block.c   |  29 ----
>>  sysdeps/sparc/sparc64/multiarch/md5-crop.S    | 109 ---------------
>>  .../sparc/sparc64/multiarch/sha256-block.c    |  32 -----
>>  sysdeps/sparc/sparc64/multiarch/sha256-crop.S | 100 --------------
>>  .../sparc/sparc64/multiarch/sha512-block.c    |  32 -----
>>  sysdeps/sparc/sparc64/multiarch/sha512-crop.S | 130 ------------------
>>  14 files changed, 454 deletions(-)
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-block.c
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-crop.S
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-block.c
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-block.c
>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>> index a6d08f3a00..d35f95e8e2 100644
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>> +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>> @@ -1,11 +1,3 @@
>> -ifeq ($(subdir),crypt)
>> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
>> -endif
>> -
>> -ifeq ($(subdir),locale)
>> -localedef-aux += md5-crop
>> -endif
>> -
>>  ifeq ($(subdir),string)
>>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>> deleted file mode 100644
>> index 3765cabae7..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/md5-block.c>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>> deleted file mode 100644
>> index 11a3a81482..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/md5-crop.S>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>> deleted file mode 100644
>> index 600c602b61..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/sha256-block.c>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>> deleted file mode 100644
>> index 4895405853..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/sha256-crop.S>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>> deleted file mode 100644
>> index 7c7c54e5a6..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/sha512-block.c>
>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>> deleted file mode 100644
>> index cc74a99d3c..0000000000
>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -#include <sparc64/multiarch/sha512-crop.S>
>> diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
>> index eaf758e7aa..5dcd7bbb0e 100644
>> --- a/sysdeps/sparc/sparc64/multiarch/Makefile
>> +++ b/sysdeps/sparc/sparc64/multiarch/Makefile
>> @@ -1,11 +1,3 @@
>> -ifeq ($(subdir),crypt)
>> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
>> -endif
>> -
>> -ifeq ($(subdir),locale)
>> -localedef-aux += md5-crop
>> -endif
>> -
>>  ifeq ($(subdir),string)
>>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
>> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c
>> deleted file mode 100644
>> index 7c1a3a368f..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/md5-block.c
>> +++ /dev/null
>> @@ -1,29 +0,0 @@
>> -#include <sparc-ifunc.h>
>> -
>> -#define  __md5_process_block __md5_process_block_generic
>> -extern void __md5_process_block_generic (const void *buffer, size_t len,
>> -					 struct md5_ctx *ctx);
>> -
>> -#include <crypt/md5-block.c>
>> -
>> -#undef __md5_process_block
>> -
>> -extern void __md5_process_block_crop (const void *buffer, size_t len,
>> -				      struct md5_ctx *ctx);
>> -static bool cpu_supports_md5(int hwcap)
>> -{
>> -  unsigned long cfr;
>> -
>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>> -    return false;
>> -
>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>> -  if (cfr & (1 << 4))
>> -    return true;
>> -
>> -  return false;
>> -}
>> -
>> -extern void __md5_process_block (const void *buffer, size_t len,
>> -				 struct md5_ctx *ctx);
>> -sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic);
>> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S
>> deleted file mode 100644
>> index 53c27d677d..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S
>> +++ /dev/null
>> @@ -1,109 +0,0 @@
>> -/* MD5 using sparc crypto opcodes.
>> -   Copyright (C) 2012-2023 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/>.  */
>> -
>> -#include <sysdep.h>
>> -
>> -#define ASI_PL 0x88
>> -
>> -#define MD5		\
>> -	.word	0x81b02800;
>> -
>> -	.text
>> -	.align	32
>> -ENTRY(__md5_process_block_crop)
>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>> -	ld	[%o2 + 0x10], %g1
>> -	add	%g1, %o1, %o4
>> -	st	%o4, [%o2 + 0x10]
>> -	clr	%o5
>> -	cmp	%o4, %g1
>> -	movlu	%icc, 1, %o5
>> -#ifdef __arch64__
>> -	srlx	%o1, 32, %o4
>> -	add	%o5, %o4, %o5
>> -#endif
>> -	ld	[%o2 + 0x14], %o4
>> -	add	%o4, %o5, %o4
>> -	st	%o4, [%o2 + 0x14]
>> -	lda	[%o2] ASI_PL, %f0
>> -	add	%o2, 0x4, %g1
>> -	lda	[%g1] ASI_PL, %f1
>> -	add	%o2, 0x8, %g1
>> -	andcc	%o0, 0x7, %g0
>> -	lda	[%g1] ASI_PL, %f2
>> -	add	%o2, 0xc, %g1
>> -	bne,pn	%xcc, 10f
>> -	 lda	[%g1] ASI_PL, %f3
>> -
>> -1:
>> -	ldd	[%o0 + 0x00], %f8
>> -	ldd	[%o0 + 0x08], %f10
>> -	ldd	[%o0 + 0x10], %f12
>> -	ldd	[%o0 + 0x18], %f14
>> -	ldd	[%o0 + 0x20], %f16
>> -	ldd	[%o0 + 0x28], %f18
>> -	ldd	[%o0 + 0x30], %f20
>> -	ldd	[%o0 + 0x38], %f22
>> -
>> -	MD5
>> -
>> -	subcc	%o1, 64, %o1
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x40, %o0
>> -
>> -5:
>> -	sta	%f0, [%o2] ASI_PL
>> -	add	%o2, 0x4, %g1
>> -	sta	%f1, [%g1] ASI_PL
>> -	add	%o2, 0x8, %g1
>> -	sta	%f2, [%g1] ASI_PL
>> -	add	%o2, 0xc, %g1
>> -	retl
>> -	 sta	%f3, [%g1] ASI_PL
>> -10:
>> -	alignaddr %o0, %g0, %o0
>> -
>> -	ldd	[%o0 + 0x00], %f10
>> -1:
>> -	ldd	[%o0 + 0x08], %f12
>> -	ldd	[%o0 + 0x10], %f14
>> -	ldd	[%o0 + 0x18], %f16
>> -	ldd	[%o0 + 0x20], %f18
>> -	ldd	[%o0 + 0x28], %f20
>> -	ldd	[%o0 + 0x30], %f22
>> -	ldd	[%o0 + 0x38], %f24
>> -	ldd	[%o0 + 0x40], %f26
>> -
>> -	faligndata %f10, %f12, %f8
>> -	faligndata %f12, %f14, %f10
>> -	faligndata %f14, %f16, %f12
>> -	faligndata %f16, %f18, %f14
>> -	faligndata %f18, %f20, %f16
>> -	faligndata %f20, %f22, %f18
>> -	faligndata %f22, %f24, %f20
>> -	faligndata %f24, %f26, %f22
>> -
>> -	MD5
>> -
>> -	subcc	%o1, 64, %o1
>> -	fsrc2	%f26, %f10
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x40, %o0
>> -
>> -	ba,a,pt	%xcc, 5b
>> -END(__md5_process_block_crop)
>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c
>> deleted file mode 100644
>> index 9d65315a5a..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c
>> +++ /dev/null
>> @@ -1,32 +0,0 @@
>> -#include <sparc-ifunc.h>
>> -
>> -#define __sha256_process_block __sha256_process_block_generic
>> -extern void __sha256_process_block_generic (const void *buffer, size_t len,
>> -					    struct sha256_ctx *ctx);
>> -
>> -#include <crypt/sha256-block.c>
>> -
>> -#undef __sha256_process_block
>> -
>> -extern void __sha256_process_block_crop (const void *buffer, size_t len,
>> -					 struct sha256_ctx *ctx);
>> -
>> -static bool cpu_supports_sha256(int hwcap)
>> -{
>> -  unsigned long cfr;
>> -
>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>> -    return false;
>> -
>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>> -  if (cfr & (1 << 6))
>> -    return true;
>> -
>> -  return false;
>> -}
>> -
>> -extern void __sha256_process_block (const void *buffer, size_t len,
>> -				    struct sha256_ctx *ctx);
>> -sparc_libc_ifunc (__sha256_process_block,
>> -		  cpu_supports_sha256(hwcap) ? __sha256_process_block_crop
>> -		    : __sha256_process_block_generic);
>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>> deleted file mode 100644
>> index f7d0a7e7dc..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>> +++ /dev/null
>> @@ -1,100 +0,0 @@
>> -/* SHA256 using sparc crypto opcodes.
>> -   Copyright (C) 2012-2023 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/>.  */
>> -
>> -#include <sysdep.h>
>> -
>> -#define SHA256		\
>> -	.word	0x81b02840;
>> -
>> -	.text
>> -	.align	32
>> -ENTRY(__sha256_process_block_crop)
>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>> -	ldx	[%o2 + 0x20], %g1
>> -	add	%g1, %o1, %g1
>> -	stx	%g1, [%o2 + 0x20]
>> -
>> -	ld	[%o2 + 0x00], %f0
>> -	ld	[%o2 + 0x04], %f1
>> -	ld	[%o2 + 0x08], %f2
>> -	ld	[%o2 + 0x0c], %f3
>> -	ld	[%o2 + 0x10], %f4
>> -	ld	[%o2 + 0x14], %f5
>> -	andcc	%o1, 0x7, %g0
>> -	ld	[%o2 + 0x18], %f6
>> -	bne,pn	%xcc, 10f
>> -	 ld	[%o2 + 0x1c], %f7
>> -
>> -1:
>> -	ldd	[%o0 + 0x00], %f8
>> -	ldd	[%o0 + 0x08], %f10
>> -	ldd	[%o0 + 0x10], %f12
>> -	ldd	[%o0 + 0x18], %f14
>> -	ldd	[%o0 + 0x20], %f16
>> -	ldd	[%o0 + 0x28], %f18
>> -	ldd	[%o0 + 0x30], %f20
>> -	ldd	[%o0 + 0x38], %f22
>> -
>> -	SHA256
>> -
>> -	subcc	%o1, 0x40, %o1
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x40, %o0
>> -
>> -5:
>> -	st	%f0, [%o2 + 0x00]
>> -	st	%f1, [%o2 + 0x04]
>> -	st	%f2, [%o2 + 0x08]
>> -	st	%f3, [%o2 + 0x0c]
>> -	st	%f4, [%o2 + 0x10]
>> -	st	%f5, [%o2 + 0x14]
>> -	st	%f6, [%o2 + 0x18]
>> -	retl
>> -	 st	%f7, [%o2 + 0x1c]
>> -10:
>> -	alignaddr %o0, %g0, %o0
>> -
>> -	ldd	[%o0 + 0x00], %f10
>> -1:
>> -	ldd	[%o0 + 0x08], %f12
>> -	ldd	[%o0 + 0x10], %f14
>> -	ldd	[%o0 + 0x18], %f16
>> -	ldd	[%o0 + 0x20], %f18
>> -	ldd	[%o0 + 0x28], %f20
>> -	ldd	[%o0 + 0x30], %f22
>> -	ldd	[%o0 + 0x38], %f24
>> -	ldd	[%o0 + 0x40], %f26
>> -
>> -	faligndata %f10, %f12, %f8
>> -	faligndata %f12, %f14, %f10
>> -	faligndata %f14, %f16, %f12
>> -	faligndata %f16, %f18, %f14
>> -	faligndata %f18, %f20, %f16
>> -	faligndata %f20, %f22, %f18
>> -	faligndata %f22, %f24, %f20
>> -	faligndata %f24, %f26, %f22
>> -
>> -	SHA256
>> -
>> -	subcc	%o1, 0x40, %o1
>> -	fsrc2	%f26, %f10
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x40, %o0
>> -
>> -	ba,a,pt	%xcc, 5b
>> -END(__sha256_process_block_crop)
>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c
>> deleted file mode 100644
>> index 2863e05d09..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c
>> +++ /dev/null
>> @@ -1,32 +0,0 @@
>> -#include <sparc-ifunc.h>
>> -
>> -#define __sha512_process_block __sha512_process_block_generic
>> -extern void __sha512_process_block_generic (const void *buffer, size_t len,
>> -					    struct sha512_ctx *ctx);
>> -
>> -#include <crypt/sha512-block.c>
>> -
>> -#undef __sha512_process_block
>> -
>> -extern void __sha512_process_block_crop (const void *buffer, size_t len,
>> -					 struct sha512_ctx *ctx);
>> -
>> -static bool cpu_supports_sha512(int hwcap)
>> -{
>> -  unsigned long cfr;
>> -
>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>> -    return false;
>> -
>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>> -  if (cfr & (1 << 6))
>> -    return true;
>> -
>> -  return false;
>> -}
>> -
>> -extern void __sha512_process_block (const void *buffer, size_t len,
>> -				    struct sha512_ctx *ctx);
>> -sparc_libc_ifunc (__sha512_process_block,
>> -		  cpu_supports_sha512(hwcap) ? __sha512_process_block_crop
>> -		    : __sha512_process_block_generic);
>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>> deleted file mode 100644
>> index 035f99f469..0000000000
>> --- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>> +++ /dev/null
>> @@ -1,130 +0,0 @@
>> -/* SHA512 using sparc crypto opcodes.
>> -   Copyright (C) 2012-2023 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/>.  */
>> -
>> -#include <sysdep.h>
>> -
>> -#define SHA512		\
>> -	.word	0x81b02860;
>> -
>> -	.text
>> -	.align	32
>> -ENTRY(__sha512_process_block_crop)
>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>> -	ldx	[%o2 + 0x48], %g1
>> -	add	%g1, %o1, %o4
>> -	stx	%o4, [%o2 + 0x48]
>> -	cmp	%o4, %g1
>> -	bgeu,pt	%xcc, 1f
>> -	 nop
>> -	ldx	[%o2 + 0x40], %g1
>> -	add	%g1, 1, %g1
>> -	stx	%g1, [%o2 + 0x40]
>> -
>> -1:	ldd	[%o2 + 0x00], %f0
>> -	ldd	[%o2 + 0x08], %f2
>> -	ldd	[%o2 + 0x10], %f4
>> -	ldd	[%o2 + 0x18], %f6
>> -	ldd	[%o2 + 0x20], %f8
>> -	ldd	[%o2 + 0x28], %f10
>> -	andcc	%o1, 0x7, %g0
>> -	ldd	[%o2 + 0x30], %f12
>> -	bne,pn	%xcc, 10f
>> -	 ldd	[%o2 + 0x38], %f14
>> -
>> -1:
>> -	ldd	[%o0 + 0x00], %f16
>> -	ldd	[%o0 + 0x08], %f18
>> -	ldd	[%o0 + 0x10], %f20
>> -	ldd	[%o0 + 0x18], %f22
>> -	ldd	[%o0 + 0x20], %f24
>> -	ldd	[%o0 + 0x28], %f26
>> -	ldd	[%o0 + 0x30], %f28
>> -	ldd	[%o0 + 0x38], %f30
>> -	ldd	[%o0 + 0x40], %f32
>> -	ldd	[%o0 + 0x48], %f34
>> -	ldd	[%o0 + 0x50], %f36
>> -	ldd	[%o0 + 0x58], %f38
>> -	ldd	[%o0 + 0x60], %f40
>> -	ldd	[%o0 + 0x68], %f42
>> -	ldd	[%o0 + 0x70], %f44
>> -	ldd	[%o0 + 0x78], %f46
>> -
>> -	SHA512
>> -
>> -	subcc	%o1, 0x80, %o1
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x80, %o0
>> -
>> -5:
>> -	std	%f0, [%o2 + 0x00]
>> -	std	%f2, [%o2 + 0x08]
>> -	std	%f4, [%o2 + 0x10]
>> -	std	%f6, [%o2 + 0x18]
>> -	std	%f8, [%o2 + 0x20]
>> -	std	%f10, [%o2 + 0x28]
>> -	std	%f12, [%o2 + 0x30]
>> -	retl
>> -	 std	%f14, [%o2 + 0x38]
>> -10:
>> -	alignaddr %o0, %g0, %o0
>> -
>> -	ldd	[%o0 + 0x00], %f18
>> -1:
>> -	ldd	[%o0 + 0x08], %f20
>> -	ldd	[%o0 + 0x10], %f22
>> -	ldd	[%o0 + 0x18], %f24
>> -	ldd	[%o0 + 0x20], %f26
>> -	ldd	[%o0 + 0x28], %f28
>> -	ldd	[%o0 + 0x30], %f30
>> -	ldd	[%o0 + 0x38], %f32
>> -	ldd	[%o0 + 0x40], %f34
>> -	ldd	[%o0 + 0x48], %f36
>> -	ldd	[%o0 + 0x50], %f38
>> -	ldd	[%o0 + 0x58], %f40
>> -	ldd	[%o0 + 0x60], %f42
>> -	ldd	[%o0 + 0x68], %f44
>> -	ldd	[%o0 + 0x70], %f46
>> -	ldd	[%o0 + 0x78], %f48
>> -	ldd	[%o0 + 0x80], %f50
>> -
>> -	faligndata %f18, %f20, %f16
>> -	faligndata %f20, %f22, %f18
>> -	faligndata %f22, %f24, %f20
>> -	faligndata %f24, %f26, %f22
>> -	faligndata %f26, %f28, %f24
>> -	faligndata %f28, %f30, %f26
>> -	faligndata %f30, %f32, %f28
>> -	faligndata %f32, %f34, %f30
>> -	faligndata %f34, %f36, %f32
>> -	faligndata %f36, %f38, %f34
>> -	faligndata %f38, %f40, %f36
>> -	faligndata %f40, %f42, %f38
>> -	faligndata %f42, %f44, %f40
>> -	faligndata %f44, %f46, %f42
>> -	faligndata %f46, %f48, %f44
>> -	faligndata %f48, %f50, %f46
>> -
>> -	SHA512
>> -
>> -	subcc	%o1, 0x80, %o1
>> -	fsrc2	%f50, %f18
>> -	bne,pt	%xcc, 1b
>> -	 add	%o0, 0x80, %o0
>> -
>> -	ba,a,pt	%xcc, 5b
>> -END(__sha512_process_block_crop)
>
Sam James July 17, 2023, 5:31 p.m. UTC | #3
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:

> On 17/07/23 12:01, Sam James wrote:
>> 
>> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
>> 
>>> The libcrypt was maked to phase out on 2.28, and better projects
>>> already exist that provide both compatibility and better API
>>> (libxcrypt).  The sparc optimizations add the burden to extra
>>> build-many-glibcs.py configurations.
>>>
>> 
>> I guess. I'd personally prefer just removing it all when libcrypt
>> is removed, not hacking away at it beforehand.
>
> I don't think we will ever be able to remove libgcrypt due compat reason.
> Maybe we can make crypt return ENOSYS as default, but even though I think
> if libcrypt is still enabled we will need to keep old code as compat
> layer. 
>

In the other thread, we're talking about when it's time to kill it
entirely (I suppose just the option to build, not the real
implementation).

My assumption was we'd remove optimisations like this at that point.

>> 

>>> Checked on sparc64 and sparcv9.
>>> ---
>>>  .../sparc/sparc32/sparcv9/multiarch/Makefile  |   8 --
>>>  .../sparc32/sparcv9/multiarch/md5-block.c     |   1 -
>>>  .../sparc32/sparcv9/multiarch/md5-crop.S      |   1 -
>>>  .../sparc32/sparcv9/multiarch/sha256-block.c  |   1 -
>>>  .../sparc32/sparcv9/multiarch/sha256-crop.S   |   1 -
>>>  .../sparc32/sparcv9/multiarch/sha512-block.c  |   1 -
>>>  .../sparc32/sparcv9/multiarch/sha512-crop.S   |   1 -
>>>  sysdeps/sparc/sparc64/multiarch/Makefile      |   8 --
>>>  sysdeps/sparc/sparc64/multiarch/md5-block.c   |  29 ----
>>>  sysdeps/sparc/sparc64/multiarch/md5-crop.S    | 109 ---------------
>>>  .../sparc/sparc64/multiarch/sha256-block.c    |  32 -----
>>>  sysdeps/sparc/sparc64/multiarch/sha256-crop.S | 100 --------------
>>>  .../sparc/sparc64/multiarch/sha512-block.c    |  32 -----
>>>  sysdeps/sparc/sparc64/multiarch/sha512-crop.S | 130 ------------------
>>>  14 files changed, 454 deletions(-)
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-crop.S
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-block.c
>>>  delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>>>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>>> index a6d08f3a00..d35f95e8e2 100644
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>>> +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
>>> @@ -1,11 +1,3 @@
>>> -ifeq ($(subdir),crypt)
>>> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
>>> -endif
>>> -
>>> -ifeq ($(subdir),locale)
>>> -localedef-aux += md5-crop
>>> -endif
>>> -
>>>  ifeq ($(subdir),string)
>>>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>>>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>>> deleted file mode 100644
>>> index 3765cabae7..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/md5-block.c>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>>> deleted file mode 100644
>>> index 11a3a81482..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/md5-crop.S>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>>> deleted file mode 100644
>>> index 600c602b61..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/sha256-block.c>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>>> deleted file mode 100644
>>> index 4895405853..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/sha256-crop.S>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>>> deleted file mode 100644
>>> index 7c7c54e5a6..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/sha512-block.c>
>>> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>>> deleted file mode 100644
>>> index cc74a99d3c..0000000000
>>> --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
>>> +++ /dev/null
>>> @@ -1 +0,0 @@
>>> -#include <sparc64/multiarch/sha512-crop.S>
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
>>> index eaf758e7aa..5dcd7bbb0e 100644
>>> --- a/sysdeps/sparc/sparc64/multiarch/Makefile
>>> +++ b/sysdeps/sparc/sparc64/multiarch/Makefile
>>> @@ -1,11 +1,3 @@
>>> -ifeq ($(subdir),crypt)
>>> -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
>>> -endif
>>> -
>>> -ifeq ($(subdir),locale)
>>> -localedef-aux += md5-crop
>>> -endif
>>> -
>>>  ifeq ($(subdir),string)
>>>  sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
>>>  		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c
>>> deleted file mode 100644
>>> index 7c1a3a368f..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/md5-block.c
>>> +++ /dev/null
>>> @@ -1,29 +0,0 @@
>>> -#include <sparc-ifunc.h>
>>> -
>>> -#define  __md5_process_block __md5_process_block_generic
>>> -extern void __md5_process_block_generic (const void *buffer, size_t len,
>>> -					 struct md5_ctx *ctx);
>>> -
>>> -#include <crypt/md5-block.c>
>>> -
>>> -#undef __md5_process_block
>>> -
>>> -extern void __md5_process_block_crop (const void *buffer, size_t len,
>>> -				      struct md5_ctx *ctx);
>>> -static bool cpu_supports_md5(int hwcap)
>>> -{
>>> -  unsigned long cfr;
>>> -
>>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>>> -    return false;
>>> -
>>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>>> -  if (cfr & (1 << 4))
>>> -    return true;
>>> -
>>> -  return false;
>>> -}
>>> -
>>> -extern void __md5_process_block (const void *buffer, size_t len,
>>> -				 struct md5_ctx *ctx);
>>> -sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic);
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S
>>> deleted file mode 100644
>>> index 53c27d677d..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S
>>> +++ /dev/null
>>> @@ -1,109 +0,0 @@
>>> -/* MD5 using sparc crypto opcodes.
>>> -   Copyright (C) 2012-2023 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/>.  */
>>> -
>>> -#include <sysdep.h>
>>> -
>>> -#define ASI_PL 0x88
>>> -
>>> -#define MD5		\
>>> -	.word	0x81b02800;
>>> -
>>> -	.text
>>> -	.align	32
>>> -ENTRY(__md5_process_block_crop)
>>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>>> -	ld	[%o2 + 0x10], %g1
>>> -	add	%g1, %o1, %o4
>>> -	st	%o4, [%o2 + 0x10]
>>> -	clr	%o5
>>> -	cmp	%o4, %g1
>>> -	movlu	%icc, 1, %o5
>>> -#ifdef __arch64__
>>> -	srlx	%o1, 32, %o4
>>> -	add	%o5, %o4, %o5
>>> -#endif
>>> -	ld	[%o2 + 0x14], %o4
>>> -	add	%o4, %o5, %o4
>>> -	st	%o4, [%o2 + 0x14]
>>> -	lda	[%o2] ASI_PL, %f0
>>> -	add	%o2, 0x4, %g1
>>> -	lda	[%g1] ASI_PL, %f1
>>> -	add	%o2, 0x8, %g1
>>> -	andcc	%o0, 0x7, %g0
>>> -	lda	[%g1] ASI_PL, %f2
>>> -	add	%o2, 0xc, %g1
>>> -	bne,pn	%xcc, 10f
>>> -	 lda	[%g1] ASI_PL, %f3
>>> -
>>> -1:
>>> -	ldd	[%o0 + 0x00], %f8
>>> -	ldd	[%o0 + 0x08], %f10
>>> -	ldd	[%o0 + 0x10], %f12
>>> -	ldd	[%o0 + 0x18], %f14
>>> -	ldd	[%o0 + 0x20], %f16
>>> -	ldd	[%o0 + 0x28], %f18
>>> -	ldd	[%o0 + 0x30], %f20
>>> -	ldd	[%o0 + 0x38], %f22
>>> -
>>> -	MD5
>>> -
>>> -	subcc	%o1, 64, %o1
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x40, %o0
>>> -
>>> -5:
>>> -	sta	%f0, [%o2] ASI_PL
>>> -	add	%o2, 0x4, %g1
>>> -	sta	%f1, [%g1] ASI_PL
>>> -	add	%o2, 0x8, %g1
>>> -	sta	%f2, [%g1] ASI_PL
>>> -	add	%o2, 0xc, %g1
>>> -	retl
>>> -	 sta	%f3, [%g1] ASI_PL
>>> -10:
>>> -	alignaddr %o0, %g0, %o0
>>> -
>>> -	ldd	[%o0 + 0x00], %f10
>>> -1:
>>> -	ldd	[%o0 + 0x08], %f12
>>> -	ldd	[%o0 + 0x10], %f14
>>> -	ldd	[%o0 + 0x18], %f16
>>> -	ldd	[%o0 + 0x20], %f18
>>> -	ldd	[%o0 + 0x28], %f20
>>> -	ldd	[%o0 + 0x30], %f22
>>> -	ldd	[%o0 + 0x38], %f24
>>> -	ldd	[%o0 + 0x40], %f26
>>> -
>>> -	faligndata %f10, %f12, %f8
>>> -	faligndata %f12, %f14, %f10
>>> -	faligndata %f14, %f16, %f12
>>> -	faligndata %f16, %f18, %f14
>>> -	faligndata %f18, %f20, %f16
>>> -	faligndata %f20, %f22, %f18
>>> -	faligndata %f22, %f24, %f20
>>> -	faligndata %f24, %f26, %f22
>>> -
>>> -	MD5
>>> -
>>> -	subcc	%o1, 64, %o1
>>> -	fsrc2	%f26, %f10
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x40, %o0
>>> -
>>> -	ba,a,pt	%xcc, 5b
>>> -END(__md5_process_block_crop)
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c
>>> deleted file mode 100644
>>> index 9d65315a5a..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c
>>> +++ /dev/null
>>> @@ -1,32 +0,0 @@
>>> -#include <sparc-ifunc.h>
>>> -
>>> -#define __sha256_process_block __sha256_process_block_generic
>>> -extern void __sha256_process_block_generic (const void *buffer, size_t len,
>>> -					    struct sha256_ctx *ctx);
>>> -
>>> -#include <crypt/sha256-block.c>
>>> -
>>> -#undef __sha256_process_block
>>> -
>>> -extern void __sha256_process_block_crop (const void *buffer, size_t len,
>>> -					 struct sha256_ctx *ctx);
>>> -
>>> -static bool cpu_supports_sha256(int hwcap)
>>> -{
>>> -  unsigned long cfr;
>>> -
>>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>>> -    return false;
>>> -
>>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>>> -  if (cfr & (1 << 6))
>>> -    return true;
>>> -
>>> -  return false;
>>> -}
>>> -
>>> -extern void __sha256_process_block (const void *buffer, size_t len,
>>> -				    struct sha256_ctx *ctx);
>>> -sparc_libc_ifunc (__sha256_process_block,
>>> -		  cpu_supports_sha256(hwcap) ? __sha256_process_block_crop
>>> -		    : __sha256_process_block_generic);
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>>> deleted file mode 100644
>>> index f7d0a7e7dc..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
>>> +++ /dev/null
>>> @@ -1,100 +0,0 @@
>>> -/* SHA256 using sparc crypto opcodes.
>>> -   Copyright (C) 2012-2023 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/>.  */
>>> -
>>> -#include <sysdep.h>
>>> -
>>> -#define SHA256		\
>>> -	.word	0x81b02840;
>>> -
>>> -	.text
>>> -	.align	32
>>> -ENTRY(__sha256_process_block_crop)
>>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>>> -	ldx	[%o2 + 0x20], %g1
>>> -	add	%g1, %o1, %g1
>>> -	stx	%g1, [%o2 + 0x20]
>>> -
>>> -	ld	[%o2 + 0x00], %f0
>>> -	ld	[%o2 + 0x04], %f1
>>> -	ld	[%o2 + 0x08], %f2
>>> -	ld	[%o2 + 0x0c], %f3
>>> -	ld	[%o2 + 0x10], %f4
>>> -	ld	[%o2 + 0x14], %f5
>>> -	andcc	%o1, 0x7, %g0
>>> -	ld	[%o2 + 0x18], %f6
>>> -	bne,pn	%xcc, 10f
>>> -	 ld	[%o2 + 0x1c], %f7
>>> -
>>> -1:
>>> -	ldd	[%o0 + 0x00], %f8
>>> -	ldd	[%o0 + 0x08], %f10
>>> -	ldd	[%o0 + 0x10], %f12
>>> -	ldd	[%o0 + 0x18], %f14
>>> -	ldd	[%o0 + 0x20], %f16
>>> -	ldd	[%o0 + 0x28], %f18
>>> -	ldd	[%o0 + 0x30], %f20
>>> -	ldd	[%o0 + 0x38], %f22
>>> -
>>> -	SHA256
>>> -
>>> -	subcc	%o1, 0x40, %o1
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x40, %o0
>>> -
>>> -5:
>>> -	st	%f0, [%o2 + 0x00]
>>> -	st	%f1, [%o2 + 0x04]
>>> -	st	%f2, [%o2 + 0x08]
>>> -	st	%f3, [%o2 + 0x0c]
>>> -	st	%f4, [%o2 + 0x10]
>>> -	st	%f5, [%o2 + 0x14]
>>> -	st	%f6, [%o2 + 0x18]
>>> -	retl
>>> -	 st	%f7, [%o2 + 0x1c]
>>> -10:
>>> -	alignaddr %o0, %g0, %o0
>>> -
>>> -	ldd	[%o0 + 0x00], %f10
>>> -1:
>>> -	ldd	[%o0 + 0x08], %f12
>>> -	ldd	[%o0 + 0x10], %f14
>>> -	ldd	[%o0 + 0x18], %f16
>>> -	ldd	[%o0 + 0x20], %f18
>>> -	ldd	[%o0 + 0x28], %f20
>>> -	ldd	[%o0 + 0x30], %f22
>>> -	ldd	[%o0 + 0x38], %f24
>>> -	ldd	[%o0 + 0x40], %f26
>>> -
>>> -	faligndata %f10, %f12, %f8
>>> -	faligndata %f12, %f14, %f10
>>> -	faligndata %f14, %f16, %f12
>>> -	faligndata %f16, %f18, %f14
>>> -	faligndata %f18, %f20, %f16
>>> -	faligndata %f20, %f22, %f18
>>> -	faligndata %f22, %f24, %f20
>>> -	faligndata %f24, %f26, %f22
>>> -
>>> -	SHA256
>>> -
>>> -	subcc	%o1, 0x40, %o1
>>> -	fsrc2	%f26, %f10
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x40, %o0
>>> -
>>> -	ba,a,pt	%xcc, 5b
>>> -END(__sha256_process_block_crop)
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c
>>> deleted file mode 100644
>>> index 2863e05d09..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c
>>> +++ /dev/null
>>> @@ -1,32 +0,0 @@
>>> -#include <sparc-ifunc.h>
>>> -
>>> -#define __sha512_process_block __sha512_process_block_generic
>>> -extern void __sha512_process_block_generic (const void *buffer, size_t len,
>>> -					    struct sha512_ctx *ctx);
>>> -
>>> -#include <crypt/sha512-block.c>
>>> -
>>> -#undef __sha512_process_block
>>> -
>>> -extern void __sha512_process_block_crop (const void *buffer, size_t len,
>>> -					 struct sha512_ctx *ctx);
>>> -
>>> -static bool cpu_supports_sha512(int hwcap)
>>> -{
>>> -  unsigned long cfr;
>>> -
>>> -  if (!(hwcap & HWCAP_SPARC_CRYPTO))
>>> -    return false;
>>> -
>>> -  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
>>> -  if (cfr & (1 << 6))
>>> -    return true;
>>> -
>>> -  return false;
>>> -}
>>> -
>>> -extern void __sha512_process_block (const void *buffer, size_t len,
>>> -				    struct sha512_ctx *ctx);
>>> -sparc_libc_ifunc (__sha512_process_block,
>>> -		  cpu_supports_sha512(hwcap) ? __sha512_process_block_crop
>>> -		    : __sha512_process_block_generic);
>>> diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>>> deleted file mode 100644
>>> index 035f99f469..0000000000
>>> --- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
>>> +++ /dev/null
>>> @@ -1,130 +0,0 @@
>>> -/* SHA512 using sparc crypto opcodes.
>>> -   Copyright (C) 2012-2023 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/>.  */
>>> -
>>> -#include <sysdep.h>
>>> -
>>> -#define SHA512		\
>>> -	.word	0x81b02860;
>>> -
>>> -	.text
>>> -	.align	32
>>> -ENTRY(__sha512_process_block_crop)
>>> -	/* %o0=buffer, %o1=len, %o2=CTX */
>>> -	ldx	[%o2 + 0x48], %g1
>>> -	add	%g1, %o1, %o4
>>> -	stx	%o4, [%o2 + 0x48]
>>> -	cmp	%o4, %g1
>>> -	bgeu,pt	%xcc, 1f
>>> -	 nop
>>> -	ldx	[%o2 + 0x40], %g1
>>> -	add	%g1, 1, %g1
>>> -	stx	%g1, [%o2 + 0x40]
>>> -
>>> -1:	ldd	[%o2 + 0x00], %f0
>>> -	ldd	[%o2 + 0x08], %f2
>>> -	ldd	[%o2 + 0x10], %f4
>>> -	ldd	[%o2 + 0x18], %f6
>>> -	ldd	[%o2 + 0x20], %f8
>>> -	ldd	[%o2 + 0x28], %f10
>>> -	andcc	%o1, 0x7, %g0
>>> -	ldd	[%o2 + 0x30], %f12
>>> -	bne,pn	%xcc, 10f
>>> -	 ldd	[%o2 + 0x38], %f14
>>> -
>>> -1:
>>> -	ldd	[%o0 + 0x00], %f16
>>> -	ldd	[%o0 + 0x08], %f18
>>> -	ldd	[%o0 + 0x10], %f20
>>> -	ldd	[%o0 + 0x18], %f22
>>> -	ldd	[%o0 + 0x20], %f24
>>> -	ldd	[%o0 + 0x28], %f26
>>> -	ldd	[%o0 + 0x30], %f28
>>> -	ldd	[%o0 + 0x38], %f30
>>> -	ldd	[%o0 + 0x40], %f32
>>> -	ldd	[%o0 + 0x48], %f34
>>> -	ldd	[%o0 + 0x50], %f36
>>> -	ldd	[%o0 + 0x58], %f38
>>> -	ldd	[%o0 + 0x60], %f40
>>> -	ldd	[%o0 + 0x68], %f42
>>> -	ldd	[%o0 + 0x70], %f44
>>> -	ldd	[%o0 + 0x78], %f46
>>> -
>>> -	SHA512
>>> -
>>> -	subcc	%o1, 0x80, %o1
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x80, %o0
>>> -
>>> -5:
>>> -	std	%f0, [%o2 + 0x00]
>>> -	std	%f2, [%o2 + 0x08]
>>> -	std	%f4, [%o2 + 0x10]
>>> -	std	%f6, [%o2 + 0x18]
>>> -	std	%f8, [%o2 + 0x20]
>>> -	std	%f10, [%o2 + 0x28]
>>> -	std	%f12, [%o2 + 0x30]
>>> -	retl
>>> -	 std	%f14, [%o2 + 0x38]
>>> -10:
>>> -	alignaddr %o0, %g0, %o0
>>> -
>>> -	ldd	[%o0 + 0x00], %f18
>>> -1:
>>> -	ldd	[%o0 + 0x08], %f20
>>> -	ldd	[%o0 + 0x10], %f22
>>> -	ldd	[%o0 + 0x18], %f24
>>> -	ldd	[%o0 + 0x20], %f26
>>> -	ldd	[%o0 + 0x28], %f28
>>> -	ldd	[%o0 + 0x30], %f30
>>> -	ldd	[%o0 + 0x38], %f32
>>> -	ldd	[%o0 + 0x40], %f34
>>> -	ldd	[%o0 + 0x48], %f36
>>> -	ldd	[%o0 + 0x50], %f38
>>> -	ldd	[%o0 + 0x58], %f40
>>> -	ldd	[%o0 + 0x60], %f42
>>> -	ldd	[%o0 + 0x68], %f44
>>> -	ldd	[%o0 + 0x70], %f46
>>> -	ldd	[%o0 + 0x78], %f48
>>> -	ldd	[%o0 + 0x80], %f50
>>> -
>>> -	faligndata %f18, %f20, %f16
>>> -	faligndata %f20, %f22, %f18
>>> -	faligndata %f22, %f24, %f20
>>> -	faligndata %f24, %f26, %f22
>>> -	faligndata %f26, %f28, %f24
>>> -	faligndata %f28, %f30, %f26
>>> -	faligndata %f30, %f32, %f28
>>> -	faligndata %f32, %f34, %f30
>>> -	faligndata %f34, %f36, %f32
>>> -	faligndata %f36, %f38, %f34
>>> -	faligndata %f38, %f40, %f36
>>> -	faligndata %f40, %f42, %f38
>>> -	faligndata %f42, %f44, %f40
>>> -	faligndata %f44, %f46, %f42
>>> -	faligndata %f46, %f48, %f44
>>> -	faligndata %f48, %f50, %f46
>>> -
>>> -	SHA512
>>> -
>>> -	subcc	%o1, 0x80, %o1
>>> -	fsrc2	%f50, %f18
>>> -	bne,pt	%xcc, 1b
>>> -	 add	%o0, 0x80, %o0
>>> -
>>> -	ba,a,pt	%xcc, 5b
>>> -END(__sha512_process_block_crop)
>>
Adhemerval Zanella Netto July 17, 2023, 5:55 p.m. UTC | #4
On 17/07/23 14:31, Sam James wrote:
> 
> Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:
> 
>> On 17/07/23 12:01, Sam James wrote:
>>>
>>> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
>>>
>>>> The libcrypt was maked to phase out on 2.28, and better projects
>>>> already exist that provide both compatibility and better API
>>>> (libxcrypt).  The sparc optimizations add the burden to extra
>>>> build-many-glibcs.py configurations.
>>>>
>>>
>>> I guess. I'd personally prefer just removing it all when libcrypt
>>> is removed, not hacking away at it beforehand.
>>
>> I don't think we will ever be able to remove libgcrypt due compat reason.
>> Maybe we can make crypt return ENOSYS as default, but even though I think
>> if libcrypt is still enabled we will need to keep old code as compat
>> layer. 
>>
> 
> In the other thread, we're talking about when it's time to kill it
> entirely (I suppose just the option to build, not the real
> implementation).

I am not sure what kind of compatibility we will need to preserve for
libcrypto.  For sunrpc 5500cdba401), we have removed most of the symbols
but still kept some old ones for compatibility even though the
libtirpc does implement such symbols (like key_setsecret for instance).

It seems that libcrypto is way simpler, and libxcrypt does implement
all require symbol version which the expected. So it should be doable.

> 
> My assumption was we'd remove optimisations like this at that point.

The idea of the patch is to streamline the required build coverage to
avoid having a --enable-crypt just for sparc.  Sure we can pack if/when
we remove libcrypto, but I think this is orthogonal.
Sam James July 17, 2023, 5:58 p.m. UTC | #5
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:

> On 17/07/23 14:31, Sam James wrote:
>> 
>> Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:
>> 
>>> On 17/07/23 12:01, Sam James wrote:
>>>>
>>>> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
>>>>
>>>>> The libcrypt was maked to phase out on 2.28, and better projects
>>>>> already exist that provide both compatibility and better API
>>>>> (libxcrypt).  The sparc optimizations add the burden to extra
>>>>> build-many-glibcs.py configurations.
>>>>>
>>>>
>>>> I guess. I'd personally prefer just removing it all when libcrypt
>>>> is removed, not hacking away at it beforehand.
>>>
>>> I don't think we will ever be able to remove libgcrypt due compat reason.
>>> Maybe we can make crypt return ENOSYS as default, but even though I think
>>> if libcrypt is still enabled we will need to keep old code as compat
>>> layer. 
>>>
>> 
>> In the other thread, we're talking about when it's time to kill it
>> entirely (I suppose just the option to build, not the real
>> implementation).
>
> I am not sure what kind of compatibility we will need to preserve for
> libcrypto.  For sunrpc 5500cdba401), we have removed most of the symbols
> but still kept some old ones for compatibility even though the
> libtirpc does implement such symbols (like key_setsecret for instance).
>
> It seems that libcrypto is way simpler, and libxcrypt does implement
> all require symbol version which the expected. So it should be doable.
>
>> 
>> My assumption was we'd remove optimisations like this at that point.
>
> The idea of the patch is to streamline the required build coverage to
> avoid having a --enable-crypt just for sparc.  Sure we can pack if/when
> we remove libcrypto, but I think this is orthogonal.

You feel strongly so it's fine with me to yank it then, I just felt it
was cleaner to not "soft-kill" it before it was removed, but you're right
that it's unclear how we're even going to remove it and how far.

Objection withdrawn - thanks!
diff mbox series

Patch

diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
index a6d08f3a00..d35f95e8e2 100644
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
@@ -1,11 +1,3 @@ 
-ifeq ($(subdir),crypt)
-libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
-endif
-
-ifeq ($(subdir),locale)
-localedef-aux += md5-crop
-endif
-
 ifeq ($(subdir),string)
 sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
 		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
deleted file mode 100644
index 3765cabae7..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/md5-block.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
deleted file mode 100644
index 11a3a81482..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/md5-crop.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
deleted file mode 100644
index 600c602b61..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/sha256-block.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
deleted file mode 100644
index 4895405853..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/sha256-crop.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
deleted file mode 100644
index 7c7c54e5a6..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/sha512-block.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
deleted file mode 100644
index cc74a99d3c..0000000000
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sparc64/multiarch/sha512-crop.S>
diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
index eaf758e7aa..5dcd7bbb0e 100644
--- a/sysdeps/sparc/sparc64/multiarch/Makefile
+++ b/sysdeps/sparc/sparc64/multiarch/Makefile
@@ -1,11 +1,3 @@ 
-ifeq ($(subdir),crypt)
-libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
-endif
-
-ifeq ($(subdir),locale)
-localedef-aux += md5-crop
-endif
-
 ifeq ($(subdir),string)
 sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
 		   memset-niagara1 memcpy-niagara4 memset-niagara4 \
diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c
deleted file mode 100644
index 7c1a3a368f..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/md5-block.c
+++ /dev/null
@@ -1,29 +0,0 @@ 
-#include <sparc-ifunc.h>
-
-#define  __md5_process_block __md5_process_block_generic
-extern void __md5_process_block_generic (const void *buffer, size_t len,
-					 struct md5_ctx *ctx);
-
-#include <crypt/md5-block.c>
-
-#undef __md5_process_block
-
-extern void __md5_process_block_crop (const void *buffer, size_t len,
-				      struct md5_ctx *ctx);
-static bool cpu_supports_md5(int hwcap)
-{
-  unsigned long cfr;
-
-  if (!(hwcap & HWCAP_SPARC_CRYPTO))
-    return false;
-
-  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
-  if (cfr & (1 << 4))
-    return true;
-
-  return false;
-}
-
-extern void __md5_process_block (const void *buffer, size_t len,
-				 struct md5_ctx *ctx);
-sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic);
diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S
deleted file mode 100644
index 53c27d677d..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S
+++ /dev/null
@@ -1,109 +0,0 @@ 
-/* MD5 using sparc crypto opcodes.
-   Copyright (C) 2012-2023 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/>.  */
-
-#include <sysdep.h>
-
-#define ASI_PL 0x88
-
-#define MD5		\
-	.word	0x81b02800;
-
-	.text
-	.align	32
-ENTRY(__md5_process_block_crop)
-	/* %o0=buffer, %o1=len, %o2=CTX */
-	ld	[%o2 + 0x10], %g1
-	add	%g1, %o1, %o4
-	st	%o4, [%o2 + 0x10]
-	clr	%o5
-	cmp	%o4, %g1
-	movlu	%icc, 1, %o5
-#ifdef __arch64__
-	srlx	%o1, 32, %o4
-	add	%o5, %o4, %o5
-#endif
-	ld	[%o2 + 0x14], %o4
-	add	%o4, %o5, %o4
-	st	%o4, [%o2 + 0x14]
-	lda	[%o2] ASI_PL, %f0
-	add	%o2, 0x4, %g1
-	lda	[%g1] ASI_PL, %f1
-	add	%o2, 0x8, %g1
-	andcc	%o0, 0x7, %g0
-	lda	[%g1] ASI_PL, %f2
-	add	%o2, 0xc, %g1
-	bne,pn	%xcc, 10f
-	 lda	[%g1] ASI_PL, %f3
-
-1:
-	ldd	[%o0 + 0x00], %f8
-	ldd	[%o0 + 0x08], %f10
-	ldd	[%o0 + 0x10], %f12
-	ldd	[%o0 + 0x18], %f14
-	ldd	[%o0 + 0x20], %f16
-	ldd	[%o0 + 0x28], %f18
-	ldd	[%o0 + 0x30], %f20
-	ldd	[%o0 + 0x38], %f22
-
-	MD5
-
-	subcc	%o1, 64, %o1
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x40, %o0
-
-5:
-	sta	%f0, [%o2] ASI_PL
-	add	%o2, 0x4, %g1
-	sta	%f1, [%g1] ASI_PL
-	add	%o2, 0x8, %g1
-	sta	%f2, [%g1] ASI_PL
-	add	%o2, 0xc, %g1
-	retl
-	 sta	%f3, [%g1] ASI_PL
-10:
-	alignaddr %o0, %g0, %o0
-
-	ldd	[%o0 + 0x00], %f10
-1:
-	ldd	[%o0 + 0x08], %f12
-	ldd	[%o0 + 0x10], %f14
-	ldd	[%o0 + 0x18], %f16
-	ldd	[%o0 + 0x20], %f18
-	ldd	[%o0 + 0x28], %f20
-	ldd	[%o0 + 0x30], %f22
-	ldd	[%o0 + 0x38], %f24
-	ldd	[%o0 + 0x40], %f26
-
-	faligndata %f10, %f12, %f8
-	faligndata %f12, %f14, %f10
-	faligndata %f14, %f16, %f12
-	faligndata %f16, %f18, %f14
-	faligndata %f18, %f20, %f16
-	faligndata %f20, %f22, %f18
-	faligndata %f22, %f24, %f20
-	faligndata %f24, %f26, %f22
-
-	MD5
-
-	subcc	%o1, 64, %o1
-	fsrc2	%f26, %f10
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x40, %o0
-
-	ba,a,pt	%xcc, 5b
-END(__md5_process_block_crop)
diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c
deleted file mode 100644
index 9d65315a5a..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c
+++ /dev/null
@@ -1,32 +0,0 @@ 
-#include <sparc-ifunc.h>
-
-#define __sha256_process_block __sha256_process_block_generic
-extern void __sha256_process_block_generic (const void *buffer, size_t len,
-					    struct sha256_ctx *ctx);
-
-#include <crypt/sha256-block.c>
-
-#undef __sha256_process_block
-
-extern void __sha256_process_block_crop (const void *buffer, size_t len,
-					 struct sha256_ctx *ctx);
-
-static bool cpu_supports_sha256(int hwcap)
-{
-  unsigned long cfr;
-
-  if (!(hwcap & HWCAP_SPARC_CRYPTO))
-    return false;
-
-  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
-  if (cfr & (1 << 6))
-    return true;
-
-  return false;
-}
-
-extern void __sha256_process_block (const void *buffer, size_t len,
-				    struct sha256_ctx *ctx);
-sparc_libc_ifunc (__sha256_process_block,
-		  cpu_supports_sha256(hwcap) ? __sha256_process_block_crop
-		    : __sha256_process_block_generic);
diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
deleted file mode 100644
index f7d0a7e7dc..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S
+++ /dev/null
@@ -1,100 +0,0 @@ 
-/* SHA256 using sparc crypto opcodes.
-   Copyright (C) 2012-2023 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/>.  */
-
-#include <sysdep.h>
-
-#define SHA256		\
-	.word	0x81b02840;
-
-	.text
-	.align	32
-ENTRY(__sha256_process_block_crop)
-	/* %o0=buffer, %o1=len, %o2=CTX */
-	ldx	[%o2 + 0x20], %g1
-	add	%g1, %o1, %g1
-	stx	%g1, [%o2 + 0x20]
-
-	ld	[%o2 + 0x00], %f0
-	ld	[%o2 + 0x04], %f1
-	ld	[%o2 + 0x08], %f2
-	ld	[%o2 + 0x0c], %f3
-	ld	[%o2 + 0x10], %f4
-	ld	[%o2 + 0x14], %f5
-	andcc	%o1, 0x7, %g0
-	ld	[%o2 + 0x18], %f6
-	bne,pn	%xcc, 10f
-	 ld	[%o2 + 0x1c], %f7
-
-1:
-	ldd	[%o0 + 0x00], %f8
-	ldd	[%o0 + 0x08], %f10
-	ldd	[%o0 + 0x10], %f12
-	ldd	[%o0 + 0x18], %f14
-	ldd	[%o0 + 0x20], %f16
-	ldd	[%o0 + 0x28], %f18
-	ldd	[%o0 + 0x30], %f20
-	ldd	[%o0 + 0x38], %f22
-
-	SHA256
-
-	subcc	%o1, 0x40, %o1
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x40, %o0
-
-5:
-	st	%f0, [%o2 + 0x00]
-	st	%f1, [%o2 + 0x04]
-	st	%f2, [%o2 + 0x08]
-	st	%f3, [%o2 + 0x0c]
-	st	%f4, [%o2 + 0x10]
-	st	%f5, [%o2 + 0x14]
-	st	%f6, [%o2 + 0x18]
-	retl
-	 st	%f7, [%o2 + 0x1c]
-10:
-	alignaddr %o0, %g0, %o0
-
-	ldd	[%o0 + 0x00], %f10
-1:
-	ldd	[%o0 + 0x08], %f12
-	ldd	[%o0 + 0x10], %f14
-	ldd	[%o0 + 0x18], %f16
-	ldd	[%o0 + 0x20], %f18
-	ldd	[%o0 + 0x28], %f20
-	ldd	[%o0 + 0x30], %f22
-	ldd	[%o0 + 0x38], %f24
-	ldd	[%o0 + 0x40], %f26
-
-	faligndata %f10, %f12, %f8
-	faligndata %f12, %f14, %f10
-	faligndata %f14, %f16, %f12
-	faligndata %f16, %f18, %f14
-	faligndata %f18, %f20, %f16
-	faligndata %f20, %f22, %f18
-	faligndata %f22, %f24, %f20
-	faligndata %f24, %f26, %f22
-
-	SHA256
-
-	subcc	%o1, 0x40, %o1
-	fsrc2	%f26, %f10
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x40, %o0
-
-	ba,a,pt	%xcc, 5b
-END(__sha256_process_block_crop)
diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c
deleted file mode 100644
index 2863e05d09..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c
+++ /dev/null
@@ -1,32 +0,0 @@ 
-#include <sparc-ifunc.h>
-
-#define __sha512_process_block __sha512_process_block_generic
-extern void __sha512_process_block_generic (const void *buffer, size_t len,
-					    struct sha512_ctx *ctx);
-
-#include <crypt/sha512-block.c>
-
-#undef __sha512_process_block
-
-extern void __sha512_process_block_crop (const void *buffer, size_t len,
-					 struct sha512_ctx *ctx);
-
-static bool cpu_supports_sha512(int hwcap)
-{
-  unsigned long cfr;
-
-  if (!(hwcap & HWCAP_SPARC_CRYPTO))
-    return false;
-
-  __asm__ ("rd %%asr26, %0" : "=r" (cfr));
-  if (cfr & (1 << 6))
-    return true;
-
-  return false;
-}
-
-extern void __sha512_process_block (const void *buffer, size_t len,
-				    struct sha512_ctx *ctx);
-sparc_libc_ifunc (__sha512_process_block,
-		  cpu_supports_sha512(hwcap) ? __sha512_process_block_crop
-		    : __sha512_process_block_generic);
diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
deleted file mode 100644
index 035f99f469..0000000000
--- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S
+++ /dev/null
@@ -1,130 +0,0 @@ 
-/* SHA512 using sparc crypto opcodes.
-   Copyright (C) 2012-2023 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/>.  */
-
-#include <sysdep.h>
-
-#define SHA512		\
-	.word	0x81b02860;
-
-	.text
-	.align	32
-ENTRY(__sha512_process_block_crop)
-	/* %o0=buffer, %o1=len, %o2=CTX */
-	ldx	[%o2 + 0x48], %g1
-	add	%g1, %o1, %o4
-	stx	%o4, [%o2 + 0x48]
-	cmp	%o4, %g1
-	bgeu,pt	%xcc, 1f
-	 nop
-	ldx	[%o2 + 0x40], %g1
-	add	%g1, 1, %g1
-	stx	%g1, [%o2 + 0x40]
-
-1:	ldd	[%o2 + 0x00], %f0
-	ldd	[%o2 + 0x08], %f2
-	ldd	[%o2 + 0x10], %f4
-	ldd	[%o2 + 0x18], %f6
-	ldd	[%o2 + 0x20], %f8
-	ldd	[%o2 + 0x28], %f10
-	andcc	%o1, 0x7, %g0
-	ldd	[%o2 + 0x30], %f12
-	bne,pn	%xcc, 10f
-	 ldd	[%o2 + 0x38], %f14
-
-1:
-	ldd	[%o0 + 0x00], %f16
-	ldd	[%o0 + 0x08], %f18
-	ldd	[%o0 + 0x10], %f20
-	ldd	[%o0 + 0x18], %f22
-	ldd	[%o0 + 0x20], %f24
-	ldd	[%o0 + 0x28], %f26
-	ldd	[%o0 + 0x30], %f28
-	ldd	[%o0 + 0x38], %f30
-	ldd	[%o0 + 0x40], %f32
-	ldd	[%o0 + 0x48], %f34
-	ldd	[%o0 + 0x50], %f36
-	ldd	[%o0 + 0x58], %f38
-	ldd	[%o0 + 0x60], %f40
-	ldd	[%o0 + 0x68], %f42
-	ldd	[%o0 + 0x70], %f44
-	ldd	[%o0 + 0x78], %f46
-
-	SHA512
-
-	subcc	%o1, 0x80, %o1
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x80, %o0
-
-5:
-	std	%f0, [%o2 + 0x00]
-	std	%f2, [%o2 + 0x08]
-	std	%f4, [%o2 + 0x10]
-	std	%f6, [%o2 + 0x18]
-	std	%f8, [%o2 + 0x20]
-	std	%f10, [%o2 + 0x28]
-	std	%f12, [%o2 + 0x30]
-	retl
-	 std	%f14, [%o2 + 0x38]
-10:
-	alignaddr %o0, %g0, %o0
-
-	ldd	[%o0 + 0x00], %f18
-1:
-	ldd	[%o0 + 0x08], %f20
-	ldd	[%o0 + 0x10], %f22
-	ldd	[%o0 + 0x18], %f24
-	ldd	[%o0 + 0x20], %f26
-	ldd	[%o0 + 0x28], %f28
-	ldd	[%o0 + 0x30], %f30
-	ldd	[%o0 + 0x38], %f32
-	ldd	[%o0 + 0x40], %f34
-	ldd	[%o0 + 0x48], %f36
-	ldd	[%o0 + 0x50], %f38
-	ldd	[%o0 + 0x58], %f40
-	ldd	[%o0 + 0x60], %f42
-	ldd	[%o0 + 0x68], %f44
-	ldd	[%o0 + 0x70], %f46
-	ldd	[%o0 + 0x78], %f48
-	ldd	[%o0 + 0x80], %f50
-
-	faligndata %f18, %f20, %f16
-	faligndata %f20, %f22, %f18
-	faligndata %f22, %f24, %f20
-	faligndata %f24, %f26, %f22
-	faligndata %f26, %f28, %f24
-	faligndata %f28, %f30, %f26
-	faligndata %f30, %f32, %f28
-	faligndata %f32, %f34, %f30
-	faligndata %f34, %f36, %f32
-	faligndata %f36, %f38, %f34
-	faligndata %f38, %f40, %f36
-	faligndata %f40, %f42, %f38
-	faligndata %f42, %f44, %f40
-	faligndata %f44, %f46, %f42
-	faligndata %f46, %f48, %f44
-	faligndata %f48, %f50, %f46
-
-	SHA512
-
-	subcc	%o1, 0x80, %o1
-	fsrc2	%f50, %f18
-	bne,pt	%xcc, 1b
-	 add	%o0, 0x80, %o0
-
-	ba,a,pt	%xcc, 5b
-END(__sha512_process_block_crop)