[PATCH 2/5] s390: Remove s390-32 specific code in non s390-32 specific files

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Wed Apr 15 19:23:39 GMT 2026



On 09/04/26 05:47, Stefan Liebler wrote:
> This patch removes s390-32 specific code in either common-code files
> or shared files between s390-64 and s390-32.
> 
> Such code was guarded with preprocessor guards which check the size
> of __WORDSIZE or __ELF_NATIVE_CLASS and of course the existance of
> __s390x__ and __s390__ macros.
> 
> Note, that if __s390x__ is defined then __s390__ is also defined.
> This patch also adjust guards for __s390__ only to __s390x__ to
> make clear that those are still needed.
> 
> Futhermore the macro names for ifunc variants were adjusted from
> XYZ_Z900_G5 to XYZ_Z900 as G5 is a pre 64bit machine.
> 
> On s390-32 we've used the special assembler directive to enable
> zarch instructions:
> .machinemode "zarch_nohighgprs"
> As this is not needed on s390-64 anymore as zarch is enabled by default,
> just drop those lines.
> Furthermore we do not check for HWCAP_S390_ZARCH and HWCAP_S390_HIGH_GPRS
> anymore. Just simplify those checks for e.g. stfle- or cuXY-instructions.
> 
> The 32/64 abi-variants and the corresponding abi-conditions are now also
> removed from the s390 Makefiles and thus we now only generate a single
> gnu/stubs.h and gnu/lib-names.h file instead of also having the different
> ones for both abi-variants.
> 
> After removing process_elf32_file in s390 readelflib.c, ldconfig is only
> recognizing 64bit ELF files for ld.so.cache.
> 
> Various comments mentioning s390 (with meaning s390-32) were removed/adjusted.

The generic bits seems fine, I did not look in detail in the arch-specific
optimized routines changes.

The only one nit below for the stdlib/test-bz22786.c.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  README                                        |   1 -
>  elf/elf.h                                     |   7 +-
>  intl/dcigettext.c                             |   2 +-
>  manual/math.texi                              |   2 +-
>  stdlib/test-bz22786.c                         |   4 +-
>  string/string-inlines.c                       |   2 +-
>  support/support_readdir.c                     |   4 +-
>  sysdeps/s390/bits/link.h                      |  60 ---------
>  sysdeps/s390/bits/setjmp.h                    |   6 -
>  sysdeps/s390/configure                        |   2 -
>  sysdeps/s390/configure.ac                     |   2 -
>  sysdeps/s390/cpu-features.c                   |   5 +-
>  sysdeps/s390/dl-tls.h                         |  15 ---
>  sysdeps/s390/fpu/fenv_private.h               |   2 +-
>  sysdeps/s390/fpu/s_llrint.c                   |   6 +-
>  sysdeps/s390/fpu/s_llrintf.c                  |   6 +-
>  sysdeps/s390/fpu/s_llrintl.c                  |   6 +-
>  sysdeps/s390/fpu/s_llround.c                  |   6 +-
>  sysdeps/s390/fpu/s_llroundf.c                 |   6 +-
>  sysdeps/s390/fpu/s_llroundl.c                 |   6 +-
>  sysdeps/s390/fpu/s_lrint.c                    |  13 +-
>  sysdeps/s390/fpu/s_lrintf.c                   |  13 +-
>  sysdeps/s390/fpu/s_lrintl.c                   |  13 +-
>  sysdeps/s390/fpu/s_lround.c                   |  11 +-
>  sysdeps/s390/fpu/s_lroundf.c                  |  11 +-
>  sysdeps/s390/fpu/s_lroundl.c                  |  11 +-
>  sysdeps/s390/ifunc-memchr.h                   |  12 +-
>  sysdeps/s390/ifunc-memcmp.h                   |  14 +-
>  sysdeps/s390/ifunc-memcpy.h                   |  20 +--
>  sysdeps/s390/ifunc-memset.h                   |  14 +-
>  sysdeps/s390/ifunc-strcmp.h                   |  12 +-
>  sysdeps/s390/ifunc-strcpy.h                   |  12 +-
>  sysdeps/s390/ifunc-strncpy.h                  |  12 +-
>  sysdeps/s390/iso-8859-1_cp037_z900.c          |   8 +-
>  sysdeps/s390/jmpbuf-unwind.h                  |   3 +-
>  sysdeps/s390/ldsodefs.h                       |  13 --
>  sysdeps/s390/linkmap.h                        |  16 +--
>  sysdeps/s390/memccpy-vx.S                     |   7 +-
>  sysdeps/s390/memchr-vx.S                      |  10 +-
>  sysdeps/s390/memchr-z900.S                    |  45 ++-----
>  sysdeps/s390/memchr.c                         |   4 +-
>  sysdeps/s390/memcmp-z900.S                    |  76 +++--------
>  sysdeps/s390/memcmp.c                         |   4 +-
>  sysdeps/s390/memcopy.h                        |   2 +-
>  sysdeps/s390/memcpy-z900.S                    | 122 +++++-------------
>  sysdeps/s390/memcpy.c                         |   4 +-
>  sysdeps/s390/memmem-arch13.S                  |   9 +-
>  sysdeps/s390/mempcpy.c                        |   4 +-
>  sysdeps/s390/memrchr-vx.S                     |   6 +-
>  sysdeps/s390/memset-z900.S                    |  84 ++++--------
>  sysdeps/s390/memset.c                         |   4 +-
>  sysdeps/s390/multiarch/8bit-generic.c         |   3 -
>  sysdeps/s390/multiarch/gconv_simple.c         |  23 ----
>  sysdeps/s390/multiarch/ifunc-impl-list.c      |  34 ++---
>  sysdeps/s390/multiarch/ifunc-resolve.h        |   2 +-
>  sysdeps/s390/multiarch/utf8-utf16-z9.c        |   4 +-
>  sysdeps/s390/multiarch/utf8-utf32-z9.c        |   4 +-
>  sysdeps/s390/nptl/bits/struct_mutex.h         |  24 +---
>  sysdeps/s390/nptl/bits/struct_rwlock.h        |  17 +--
>  sysdeps/s390/nptl/pthread-offsets.h           |  15 +--
>  sysdeps/s390/nptl/tls.h                       |   4 -
>  sysdeps/s390/rawmemchr-vx.S                   |   3 +-
>  sysdeps/s390/s390-64/bits/wordsize.h          |  11 +-
>  sysdeps/s390/s390-64/stackguard-macros.h      |   2 +-
>  sysdeps/s390/s390-64/strncpy-z900.S           |  10 +-
>  sysdeps/s390/sotruss-lib.c                    |  33 ++---
>  sysdeps/s390/stpcpy-vx.S                      |   3 +-
>  sysdeps/s390/stpncpy-vx.S                     |   7 +-
>  sysdeps/s390/strcat-vx.S                      |   3 +-
>  sysdeps/s390/strchr-vx.S                      |   3 +-
>  sysdeps/s390/strchrnul-vx.S                   |   3 +-
>  sysdeps/s390/strcmp-vx.S                      |   5 +-
>  sysdeps/s390/strcmp-z900.S                    |  26 ++--
>  sysdeps/s390/strcmp.c                         |   4 +-
>  sysdeps/s390/strcpy-vx.S                      |   5 +-
>  sysdeps/s390/strcpy-z900.S                    |  29 ++---
>  sysdeps/s390/strcpy.c                         |   4 +-
>  sysdeps/s390/strcspn-vx.S                     |   3 +-
>  sysdeps/s390/strlen-vx.S                      |   3 +-
>  sysdeps/s390/strncat-vx.S                     |   7 +-
>  sysdeps/s390/strncmp-vx.S                     |   7 +-
>  sysdeps/s390/strncpy-vx.S                     |   9 +-
>  sysdeps/s390/strncpy.c                        |   4 +-
>  sysdeps/s390/strnlen-vx.S                     |   7 +-
>  sysdeps/s390/strpbrk-vx.S                     |   3 +-
>  sysdeps/s390/strrchr-vx.S                     |   3 +-
>  sysdeps/s390/strspn-vx.S                      |   3 +-
>  sysdeps/s390/strstr-arch13.S                  |   3 +-
>  sysdeps/s390/tst-dl-runtime-mod.S             |   4 -
>  sysdeps/s390/tst-dl-runtime.c                 |  27 ----
>  sysdeps/s390/utf16-utf32-z9.c                 |  18 ---
>  sysdeps/s390/utf8-utf16-z9.c                  |  16 ---
>  sysdeps/s390/utf8-utf32-z9.c                  |  16 ---
>  sysdeps/s390/wcpcpy-vx.S                      |   3 +-
>  sysdeps/s390/wcpncpy-vx.S                     |  12 +-
>  sysdeps/s390/wcscat-vx.S                      |   3 +-
>  sysdeps/s390/wcschr-vx.S                      |   3 +-
>  sysdeps/s390/wcschrnul-vx.S                   |   3 +-
>  sysdeps/s390/wcscmp-vx.S                      |   3 +-
>  sysdeps/s390/wcscpy-vx.S                      |   3 +-
>  sysdeps/s390/wcscspn-vx.S                     |   3 +-
>  sysdeps/s390/wcslen-vx.S                      |   3 +-
>  sysdeps/s390/wcsncat-vx.S                     |  12 +-
>  sysdeps/s390/wcsncmp-vx.S                     |  12 +-
>  sysdeps/s390/wcsncpy-vx.S                     |  12 +-
>  sysdeps/s390/wcsnlen-vx.S                     |  12 +-
>  sysdeps/s390/wcspbrk-vx.S                     |   3 +-
>  sysdeps/s390/wcsrchr-vx.S                     |   3 +-
>  sysdeps/s390/wcsspn-vx.S                      |   3 +-
>  sysdeps/s390/wmemchr-vx.S                     |  12 +-
>  sysdeps/s390/wmemcmp-vx.S                     |  12 +-
>  sysdeps/s390/wmemset-vx.S                     |  12 +-
>  sysdeps/unix/sysv/linux/fxstat.c              |   2 +-
>  sysdeps/unix/sysv/linux/fxstatat.c            |   2 +-
>  sysdeps/unix/sysv/linux/ipc_priv.h            |   4 +-
>  sysdeps/unix/sysv/linux/kernel-features.h     |   2 +-
>  sysdeps/unix/sysv/linux/lxstat.c              |   2 +-
>  sysdeps/unix/sysv/linux/lxstat64.c            |   2 +-
>  sysdeps/unix/sysv/linux/posix_fadvise.c       |   6 +-
>  sysdeps/unix/sysv/linux/posix_fadvise64.c     |   6 +-
>  sysdeps/unix/sysv/linux/s390/Makefile         |   4 -
>  sysdeps/unix/sysv/linux/s390/bits/elfclass.h  |   5 -
>  sysdeps/unix/sysv/linux/s390/bits/fcntl.h     |  26 +---
>  sysdeps/unix/sysv/linux/s390/bits/sigaction.h |  35 +----
>  .../unix/sysv/linux/s390/bits/struct_stat.h   | 120 +----------------
>  sysdeps/unix/sysv/linux/s390/bits/typesizes.h |  36 ++----
>  .../unix/sysv/linux/s390/kernel-features.h    |   3 -
>  sysdeps/unix/sysv/linux/s390/readelflib.c     |  31 +----
>  sysdeps/unix/sysv/linux/s390/s390-64/Makefile |   3 -
>  sysdeps/unix/sysv/linux/s390/sigcontextinfo.h |   4 -
>  sysdeps/unix/sysv/linux/s390/sys/ucontext.h   |   6 +-
>  sysdeps/unix/sysv/linux/s390/sysconf.c        |  13 +-
>  sysdeps/unix/sysv/linux/s390/sysdep.h         |   5 -
>  sysdeps/unix/sysv/linux/s390/xstatver.h       |  21 +--
>  sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c |   6 +-
>  sysdeps/unix/sysv/linux/xstat.c               |   2 +-
>  sysdeps/unix/sysv/linux/xstat64.c             |   2 +-
>  137 files changed, 343 insertions(+), 1287 deletions(-)
> 
> diff --git a/README b/README
> index 2e360eb70a..570b259de5 100644
> --- a/README
> +++ b/README
> @@ -38,7 +38,6 @@ The GNU C Library supports these configurations for using Linux kernels:
>  	or1k-*-linux-gnu
>  	powerpc-*-linux-gnu	Hardware or software floating point, BE only.
>  	powerpc64*-*-linux-gnu	Big-endian and little-endian.
> -	s390-*-linux-gnu
>  	s390x-*-linux-gnu
>  	riscv32-*-linux-gnu
>  	riscv64-*-linux-gnu
> diff --git a/elf/elf.h b/elf/elf.h
> index 46a01281cb..3a60ef36b5 100644
> --- a/elf/elf.h
> +++ b/elf/elf.h
> @@ -798,7 +798,8 @@ typedef struct
>  #define NT_X86_XSTATE	0x202		/* x86 extended state using xsave */
>  #define NT_X86_SHSTK	0x204		/* x86 SHSTK state */
>  #define NT_X86_XSAVE_LAYOUT	0x205		/* XSAVE layout description.  */
> -#define NT_S390_HIGH_GPRS	0x300	/* s390 upper register halves */
> +#define NT_S390_HIGH_GPRS	0x300	/* s390 upper register halves.  This was
> +					   used in now removed s390-32 arch.  */
>  #define NT_S390_TIMER	0x301		/* s390 timer register */
>  #define NT_S390_TODCMP	0x302		/* s390 TOD clock comparator register */
>  #define NT_S390_TODPREG	0x303		/* s390 TOD programmable register */
> @@ -3470,7 +3471,9 @@ enum
>  
>  /* Valid values for the e_flags field.  */
>  
> -#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
> +#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.
> +					    This was used in now removed s390-32
> +					    arch.  */
>  
>  /* Additional s390 relocs */
>  
> diff --git a/intl/dcigettext.c b/intl/dcigettext.c
> index e70c938566..9ebc54eeec 100644
> --- a/intl/dcigettext.c
> +++ b/intl/dcigettext.c
> @@ -72,7 +72,7 @@ extern int errno;
>    /* Guess whether integer division by zero raises signal SIGFPE.
>       Set to 1 only if you know for sure.  In case of doubt, set to 0.  */
>  # if defined __alpha__ || defined __arm__ || defined __i386__ \
> -     || defined __m68k__ || defined __s390__
> +     || defined __m68k__ || defined __s390x__
>  #  define INTDIV0_RAISES_SIGFPE 1
>  # else
>  #  define INTDIV0_RAISES_SIGFPE 0
> diff --git a/manual/math.texi b/manual/math.texi
> index fd7284953d..cf57937943 100644
> --- a/manual/math.texi
> +++ b/manual/math.texi
> @@ -70,7 +70,7 @@ provided for @code{_Float32}, @code{_Float64} and @code{_Float32x} on
>  all platforms.
>  It is also provided for @code{_Float128} and @code{_Float64x} on
>  powerpc64le (PowerPC 64-bits little-endian), x86_64, x86,
> -aarch64, alpha, loongarch, mips64, riscv, s390 and sparc.
> +aarch64, alpha, loongarch, mips64, riscv, s390x and sparc.
>  
>  @menu
>  * Mathematical Constants::      Precise numeric values for often-used
> diff --git a/stdlib/test-bz22786.c b/stdlib/test-bz22786.c
> index 242a3044db..6e2636d896 100644
> --- a/stdlib/test-bz22786.c
> +++ b/stdlib/test-bz22786.c
> @@ -46,9 +46,7 @@ do_test (void)
>    if (path == NULL)
>      {
>        printf ("Repeated allocation (%zu bytes): %m\n", path_len);
> -      /* On 31-bit s390 the malloc will always fail as we do not have
> -	 so much memory, and we want to mark the test unsupported.
> -	 Likewise on systems with little physical memory the test will
> +      /* On systems with little physical memory the test will
>  	 fail and should be unsupported.  */
>        return EXIT_UNSUPPORTED;
>      }

If s390 is the only ABI where path might be NULL, maybe the remove the
check?

> diff --git a/string/string-inlines.c b/string/string-inlines.c
> index 7de9ff6aa4..bab58c91a2 100644
> --- a/string/string-inlines.c
> +++ b/string/string-inlines.c
> @@ -208,7 +208,7 @@ __old_strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
>  }
>  compat_symbol (libc, __old_strpbrk_c3, __strpbrk_c3, GLIBC_2_1_1);
>  
> -# if defined __mc68020__ || defined __s390__ || defined __i386__
> +# if defined __mc68020__ || defined __s390x__ || defined __i386__
>  #  define _STRING_INLINE_unaligned 1
>  # else
>  #  define _STRING_INLINE_unaligned 0
> diff --git a/support/support_readdir.c b/support/support_readdir.c
> index 6cb6b6bfcd..793b7bc87e 100644
> --- a/support/support_readdir.c
> +++ b/support/support_readdir.c
> @@ -42,8 +42,8 @@ static int (*readdir64_r_compat) (DIR *, struct __old_dirent64 *,
>  static void __attribute__ ((constructor))
>  init (void)
>  {
> -  /* These compat symbols exists on alpha, i386, m67k , powerpc, s390,
> -     sparc. at the same GLIBC_2.1 version. */
> +  /* These compat symbols exists on alpha, i386, m67k , powerpc, sparc
> +     at the same GLIBC_2.1 version. */
>    readdir64_compat = dlvsym (RTLD_DEFAULT, "readdir64", "GLIBC_2.1");
>    readdir64_r_compat = dlvsym (RTLD_DEFAULT, "readdir64_r", "GLIBC_2.1");
>  }
> diff --git a/sysdeps/s390/bits/link.h b/sysdeps/s390/bits/link.h
> index c9f6aab63c..794d6ca286 100644
> --- a/sysdeps/s390/bits/link.h
> +++ b/sysdeps/s390/bits/link.h
> @@ -23,64 +23,6 @@
>  typedef char La_s390_vr[16];
>  #endif
>  
> -#if __ELF_NATIVE_CLASS == 32
> -
> -/* Registers for entry into PLT on s390-32.  */
> -typedef struct La_s390_32_regs
> -{
> -  uint32_t lr_r2;
> -  uint32_t lr_r3;
> -  uint32_t lr_r4;
> -  uint32_t lr_r5;
> -  uint32_t lr_r6;
> -  double lr_fp0;
> -  double lr_fp2;
> -# if defined HAVE_S390_VX_ASM_SUPPORT
> -  La_s390_vr lr_v24;
> -  La_s390_vr lr_v25;
> -  La_s390_vr lr_v26;
> -  La_s390_vr lr_v27;
> -  La_s390_vr lr_v28;
> -  La_s390_vr lr_v29;
> -  La_s390_vr lr_v30;
> -  La_s390_vr lr_v31;
> -# endif
> -} La_s390_32_regs;
> -
> -/* Return values for calls from PLT on s390-32.  */
> -typedef struct La_s390_32_retval
> -{
> -  uint32_t lrv_r2;
> -  uint32_t lrv_r3;
> -  double lrv_fp0;
> -# if defined HAVE_S390_VX_ASM_SUPPORT
> -  La_s390_vr lrv_v24;
> -# endif
> -} La_s390_32_retval;
> -
> -
> -__BEGIN_DECLS
> -
> -extern Elf32_Addr la_s390_32_gnu_pltenter (Elf32_Sym *__sym,
> -					   unsigned int __ndx,
> -					   uintptr_t *__refcook,
> -					   uintptr_t *__defcook,
> -					   La_s390_32_regs *__regs,
> -					   unsigned int *__flags,
> -					   const char *__symname,
> -					   long int *__framesizep);
> -extern unsigned int la_s390_32_gnu_pltexit (Elf32_Sym *__sym,
> -					    unsigned int __ndx,
> -					    uintptr_t *__refcook,
> -					    uintptr_t *__defcook,
> -					    const La_s390_32_regs *__inregs,
> -					    La_s390_32_retval *__outregs,
> -					    const char *symname);
> -
> -__END_DECLS
> -
> -#else
> -
>  /* Registers for entry into PLT on s390-64.  */
>  typedef struct La_s390_64_regs
>  {
> @@ -135,5 +77,3 @@ extern unsigned int la_s390_64_gnu_pltexit (Elf64_Sym *__sym,
>  					    const char *__symname);
>  
>  __END_DECLS
> -
> -#endif
> diff --git a/sysdeps/s390/bits/setjmp.h b/sysdeps/s390/bits/setjmp.h
> index 4b87fe55a1..3afa770bf7 100644
> --- a/sysdeps/s390/bits/setjmp.h
> +++ b/sysdeps/s390/bits/setjmp.h
> @@ -33,13 +33,7 @@ typedef struct __s390_jmp_buf
>    /* We save registers 6-15.  */
>    long int __gregs[10];
>  
> -# if __WORDSIZE == 64
> -  /* We save fpu registers f8 - f15.  */
>    long __fpregs[8];
> -# else
> -  /* We save fpu registers 4 and 6.  */
> -  long __fpregs[4];
> -# endif
>  } __jmp_buf[1];
>  
>  #endif
> diff --git a/sysdeps/s390/configure b/sysdeps/s390/configure
> index e3766aa801..f4ec662610 100644
> --- a/sysdeps/s390/configure
> +++ b/sysdeps/s390/configure
> @@ -15,7 +15,6 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
>  void testvecinsn ()
>  {
>      __asm__ (".machine \"z13\" \n\t"
> -	     ".machinemode \"zarch_nohighgprs\" \n\t"
>  	     "vistrbs %%v16,%%v17 \n\t"
>  	     "locghie %%r1,0" : :);
>  }
> @@ -91,7 +90,6 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
>  void testinsn (char *buf)
>  {
>      __asm__ (".machine \"arch13\" \n\t"
> -	     ".machinemode \"zarch_nohighgprs\" \n\t"
>  	     "lghi %%r0,16 \n\t"
>  	     "mvcrl 0(%0),32(%0) \n\t"
>  	     "vstrs %%v20,%%v20,%%v20,%%v20,0,2"
> diff --git a/sysdeps/s390/configure.ac b/sysdeps/s390/configure.ac
> index 4265bfd9f4..82e1a4445f 100644
> --- a/sysdeps/s390/configure.ac
> +++ b/sysdeps/s390/configure.ac
> @@ -6,7 +6,6 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
>  void testvecinsn ()
>  {
>      __asm__ (".machine \"z13\" \n\t"
> -	     ".machinemode \"zarch_nohighgprs\" \n\t"
>  	     "vistrbs %%v16,%%v17 \n\t"
>  	     "locghie %%r1,0" : :);
>  }
> @@ -43,7 +42,6 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
>  void testinsn (char *buf)
>  {
>      __asm__ (".machine \"arch13\" \n\t"
> -	     ".machinemode \"zarch_nohighgprs\" \n\t"
>  	     "lghi %%r0,16 \n\t"
>  	     "mvcrl 0(%0),32(%0) \n\t"
>  	     "vstrs %%v20,%%v20,%%v20,%%v20,0,2"
> diff --git a/sysdeps/s390/cpu-features.c b/sysdeps/s390/cpu-features.c
> index 76e9079bd4..fd6f2357d5 100644
> --- a/sysdeps/s390/cpu-features.c
> +++ b/sysdeps/s390/cpu-features.c
> @@ -170,15 +170,12 @@ init_cpu_features_no_tunables (struct cpu_features *cpu_features)
>    cpu_features->hwcap = GLRO(dl_hwcap);
>  
>    /* We want just 1 double word to be returned.  */
> -  if (__glibc_likely ((cpu_features->hwcap & HWCAP_S390_STFLE)
> -		      && (cpu_features->hwcap & HWCAP_S390_ZARCH)
> -		      && (cpu_features->hwcap & HWCAP_S390_HIGH_GPRS)))
> +  if (__glibc_likely ((cpu_features->hwcap & HWCAP_S390_STFLE)))
>      {
>        unsigned long long stfle_bits[4] = { 0 };
>        register unsigned long reg0 __asm__("0") = 3;
>        __asm__ __volatile__(".machine push"        "\n\t"
>  			   ".machine \"z9-109\""  "\n\t"
> -			   ".machinemode \"zarch_nohighgprs\"\n\t"
>  			   "stfle %0"             "\n\t"
>  			   ".machine pop"         "\n"
>  			   : "=QS" (stfle_bits[0]),
> diff --git a/sysdeps/s390/dl-tls.h b/sysdeps/s390/dl-tls.h
> index eff8cb61b3..4c4f8e7b44 100644
> --- a/sysdeps/s390/dl-tls.h
> +++ b/sysdeps/s390/dl-tls.h
> @@ -69,7 +69,6 @@ versioned_symbol (ld, __tls_get_addr_internal_tmp,
>     2) __tls_get_offset returns the offset of the requested variable to
>        the thread descriptor instead of a pointer to the variable.
>   */
> -#  ifdef __s390x__
>  __asm__("\n\
>  	.text\n\
>  	.globl __tls_get_offset\n\
> @@ -79,20 +78,6 @@ __tls_get_offset:\n\
>  	la	%r2,0(%r2,%r12)\n\
>  	jg	__tls_get_addr\n\
>  ");
> -#  elif defined __s390__
> -__asm__("\n\
> -	.text\n\
> -	.globl __tls_get_offset\n\
> -	.type __tls_get_offset, @function\n\
> -	.align 4\n\
> -__tls_get_offset:\n\
> -	basr	%r3,0\n\
> -0:	la	%r2,0(%r2,%r12)\n\
> -	l	%r4,1f-0b(%r3)\n\
> -	b	0(%r4,%r3)\n\
> -1:	.long	__tls_get_addr - 0b\n\
> -");
> -#  endif
>  # else /* IS_IN (rtld) */
>  extern void *__tls_get_addr_internal (tls_index *ti);
>  # endif /* !IS_IN (rtld) */
> diff --git a/sysdeps/s390/fpu/fenv_private.h b/sysdeps/s390/fpu/fenv_private.h
> index fbefc7889c..42eb94cd15 100644
> --- a/sysdeps/s390/fpu/fenv_private.h
> +++ b/sysdeps/s390/fpu/fenv_private.h
> @@ -1,4 +1,4 @@
> -/* Private floating point rounding and exceptions handling.  390/s390x version.
> +/* Private floating point rounding and exceptions handling.  s390x version.
>     Copyright (C) 2019-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> diff --git a/sysdeps/s390/fpu/s_llrint.c b/sysdeps/s390/fpu/s_llrint.c
> index ae628b3025..03937b79a9 100644
> --- a/sysdeps/s390/fpu/s_llrint.c
> +++ b/sysdeps/s390/fpu/s_llrint.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <libm-alias-double.h>
>  
> diff --git a/sysdeps/s390/fpu/s_llrintf.c b/sysdeps/s390/fpu/s_llrintf.c
> index b94705da42..c3a8638c7c 100644
> --- a/sysdeps/s390/fpu/s_llrintf.c
> +++ b/sysdeps/s390/fpu/s_llrintf.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <libm-alias-float.h>
>  
> diff --git a/sysdeps/s390/fpu/s_llrintl.c b/sysdeps/s390/fpu/s_llrintl.c
> index 61938b67ee..5c3c0536b0 100644
> --- a/sysdeps/s390/fpu/s_llrintl.c
> +++ b/sysdeps/s390/fpu/s_llrintl.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <math_private.h>
>  # include <libm-alias-ldouble.h>
> diff --git a/sysdeps/s390/fpu/s_llround.c b/sysdeps/s390/fpu/s_llround.c
> index 0d598c4bd5..c625322384 100644
> --- a/sysdeps/s390/fpu/s_llround.c
> +++ b/sysdeps/s390/fpu/s_llround.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <libm-alias-double.h>
>  
> diff --git a/sysdeps/s390/fpu/s_llroundf.c b/sysdeps/s390/fpu/s_llroundf.c
> index 5b77705f1a..cdea8fc4f3 100644
> --- a/sysdeps/s390/fpu/s_llroundf.c
> +++ b/sysdeps/s390/fpu/s_llroundf.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <libm-alias-float.h>
>  
> diff --git a/sysdeps/s390/fpu/s_llroundl.c b/sysdeps/s390/fpu/s_llroundl.c
> index fff507979f..39d533b36c 100644
> --- a/sysdeps/s390/fpu/s_llroundl.c
> +++ b/sysdeps/s390/fpu/s_llroundl.c
> @@ -17,11 +17,7 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#if defined __s390x__ && defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
> -/* We only support s390x as on s390 a long long int refers to a register pair
> -   of two 4byte registers instead of a 8byte register which is produced by the
> -   instruction.
> -   Note: On s390 this instruction would only be used if build with -mzarch.  */
> +#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # include <math.h>
>  # include <math_private.h>
>  # include <libm-alias-ldouble.h>
> diff --git a/sysdeps/s390/fpu/s_lrint.c b/sysdeps/s390/fpu/s_lrint.c
> index e6c0117dca..6c99bab4b6 100644
> --- a/sysdeps/s390/fpu/s_lrint.c
> +++ b/sysdeps/s390/fpu/s_lrint.c
> @@ -21,15 +21,6 @@
>  # include <math.h>
>  # include <libm-alias-double.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgdbra"
> -# else
> -#  define INSN "cfdbra"
> -# endif
> -
>  long int
>  __lrint (double x)
>  {
> @@ -41,9 +32,9 @@ __lrint (double x)
>       Note: a nan is also indicated by cc=3).
>       If the resulting value is within the target limits, redo
>       without suppressing the inexact exception.  */
> -  __asm__ (INSN " %0,0,%1,4 \n\t"
> +  __asm__ ("cgdbra %0,0,%1,4 \n\t"
>  	   "jo 1f \n\t"
> -	   INSN " %0,0,%1,0 \n\t"
> +	   "cgdbra %0,0,%1,0 \n\t"
>  	   "1:"
>  	   : "=&d" (y) : "f" (x) : "cc");
>    return y;
> diff --git a/sysdeps/s390/fpu/s_lrintf.c b/sysdeps/s390/fpu/s_lrintf.c
> index 9e489e9d63..382836c4fb 100644
> --- a/sysdeps/s390/fpu/s_lrintf.c
> +++ b/sysdeps/s390/fpu/s_lrintf.c
> @@ -21,15 +21,6 @@
>  # include <math.h>
>  # include <libm-alias-float.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgebra"
> -# else
> -#  define INSN "cfebra"
> -# endif
> -
>  long int
>  __lrintf (float x)
>  {
> @@ -41,9 +32,9 @@ __lrintf (float x)
>       Note: a nan is also indicated by cc=3).
>       If the resulting value is within the target limits, redo
>       without suppressing the inexact exception.  */
> -  __asm__ (INSN " %0,0,%1,4 \n\t"
> +  __asm__ ("cgebra %0,0,%1,4 \n\t"
>  	   "jo 1f \n\t"
> -	   INSN " %0,0,%1,0 \n\t"
> +	   "cgebra %0,0,%1,0 \n\t"
>  	   "1:"
>  	   : "=&d" (y) : "f" (x) : "cc");
>    return y;
> diff --git a/sysdeps/s390/fpu/s_lrintl.c b/sysdeps/s390/fpu/s_lrintl.c
> index 417e7bd4dc..bf200a53c9 100644
> --- a/sysdeps/s390/fpu/s_lrintl.c
> +++ b/sysdeps/s390/fpu/s_lrintl.c
> @@ -22,15 +22,6 @@
>  # include <math_private.h>
>  # include <libm-alias-ldouble.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgxbra"
> -# else
> -#  define INSN "cfxbra"
> -# endif
> -
>  long int
>  __lrintl (_Float128 x)
>  {
> @@ -42,9 +33,9 @@ __lrintl (_Float128 x)
>       Note: a nan is also indicated by cc=3).
>       If the resulting value is within the target limits, redo
>       without suppressing the inexact exception.  */
> -  __asm__ (INSN " %0,0,%1,4 \n\t"
> +  __asm__ ("cgxbra %0,0,%1,4 \n\t"
>  	   "jo 1f \n\t"
> -	   INSN " %0,0,%1,0 \n\t"
> +	   "cgxbra %0,0,%1,0 \n\t"
>  	   "1:"
>  	   : "=&d" (y) : "f" (x) : "cc");
>    return y;
> diff --git a/sysdeps/s390/fpu/s_lround.c b/sysdeps/s390/fpu/s_lround.c
> index db079c4aeb..09d203e0c3 100644
> --- a/sysdeps/s390/fpu/s_lround.c
> +++ b/sysdeps/s390/fpu/s_lround.c
> @@ -21,15 +21,6 @@
>  # include <math.h>
>  # include <libm-alias-double.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgdbra"
> -# else
> -#  define INSN "cfdbra"
> -# endif
> -
>  long int
>  __lround (double x)
>  {
> @@ -37,7 +28,7 @@ __lround (double x)
>    /* The z196 zarch "convert to fixed" (cgdbra) instruction is rounding
>       x to the nearest integer with "ties away from 0" rounding mode
>       (M3-field: 1) where inexact exceptions are suppressed (M4-field: 4).  */
> -  __asm__ (INSN " %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
> +  __asm__ ("cgdbra %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
>    return y;
>  }
>  libm_alias_double (__lround, lround)
> diff --git a/sysdeps/s390/fpu/s_lroundf.c b/sysdeps/s390/fpu/s_lroundf.c
> index 4be5a1e1a7..80061d1ac8 100644
> --- a/sysdeps/s390/fpu/s_lroundf.c
> +++ b/sysdeps/s390/fpu/s_lroundf.c
> @@ -21,15 +21,6 @@
>  # include <math.h>
>  # include <libm-alias-float.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgebra"
> -# else
> -#  define INSN "cfebra"
> -# endif
> -
>  long int
>  __lroundf (float x)
>  {
> @@ -37,7 +28,7 @@ __lroundf (float x)
>    /* The z196 zarch "convert to fixed" (cgebra) instruction is rounding
>       x to the nearest integer with "ties away from 0" rounding mode
>       (M3-field: 1) where inexact exceptions are suppressed (M4-field: 4).  */
> -  __asm__ (INSN " %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
> +  __asm__ ("cgebra %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
>    return y;
>  }
>  libm_alias_float (__lround, lround)
> diff --git a/sysdeps/s390/fpu/s_lroundl.c b/sysdeps/s390/fpu/s_lroundl.c
> index 046a71f60a..0f8f486ed9 100644
> --- a/sysdeps/s390/fpu/s_lroundl.c
> +++ b/sysdeps/s390/fpu/s_lroundl.c
> @@ -22,15 +22,6 @@
>  # include <math_private.h>
>  # include <libm-alias-ldouble.h>
>  
> -/* The sizeof (long int) differs between s390x (8byte) and s390 (4byte).
> -   Thus we need different instructions as the target size is encoded there.
> -   Note: On s390 this instruction is only used if build with -mzarch.  */
> -# ifdef __s390x__
> -#  define INSN "cgxbra"
> -# else
> -#  define INSN "cfxbra"
> -# endif
> -
>  long int
>  __lroundl (_Float128 x)
>  {
> @@ -38,7 +29,7 @@ __lroundl (_Float128 x)
>    /* The z196 zarch "convert to fixed" (cgxbra) instruction is rounding
>       x to the nearest integer with "ties away from 0" rounding mode
>       (M3-field: 1) where inexact exceptions are suppressed (M4-field: 4).  */
> -  __asm__ (INSN " %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
> +  __asm__ ("cgxbra %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
>    return y;
>  }
>  libm_alias_ldouble (__lround, lround)
> diff --git a/sysdeps/s390/ifunc-memchr.h b/sysdeps/s390/ifunc-memchr.h
> index a0ed7c5444..5dcf2850a6 100644
> --- a/sysdeps/s390/ifunc-memchr.h
> +++ b/sysdeps/s390/ifunc-memchr.h
> @@ -31,18 +31,18 @@
>  
>  #if defined HAVE_S390_MIN_Z13_ZARCH_ASM_SUPPORT
>  # define MEMCHR_DEFAULT		MEMCHR_Z13
> -# define HAVE_MEMCHR_Z900_G5	0
> +# define HAVE_MEMCHR_Z900	0
>  # define HAVE_MEMCHR_Z13	1
>  #else
> -# define MEMCHR_DEFAULT		MEMCHR_Z900_G5
> -# define HAVE_MEMCHR_Z900_G5	1
> +# define MEMCHR_DEFAULT		MEMCHR_Z900
> +# define HAVE_MEMCHR_Z900	1
>  # define HAVE_MEMCHR_Z13	HAVE_MEMCHR_IFUNC_AND_VX_SUPPORT
>  #endif
>  
> -#if HAVE_MEMCHR_Z900_G5
> -# define MEMCHR_Z900_G5		__memchr_default
> +#if HAVE_MEMCHR_Z900
> +# define MEMCHR_Z900		__memchr_default
>  #else
> -# define MEMCHR_Z900_G5		NULL
> +# define MEMCHR_Z900		NULL
>  #endif
>  
>  #if HAVE_MEMCHR_Z13
> diff --git a/sysdeps/s390/ifunc-memcmp.h b/sysdeps/s390/ifunc-memcmp.h
> index 8a21278a0f..cb427978cd 100644
> --- a/sysdeps/s390/ifunc-memcmp.h
> +++ b/sysdeps/s390/ifunc-memcmp.h
> @@ -25,25 +25,25 @@
>  
>  #if defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # define MEMCMP_DEFAULT		MEMCMP_Z196
> -# define HAVE_MEMCMP_Z900_G5	0
> +# define HAVE_MEMCMP_Z900	0
>  # define HAVE_MEMCMP_Z10	0
>  # define HAVE_MEMCMP_Z196	1
>  #elif defined HAVE_S390_MIN_Z10_ZARCH_ASM_SUPPORT
>  # define MEMCMP_DEFAULT		MEMCMP_Z10
> -# define HAVE_MEMCMP_Z900_G5	0
> +# define HAVE_MEMCMP_Z900	0
>  # define HAVE_MEMCMP_Z10	1
>  # define HAVE_MEMCMP_Z196	HAVE_MEMCMP_IFUNC
>  #else
> -# define MEMCMP_DEFAULT		MEMCMP_Z900_G5
> -# define HAVE_MEMCMP_Z900_G5	1
> +# define MEMCMP_DEFAULT		MEMCMP_Z900
> +# define HAVE_MEMCMP_Z900	1
>  # define HAVE_MEMCMP_Z10	HAVE_MEMCMP_IFUNC
>  # define HAVE_MEMCMP_Z196	HAVE_MEMCMP_IFUNC
>  #endif
>  
> -#if HAVE_MEMCMP_Z900_G5
> -# define MEMCMP_Z900_G5		__memcmp_default
> +#if HAVE_MEMCMP_Z900
> +# define MEMCMP_Z900		__memcmp_default
>  #else
> -# define MEMCMP_Z900_G5		NULL
> +# define MEMCMP_Z900		NULL
>  #endif
>  
>  #if HAVE_MEMCMP_Z10
> diff --git a/sysdeps/s390/ifunc-memcpy.h b/sysdeps/s390/ifunc-memcpy.h
> index 91efab3428..48afc2c23a 100644
> --- a/sysdeps/s390/ifunc-memcpy.h
> +++ b/sysdeps/s390/ifunc-memcpy.h
> @@ -26,19 +26,19 @@
>  #if defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # define MEMCPY_DEFAULT		MEMCPY_Z196
>  # define MEMPCPY_DEFAULT	MEMPCPY_Z196
> -# define HAVE_MEMCPY_Z900_G5	0
> +# define HAVE_MEMCPY_Z900	0
>  # define HAVE_MEMCPY_Z10	0
>  # define HAVE_MEMCPY_Z196	1
>  #elif defined HAVE_S390_MIN_Z10_ZARCH_ASM_SUPPORT
>  # define MEMCPY_DEFAULT		MEMCPY_Z10
>  # define MEMPCPY_DEFAULT	MEMPCPY_Z10
> -# define HAVE_MEMCPY_Z900_G5	0
> +# define HAVE_MEMCPY_Z900	0
>  # define HAVE_MEMCPY_Z10	1
>  # define HAVE_MEMCPY_Z196	HAVE_MEMCPY_IFUNC
>  #else
> -# define MEMCPY_DEFAULT		MEMCPY_Z900_G5
> -# define MEMPCPY_DEFAULT	MEMPCPY_Z900_G5
> -# define HAVE_MEMCPY_Z900_G5	1
> +# define MEMCPY_DEFAULT		MEMCPY_Z900
> +# define MEMPCPY_DEFAULT	MEMPCPY_Z900
> +# define HAVE_MEMCPY_Z900	1
>  # define HAVE_MEMCPY_Z10	HAVE_MEMCPY_IFUNC
>  # define HAVE_MEMCPY_Z196	HAVE_MEMCPY_IFUNC
>  #endif
> @@ -79,12 +79,12 @@
>  # define HAVE_MEMMOVE_ARCH13	HAVE_MEMMOVE_IFUNC_AND_ARCH13_SUPPORT
>  #endif
>  
> -#if HAVE_MEMCPY_Z900_G5
> -# define MEMCPY_Z900_G5		__memcpy_default
> -# define MEMPCPY_Z900_G5	__mempcpy_default
> +#if HAVE_MEMCPY_Z900
> +# define MEMCPY_Z900		__memcpy_default
> +# define MEMPCPY_Z900		__mempcpy_default
>  #else
> -# define MEMCPY_Z900_G5		NULL
> -# define MEMPCPY_Z900_G5	NULL
> +# define MEMCPY_Z900		NULL
> +# define MEMPCPY_Z900		NULL
>  #endif
>  
>  #if HAVE_MEMCPY_Z10
> diff --git a/sysdeps/s390/ifunc-memset.h b/sysdeps/s390/ifunc-memset.h
> index b0041d1a58..569591c9cc 100644
> --- a/sysdeps/s390/ifunc-memset.h
> +++ b/sysdeps/s390/ifunc-memset.h
> @@ -25,17 +25,17 @@
>  
>  #if defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
>  # define MEMSET_DEFAULT		MEMSET_Z196
> -# define HAVE_MEMSET_Z900_G5	0
> +# define HAVE_MEMSET_Z900	0
>  # define HAVE_MEMSET_Z10	0
>  # define HAVE_MEMSET_Z196	1
>  #elif defined HAVE_S390_MIN_Z10_ZARCH_ASM_SUPPORT
>  # define MEMSET_DEFAULT		MEMSET_Z10
> -# define HAVE_MEMSET_Z900_G5	0
> +# define HAVE_MEMSET_Z900	0
>  # define HAVE_MEMSET_Z10	1
>  # define HAVE_MEMSET_Z196	HAVE_MEMSET_IFUNC
>  #else
> -# define MEMSET_DEFAULT		MEMSET_Z900_G5
> -# define HAVE_MEMSET_Z900_G5	1
> +# define MEMSET_DEFAULT		MEMSET_Z900
> +# define HAVE_MEMSET_Z900	1
>  # define HAVE_MEMSET_Z10	HAVE_MEMSET_IFUNC
>  # define HAVE_MEMSET_Z196	HAVE_MEMSET_IFUNC
>  #endif
> @@ -46,10 +46,10 @@
>  # define HAVE_MEMSET_MVCLE	0
>  #endif
>  
> -#if HAVE_MEMSET_Z900_G5
> -# define MEMSET_Z900_G5		__memset_default
> +#if HAVE_MEMSET_Z900
> +# define MEMSET_Z900		__memset_default
>  #else
> -# define MEMSET_Z900_G5		NULL
> +# define MEMSET_Z900		NULL
>  #endif
>  
>  #if HAVE_MEMSET_Z10
> diff --git a/sysdeps/s390/ifunc-strcmp.h b/sysdeps/s390/ifunc-strcmp.h
> index 7d32d72b60..069827c460 100644
> --- a/sysdeps/s390/ifunc-strcmp.h
> +++ b/sysdeps/s390/ifunc-strcmp.h
> @@ -31,18 +31,18 @@
>  
>  #if defined HAVE_S390_MIN_Z13_ZARCH_ASM_SUPPORT
>  # define STRCMP_DEFAULT		STRCMP_Z13
> -# define HAVE_STRCMP_Z900_G5	0
> +# define HAVE_STRCMP_Z900	0
>  # define HAVE_STRCMP_Z13	1
>  #else
> -# define STRCMP_DEFAULT		STRCMP_Z900_G5
> -# define HAVE_STRCMP_Z900_G5	1
> +# define STRCMP_DEFAULT		STRCMP_Z900
> +# define HAVE_STRCMP_Z900	1
>  # define HAVE_STRCMP_Z13	HAVE_STRCMP_IFUNC_AND_VX_SUPPORT
>  #endif
>  
> -#if HAVE_STRCMP_Z900_G5
> -# define STRCMP_Z900_G5		__strcmp_default
> +#if HAVE_STRCMP_Z900
> +# define STRCMP_Z900		__strcmp_default
>  #else
> -# define STRCMP_Z900_G5		NULL
> +# define STRCMP_Z900		NULL
>  #endif
>  
>  #if HAVE_STRCMP_Z13
> diff --git a/sysdeps/s390/ifunc-strcpy.h b/sysdeps/s390/ifunc-strcpy.h
> index 919bd74923..9cd26f2f76 100644
> --- a/sysdeps/s390/ifunc-strcpy.h
> +++ b/sysdeps/s390/ifunc-strcpy.h
> @@ -31,18 +31,18 @@
>  
>  #if defined HAVE_S390_MIN_Z13_ZARCH_ASM_SUPPORT
>  # define STRCPY_DEFAULT		STRCPY_Z13
> -# define HAVE_STRCPY_Z900_G5	0
> +# define HAVE_STRCPY_Z900	0
>  # define HAVE_STRCPY_Z13	1
>  #else
> -# define STRCPY_DEFAULT		STRCPY_Z900_G5
> -# define HAVE_STRCPY_Z900_G5	1
> +# define STRCPY_DEFAULT		STRCPY_Z900
> +# define HAVE_STRCPY_Z900	1
>  # define HAVE_STRCPY_Z13	HAVE_STRCPY_IFUNC_AND_VX_SUPPORT
>  #endif
>  
> -#if HAVE_STRCPY_Z900_G5
> -# define STRCPY_Z900_G5		__strcpy_default
> +#if HAVE_STRCPY_Z900
> +# define STRCPY_Z900		__strcpy_default
>  #else
> -# define STRCPY_Z900_G5		NULL
> +# define STRCPY_Z900		NULL
>  #endif
>  
>  #if HAVE_STRCPY_Z13
> diff --git a/sysdeps/s390/ifunc-strncpy.h b/sysdeps/s390/ifunc-strncpy.h
> index de426e611e..625b52a3ab 100644
> --- a/sysdeps/s390/ifunc-strncpy.h
> +++ b/sysdeps/s390/ifunc-strncpy.h
> @@ -31,18 +31,18 @@
>  
>  #if defined HAVE_S390_MIN_Z13_ZARCH_ASM_SUPPORT
>  # define STRNCPY_DEFAULT	STRNCPY_Z13
> -# define HAVE_STRNCPY_Z900_G5	0
> +# define HAVE_STRNCPY_Z900	0
>  # define HAVE_STRNCPY_Z13	1
>  #else
> -# define STRNCPY_DEFAULT	STRNCPY_Z900_G5
> -# define HAVE_STRNCPY_Z900_G5	1
> +# define STRNCPY_DEFAULT	STRNCPY_Z900
> +# define HAVE_STRNCPY_Z900	1
>  # define HAVE_STRNCPY_Z13	HAVE_STRNCPY_IFUNC_AND_VX_SUPPORT
>  #endif
>  
> -#if HAVE_STRNCPY_Z900_G5
> -# define STRNCPY_Z900_G5	__strncpy_default
> +#if HAVE_STRNCPY_Z900
> +# define STRNCPY_Z900		__strncpy_default
>  #else
> -# define STRNCPY_Z900_G5	NULL
> +# define STRNCPY_Z900		NULL
>  #endif
>  
>  #if HAVE_STRNCPY_Z13
> diff --git a/sysdeps/s390/iso-8859-1_cp037_z900.c b/sysdeps/s390/iso-8859-1_cp037_z900.c
> index 3e7f131f15..b38e9e6b40 100644
> --- a/sysdeps/s390/iso-8859-1_cp037_z900.c
> +++ b/sysdeps/s390/iso-8859-1_cp037_z900.c
> @@ -169,12 +169,6 @@ __attribute__ ((aligned (8))) =
>  #define MIN_NEEDED_FROM		1
>  #define MIN_NEEDED_TO		1
>  
> -# if defined __s390x__
> -#  define BRANCH_ON_COUNT(REG,LBL) "brctg %" #REG "," #LBL "\n\t"
> -# else
> -#  define BRANCH_ON_COUNT(REG,LBL) "brct %" #REG "," #LBL "\n\t"
> -# endif
> -
>  #define TR_LOOP(TABLE)							\
>    {									\
>      size_t length = (inend - inptr < outend - outptr			\
> @@ -188,7 +182,7 @@ __attribute__ ((aligned (8))) =
>  			     "   tr 0(256,%[R_OUT]),0(%[R_TBL])\n\t"	\
>  			     "   la %[R_IN],256(%[R_IN])\n\t"		\
>  			     "   la %[R_OUT],256(%[R_OUT])\n\t"		\
> -			     BRANCH_ON_COUNT ([R_LI], 0b)		\
> +			     "   brctg %[R_LI],0b\n\t"			\
>  			     : /* outputs */ [R_IN] "+a" (inptr)	\
>  			       , [R_OUT] "+a" (outptr), [R_LI] "+d" (blocks) \
>  			     : /* inputs */ [R_TBL] "a" (TABLE)		\
> diff --git a/sysdeps/s390/jmpbuf-unwind.h b/sysdeps/s390/jmpbuf-unwind.h
> index 97dbb40078..3812c126a5 100644
> --- a/sysdeps/s390/jmpbuf-unwind.h
> +++ b/sysdeps/s390/jmpbuf-unwind.h
> @@ -30,8 +30,7 @@
>    ((void *) (address) < (void *) demangle ((jmpbuf)->__gregs[__JB_GPR15]))
>  
>  
> -/* On s390{,x}, CFA is always 96 (resp. 160) bytes above actual
> -   %r15.  */
> +/* On s390x, CFA is always 160 bytes above actual %r15.  */
>  #define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
>    _JMPBUF_UNWINDS_ADJ (_jmpbuf,					\
>  		       (void *) (_Unwind_GetCFA (_context)	\
> diff --git a/sysdeps/s390/ldsodefs.h b/sysdeps/s390/ldsodefs.h
> index 0313b50774..6c4a999e33 100644
> --- a/sysdeps/s390/ldsodefs.h
> +++ b/sysdeps/s390/ldsodefs.h
> @@ -22,18 +22,10 @@
>  #include <elf.h>
>  #include <cpu-features.h>
>  
> -struct La_s390_32_regs;
> -struct La_s390_32_retval;
>  struct La_s390_64_regs;
>  struct La_s390_64_retval;
>  
>  #define ARCH_PLTENTER_MEMBERS						\
> -    Elf32_Addr (*s390_32_gnu_pltenter) (Elf32_Sym *, unsigned int,	\
> -					uintptr_t *,			\
> -					uintptr_t *,			\
> -					struct La_s390_32_regs *,	\
> -					unsigned int *, const char *name, \
> -					long int *framesizep);		\
>      Elf64_Addr (*s390_64_gnu_pltenter) (Elf64_Sym *, unsigned int,	\
>  					uintptr_t *,			\
>  					uintptr_t *,			\
> @@ -42,11 +34,6 @@ struct La_s390_64_retval;
>  					long int *framesizep)
>  
>  #define ARCH_PLTEXIT_MEMBERS						\
> -    unsigned int (*s390_32_gnu_pltexit) (Elf32_Sym *, unsigned int,	\
> -					 uintptr_t *, uintptr_t *,	\
> -					 const struct La_s390_32_regs *, \
> -					 struct La_s390_32_retval *,	\
> -					 const char *);			\
>      unsigned int (*s390_64_gnu_pltexit) (Elf64_Sym *, unsigned int,	\
>  					 uintptr_t *, uintptr_t *,	\
>  					 const struct La_s390_64_regs *, \
> diff --git a/sysdeps/s390/linkmap.h b/sysdeps/s390/linkmap.h
> index 283615b99a..faf0b96d3e 100644
> --- a/sysdeps/s390/linkmap.h
> +++ b/sysdeps/s390/linkmap.h
> @@ -1,13 +1,5 @@
> -#if __WORDSIZE == 64
>  struct link_map_machine
> -  {
> -    Elf64_Addr plt; /* Address of .plt + 0x2e */
> -    const Elf64_Rela *jmprel; /* Address of first JMP_SLOT reloc */
> -  };
> -#else
> -struct link_map_machine
> -  {
> -    Elf32_Addr plt; /* Address of .plt + 0x2c */
> -    const Elf32_Rela *jmprel; /* Address of first JMP_SLOT reloc */
> -  };
> -#endif
> +{
> +  Elf64_Addr plt; /* Address of .plt + 0x2e */
> +  const Elf64_Rela *jmprel; /* Address of first JMP_SLOT reloc */
> +};
> diff --git a/sysdeps/s390/memccpy-vx.S b/sysdeps/s390/memccpy-vx.S
> index 8008e374ce..648039d867 100644
> --- a/sysdeps/s390/memccpy-vx.S
> +++ b/sysdeps/s390/memccpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of memccpy.
> +/* Vector optimized 64 bit S/390 version of memccpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -46,11 +46,6 @@
>  */
>  ENTRY(MEMCCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r5,%r5
> -# endif /* !defined __s390x__ */
>  
>  	vlvgp	%v31,%r6,%r7	/* Save registers.  */
>  	clgije	%r5,0,.Lnf_end	/* If len == 0 then exit.  */
> diff --git a/sysdeps/s390/memchr-vx.S b/sysdeps/s390/memchr-vx.S
> index e6c3ac4181..86cd0291f7 100644
> --- a/sysdeps/s390/memchr-vx.S
> +++ b/sysdeps/s390/memchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of memchr.
> +/* Vector optimized 64 bit S/390 version of memchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,13 +40,7 @@
>     -v18=c replicated
>  */
>  ENTRY(MEMCHR_Z13)
> -
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgije	%r4,0,.Lnf_end	/* If len == 0 then exit.  */
>  
> @@ -157,7 +151,7 @@ strong_alias (MEMCHR_Z13, __memchr)
>  weak_alias (__memchr, memchr)
>  # endif
>  
> -# if ! HAVE_MEMCHR_Z900_G5 && defined SHARED && IS_IN (libc)
> +# if ! HAVE_MEMCHR_Z900 && defined SHARED && IS_IN (libc)
>  strong_alias (MEMCHR_Z13, __GI_memchr)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/memchr-z900.S b/sysdeps/s390/memchr-z900.S
> index 16b9c19429..c0ffd864f7 100644
> --- a/sysdeps/s390/memchr-z900.S
> +++ b/sysdeps/s390/memchr-z900.S
> @@ -1,4 +1,4 @@
> -/* Search a character in a block of memory.  31/64 bit S/390 version.
> +/* Search a character in a block of memory.  64 bit S/390 version.
>     Copyright (C) 2001-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -25,51 +25,26 @@
>  #include "sysdep.h"
>  #include "asm-syntax.h"
>  
> -#if HAVE_MEMCHR_Z900_G5
> -# if defined __s390x__
> -#  define SLGR	slgr
> -#  define LGHI	lghi
> -#  define NGR	ngr
> -#  define LGR	lgr
> -# else
> -#  define SLGR	slr
> -#  define LGHI	lhi
> -#  define NGR	nr
> -#  define LGR	lr
> -# endif /* ! defined __s390x__  */
> -
> +#if HAVE_MEMCHR_Z900
>  	.text
> -ENTRY(MEMCHR_Z900_G5)
> -	LGHI  %r0,0xff
> -	NGR   %r0,%r3
> -	LGR   %r1,%r2
> -# if ! defined __s390x__
> -	tmlh  %r4,32768
> -	jo    3f		/* Jump away if n >= 0x80000000  */
> -# endif
> +ENTRY(MEMCHR_Z900)
> +	lghi  %r0,0xff
> +	ngr   %r0,%r3
> +	lgr   %r1,%r2
>  	la    %r2,0(%r4,%r1)
>  0:	srst  %r2,%r1
>  	jo    0b
>  	brc   13,1f
> -	SLGR  %r2,%r2
> +	slgr  %r2,%r2
>  1:	br    %r14
> -# if ! defined __s390x__
> -	/* On s390 (31bit), the pointer to the first byte after s (stored in
> -	   r2) always wraps around with n >= 0x80000000 and can lead to stop
> -	   searching before end of s.  Thus just use r2=0 in this case.
> -	   If r2 < r1, the srst instruction stops searching with cc=2 "not
> -	   found" when wrapping around from top address to zero.  */
> -3:	SLGR  %r2,%r2
> -	j     0b
> -# endif
> -END(MEMCHR_Z900_G5)
> +END(MEMCHR_Z900)
>  
>  # if ! HAVE_MEMCHR_IFUNC
> -strong_alias (MEMCHR_Z900_G5, __memchr)
> +strong_alias (MEMCHR_Z900, __memchr)
>  weak_alias (__memchr, memchr)
>  # endif
>  
>  # if defined SHARED && IS_IN (libc)
> -strong_alias (MEMCHR_Z900_G5, __GI_memchr)
> +strong_alias (MEMCHR_Z900, __GI_memchr)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/memchr.c b/sysdeps/s390/memchr.c
> index 764a10a839..8ddfaa03d4 100644
> --- a/sysdeps/s390/memchr.c
> +++ b/sysdeps/s390/memchr.c
> @@ -24,8 +24,8 @@
>  # undef memchr
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_MEMCHR_Z900_G5
> -extern __typeof (__redirect_memchr) MEMCHR_Z900_G5 attribute_hidden;
> +# if HAVE_MEMCHR_Z900
> +extern __typeof (__redirect_memchr) MEMCHR_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_MEMCHR_Z13
> diff --git a/sysdeps/s390/memcmp-z900.S b/sysdeps/s390/memcmp-z900.S
> index 00ec2bba52..abdbcaa35e 100644
> --- a/sysdeps/s390/memcmp-z900.S
> +++ b/sysdeps/s390/memcmp-z900.S
> @@ -1,4 +1,4 @@
> -/* memcmp - compare two memory blocks.  31/64 bit S/390 version.
> +/* memcmp - compare two memory blocks.  64 bit S/390 version.
>     Copyright (C) 2012-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -28,72 +28,38 @@
>  
>         .text
>  
> -#if HAVE_MEMCMP_Z900_G5
> -# if defined __s390x__
> -#  define LTGR	ltgr
> -#  define AGHI	aghi
> -#  define BRCTG	brctg
> -# else
> -#  define LTGR	ltr
> -#  define AGHI	ahi
> -#  define BRCTG	brct
> -# endif /* ! defined __s390x__  */
> -ENTRY(MEMCMP_Z900_G5)
> -# if defined __s390x__
> +#if HAVE_MEMCMP_Z900
> +ENTRY(MEMCMP_Z900)
>  	.machine "z900"
> -# else
> -	.machine "g5"
> -	basr    %r5,0
> -.L_Z900_G5_16:
> -#  define Z900_G5_EX_D .L_Z900_G5_15-.L_Z900_G5_16
> -# endif /* ! defined __s390x__  */
> -	LTGR    %r4,%r4
> -	je      .L_Z900_G5_4
> -	AGHI    %r4,-1
> -# if defined __s390x__
> +	ltgr    %r4,%r4
> +	je      .L_Z900_4
> +	aghi    %r4,-1
>  	srlg    %r1,%r4,8
> -	larl    %r5,.L_Z900_G5_15
> -#  define Z900_G5_EX_D 0
> -# else
> -	lr	%r1,%r4
> -	srl	%r1,8
> -# endif /* ! defined __s390x__  */
> -	LTGR    %r1,%r1
> -	jne     .L_Z900_G5_12
> -.L_Z900_G5_3:
> -	ex      %r4,Z900_G5_EX_D(%r5)
> -.L_Z900_G5_4:
> +	larl    %r5,.L_Z900_15
> +	ltgr    %r1,%r1
> +	jne     .L_Z900_12
> +.L_Z900_3:
> +	ex      %r4,0(%r5)
> +.L_Z900_4:
>  	ipm     %r2
> -# if defined __s390x__
>  	sllg    %r2,%r2,34
>  	srag    %r2,%r2,62
> -# else
> -	sll     %r2,2
> -	sra     %r2,30
> -# endif /* ! defined __s390x__  */
>  	br      %r14
> -.L_Z900_G5_12:
> +.L_Z900_12:
>  	clc     0(256,%r3),0(%r2)
> -	jne     .L_Z900_G5_4
> +	jne     .L_Z900_4
>  	la      %r3,256(%r3)
>  	la      %r2,256(%r2)
> -	BRCTG   %r1,.L_Z900_G5_12
> -	j       .L_Z900_G5_3
> -.L_Z900_G5_15:
> +	brctg   %r1,.L_Z900_12
> +	j       .L_Z900_3
> +.L_Z900_15:
>  	clc     0(1,%r3),0(%r2)
> -END(MEMCMP_Z900_G5)
> -# undef LTGR
> -# undef AGHI
> -# undef BRCTG
> -#endif /* HAVE_MEMCMP_Z900_G5  */
> +END(MEMCMP_Z900)
> +#endif /* HAVE_MEMCMP_Z900  */
>  
>  #if HAVE_MEMCMP_Z10
>  ENTRY(MEMCMP_Z10)
>  	.machine "z10"
> -	.machinemode "zarch_nohighgprs"
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	ltgr    %r4,%r4
>  	je      .L_Z10_4
>  	aghi    %r4,-1
> @@ -123,10 +89,6 @@ END(MEMCMP_Z10)
>  #if HAVE_MEMCMP_Z196
>  ENTRY(MEMCMP_Z196)
>  	.machine "z196"
> -	.machinemode "zarch_nohighgprs"
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	ltgr    %r4,%r4
>  	je      .L_Z196_4
>  	aghi    %r4,-1
> diff --git a/sysdeps/s390/memcmp.c b/sysdeps/s390/memcmp.c
> index b6f6faa224..5ff55c8091 100644
> --- a/sysdeps/s390/memcmp.c
> +++ b/sysdeps/s390/memcmp.c
> @@ -23,8 +23,8 @@
>  # undef memcmp
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_MEMCMP_Z900_G5
> -extern __typeof (__redirect_memcmp) MEMCMP_Z900_G5 attribute_hidden;
> +# if HAVE_MEMCMP_Z900
> +extern __typeof (__redirect_memcmp) MEMCMP_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_MEMCMP_Z10
> diff --git a/sysdeps/s390/memcopy.h b/sysdeps/s390/memcopy.h
> index 6ec81298d8..1eb8dc4057 100644
> --- a/sysdeps/s390/memcopy.h
> +++ b/sysdeps/s390/memcopy.h
> @@ -18,6 +18,6 @@
>  
>  #include <sysdeps/generic/memcopy.h>
>  
> -/* The s390/s390x memcpy implementations are safe to be used by memmove.  */
> +/* The s390x memcpy implementations are safe to be used by memmove.  */
>  #undef MEMCPY_OK_FOR_FWD_MEMMOVE
>  #define MEMCPY_OK_FOR_FWD_MEMMOVE 1
> diff --git a/sysdeps/s390/memcpy-z900.S b/sysdeps/s390/memcpy-z900.S
> index 037d245816..3966585e83 100644
> --- a/sysdeps/s390/memcpy-z900.S
> +++ b/sysdeps/s390/memcpy-z900.S
> @@ -1,4 +1,4 @@
> -/* memcpy - copy a block from source to destination.  31/64 bit S/390 version.
> +/* memcpy - copy a block from source to destination.  64 bit S/390 version.
>     Copyright (C) 2012-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -28,83 +28,49 @@
>  
>         .text
>  
> -#if defined __s390x__
> -# define LTGR	ltgr
> -# define CGHI	cghi
> -# define LGR	lgr
> -# define AGHI	aghi
> -# define BRCTG	brctg
> -#else
> -# define LTGR	ltr
> -# define CGHI	chi
> -# define LGR	lr
> -# define AGHI	ahi
> -# define BRCTG	brct
> -#endif /* ! defined __s390x__  */
> -
> -#if HAVE_MEMCPY_Z900_G5
> -ENTRY(MEMPCPY_Z900_G5)
> -# if defined __s390x__
> +#if HAVE_MEMCPY_Z900
> +ENTRY(MEMPCPY_Z900)
>  	.machine "z900"
> -# else
> -	.machine "g5"
> -# endif /* ! defined __s390x__  */
> -	LGR     %r1,%r2             # Use as dest
> +	lgr     %r1,%r2             # Use as dest
>  	la      %r2,0(%r4,%r2)      # Return dest + n
> -	j	.L_Z900_G5_start
> -END(MEMPCPY_Z900_G5)
> +	j	.L_Z900_start
> +END(MEMPCPY_Z900)
>  
> -ENTRY(MEMCPY_Z900_G5)
> -# if defined __s390x__
> +ENTRY(MEMCPY_Z900)
>  	.machine "z900"
> -# else
> -	.machine "g5"
> -# endif /* ! defined __s390x__  */
> -	LGR     %r1,%r2             # r1: Use as dest ; r2: Return dest
> -.L_Z900_G5_start:
> -	LTGR    %r4,%r4
> -	je      .L_Z900_G5_4
> -	AGHI    %r4,-1
> -# if defined __s390x__
> +	lgr     %r1,%r2             # r1: Use as dest ; r2: Return dest
> +.L_Z900_start:
> +	ltgr    %r4,%r4
> +	je      .L_Z900_4
> +	aghi    %r4,-1
>  	srlg	%r5,%r4,8
> -# else
> -	lr	%r5,%r4
> -	srl	%r5,8
> -# endif /* ! defined __s390x__  */
> -	LTGR    %r5,%r5
> -	jne     .L_Z900_G5_13
> -.L_Z900_G5_3:
> -# if defined __s390x__
> -	larl    %r5,.L_Z900_G5_15
> -#  define Z900_G5_EX_D 0
> -# else
> -	basr    %r5,0
> -.L_Z900_G5_14:
> -#  define Z900_G5_EX_D .L_Z900_G5_15-.L_Z900_G5_14
> -# endif /* ! defined __s390x__  */
> -	ex      %r4,Z900_G5_EX_D(%r5)
> -.L_Z900_G5_4:
> +	ltgr    %r5,%r5
> +	jne     .L_Z900_13
> +.L_Z900_3:
> +	larl    %r5,.L_Z900_15
> +	ex      %r4,0(%r5)
> +.L_Z900_4:
>  	br      %r14
> -.L_Z900_G5_13:
> -	CGHI	%r5,4096            # Switch to mvcle for copies >1MB
> +.L_Z900_13:
> +	cghi	%r5,4096            # Switch to mvcle for copies >1MB
>  	jh      __memcpy_mvcle
> -.L_Z900_G5_12:
> +.L_Z900_12:
>  	mvc     0(256,%r1),0(%r3)
>  	la      %r1,256(%r1)
>  	la      %r3,256(%r3)
> -	BRCTG   %r5,.L_Z900_G5_12
> -	j       .L_Z900_G5_3
> -.L_Z900_G5_15:
> +	brctg   %r5,.L_Z900_12
> +	j       .L_Z900_3
> +.L_Z900_15:
>  	mvc     0(1,%r1),0(%r3)
> -END(MEMCPY_Z900_G5)
> -#endif /* HAVE_MEMCPY_Z900_G5  */
> +END(MEMCPY_Z900)
> +#endif /* HAVE_MEMCPY_Z900  */
>  
>  ENTRY(__memcpy_mvcle)
>  	# Using as standalone function will result in unexpected
>  	# results since the length field is incremented by 1 in order to
>  	# compensate the changes already done in the functions above.
> -	LGR     %r0,%r2             # backup return dest [ + n ]
> -	AGHI    %r4,1               # length + 1
> +	lgr     %r0,%r2             # backup return dest [ + n ]
> +	aghi    %r4,1               # length + 1
>  	LGR     %r5,%r4             # source length
>  	LGR     %r4,%r3             # source address
>  	LGR     %r2,%r1             # destination address
> @@ -112,20 +78,13 @@ ENTRY(__memcpy_mvcle)
>  .L_MVCLE_1:
>  	mvcle   %r2,%r4,0           # that's it, MVCLE is your friend
>  	jo      .L_MVCLE_1
> -	LGR     %r2,%r0             # return destination address
> +	lgr     %r2,%r0             # return destination address
>  	br      %r14
>  END(__memcpy_mvcle)
>  
> -#undef LTGR
> -#undef CGHI
> -#undef LGR
> -#undef AGHI
> -#undef BRCTG
> -
>  #if HAVE_MEMCPY_Z10
>  ENTRY(MEMPCPY_Z10)
>  	.machine "z10"
> -	.machinemode "zarch_nohighgprs"
>  	lgr     %r1,%r2         # Use as dest
>  	la      %r2,0(%r4,%r2)  # Return dest + n
>  	j	.L_Z10_start
> @@ -133,12 +92,8 @@ END(MEMPCPY_Z10)
>  
>  ENTRY(MEMCPY_Z10)
>  	.machine "z10"
> -	.machinemode "zarch_nohighgprs"
>  	lgr     %r1,%r2         # r1: Use as dest ; r2: Return dest
>  .L_Z10_start:
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	cgije   %r4,0,.L_Z10_4
>  	aghi    %r4,-1
>  	srlg    %r5,%r4,8
> @@ -166,7 +121,6 @@ END(MEMCPY_Z10)
>  #if HAVE_MEMCPY_Z196
>  ENTRY(MEMPCPY_Z196)
>  	.machine "z196"
> -	.machinemode "zarch_nohighgprs"
>  	lgr     %r1,%r2         # Use as dest
>  	la      %r2,0(%r4,%r2)  # Return dest + n
>  	j	.L_Z196_start
> @@ -174,12 +128,8 @@ END(MEMPCPY_Z196)
>  
>  ENTRY(MEMCPY_Z196)
>  	.machine "z196"
> -	.machinemode "zarch_nohighgprs"
>  	lgr     %r1,%r2         # r1: Use as dest ; r2: Return dest
>  .L_Z196_start:
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	ltgr    %r4,%r4
>  	je      .L_Z196_4
>  .L_Z196_start2:
> @@ -220,13 +170,6 @@ END(MEMCPY_Z196)
>  #if HAVE_MEMMOVE_Z13
>  ENTRY(MEMMOVE_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -# if !defined __s390x__
> -	/* Note: The 31bit dst and src pointers are prefixed with zeroes.  */
> -	llgfr	%r4,%r4
> -	llgfr	%r3,%r3
> -	llgfr	%r2,%r2
> -# endif /* !defined __s390x__ */
>  	sgrk	%r0,%r2,%r3
>  	clgijh	%r4,16,.L_MEMMOVE_Z13_LARGE
>  	aghik	%r5,%r4,-1
> @@ -289,13 +232,6 @@ END(MEMMOVE_Z13)
>  #if HAVE_MEMMOVE_ARCH13
>  ENTRY(MEMMOVE_ARCH13)
>  	.machine "arch13"
> -	.machinemode "zarch_nohighgprs"
> -# if ! defined __s390x__
> -	/* Note: The 31bit dst and src pointers are prefixed with zeroes.  */
> -	llgfr	%r4,%r4
> -	llgfr	%r3,%r3
> -	llgfr	%r2,%r2
> -# endif /* ! defined __s390x__ */
>  	sgrk	%r5,%r2,%r3
>  	aghik	%r0,%r4,-1	/* Both vstl and mvcrl needs highest index.  */
>  	clgijh	%r4,16,.L_MEMMOVE_ARCH13_LARGE
> diff --git a/sysdeps/s390/memcpy.c b/sysdeps/s390/memcpy.c
> index 243f3a3046..cfad6cdcb4 100644
> --- a/sysdeps/s390/memcpy.c
> +++ b/sysdeps/s390/memcpy.c
> @@ -24,8 +24,8 @@
>  # undef memcpy
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_MEMCPY_Z900_G5
> -extern __typeof (__redirect_memcpy) MEMCPY_Z900_G5 attribute_hidden;
> +# if HAVE_MEMCPY_Z900
> +extern __typeof (__redirect_memcpy) MEMCPY_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_MEMCPY_Z10
> diff --git a/sysdeps/s390/memmem-arch13.S b/sysdeps/s390/memmem-arch13.S
> index 227c6fecfb..e864471391 100644
> --- a/sysdeps/s390/memmem-arch13.S
> +++ b/sysdeps/s390/memmem-arch13.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of memmem.
> +/* Vector optimized 64 bit S/390 version of memmem.
>     Copyright (C) 2019-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -27,13 +27,6 @@
>     Locate a substring.  */
>  ENTRY(MEMMEM_ARCH13)
>  	.machine "arch13"
> -	.machinemode "zarch_nohighgprs"
> -# if ! defined __s390x__
> -	llgfr	%r3,%r3
> -	llgfr	%r5,%r5
> -	llgfr	%r4,%r4
> -	llgfr	%r2,%r2
> -# endif /* ! defined __s390x__ */
>  	clgrjl	%r3,%r5,.Lend_no_match	/* Haystack < needle?  */
>  
>  	/* Jump to fallback if needle > 9.  See also strstr-arch13.S.  */
> diff --git a/sysdeps/s390/mempcpy.c b/sysdeps/s390/mempcpy.c
> index 43604948e7..49f01b0575 100644
> --- a/sysdeps/s390/mempcpy.c
> +++ b/sysdeps/s390/mempcpy.c
> @@ -28,8 +28,8 @@
>  # undef __mempcpy
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_MEMCPY_Z900_G5
> -extern __typeof (__redirect___mempcpy) MEMPCPY_Z900_G5 attribute_hidden;
> +# if HAVE_MEMCPY_Z900
> +extern __typeof (__redirect___mempcpy) MEMPCPY_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_MEMCPY_Z10
> diff --git a/sysdeps/s390/memrchr-vx.S b/sysdeps/s390/memrchr-vx.S
> index 53ca78ae24..7b65479777 100644
> --- a/sysdeps/s390/memrchr-vx.S
> +++ b/sysdeps/s390/memrchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of memrchr.
> +/* Vector optimized 64 bit S/390 version of memrchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -44,11 +44,7 @@
>  */
>  ENTRY(MEMRCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  	clgije	%r4,0,.Lnot_found
>  
>  	vlvgb	%v18,%r3,0	/* Generate vector which elements are all c.
> diff --git a/sysdeps/s390/memset-z900.S b/sysdeps/s390/memset-z900.S
> index 987589988b..646ea9b33d 100644
> --- a/sysdeps/s390/memset-z900.S
> +++ b/sysdeps/s390/memset-z900.S
> @@ -1,4 +1,4 @@
> -/* Set a block of memory to some byte value.  31/64 bit S/390 version.
> +/* Set a block of memory to some byte value.  64 bit S/390 version.
>     Copyright (C) 2001-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -28,75 +28,39 @@
>  
>         .text
>  
> -#if HAVE_MEMSET_Z900_G5
> -# if defined __s390x__
> -#  define LTGR	ltgr
> -#  define CGHI	cghi
> -#  define LGR	lgr
> -#  define AGHI	aghi
> -#  define BRCTG	brctg
> -# else
> -#  define LTGR	ltr
> -#  define CGHI	chi
> -#  define LGR	lr
> -#  define AGHI	ahi
> -#  define BRCTG	brct
> -# endif /* ! defined __s390x__  */
> -
> -ENTRY(MEMSET_Z900_G5)
> -.L_Z900_G5_start:
> -#if defined __s390x__
> +#if HAVE_MEMSET_Z900
> +ENTRY(MEMSET_Z900)
> +.L_Z900_start:
>  	.machine "z900"
> -#else
> -	.machine "g5"
> -#endif /* ! defined __s390x__  */
> -	LTGR    %r4,%r4
> -	je      .L_Z900_G5_4
> +	ltgr    %r4,%r4
> +	je      .L_Z900_4
>  	stc     %r3,0(%r2)
> -	CGHI    %r4,1
> -	LGR     %r1,%r2
> -	je      .L_Z900_G5_4
> -	AGHI    %r4,-2
> -#if defined __s390x__
> -	larl    %r5,.L_Z900_G5_18
> +	cghi    %r4,1
> +	lgr     %r1,%r2
> +	je      .L_Z900_4
> +	aghi    %r4,-2
> +	larl    %r5,.L_Z900_18
>  	srlg    %r3,%r4,8
> -# define Z900_G5_EX_D 0
> -#else
> -	basr    %r5,0
> -.L_Z900_G5_19:
> -# define Z900_G5_EX_D .L_Z900_G5_18-.L_Z900_G5_19
> -	lr      %r3,%r4
> -	srl     %r3,8
> -#endif /* ! defined __s390x__  */
> -	LTGR    %r3,%r3
> -	jne     .L_Z900_G5_14
> -.L_Z900_G5_3:
> -	ex      %r4,Z900_G5_EX_D(%r5)
> -.L_Z900_G5_4:
> +	ltgr    %r3,%r3
> +	jne     .L_Z900_14
> +.L_Z900_3:
> +	ex      %r4,0(%r5)
> +.L_Z900_4:
>  	br      %r14
> -.L_Z900_G5_14:
> +.L_Z900_14:
>  	mvc     1(256,%r1),0(%r1)
>  	la      %r1,256(%r1)
> -	BRCTG   %r3,.L_Z900_G5_14
> -	j       .L_Z900_G5_3
> -.L_Z900_G5_18:
> +	brctg   %r3,.L_Z900_14
> +	j       .L_Z900_3
> +.L_Z900_18:
>  	mvc     1(1,%r1),0(%r1)
> -END(MEMSET_Z900_G5)
> -# undef LTGR
> -# undef CGHI
> -# undef LGR
> -# undef AGHI
> -# undef BRCTG
> -#endif /*  HAVE_MEMSET_Z900_G5  */
> +END(MEMSET_Z900)
> +#endif /*  HAVE_MEMSET_Z900  */
>  
>  #if HAVE_MEMSET_Z10
>  ENTRY(MEMSET_Z10)
>  .L_Z10_start:
>  	.machine "z10"
> -	.machinemode "zarch_nohighgprs"
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	cgije   %r4,0,.L_Z10_4
>  	stc     %r3,0(%r2)
>  	lgr     %r1,%r2
> @@ -126,10 +90,6 @@ END(MEMSET_Z10)
>  ENTRY(MEMSET_Z196)
>  .L_Z196_start:
>  	.machine "z196"
> -	.machinemode "zarch_nohighgprs"
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__  */
>  	clgfi	%r4,1
>  	jl	.L_Z196_4	    # n == 0
>  	stc     %r3,0(%r2)
> diff --git a/sysdeps/s390/memset.c b/sysdeps/s390/memset.c
> index 1eb6dcb007..25ed9af660 100644
> --- a/sysdeps/s390/memset.c
> +++ b/sysdeps/s390/memset.c
> @@ -23,8 +23,8 @@
>  # undef memset
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_MEMSET_Z900_G5
> -extern __typeof (__redirect_memset) MEMSET_Z900_G5 attribute_hidden;
> +# if HAVE_MEMSET_Z900
> +extern __typeof (__redirect_memset) MEMSET_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_MEMSET_Z10
> diff --git a/sysdeps/s390/multiarch/8bit-generic.c b/sysdeps/s390/multiarch/8bit-generic.c
> index 10edde6641..8224cec557 100644
> --- a/sysdeps/s390/multiarch/8bit-generic.c
> +++ b/sysdeps/s390/multiarch/8bit-generic.c
> @@ -88,7 +88,6 @@
>  	   loop_count = 16;						\
>  	 __asm__ volatile (".machine push\n\t"				\
>  			   ".machine \"z13\"\n\t"			\
> -			   ".machinemode \"zarch_nohighgprs\"\n\t"	\
>  			   "    sllk %[R_I],%[R_LI],4\n\t"		\
>  			   "    ahi %[R_I],-1\n\t"			\
>  			   /* Execute mvc and tr with correct len.  */	\
> @@ -226,7 +225,6 @@
>  	   (ch == 0 is no error, but is handled differently)  */	\
>  	__asm__ volatile (".machine push\n\t"				\
>  			  ".machine \"z13\"\n\t"			\
> -			  ".machinemode \"zarch_nohighgprs\"\n\t"	\
>  			  /* Setup to check for ch >= max.  */		\
>  			  "    vzero %%v21\n\t"				\
>  			  "    vleih %%v21,-24576,0\n\t" /* element 0:   >  */ \
> @@ -288,7 +286,6 @@
>  	       check for errors (from_ucs4[ch] == 0).  */		\
>  	    __asm__ volatile (".machine push\n\t"			\
>  			      ".machine \"z13\"\n\t"			\
> -			      ".machinemode \"zarch_nohighgprs\"\n\t"	\
>  			      "    sllk %[R_I],%[R_LI],4\n\t"		\
>  			      "    ahi %[R_I],-1\n\t"			\
>  			      /* Execute tr with correct len.  */	\
> diff --git a/sysdeps/s390/multiarch/gconv_simple.c b/sysdeps/s390/multiarch/gconv_simple.c
> index a6548d6d41..35a5699404 100644
> --- a/sysdeps/s390/multiarch/gconv_simple.c
> +++ b/sysdeps/s390/multiarch/gconv_simple.c
> @@ -77,11 +77,6 @@
>  # undef __gconv_transform_internal_ucs2reverse
>  
>  /* Now define the functions with vector support.  */
> -# if defined __s390x__
> -#  define CONVERT_32BIT_SIZE_T(REG)
> -# else
> -#  define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t"
> -# endif
>  
>  /* Convert from ISO 646-IRV to the internal (UCS4-like) format.  */
>  # define DEFINE_INIT		0
> @@ -125,8 +120,6 @@
>      size_t loop_count, tmp;						\
>      __asm__ volatile (".machine push\n\t"				\
>  		      ".machine \"z13\"\n\t"				\
> -		      ".machinemode \"zarch_nohighgprs\"\n\t"		\
> -		      CONVERT_32BIT_SIZE_T ([R_LEN])			\
>  		      "    vrepib %%v30,0x7f\n\t" /* For compare > 0x7f.  */ \
>  		      "    srlg %[R_LI],%[R_LEN],4\n\t"			\
>  		      "    vrepib %%v31,0x20\n\t"			\
> @@ -257,8 +250,6 @@ ICONV_VX_IFUNC (__gconv_transform_ascii_internal)
>      size_t loop_count, tmp, tmp2;					\
>      __asm__ volatile (".machine push\n\t"				\
>  		      ".machine \"z13\"\n\t"				\
> -		      ".machinemode \"zarch_nohighgprs\"\n\t"		\
> -		      CONVERT_32BIT_SIZE_T ([R_LEN])			\
>  		      /* Setup to check for ch > 0x7f.  */		\
>  		      "    vzero %%v21\n\t"				\
>  		      "    srlg %[R_LI],%[R_LEN],4\n\t"			\
> @@ -414,8 +405,6 @@ ICONV_VX_NAME (internal_ucs4le_loop) (struct __gconv_step *step,
>    size_t loop_count;
>    __asm__ volatile (".machine push\n\t"
>  		    ".machine \"z13\"\n\t"
> -		    ".machinemode \"zarch_nohighgprs\"\n\t"
> -		    CONVERT_32BIT_SIZE_T ([R_LEN])
>  		    "    bras %[R_LI],1f\n\t"
>  		    /* Vector permute mask:  */
>  		    "    .long 0x03020100,0x7060504,0x0B0A0908,0x0F0E0D0C\n\t"
> @@ -517,8 +506,6 @@ ICONV_VX_NAME (ucs4_internal_loop) (struct __gconv_step *step,
>        len = MIN (inend - inptr, outend - outptr) / 4;
>        __asm__ volatile (".machine push\n\t"
>  			".machine \"z13\"\n\t"
> -			".machinemode \"zarch_nohighgprs\"\n\t"
> -			CONVERT_32BIT_SIZE_T ([R_LEN])
>  			/* Setup to check for ch > 0x7fffffff.  */
>  			"    larl %[R_LI],9f\n\t"
>  			"    vlm %%v20,%%v21,0(%[R_LI])\n\t"
> @@ -644,8 +631,6 @@ ICONV_VX_NAME (ucs4le_internal_loop) (struct __gconv_step *step,
>        len = MIN (inend - inptr, outend - outptr) / 4;
>        __asm__ volatile (".machine push\n\t"
>  			".machine \"z13\"\n\t"
> -			".machinemode \"zarch_nohighgprs\"\n\t"
> -			CONVERT_32BIT_SIZE_T ([R_LEN])
>  			/* Setup to check for ch > 0x7fffffff.  */
>  			"    larl %[R_LI],9f\n\t"
>  			"    vlm %%v20,%%v22,0(%[R_LI])\n\t"
> @@ -783,8 +768,6 @@ ICONV_VX_IFUNC (__gconv_transform_ucs4le_internal)
>      len = MIN ((inend - inptr) / 2, (outend - outptr) / 4);		\
>      __asm__ volatile (".machine push\n\t"				\
>  		      ".machine \"z13\"\n\t"				\
> -		      ".machinemode \"zarch_nohighgprs\"\n\t"		\
> -		      CONVERT_32BIT_SIZE_T ([R_LEN])			\
>  		      /* Setup to check for ch >= 0xd800 && ch < 0xe000.  */ \
>  		      "    larl %[R_TMP],9f\n\t"			\
>  		      "    vlm %%v20,%%v21,0(%[R_TMP])\n\t"		\
> @@ -907,8 +890,6 @@ ICONV_VX_IFUNC (__gconv_transform_ucs2_internal)
>      len = MIN ((inend - inptr) / 2, (outend - outptr) / 4);		\
>      __asm__ volatile (".machine push\n\t"				\
>  		      ".machine \"z13\"\n\t"				\
> -		      ".machinemode \"zarch_nohighgprs\"\n\t"		\
> -		      CONVERT_32BIT_SIZE_T ([R_LEN])			\
>  		      /* Setup to check for ch >= 0xd800 && ch < 0xe000.  */ \
>  		      "    larl %[R_TMP],9f\n\t"			\
>  		      "    vlm %%v20,%%v22,0(%[R_TMP])\n\t"		\
> @@ -1051,8 +1032,6 @@ ICONV_VX_IFUNC (__gconv_transform_ucs2reverse_internal)
>  	  loop_count = (outend - outptr) / 16;				\
>  	__asm__ volatile (".machine push\n\t"				\
>  			  ".machine \"z13\"\n\t"			\
> -			  ".machinemode \"zarch_nohighgprs\"\n\t"	\
> -			  CONVERT_32BIT_SIZE_T ([R_LI])			\
>  			  "    larl %[R_I],3f\n\t"			\
>  			  "    vlm %%v20,%%v23,0(%[R_I])\n\t"		\
>  			  "0:  \n\t"					\
> @@ -1183,8 +1162,6 @@ ICONV_VX_IFUNC (__gconv_transform_internal_ucs2)
>  	  loop_count = (outend - outptr) / 16;				\
>  	__asm__ volatile (".machine push\n\t"				\
>  			  ".machine \"z13\"\n\t"			\
> -			  ".machinemode \"zarch_nohighgprs\"\n\t"	\
> -			  CONVERT_32BIT_SIZE_T ([R_LI])			\
>  			  "    larl %[R_I],3f\n\t"			\
>  			  "    vlm %%v20,%%v24,0(%[R_I])\n\t"		\
>  			  "0:  \n\t"					\
> diff --git a/sysdeps/s390/multiarch/ifunc-impl-list.c b/sysdeps/s390/multiarch/ifunc-impl-list.c
> index e948b97530..6e9799891a 100644
> --- a/sysdeps/s390/multiarch/ifunc-impl-list.c
> +++ b/sysdeps/s390/multiarch/ifunc-impl-list.c
> @@ -1,4 +1,4 @@
> -/* Enumerate available IFUNC implementations of a function. s390/s390x version.
> +/* Enumerate available IFUNC implementations of a function. s390x version.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -94,8 +94,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  	      IFUNC_IMPL_ADD (array, i, memset,
>  			      S390_IS_Z10 (stfle_bits), MEMSET_Z10)
>  # endif
> -# if HAVE_MEMSET_Z900_G5
> -	      IFUNC_IMPL_ADD (array, i, memset, 1, MEMSET_Z900_G5)
> +# if HAVE_MEMSET_Z900
> +	      IFUNC_IMPL_ADD (array, i, memset, 1, MEMSET_Z900)
>  # endif
>  	      )
>  #endif /* HAVE_MEMSET_IFUNC */
> @@ -110,8 +110,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  	      IFUNC_IMPL_ADD (array, i, memcmp,
>  			      S390_IS_Z10 (stfle_bits), MEMCMP_Z10)
>  # endif
> -# if HAVE_MEMCMP_Z900_G5
> -	      IFUNC_IMPL_ADD (array, i, memcmp, 1, MEMCMP_Z900_G5)
> +# if HAVE_MEMCMP_Z900
> +	      IFUNC_IMPL_ADD (array, i, memcmp, 1, MEMCMP_Z900)
>  # endif
>  	      )
>  #endif /* HAVE_MEMCMP_IFUNC */
> @@ -126,8 +126,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  	      IFUNC_IMPL_ADD (array, i, memcpy,
>  			      S390_IS_Z10 (stfle_bits), MEMCPY_Z10)
>  # endif
> -# if HAVE_MEMCPY_Z900_G5
> -	      IFUNC_IMPL_ADD (array, i, memcpy, 1, MEMCPY_Z900_G5)
> +# if HAVE_MEMCPY_Z900
> +	      IFUNC_IMPL_ADD (array, i, memcpy, 1, MEMCPY_Z900)
>  # endif
>  	      )
>  
> @@ -140,8 +140,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  	      IFUNC_IMPL_ADD (array, i, mempcpy,
>  			      S390_IS_Z10 (stfle_bits), MEMPCPY_Z10)
>  # endif
> -# if HAVE_MEMCPY_Z900_G5
> -	      IFUNC_IMPL_ADD (array, i, mempcpy, 1, MEMPCPY_Z900_G5)
> +# if HAVE_MEMCPY_Z900
> +	      IFUNC_IMPL_ADD (array, i, mempcpy, 1, MEMPCPY_Z900)
>  # endif
>  	      )
>  #endif /* HAVE_MEMCPY_IFUNC  */
> @@ -226,8 +226,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  		IFUNC_IMPL_ADD (array, i, strcpy,
>  				dl_hwcap & HWCAP_S390_VX, STRCPY_Z13)
>  # endif
> -# if HAVE_STRCPY_Z900_G5
> -		IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900_G5)
> +# if HAVE_STRCPY_Z900
> +		IFUNC_IMPL_ADD (array, i, strcpy, 1, STRCPY_Z900)
>  # endif
>  		)
>  #endif /* HAVE_STRCPY_IFUNC  */
> @@ -250,8 +250,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  		IFUNC_IMPL_ADD (array, i, strncpy,
>  				dl_hwcap & HWCAP_S390_VX, STRNCPY_Z13)
>  # endif
> -# if HAVE_STRNCPY_Z900_G5
> -		IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900_G5)
> +# if HAVE_STRNCPY_Z900
> +		IFUNC_IMPL_ADD (array, i, strncpy, 1, STRNCPY_Z900)
>  # endif
>  		)
>  #endif /* HAVE_STRNCPY_IFUNC  */
> @@ -298,8 +298,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  		IFUNC_IMPL_ADD (array, i, strcmp,
>  				dl_hwcap & HWCAP_S390_VX, STRCMP_Z13)
>  # endif
> -# if HAVE_STRCMP_Z900_G5
> -		IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900_G5)
> +# if HAVE_STRCMP_Z900
> +		IFUNC_IMPL_ADD (array, i, strcmp, 1, STRCMP_Z900)
>  # endif
>  		)
>  #endif /* HAVE_STRCMP_IFUNC  */
> @@ -394,8 +394,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
>  		IFUNC_IMPL_ADD (array, i, memchr,
>  				dl_hwcap & HWCAP_S390_VX, MEMCHR_Z13)
>  # endif
> -# if HAVE_MEMCHR_Z900_G5
> -		IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900_G5)
> +# if HAVE_MEMCHR_Z900
> +		IFUNC_IMPL_ADD (array, i, memchr, 1, MEMCHR_Z900)
>  # endif
>  		)
>  #endif /* HAVE_MEMCHR_IFUNC  */
> diff --git a/sysdeps/s390/multiarch/ifunc-resolve.h b/sysdeps/s390/multiarch/ifunc-resolve.h
> index c6cb8fa97c..a66669e1d7 100644
> --- a/sysdeps/s390/multiarch/ifunc-resolve.h
> +++ b/sysdeps/s390/multiarch/ifunc-resolve.h
> @@ -1,5 +1,5 @@
>  /* IFUNC resolver function for CPU specific functions.
> -   32/64 bit S/390 version.
> +   64 bit S/390 version.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> diff --git a/sysdeps/s390/multiarch/utf8-utf16-z9.c b/sysdeps/s390/multiarch/utf8-utf16-z9.c
> index dbc2b5b976..2153813957 100644
> --- a/sysdeps/s390/multiarch/utf8-utf16-z9.c
> +++ b/sysdeps/s390/multiarch/utf8-utf16-z9.c
> @@ -34,9 +34,7 @@ strong_alias (SINGLE_NAME (TO_LOOP_DEFAULT), SINGLE_NAME (TO_LOOP))
>  s390_libc_ifunc_expr (FROM_LOOP_DEFAULT, FROM_LOOP,
>  		      (HAVE_FROM_VX && (hwcap & HWCAP_S390_VX))
>  		      ? FROM_LOOP_VX
> -		      : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ZARCH
> -					  && hwcap & HWCAP_S390_HIGH_GPRS
> -					  && hwcap & HWCAP_S390_ETF3EH))
> +		      : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ETF3EH))
>  			? FROM_LOOP_CU
>  			: FROM_LOOP_DEFAULT);
>  
> diff --git a/sysdeps/s390/multiarch/utf8-utf32-z9.c b/sysdeps/s390/multiarch/utf8-utf32-z9.c
> index 06d7e66f9e..94f0767832 100644
> --- a/sysdeps/s390/multiarch/utf8-utf32-z9.c
> +++ b/sysdeps/s390/multiarch/utf8-utf32-z9.c
> @@ -34,9 +34,7 @@ strong_alias (SINGLE_NAME (TO_LOOP_DEFAULT), SINGLE_NAME (TO_LOOP))
>  s390_libc_ifunc_expr (FROM_LOOP_DEFAULT, FROM_LOOP,
>  		      (HAVE_FROM_VX && (hwcap & HWCAP_S390_VX))
>  		      ? FROM_LOOP_VX
> -		      : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ZARCH
> -					  && hwcap & HWCAP_S390_HIGH_GPRS
> -					  && hwcap & HWCAP_S390_ETF3EH))
> +		      : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ETF3EH))
>  			? FROM_LOOP_CU
>  			: FROM_LOOP_DEFAULT);
>  
> diff --git a/sysdeps/s390/nptl/bits/struct_mutex.h b/sysdeps/s390/nptl/bits/struct_mutex.h
> index 571265267c..ff2d251986 100644
> --- a/sysdeps/s390/nptl/bits/struct_mutex.h
> +++ b/sysdeps/s390/nptl/bits/struct_mutex.h
> @@ -24,39 +24,17 @@ struct __pthread_mutex_s
>    int __lock;
>    unsigned int __count;
>    int __owner;
> -#if __WORDSIZE == 64
>    unsigned int __nusers;
> -#endif
>    /* KIND must stay at this position in the structure to maintain
>       binary compatibility with static initializers.  */
>    int __kind;
> -#if __WORDSIZE == 64
>    short __spins;
>    short __glibc_reserved;
>    __pthread_list_t __list;
>  # define __PTHREAD_MUTEX_HAVE_PREV      1
> -#else
> -  unsigned int __nusers;
> -  __extension__ union
> -  {
> -    struct
> -    {
> -      short __data_spins;
> -      short __data_unused;
> -    } __data;
> -#  define __spins __data.__data_spins
> -    __pthread_slist_t __list;
> -  };
> -# define __PTHREAD_MUTEX_HAVE_PREV      0
> -#endif
>  };
>  
> -#if __WORDSIZE == 64
> -# define __PTHREAD_MUTEX_INITIALIZER(__kind) \
> +#define __PTHREAD_MUTEX_INITIALIZER(__kind) \
>    0, 0, 0, 0, __kind, 0, 0, { 0, 0 }
> -#else
> -# define __PTHREAD_MUTEX_INITIALIZER(__kind) \
> -  0, 0, 0, __kind, 0, { { 0, 0 } }
> -#endif
>  
>  #endif
> diff --git a/sysdeps/s390/nptl/bits/struct_rwlock.h b/sysdeps/s390/nptl/bits/struct_rwlock.h
> index ee49a9632d..ed1235b061 100644
> --- a/sysdeps/s390/nptl/bits/struct_rwlock.h
> +++ b/sysdeps/s390/nptl/bits/struct_rwlock.h
> @@ -28,7 +28,6 @@ struct __pthread_rwlock_arch_t
>    unsigned int __writers_futex;
>    unsigned int __pad3;
>    unsigned int __pad4;
> -#if __WORDSIZE == 64
>    int __cur_writer;
>    int __shared;
>    unsigned long int __pad1;
> @@ -36,23 +35,9 @@ struct __pthread_rwlock_arch_t
>    /* FLAGS must stay at this position in the structure to maintain
>       binary compatibility.  */
>    unsigned int __flags;
> -# else
> -  unsigned char __pad1;
> -  unsigned char __pad2;
> -  unsigned char __shared;
> -  /* FLAGS must stay at this position in the structure to maintain
> -     binary compatibility.  */
> -  unsigned char __flags;
> -  int __cur_writer;
> -#endif
>  };
>  
> -#if __WORDSIZE == 64
> -# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
> +#define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
>    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags
> -#else
> -# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
> -  0, 0, 0, 0, 0, 0, 0, 0, 0, __flags, 0
> -#endif
>  
>  #endif
> diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h
> index 9e2112120b..f8e4469f7e 100644
> --- a/sysdeps/s390/nptl/pthread-offsets.h
> +++ b/sysdeps/s390/nptl/pthread-offsets.h
> @@ -1,13 +1,2 @@
> -#include <bits/wordsize.h>
> -
> -#if __WORDSIZE == 64
> -# define __PTHREAD_MUTEX_KIND_OFFSET     16
> -#else
> -# define __PTHREAD_MUTEX_KIND_OFFSET     12
> -#endif
> -
> -#if __WORDSIZE == 64
> -# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
> -#else
> -# define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
> -#endif
> +#define __PTHREAD_MUTEX_KIND_OFFSET     16
> +#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
> diff --git a/sysdeps/s390/nptl/tls.h b/sysdeps/s390/nptl/tls.h
> index 9870e54327..de7e9c6482 100644
> --- a/sysdeps/s390/nptl/tls.h
> +++ b/sysdeps/s390/nptl/tls.h
> @@ -44,10 +44,6 @@ typedef struct
>    void *__private_ss;
>  } tcbhead_t;
>  
> -# ifndef __s390x__
> -#  define TLS_MULTIPLE_THREADS_IN_TCB 1
> -# endif
> -
>  #else /* __ASSEMBLER__ */
>  # include <tcb-offsets.h>
>  #endif
> diff --git a/sysdeps/s390/rawmemchr-vx.S b/sysdeps/s390/rawmemchr-vx.S
> index e74c63f6e4..4bf4e4bdda 100644
> --- a/sysdeps/s390/rawmemchr-vx.S
> +++ b/sysdeps/s390/rawmemchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of rawmemchr.
> +/* Vector optimized 64 bit S/390 version of rawmemchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -41,7 +41,6 @@
>  */
>  ENTRY(RAWMEMCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/s390-64/bits/wordsize.h b/sysdeps/s390/s390-64/bits/wordsize.h
> index 00e88b0628..b263c3141b 100644
> --- a/sysdeps/s390/s390-64/bits/wordsize.h
> +++ b/sysdeps/s390/s390-64/bits/wordsize.h
> @@ -1,11 +1,4 @@
>  /* Determine the wordsize from the preprocessor defines.  */
>  
> -#if defined __s390x__
> -# define __WORDSIZE	64
> -#else
> -# define __WORDSIZE	32
> -# define __WORDSIZE32_SIZE_ULONG       1
> -# define __WORDSIZE32_PTRDIFF_LONG     0
> -#endif
> -
> -#define __WORDSIZE_TIME64_COMPAT32     0
> +#define __WORDSIZE			64
> +#define __WORDSIZE_TIME64_COMPAT32	0
> diff --git a/sysdeps/s390/s390-64/stackguard-macros.h b/sysdeps/s390/s390-64/stackguard-macros.h
> index 2c97d3824f..3671c7cd7a 100644
> --- a/sysdeps/s390/s390-64/stackguard-macros.h
> +++ b/sysdeps/s390/s390-64/stackguard-macros.h
> @@ -3,7 +3,7 @@
>  #define STACK_CHK_GUARD \
>    ({ uintptr_t x; __asm__ ("ear %0,%%a0; sllg %0,%0,32; ear %0,%%a1; lg %0,0x28(%0)" : "=a" (x)); x; })
>  
> -/* On s390/s390x there is no unique pointer guard, instead we use the
> +/* On s390x there is no unique pointer guard, instead we use the
>     same value as the stack guard.  */
>  #define POINTER_CHK_GUARD					\
>    ({								\
> diff --git a/sysdeps/s390/s390-64/strncpy-z900.S b/sysdeps/s390/s390-64/strncpy-z900.S
> index 579e121731..6d954cf402 100644
> --- a/sysdeps/s390/s390-64/strncpy-z900.S
> +++ b/sysdeps/s390/s390-64/strncpy-z900.S
> @@ -26,8 +26,8 @@
>  #include "sysdep.h"
>  #include "asm-syntax.h"
>  
> -#if HAVE_STRNCPY_Z900_G5
> -ENTRY(STRNCPY_Z900_G5)
> +#if HAVE_STRNCPY_Z900
> +ENTRY(STRNCPY_Z900)
>  	.text
>  	stg   %r2,48(%r15)	    # save dst pointer
>  	slgr  %r2,%r3		    # %r3 points to src, %r2+%r3 to dst
> @@ -87,13 +87,13 @@ ENTRY(STRNCPY_Z900_G5)
>  	jo    .L13
>  .Lexit: lg    %r2,48(%r15)	    # return dst pointer
>  	br    %r14
> -END(STRNCPY_Z900_G5)
> +END(STRNCPY_Z900)
>  
>  # if ! HAVE_STRNCPY_IFUNC
> -strong_alias (STRNCPY_Z900_G5, strncpy)
> +strong_alias (STRNCPY_Z900, strncpy)
>  # endif
>  
>  # if defined SHARED && IS_IN (libc)
> -strong_alias (STRNCPY_Z900_G5, __GI_strncpy)
> +strong_alias (STRNCPY_Z900, __GI_strncpy)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/sotruss-lib.c b/sysdeps/s390/sotruss-lib.c
> index 4b0194ab0a..ff6ebf7a43 100644
> --- a/sysdeps/s390/sotruss-lib.c
> +++ b/sysdeps/s390/sotruss-lib.c
> @@ -22,24 +22,12 @@
>  
>  #include <elf/sotruss-lib.c>
>  
> -#if __ELF_NATIVE_CLASS == 32
> -# define la_s390_gnu_pltenter	la_s390_32_gnu_pltenter
> -# define la_s390_gnu_pltexit	la_s390_32_gnu_pltexit
> -# define La_s390_regs		La_s390_32_regs
> -# define La_s390_retval		La_s390_32_retval
> -#else
> -# define la_s390_gnu_pltenter	la_s390_64_gnu_pltenter
> -# define la_s390_gnu_pltexit	la_s390_64_gnu_pltexit
> -# define La_s390_regs		La_s390_64_regs
> -# define La_s390_retval		La_s390_64_retval
> -#endif
> -
> -ElfW(Addr)
> -la_s390_gnu_pltenter (ElfW(Sym) *sym,
> -		      unsigned int ndx __attribute__ ((unused)),
> -		      uintptr_t *refcook, uintptr_t *defcook,
> -		      La_s390_regs *regs, unsigned int *flags,
> -		      const char *symname, long int *framesizep)
> +Elf64_Addr
> +la_s390_64_gnu_pltenter (Elf64_Sym *sym,
> +			 unsigned int ndx __attribute__ ((unused)),
> +			 uintptr_t *refcook, uintptr_t *defcook,
> +			 La_s390_64_regs *regs, unsigned int *flags,
> +			 const char *symname, long int *framesizep)
>  {
>    print_enter (refcook, defcook, symname,
>  	       regs->lr_r2, regs->lr_r3, regs->lr_r4, *flags);
> @@ -51,10 +39,11 @@ la_s390_gnu_pltenter (ElfW(Sym) *sym,
>  }
>  
>  unsigned int
> -la_s390_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
> -		     uintptr_t *defcook,
> -		     const struct La_s390_regs *inregs,
> -		     struct La_s390_retval *outregs, const char *symname)
> +la_s390_64_gnu_pltexit (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
> +			uintptr_t *defcook,
> +			const struct La_s390_64_regs *inregs,
> +			struct La_s390_64_retval *outregs,
> +			const char *symname)
>  {
>    print_exit (refcook, defcook, symname, outregs->lrv_r2);
>  
> diff --git a/sysdeps/s390/stpcpy-vx.S b/sysdeps/s390/stpcpy-vx.S
> index 02c8e45617..8184fd3bc4 100644
> --- a/sysdeps/s390/stpcpy-vx.S
> +++ b/sysdeps/s390/stpcpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of stpcpy.
> +/* Vector optimized 64 bit S/390 version of stpcpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(STPCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r3),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r3),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/stpncpy-vx.S b/sysdeps/s390/stpncpy-vx.S
> index 739bf7ebce..46a82e71b0 100644
> --- a/sysdeps/s390/stpncpy-vx.S
> +++ b/sysdeps/s390/stpncpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of stpncpy.
> +/* Vector optimized 64 bit S/390 version of stpncpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -42,11 +42,6 @@
>  */
>  ENTRY(STPNCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> diff --git a/sysdeps/s390/strcat-vx.S b/sysdeps/s390/strcat-vx.S
> index 434c78ca4a..0f36c8de8a 100644
> --- a/sysdeps/s390/strcat-vx.S
> +++ b/sysdeps/s390/strcat-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strcat.
> +/* Vector optimized 64 bit S/390 version of strcat.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(STRCAT_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	lgr	%r0,%r2		/* Save destination pointer for return.  */
>  
> diff --git a/sysdeps/s390/strchr-vx.S b/sysdeps/s390/strchr-vx.S
> index f263f51bb7..4544c85592 100644
> --- a/sysdeps/s390/strchr-vx.S
> +++ b/sysdeps/s390/strchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strchr.
> +/* Vector optimized 64 bit S/390 version of strchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(STRCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/strchrnul-vx.S b/sysdeps/s390/strchrnul-vx.S
> index 4a648190a5..485be32b04 100644
> --- a/sysdeps/s390/strchrnul-vx.S
> +++ b/sysdeps/s390/strchrnul-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strchrnul.
> +/* Vector optimized 64 bit S/390 version of strchrnul.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -39,7 +39,6 @@
>  */
>  ENTRY(STRCHRNUL_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/strcmp-vx.S b/sysdeps/s390/strcmp-vx.S
> index fda693002d..2fe013cb82 100644
> --- a/sysdeps/s390/strcmp-vx.S
> +++ b/sysdeps/s390/strcmp-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strcmp.
> +/* Vector optimized 64 bit S/390 version of strcmp.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -39,7 +39,6 @@
>  */
>  ENTRY(STRCMP_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	lghi	%r5,0		/* current_len = 0.  */
>  
> @@ -113,7 +112,7 @@ END(STRCMP_Z13)
>  strong_alias (STRCMP_Z13, strcmp)
>  # endif
>  
> -# if ! HAVE_STRCMP_Z900_G5 && defined SHARED && IS_IN (libc)
> +# if ! HAVE_STRCMP_Z900 && defined SHARED && IS_IN (libc)
>  strong_alias (STRCMP_Z13, __GI_strcmp)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/strcmp-z900.S b/sysdeps/s390/strcmp-z900.S
> index 2404cdc3c0..07ad1fbdf5 100644
> --- a/sysdeps/s390/strcmp-z900.S
> +++ b/sysdeps/s390/strcmp-z900.S
> @@ -24,35 +24,27 @@
>  #include "sysdep.h"
>  #include "asm-syntax.h"
>  
> -#if HAVE_STRCMP_Z900_G5
> -# if defined __s390x__
> -#  define SLGR	slgr
> -#  define LGHI	lghi
> -# else
> -#  define SLGR	slr
> -#  define LGHI	lhi
> -# endif /* ! defined __s390x__  */
> -
> +#if HAVE_STRCMP_Z900
>  	.text
> -ENTRY(STRCMP_Z900_G5)
> -	SLGR   %r0,%r0
> +ENTRY(STRCMP_Z900)
> +	slgr   %r0,%r0
>  0:	clst  %r2,%r3
>  	jo    0b
>  	jp    1f
>  	jm    2f
> -	SLGR  %r2,%r2
> +	slgr  %r2,%r2
>  	br    %r14
> -1:	LGHI  %r2,1
> +1:	lghi  %r2,1
>  	br    %r14
> -2:	LGHI  %r2,-1
> +2:	lghi  %r2,-1
>  	br    %r14
> -END(STRCMP_Z900_G5)
> +END(STRCMP_Z900)
>  
>  # if ! HAVE_STRCMP_IFUNC
> -strong_alias (STRCMP_Z900_G5, strcmp)
> +strong_alias (STRCMP_Z900, strcmp)
>  # endif
>  
>  # if defined SHARED && IS_IN (libc)
> -strong_alias (STRCMP_Z900_G5, __GI_strcmp)
> +strong_alias (STRCMP_Z900, __GI_strcmp)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/strcmp.c b/sysdeps/s390/strcmp.c
> index 2dbffb13c9..9ed3abee19 100644
> --- a/sysdeps/s390/strcmp.c
> +++ b/sysdeps/s390/strcmp.c
> @@ -26,8 +26,8 @@
>  # include <ifunc-resolve.h>
>  # undef strcmp
>  
> -# if HAVE_STRCMP_Z900_G5
> -extern __typeof (__redirect_strcmp) STRCMP_Z900_G5 attribute_hidden;
> +# if HAVE_STRCMP_Z900
> +extern __typeof (__redirect_strcmp) STRCMP_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_STRCMP_Z13
> diff --git a/sysdeps/s390/strcpy-vx.S b/sysdeps/s390/strcpy-vx.S
> index 2ddc96ed0b..7cc6dd8f68 100644
> --- a/sysdeps/s390/strcpy-vx.S
> +++ b/sysdeps/s390/strcpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strcpy.
> +/* Vector optimized 64 bit S/390 version of strcpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -38,7 +38,6 @@
>  */
>  ENTRY(STRCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r3),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r3),6	/* Get bytes to 4k-byte boundary or 16.  */
> @@ -103,7 +102,7 @@ END(STRCPY_Z13)
>  strong_alias (STRCPY_Z13, strcpy)
>  # endif
>  
> -# if ! HAVE_STRCPY_Z900_G5 && defined SHARED && IS_IN (libc)
> +# if ! HAVE_STRCPY_Z900 && defined SHARED && IS_IN (libc)
>  strong_alias (STRCPY_Z13, __GI_strcpy)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/strcpy-z900.S b/sysdeps/s390/strcpy-z900.S
> index 39f7238152..a34cb56b9a 100644
> --- a/sysdeps/s390/strcpy-z900.S
> +++ b/sysdeps/s390/strcpy-z900.S
> @@ -1,4 +1,4 @@
> -/* strcpy - copy a string from source to destination.  64/31 bit S/390 version.
> +/* strcpy - copy a string from source to destination.  64 bit S/390 version.
>     Copyright (C) 2001-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -24,32 +24,21 @@
>  #include "sysdep.h"
>  #include "asm-syntax.h"
>  
> -#if HAVE_STRCPY_Z900_G5
> -# if defined __s390x__
> -#  define SLGR	slgr
> -#  define LGR	lgr
> -# else
> -#  define SLGR	slr
> -#  define LGR	lr
> -# endif /* ! defined __s390x__  */
> -
> -        .text
> -ENTRY(STRCPY_Z900_G5)
> -	SLGR  %r0,%r0
> -	LGR   %r1,%r2
> +#if HAVE_STRCPY_Z900
> +	.text
> +ENTRY(STRCPY_Z900)
> +	slgr  %r0,%r0
> +	lgr   %r1,%r2
>  0:	mvst  %r1,%r3
>  	jo    0b
>  	br    %r14
> -END(STRCPY_Z900_G5)
> -
> -# undef SLGR
> -# undef LGR
> +END(STRCPY_Z900)
>  
>  # if ! HAVE_STRCPY_IFUNC
> -strong_alias (STRCPY_Z900_G5, strcpy)
> +strong_alias (STRCPY_Z900, strcpy)
>  # endif
>  
>  # if defined SHARED && IS_IN (libc)
> -strong_alias (STRCPY_Z900_G5, __GI_strcpy)
> +strong_alias (STRCPY_Z900, __GI_strcpy)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/strcpy.c b/sysdeps/s390/strcpy.c
> index a307a5f370..daede82f3f 100644
> --- a/sysdeps/s390/strcpy.c
> +++ b/sysdeps/s390/strcpy.c
> @@ -24,8 +24,8 @@
>  # undef strcpy
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_STRCPY_Z900_G5
> -extern __typeof (__redirect_strcpy) STRCPY_Z900_G5 attribute_hidden;
> +# if HAVE_STRCPY_Z900
> +extern __typeof (__redirect_strcpy) STRCPY_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_STRCPY_Z13
> diff --git a/sysdeps/s390/strcspn-vx.S b/sysdeps/s390/strcspn-vx.S
> index 7a825131dd..e28f738d6c 100644
> --- a/sysdeps/s390/strcspn-vx.S
> +++ b/sysdeps/s390/strcspn-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strcspn.
> +/* Vector optimized 64 bit S/390 version of strcspn.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -62,7 +62,6 @@
>  */
>  ENTRY(STRCSPN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	/*
>  	  Check if reject-string fits in one vreg:
> diff --git a/sysdeps/s390/strlen-vx.S b/sysdeps/s390/strlen-vx.S
> index e4bbcd4500..99f71f1e22 100644
> --- a/sysdeps/s390/strlen-vx.S
> +++ b/sysdeps/s390/strlen-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strlen.
> +/* Vector optimized 64 bit S/390 version of strlen.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -37,7 +37,6 @@
>  */
>  ENTRY(STRLEN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/strncat-vx.S b/sysdeps/s390/strncat-vx.S
> index 02b2022cbc..53e80a49c1 100644
> --- a/sysdeps/s390/strncat-vx.S
> +++ b/sysdeps/s390/strncat-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strncat.
> +/* Vector optimized 64 bit S/390 version of strncat.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -43,11 +43,6 @@
>  */
>  ENTRY(STRNCAT_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> diff --git a/sysdeps/s390/strncmp-vx.S b/sysdeps/s390/strncmp-vx.S
> index 332dd4593e..a334bdfca1 100644
> --- a/sysdeps/s390/strncmp-vx.S
> +++ b/sysdeps/s390/strncmp-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strncmp.
> +/* Vector optimized 64 bit S/390 version of strncmp.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -41,11 +41,6 @@
>  */
>  ENTRY(STRNCMP_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgije	%r4,0,.Lend_equal /* Nothing to do if n == 0,  */
>  	lghi	%r5,0		/* current_len = 0.  */
> diff --git a/sysdeps/s390/strncpy-vx.S b/sysdeps/s390/strncpy-vx.S
> index 76155bf8c4..9d65d4ebe7 100644
> --- a/sysdeps/s390/strncpy-vx.S
> +++ b/sysdeps/s390/strncpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strncpy.
> +/* Vector optimized 64 bit S/390 version of strncpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -42,11 +42,6 @@
>  */
>  ENTRY(STRNCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> @@ -202,7 +197,7 @@ END(STRNCPY_Z13)
>  strong_alias (STRNCPY_Z13, strncpy)
>  # endif
>  
> -# if ! HAVE_STRNCPY_Z900_G5 && defined SHARED && IS_IN (libc)
> +# if ! HAVE_STRNCPY_Z900 && defined SHARED && IS_IN (libc)
>  strong_alias (STRNCPY_Z13, __GI_strncpy)
>  # endif
>  #endif
> diff --git a/sysdeps/s390/strncpy.c b/sysdeps/s390/strncpy.c
> index b7ace482a5..986f00a0f4 100644
> --- a/sysdeps/s390/strncpy.c
> +++ b/sysdeps/s390/strncpy.c
> @@ -26,8 +26,8 @@
>  # undef strncpy
>  # include <ifunc-resolve.h>
>  
> -# if HAVE_STRNCPY_Z900_G5
> -extern __typeof (__redirect_strncpy) STRNCPY_Z900_G5 attribute_hidden;
> +# if HAVE_STRNCPY_Z900
> +extern __typeof (__redirect_strncpy) STRNCPY_Z900 attribute_hidden;
>  # endif
>  
>  # if HAVE_STRNCPY_Z13
> diff --git a/sysdeps/s390/strnlen-vx.S b/sysdeps/s390/strnlen-vx.S
> index db1bda229f..29e3353d5a 100644
> --- a/sysdeps/s390/strnlen-vx.S
> +++ b/sysdeps/s390/strnlen-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strnlen.
> +/* Vector optimized 64 bit S/390 version of strnlen.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -38,11 +38,6 @@
>  */
>  ENTRY(STRNLEN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r3,%r3
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r3,0		/* if maxlen == 0, return 0.  */
>  	locgre	%r2,%r3
> diff --git a/sysdeps/s390/strpbrk-vx.S b/sysdeps/s390/strpbrk-vx.S
> index 8fb6963be2..6bf1213418 100644
> --- a/sysdeps/s390/strpbrk-vx.S
> +++ b/sysdeps/s390/strpbrk-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strpbrk.
> +/* Vector optimized 64 bit S/390 version of strpbrk.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -63,7 +63,6 @@
>  */
>  ENTRY(STRPBRK_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	/*
>  	  Check if accept-string fits in one vreg:
> diff --git a/sysdeps/s390/strrchr-vx.S b/sysdeps/s390/strrchr-vx.S
> index ed2342c9e3..219c6d59ce 100644
> --- a/sysdeps/s390/strrchr-vx.S
> +++ b/sysdeps/s390/strrchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strrchr.
> +/* Vector optimized 64 bit S/390 version of strrchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -43,7 +43,6 @@
>  */
>  ENTRY(STRRCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r0,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/strspn-vx.S b/sysdeps/s390/strspn-vx.S
> index aa985de110..67de888395 100644
> --- a/sysdeps/s390/strspn-vx.S
> +++ b/sysdeps/s390/strspn-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strspn.
> +/* Vector optimized 64 bit S/390 version of strspn.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -61,7 +61,6 @@
>  */
>  ENTRY(STRSPN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	/*
>  	  Check if accept-string fits in one vreg:
> diff --git a/sysdeps/s390/strstr-arch13.S b/sysdeps/s390/strstr-arch13.S
> index 10875acad6..acf47928ba 100644
> --- a/sysdeps/s390/strstr-arch13.S
> +++ b/sysdeps/s390/strstr-arch13.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of strstr.
> +/* Vector optimized 64 bit S/390 version of strstr.
>     Copyright (C) 2019-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -26,7 +26,6 @@
>     Locate a substring.  */
>  ENTRY(STRSTR_ARCH13)
>  	.machine "arch13"
> -	.machinemode "zarch_nohighgprs"
>  	lcbb	%r1,0(%r3),6
>  	jo	.Lneedle_on_bb	/* Needle on block-boundary?  */
>  	vl	%v18,0(%r3),6	/* Load needle.  */
> diff --git a/sysdeps/s390/tst-dl-runtime-mod.S b/sysdeps/s390/tst-dl-runtime-mod.S
> index 6090d21a97..58feb14450 100644
> --- a/sysdeps/s390/tst-dl-runtime-mod.S
> +++ b/sysdeps/s390/tst-dl-runtime-mod.S
> @@ -20,11 +20,7 @@
>  	.type	r0x2, @function
>  r0x2:
>  	.cfi_startproc
> -#if defined (__s390x__)
>  	agr %r0,%r0
> -#else
> -	ar %r0,%r0
> -#endif
>  	br %r14
>  	.cfi_endproc
>  	.size	r0x2, .-r0x2
> diff --git a/sysdeps/s390/tst-dl-runtime.c b/sysdeps/s390/tst-dl-runtime.c
> index 3b2fc3093e..49087ef5e0 100644
> --- a/sysdeps/s390/tst-dl-runtime.c
> +++ b/sysdeps/s390/tst-dl-runtime.c
> @@ -22,11 +22,7 @@
>  #include <stdlib.h>
>  #include <unistd.h>
>  
> -#if defined (__s390x__)
>  static const unsigned long magic_value = 0x0011223344556677UL;
> -#else
> -static const unsigned long magic_value = 0x00112233;
> -#endif
>  
>  unsigned long r0x2_trampoline (unsigned long);
>  
> @@ -35,7 +31,6 @@ unsigned long r0x2_trampoline (unsigned long);
>     _dl_runtime_resolve and _dl_runtime_profile.  */
>  asm ("    .type r0x2_trampoline, @function\n"
>       "r0x2_trampoline:\n"
> -#if defined (__s390x__)
>       "    lgr %r0,%r2\n"
>       "    stg %r14,112(%r15)\n"
>       "    aghi %r15,-160\n"
> @@ -44,28 +39,6 @@ asm ("    .type r0x2_trampoline, @function\n"
>       "    lg %r14,112(%r15)\n"
>       "    lgr %r2,%r0\n"
>       "    br %r14\n"
> -#elif defined (__zarch__)
> -     "    lr %r0,%r2\n"
> -     "    st %r14,56(%r15)\n"
> -     "    ahi %r15,-96\n"
> -     "    brasl %r14,r0x2@plt\n"
> -     "    ahi %r15,96\n"
> -     "    l %r14,56(%r15)\n"
> -     "    lr %r2,%r0\n"
> -     "    br %r14\n"
> -#else
> -     "    lr %r0,%r2\n"
> -     "    st %r14,56(%r15)\n"
> -     "    ahi %r15,-96\n"
> -     "    balr %r14,0\n"
> -     "    l %r14,1f-.(%r14)\n"
> -     "    basr %r14,%r14\n"
> -     "    ahi %r15,96\n"
> -     "    l %r14,56(%r15)\n"
> -     "    lr %r2,%r0\n"
> -     "    br %r14\n"
> -     "1: .long r0x2\n"
> -#endif
>       );
>  
>  static int
> diff --git a/sysdeps/s390/utf16-utf32-z9.c b/sysdeps/s390/utf16-utf32-z9.c
> index ceba2fad5e..68d256a7b2 100644
> --- a/sysdeps/s390/utf16-utf32-z9.c
> +++ b/sysdeps/s390/utf16-utf32-z9.c
> @@ -49,12 +49,6 @@
>  # define ASM_CLOBBER_VR(NR)
>  #endif
>  
> -#if defined __s390x__
> -# define CONVERT_32BIT_SIZE_T(REG)
> -#else
> -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t"
> -#endif
> -
>  /* UTF-32 big endian byte order mark.  */
>  #define BOM_UTF32               0x0000feffu
>  
> @@ -256,12 +250,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for surrogates.  */			\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-16 chars <0xd800, >0xdfff.  */ \
>  		  "0:  clgijl %[R_INLEN],16,2f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],32,2f\n\t"			\
> @@ -402,12 +393,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for surrogates.  */			\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-16 chars <0xd800, >0xdfff.  */ \
>  		  "0:  clgijl %[R_INLEN],16,20f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],32,20f\n\t"			\
> @@ -572,12 +560,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for surrogates.  */			\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-32 chars			\
>  		     ch < 0xd800 || (ch > 0xdfff && ch < 0x10000).  */	\
>  		  "0:  clgijl %[R_INLEN],32,2f\n\t"			\
> @@ -712,12 +697,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for surrogates.  */			\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-32 chars			\
>  		     ch < 0xd800 || (ch > 0xdfff && ch < 0x10000).  */	\
>  		  "0:  clgijl %[R_INLEN],32,20f\n\t"			\
> diff --git a/sysdeps/s390/utf8-utf16-z9.c b/sysdeps/s390/utf8-utf16-z9.c
> index 1c43f5b221..1bc52e5833 100644
> --- a/sysdeps/s390/utf8-utf16-z9.c
> +++ b/sysdeps/s390/utf8-utf16-z9.c
> @@ -59,12 +59,6 @@
>  # define ASM_CLOBBER_VR(NR)
>  #endif
>  
> -#if defined __s390x__
> -# define CONVERT_32BIT_SIZE_T(REG)
> -#else
> -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t"
> -#endif
> -
>  /* Defines for skeleton.c.  */
>  #define DEFINE_INIT		0
>  #define DEFINE_FINI		0
> @@ -176,7 +170,6 @@ gconv_end (struct __gconv_step *data)
>  									\
>      __asm__ __volatile__ (".machine push       \n\t"			\
>  			  ".machine \"z9-109\" \n\t"			\
> -			  ".machinemode \"zarch_nohighgprs\"\n\t"	\
>  			  "0: " INSTRUCTION "  \n\t"			\
>  			  ".machine pop        \n\t"			\
>  			  "   jo     0b        \n\t"			\
> @@ -247,11 +240,8 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  "    vrepib %%v30,0x7f\n\t" /* For compare > 0x7f.  */ \
>  		  "    vrepib %%v31,0x20\n\t"				\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-8 chars <=0x7f.  */		\
>  		  "0:  clgijl %[R_INLEN],16,20f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],32,20f\n\t"			\
> @@ -636,12 +626,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for values <= 0x7f.  */		\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-16 chars <=0x7f.  */	\
>  		  "0:  clgijl %[R_INLEN],32,2f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],16,2f\n\t"			\
> @@ -823,12 +810,9 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  /* Setup to check for values <= 0x7f.  */		\
>  		  "    larl %[R_TMP],9f\n\t"				\
>  		  "    vlm %%v30,%%v31,0(%[R_TMP])\n\t"			\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-16 chars <=0x7f.  */	\
>  		  "0:  clgijl %[R_INLEN],32,20f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],16,20f\n\t"			\
> diff --git a/sysdeps/s390/utf8-utf32-z9.c b/sysdeps/s390/utf8-utf32-z9.c
> index a5bf48e499..c1708772c6 100644
> --- a/sysdeps/s390/utf8-utf32-z9.c
> +++ b/sysdeps/s390/utf8-utf32-z9.c
> @@ -59,12 +59,6 @@
>  # define ASM_CLOBBER_VR(NR)
>  #endif
>  
> -#if defined __s390x__
> -# define CONVERT_32BIT_SIZE_T(REG)
> -#else
> -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t"
> -#endif
> -
>  /* Defines for skeleton.c.  */
>  #define DEFINE_INIT		0
>  #define DEFINE_FINI		0
> @@ -176,7 +170,6 @@ gconv_end (struct __gconv_step *data)
>  									\
>      __asm__ __volatile__ (".machine push       \n\t"			\
>  			  ".machine \"z9-109\" \n\t"			\
> -			  ".machinemode \"zarch_nohighgprs\"\n\t"	\
>  			  "0: " INSTRUCTION "  \n\t"			\
>  			  ".machine pop        \n\t"			\
>  			  "   jo     0b        \n\t"			\
> @@ -480,11 +473,8 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  "    vrepib %%v30,0x7f\n\t" /* For compare > 0x7f.  */ \
>  		  "    vrepib %%v31,0x20\n\t"				\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-8 chars <=0x7f.  */		\
>  		  "0:  clgijl %[R_INLEN],16,20f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],64,20f\n\t"			\
> @@ -691,13 +681,10 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2, tmp3;					\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  "    vleif %%v20,127,0\n\t"   /* element 0: 127  */	\
>  		  "    vzero %%v21\n\t"					\
>  		  "    vleih %%v21,8192,0\n\t"  /* element 0:   >  */	\
>  		  "    vleih %%v21,-8192,2\n\t" /* element 1: =<>  */	\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-32 chars <=0x7f.  */	\
>  		  "0:  clgijl %[R_INLEN],64,2f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],16,2f\n\t"			\
> @@ -869,13 +856,10 @@ gconv_end (struct __gconv_step *data)
>      unsigned long tmp, tmp2;						\
>      asm volatile (".machine push\n\t"					\
>  		  ".machine \"z13\"\n\t"				\
> -		  ".machinemode \"zarch_nohighgprs\"\n\t"		\
>  		  "    vleif %%v20,127,0\n\t"   /* element 0: 127  */	\
>  		  "    vzero %%v21\n\t"					\
>  		  "    vleih %%v21,8192,0\n\t"  /* element 0:   >  */	\
>  		  "    vleih %%v21,-8192,2\n\t" /* element 1: =<>  */	\
> -		  CONVERT_32BIT_SIZE_T ([R_INLEN])			\
> -		  CONVERT_32BIT_SIZE_T ([R_OUTLEN])			\
>  		  /* Loop which handles UTF-32 chars <= 0x7f.  */	\
>  		  "0:  clgijl %[R_INLEN],64,20f\n\t"			\
>  		  "    clgijl %[R_OUTLEN],16,20f\n\t"			\
> diff --git a/sysdeps/s390/wcpcpy-vx.S b/sysdeps/s390/wcpcpy-vx.S
> index 98c9d09064..ee509ab8d0 100644
> --- a/sysdeps/s390/wcpcpy-vx.S
> +++ b/sysdeps/s390/wcpcpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcpcpy.
> +/* Vector optimized 64 bit S/390 version of wcpcpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(WCPCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r3),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r3),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcpncpy-vx.S b/sysdeps/s390/wcpncpy-vx.S
> index 097eee9678..69817aa97d 100644
> --- a/sysdeps/s390/wcpncpy-vx.S
> +++ b/sysdeps/s390/wcpncpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcpncpy.
> +/* Vector optimized 64 bit S/390 version of wcpncpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -41,11 +41,6 @@
>  */
>  ENTRY(WCPNCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> @@ -62,13 +57,8 @@ ENTRY(WCPNCPY_Z13)
>  	llgfr	%r6,%r6		/* Convert 32bit to 64bit.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wcscat-vx.S b/sysdeps/s390/wcscat-vx.S
> index 0feb4797e6..a7ec6d50b5 100644
> --- a/sysdeps/s390/wcscat-vx.S
> +++ b/sysdeps/s390/wcscat-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcscat.
> +/* Vector optimized 64 bit S/390 version of wcscat.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(WCSCAT_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcschr-vx.S b/sysdeps/s390/wcschr-vx.S
> index dd4ca46d9a..af3f5cf849 100644
> --- a/sysdeps/s390/wcschr-vx.S
> +++ b/sysdeps/s390/wcschr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcschr.
> +/* Vector optimized 64 bit S/390 version of wcschr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -39,7 +39,6 @@
>  */
>  ENTRY(WCSCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcschrnul-vx.S b/sysdeps/s390/wcschrnul-vx.S
> index 9d1d0b3670..0107fd5a66 100644
> --- a/sysdeps/s390/wcschrnul-vx.S
> +++ b/sysdeps/s390/wcschrnul-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcschrnul.
> +/* Vector optimized 64 bit S/390 version of wcschrnul.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -38,7 +38,6 @@
>  */
>  ENTRY(WCSCHRNUL_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcscmp-vx.S b/sysdeps/s390/wcscmp-vx.S
> index 39d62412d5..25f992e75c 100644
> --- a/sysdeps/s390/wcscmp-vx.S
> +++ b/sysdeps/s390/wcscmp-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcscmp.
> +/* Vector optimized 64 bit S/390 version of wcscmp.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -39,7 +39,6 @@
>  */
>  ENTRY(WCSCMP_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	lghi	%r5,0		/* current_len = 0.  */
>  
> diff --git a/sysdeps/s390/wcscpy-vx.S b/sysdeps/s390/wcscpy-vx.S
> index 718fb2f9e1..2aa266d2ef 100644
> --- a/sysdeps/s390/wcscpy-vx.S
> +++ b/sysdeps/s390/wcscpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcscpy.
> +/* Vector optimized 64 bit S/390 version of wcscpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,7 +40,6 @@
>  */
>  ENTRY(WCSCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r3),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r3),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcscspn-vx.S b/sysdeps/s390/wcscspn-vx.S
> index b5b910f8bf..3a6fcb6e1b 100644
> --- a/sysdeps/s390/wcscspn-vx.S
> +++ b/sysdeps/s390/wcscspn-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcscspn.
> +/* Vector optimized 64 bit S/390 version of wcscspn.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -60,7 +60,6 @@
>  */
>  ENTRY(WCSCSPN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	tmll	%r2,3		/* Test if s is 4-byte aligned?  */
>  	jne	.Lfallback	/* And use common-code variant if not.  */
> diff --git a/sysdeps/s390/wcslen-vx.S b/sysdeps/s390/wcslen-vx.S
> index 29a9131521..cd4459ac82 100644
> --- a/sysdeps/s390/wcslen-vx.S
> +++ b/sysdeps/s390/wcslen-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcslen.
> +/* Vector optimized 64 bit S/390 version of wcslen.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -37,7 +37,6 @@
>  */
>  ENTRY(WCSLEN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r1,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcsncat-vx.S b/sysdeps/s390/wcsncat-vx.S
> index 91d2a9b89d..155459dd5e 100644
> --- a/sysdeps/s390/wcsncat-vx.S
> +++ b/sysdeps/s390/wcsncat-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsncat.
> +/* Vector optimized 64 bit S/390 version of wcsncat.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -43,11 +43,6 @@
>  */
>  ENTRY(WCSNCAT_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> @@ -123,13 +118,8 @@ ENTRY(WCSNCAT_Z13)
>  	lghi	%r5,0		/* current_len = 0.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wcsncmp-vx.S b/sysdeps/s390/wcsncmp-vx.S
> index f01fcc56a6..3fb3756059 100644
> --- a/sysdeps/s390/wcsncmp-vx.S
> +++ b/sysdeps/s390/wcsncmp-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsncmp.
> +/* Vector optimized 64 bit S/390 version of wcsncmp.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,22 +40,12 @@
>  */
>  ENTRY(WCSNCMP_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgije	%r4,0,.Lend_equal /* Nothing to do if n == 0.  */
>  
>  	/* Check range of n and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wcsncpy-vx.S b/sysdeps/s390/wcsncpy-vx.S
> index c1d6732e87..afe1495185 100644
> --- a/sysdeps/s390/wcsncpy-vx.S
> +++ b/sysdeps/s390/wcsncpy-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsncpy.
> +/* Vector optimized 64 bit S/390 version of wcsncpy.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -43,11 +43,6 @@
>  */
>  ENTRY(WCSNCPY_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r4,0
>  	ber	%r14		/* Nothing to do, if n == 0.  */
> @@ -66,13 +61,8 @@ ENTRY(WCSNCPY_Z13)
>  	lghi	%r5,0		/* current_len = 0.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of n.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of n.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wcsnlen-vx.S b/sysdeps/s390/wcsnlen-vx.S
> index bfff0ba2a4..d57b3bb5b3 100644
> --- a/sysdeps/s390/wcsnlen-vx.S
> +++ b/sysdeps/s390/wcsnlen-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsnlen.
> +/* Vector optimized 64 bit S/390 version of wcsnlen.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -38,11 +38,6 @@
>  ENTRY(WCSNLEN_Z13)
>  
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r3,%r3
> -# endif /* !defined __s390x__ */
>  
>  	clgfi	%r3,0		/* if maxlen == 0, return 0.  */
>  	locgre	%r2,%r3
> @@ -56,13 +51,8 @@ ENTRY(WCSNLEN_Z13)
>  	jne	.Lfallback	/* And use common-code variant if not.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r3,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r4,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r3,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r4,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r3,%r3,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r3,%r4		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wcspbrk-vx.S b/sysdeps/s390/wcspbrk-vx.S
> index d1c0b2b47d..d97b2c02f1 100644
> --- a/sysdeps/s390/wcspbrk-vx.S
> +++ b/sysdeps/s390/wcspbrk-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcspbrk.
> +/* Vector optimized 64 bit S/390 version of wcspbrk.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -62,7 +62,6 @@
>  */
>  ENTRY(WCSPBRK_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	tmll	%r2,3		/* Test if s is 4-byte aligned?  */
>  	jne	.Lfallback	/* And use common-code variant if not.  */
> diff --git a/sysdeps/s390/wcsrchr-vx.S b/sysdeps/s390/wcsrchr-vx.S
> index 9e5f4ceea3..4e9934f01e 100644
> --- a/sysdeps/s390/wcsrchr-vx.S
> +++ b/sysdeps/s390/wcsrchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsrchr.
> +/* Vector optimized 64 bit S/390 version of wcsrchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -42,7 +42,6 @@
>  */
>  ENTRY(WCSRCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	vlbb	%v16,0(%r2),6	/* Load s until next 4k-byte boundary.  */
>  	lcbb	%r0,0(%r2),6	/* Get bytes to 4k-byte boundary or 16.  */
> diff --git a/sysdeps/s390/wcsspn-vx.S b/sysdeps/s390/wcsspn-vx.S
> index 81d7ccb101..bdd316950d 100644
> --- a/sysdeps/s390/wcsspn-vx.S
> +++ b/sysdeps/s390/wcsspn-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wcsspn.
> +/* Vector optimized 64 bit S/390 version of wcsspn.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -60,7 +60,6 @@
>  */
>  ENTRY(WCSSPN_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
>  
>  	tmll	%r2,3		/* Test if s is 4-byte aligned?  */
>  	jne	.Lfallback	/* And use common-code variant if not.  */
> diff --git a/sysdeps/s390/wmemchr-vx.S b/sysdeps/s390/wmemchr-vx.S
> index 6882395ce7..2040ee8eba 100644
> --- a/sysdeps/s390/wmemchr-vx.S
> +++ b/sysdeps/s390/wmemchr-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector optimized 32/64 bit S/390 version of wmemchr.
> +/* Vector optimized 64 bit S/390 version of wmemchr.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -41,11 +41,6 @@
>  */
>  ENTRY(WMEMCHR_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	clgije	%r4,0,.Lnf_end	/* If len == 0 then exit.  */
>  
> @@ -61,13 +56,8 @@ ENTRY(WMEMCHR_Z13)
>  	lghi	%r5,16		/* current_len = 16.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wmemcmp-vx.S b/sysdeps/s390/wmemcmp-vx.S
> index 3d07b815a0..6a2997d74b 100644
> --- a/sysdeps/s390/wmemcmp-vx.S
> +++ b/sysdeps/s390/wmemcmp-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector Optimized 32/64 bit S/390 version of wmemcmp.
> +/* Vector Optimized 64 bit S/390 version of wmemcmp.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -40,21 +40,11 @@
>  */
>  ENTRY(WMEMCMP_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  	clgije	%r4,0,.Lend_equal /* Nothing to do if n == 0.  */
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r1,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r1,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r1		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/s390/wmemset-vx.S b/sysdeps/s390/wmemset-vx.S
> index 4f3661297c..f7ab5dd8c7 100644
> --- a/sysdeps/s390/wmemset-vx.S
> +++ b/sysdeps/s390/wmemset-vx.S
> @@ -1,4 +1,4 @@
> -/* Vector Optimized 32/64 bit S/390 version of wmemset.
> +/* Vector Optimized 64 bit S/390 version of wmemset.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -41,11 +41,6 @@
>  */
>  ENTRY(WMEMSET_Z13)
>  	.machine "z13"
> -	.machinemode "zarch_nohighgprs"
> -
> -# if !defined __s390x__
> -	llgfr	%r4,%r4
> -# endif /* !defined __s390x__ */
>  
>  	vlvgg	%v31,%r2,0	/* Save destination pointer for return.  */
>  	clgije	%r4,0,.Lend
> @@ -54,13 +49,8 @@ ENTRY(WMEMSET_Z13)
>  	vrepf	%v16,%v16,0
>  
>  	/* Check range of maxlen and convert to byte-count.  */
> -# ifdef __s390x__
>  	tmhh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
>  	lghi	%r5,-4		/* Max byte-count is 18446744073709551612.  */
> -# else
> -	tmlh	%r4,49152	/* Test bit 0 or 1 of maxlen.  */
> -	llilf	%r5,4294967292	/* Max byte-count is 4294967292.  */
> -# endif /* !__s390x__ */
>  	sllg	%r4,%r4,2	/* Convert character-count to byte-count.  */
>  	locgrne	%r4,%r5		/* Use max byte-count, if bit 0/1 was one.  */
>  
> diff --git a/sysdeps/unix/sysv/linux/fxstat.c b/sysdeps/unix/sysv/linux/fxstat.c
> index 2b45a31c2d..a034345ee3 100644
> --- a/sysdeps/unix/sysv/linux/fxstat.c
> +++ b/sysdeps/unix/sysv/linux/fxstat.c
> @@ -43,7 +43,7 @@ __fxstat (int vers, int fd, struct stat *buf)
>  	return r ?: stat_overflow (buf);
>  # else
>  	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
> -	   microblaze, s390, sh, powerpc, and sparc.  */
> +	   microblaze, sh, powerpc, and sparc.  */
>  	return INLINE_SYSCALL_CALL (fstat, fd, buf);
>  # endif
>        }
> diff --git a/sysdeps/unix/sysv/linux/fxstatat.c b/sysdeps/unix/sysv/linux/fxstatat.c
> index 8f4dcdd3a9..12d743f61e 100644
> --- a/sysdeps/unix/sysv/linux/fxstatat.c
> +++ b/sysdeps/unix/sysv/linux/fxstatat.c
> @@ -43,7 +43,7 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
>    return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
>  #else
>    /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k, mips32,
> -     microblaze, s390, sh, powerpc32, and sparc32.  */
> +     microblaze, sh, powerpc32, and sparc32.  */
>    struct stat64 st64;
>    int r = INLINE_SYSCALL_CALL (fstatat64, fd, file, &st64, flag);
>    return r ?: __xstat32_conv (vers, &st64, st);
> diff --git a/sysdeps/unix/sysv/linux/ipc_priv.h b/sysdeps/unix/sysv/linux/ipc_priv.h
> index 24f6867e0e..2b75a49b1e 100644
> --- a/sysdeps/unix/sysv/linux/ipc_priv.h
> +++ b/sysdeps/unix/sysv/linux/ipc_priv.h
> @@ -48,8 +48,8 @@ struct __old_ipc_perm
>  #define MSGRCV_ARGS(__msgp, __msgtyp) \
>    ((long int []){ (long int) __msgp, __msgtyp })
>  
> -/* This macro is required to handle the s390 variants, which passes the
> -   arguments in a different order than default.  */
> +/* This macro is required to handle s390x, which passes the arguments in a
> +   different order than default.  */
>  #define SEMTIMEDOP_IPC_ARGS(__nsops, __sops, __timeout) \
>    (__nsops), 0, (__sops), (__timeout)
>  
> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
> index 94bdbbb730..85f6e888db 100644
> --- a/sysdeps/unix/sysv/linux/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/kernel-features.h
> @@ -155,7 +155,7 @@
>     similar to kernel:
>  
>     - __ASSUME_CLONE_BACKWARDS: for variant 1.
> -   - __ASSUME_CLONE_BACKWARDS2: for variant 2 (s390).
> +   - __ASSUME_CLONE_BACKWARDS2: for variant 2 (s390x).
>     - __ASSUME_CLONE_BACKWARDS3: for variant 3 (microblaze).
>     - __ASSUME_CLONE_DEFAULT: for variant 4.
>     */
> diff --git a/sysdeps/unix/sysv/linux/lxstat.c b/sysdeps/unix/sysv/linux/lxstat.c
> index a65e2715a8..6efe1698bc 100644
> --- a/sysdeps/unix/sysv/linux/lxstat.c
> +++ b/sysdeps/unix/sysv/linux/lxstat.c
> @@ -44,7 +44,7 @@ __lxstat (int vers, const char *name, struct stat *buf)
>  	return r ?: stat_overflow (buf);
>  # else
>  	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
> -	   microblaze, s390, sh, powerpc, and sparc.  */
> +	   microblaze, sh, powerpc, and sparc.  */
>  	return INLINE_SYSCALL_CALL (lstat, name, buf);
>  # endif
>        }
> diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c
> index 22b0bedbf1..e743aaec4a 100644
> --- a/sysdeps/unix/sysv/linux/lxstat64.c
> +++ b/sysdeps/unix/sysv/linux/lxstat64.c
> @@ -75,7 +75,7 @@ ___lxstat64 (int vers, const char *name, struct stat64 *buf)
>  				AT_SYMLINK_NOFOLLOW);
>  # else
>    /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
> -     microblaze, s390, sh, mips32, powerpc32, and sparc32.  */
> +     microblaze, sh, mips32, powerpc32, and sparc32.  */
>    return INLINE_SYSCALL_CALL (lstat64, name, buf);
>  # endif /* STAT_IS_KERNEL_STAT  */
>  #endif /* XSTAT_IS_XSTAT64  */
> diff --git a/sysdeps/unix/sysv/linux/posix_fadvise.c b/sysdeps/unix/sysv/linux/posix_fadvise.c
> index b62cf8c002..01c450de31 100644
> --- a/sysdeps/unix/sysv/linux/posix_fadvise.c
> +++ b/sysdeps/unix/sysv/linux/posix_fadvise.c
> @@ -32,11 +32,7 @@
>     __NR_fadvise64_64 (without the alignment argument required for the ABI).
>  
>     Third option will be used by mips o32.  Mips will use a 7 argument
> -   syscall with __NR_fadvise64.
> -
> -   s390 implements fadvice64_64 using a specific struct with arguments
> -   packed inside.  This is the only implementation handled in arch-specific
> -   code.  */
> +   syscall with __NR_fadvise64.  */
>  
>  int
>  posix_fadvise (int fd, off_t offset, off_t len, int advise)
> diff --git a/sysdeps/unix/sysv/linux/posix_fadvise64.c b/sysdeps/unix/sysv/linux/posix_fadvise64.c
> index 56748fd7fe..b19b5deb56 100644
> --- a/sysdeps/unix/sysv/linux/posix_fadvise64.c
> +++ b/sysdeps/unix/sysv/linux/posix_fadvise64.c
> @@ -25,11 +25,7 @@ libc_hidden_proto (__posix_fadvise64_l64)
>  
>  /* Both arm and powerpc implements fadvise64_64 with last 'advise' argument
>     just after 'fd' to avoid the requirement of implementing 7-arg syscalls.
> -   ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64.
> -
> -   s390 implements fadvice64_64 using a specific struct with arguments
> -   packed inside.  This is the only implementation handled in arch-specific
> -   code.  */
> +   ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64.  */
>  
>  #ifndef __NR_fadvise64_64
>  # define __NR_fadvise64_64 __NR_fadvise64
> diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile
> index d5433f1dd9..218aff1aee 100644
> --- a/sysdeps/unix/sysv/linux/s390/Makefile
> +++ b/sysdeps/unix/sysv/linux/s390/Makefile
> @@ -1,7 +1,3 @@
> -abi-variants := 32 64
> -abi-32-condition := __WORDSIZE == 32
> -abi-64-condition := __WORDSIZE == 64
> -
>  ifeq ($(subdir),rt)
>  librt-routines += rt-sysdep
>  librt-shared-only-routines += rt-sysdep
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/elfclass.h b/sysdeps/unix/sysv/linux/s390/bits/elfclass.h
> index 723aa1189a..59de7fbef6 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/elfclass.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/elfclass.h
> @@ -27,11 +27,6 @@
>  
>  #define __ELF_NATIVE_CLASS __WORDSIZE
>  
> -#if __WORDSIZE == 64
>  /* 64 bit Linux for S/390 is exceptional as it has .hash section with
>     64 bit entries.  */
>  typedef uint64_t Elf_Symndx;
> -#else
> -/* 32 bit Linux for S/390 has normal .hash section entries with 32 bits.  */
> -typedef uint32_t Elf_Symndx;
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
> index 75ea4e23c6..0531f13efd 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
> @@ -22,29 +22,20 @@
>  
>  #include <bits/wordsize.h>
>  
> -#if __WORDSIZE == 64
>  /* Not necessary, files are always with 64bit off_t.  */
> -# define __O_LARGEFILE	0
> -#endif
> +#define __O_LARGEFILE	0
>  
> -#if __WORDSIZE == 64
>  /* Not necessary, we always have 64-bit offsets.  */
> -# define F_GETLK64	5	/* Get record locking info.  */
> -# define F_SETLK64	6	/* Set record locking info (non-blocking).  */
> -# define F_SETLKW64	7	/* Set record locking info (blocking).	*/
> -#endif
> +#define F_GETLK64	5	/* Get record locking info.  */
> +#define F_SETLK64	6	/* Set record locking info (non-blocking).  */
> +#define F_SETLKW64	7	/* Set record locking info (blocking).	*/
>  
>  struct flock
>    {
>      short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.	*/
>      short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
> -#if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64
>      __off_t l_start;	/* Offset where the lock begins.  */
>      __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
> -#else
> -    __off64_t l_start;	/* Offset where the lock begins.  */
> -    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
> -#endif
>      __pid_t l_pid;	/* Process holding the lock.  */
>    };
>  
> @@ -59,13 +50,8 @@ struct flock64
>    };
>  #endif
>  
> -#if __WORDSIZE == 64
> -# define __POSIX_FADV_DONTNEED	6 /* Don't need these pages.  */
> -# define __POSIX_FADV_NOREUSE	7 /* Data will be accessed once.  */
> -#else
> -# define __POSIX_FADV_DONTNEED	4 /* Don't need these pages.  */
> -# define __POSIX_FADV_NOREUSE	5 /* Data will be accessed once.  */
> -#endif
> +#define __POSIX_FADV_DONTNEED	6 /* Don't need these pages.  */
> +#define __POSIX_FADV_NOREUSE	7 /* Data will be accessed once.  */
>  
>  /* Include generic Linux declarations.  */
>  #include <bits/fcntl-linux.h>
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
> index 7f761808dc..19cdb14c32 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h
> @@ -1,4 +1,4 @@
> -/* Definitions for 31 & 64 bit S/390 sigaction.
> +/* Definitions for 64 bit S/390 sigaction.
>     Copyright (C) 2001-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -23,9 +23,6 @@
>  # error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
>  #endif
>  
> -#include <bits/wordsize.h>
> -
> -#if __WORDSIZE == 64
>  /* Structure describing the action to be taken when a signal arrives.  */
>  struct sigaction
>    {
> @@ -55,36 +52,6 @@ struct sigaction
>      /* Additional set of signals to be blocked.	 */
>      __sigset_t sa_mask;
>    };
> -#else
> -/* Structure describing the action to be taken when a signal arrives.  */
> -struct sigaction
> -  {
> -    /* Signal handler.  */
> -#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
> -    union
> -      {
> -	/* Used if SA_SIGINFO is not set.  */
> -	__sighandler_t sa_handler;
> -	/* Used if SA_SIGINFO is set.  */
> -	void (*sa_sigaction) (int, siginfo_t *, void *);
> -      }
> -    __sigaction_handler;
> -# define sa_handler	__sigaction_handler.sa_handler
> -# define sa_sigaction	__sigaction_handler.sa_sigaction
> -#else
> -    __sighandler_t sa_handler;
> -#endif
> -
> -    /* Additional set of signals to be blocked.  */
> -    __sigset_t sa_mask;
> -
> -    /* Special flags.  */
> -    int sa_flags;
> -
> -    /* Restore handler.  */
> -    void (*sa_restorer) (void);
> -  };
> -#endif
>  
>  /* Bits in `sa_flags'.  */
>  #define	SA_NOCLDSTOP  1		 /* Don't send SIGCHLD when children stop.  */
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> index e98192d7ef..f6a3a785a1 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> @@ -25,7 +25,6 @@
>  
>  #include <bits/wordsize.h>
>  
> -#if __WORDSIZE == 64
>  struct stat
>    {
>      __dev_t st_dev;		/* Device.  */
> @@ -62,70 +61,8 @@ struct stat
>      __blkcnt_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
>      long int __glibc_reserved[3];
>    };
> -#else
> -struct stat
> -  {
> -# ifdef __USE_TIME64_REDIRECTS
> -#  include <bits/struct_stat_time64_helper.h>
> -# else
> -    __dev_t st_dev;			/* Device.  */
> -    unsigned int __pad1;
> -#  ifndef __USE_FILE_OFFSET64
> -    __ino_t st_ino;			/* File serial number.	*/
> -#  else
> -    __ino_t __st_ino;			/* 32bit file serial number.	*/
> -#  endif
> -    __mode_t st_mode;			/* File mode.  */
> -    __nlink_t st_nlink;			/* Link count.  */
> -    __uid_t st_uid;			/* User ID of the file's owner.	*/
> -    __gid_t st_gid;			/* Group ID of the file's group.*/
> -    __dev_t st_rdev;			/* Device number, if device.  */
> -    unsigned int __pad2;
> -#  ifndef __USE_FILE_OFFSET64
> -    __off_t st_size;			/* Size of file, in bytes.  */
> -#  else
> -    __off64_t st_size;			/* Size of file, in bytes.  */
> -#  endif
> -    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
> -
> -#  ifndef __USE_FILE_OFFSET64
> -    __blkcnt_t st_blocks;		/* Number 512-byte blocks allocated. */
> -#  else
> -    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
> -#  endif
> -#  ifdef __USE_XOPEN2K8
> -    /* Nanosecond resolution timestamps are stored in a format
> -       equivalent to 'struct timespec'.  This is the type used
> -       whenever possible but the Unix namespace rules do not allow the
> -       identifier 'timespec' to appear in the <sys/stat.h> header.
> -       Therefore we have to handle the use of this header in strictly
> -       standard-compliant sources special.  */
> -    struct timespec st_atim;		/* Time of last access.  */
> -    struct timespec st_mtim;		/* Time of last modification.  */
> -    struct timespec st_ctim;		/* Time of last status change.  */
> -#   define st_atime st_atim.tv_sec	/* Backward compatibility.  */
> -#   define st_mtime st_mtim.tv_sec
> -#   define st_ctime st_ctim.tv_sec
> -#  else
> -    __time_t st_atime;			/* Time of last access.  */
> -    unsigned long int st_atimensec;	/* Nscecs of last access.  */
> -    __time_t st_mtime;			/* Time of last modification.  */
> -    unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
> -    __time_t st_ctime;			/* Time of last status change.  */
> -    unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
> -#  endif
> -#  ifndef __USE_FILE_OFFSET64
> -    unsigned long int __glibc_reserved4;
> -    unsigned long int __glibc_reserved5;
> -#  else
> -    __ino64_t st_ino;			/* File serial number.	*/
> -#  endif
> -# endif
> -  };
> -# endif
>  
>  #ifdef __USE_LARGEFILE64
> -# if __WORDSIZE == 64
>  /* Note stat64 is the same shape as stat.  */
>  struct stat64
>    {
> @@ -138,7 +75,7 @@ struct stat64
>      int __glibc_reserved0;
>      __dev_t st_rdev;		/* Device number, if device.  */
>      __off_t st_size;		/* Size of file, in bytes.  */
> -#  ifdef __USE_XOPEN2K8
> +# ifdef __USE_XOPEN2K8
>      /* Nanosecond resolution timestamps are stored in a format
>         equivalent to 'struct timespec'.  This is the type used
>         whenever possible but the Unix namespace rules do not allow the
> @@ -148,66 +85,21 @@ struct stat64
>      struct timespec st_atim;		/* Time of last access.  */
>      struct timespec st_mtim;		/* Time of last modification.  */
>      struct timespec st_ctim;		/* Time of last status change.  */
> -#   define st_atime st_atim.tv_sec	/* Backward compatibility.  */
> -#   define st_mtime st_mtim.tv_sec
> -#   define st_ctime st_ctim.tv_sec
> -#  else
> +#  define st_atime st_atim.tv_sec	/* Backward compatibility.  */
> +#  define st_mtime st_mtim.tv_sec
> +#  define st_ctime st_ctim.tv_sec
> +# else
>      __time_t st_atime;			/* Time of last access.  */
>      unsigned long int st_atimensec;	/* Nscecs of last access.  */
>      __time_t st_mtime;			/* Time of last modification.  */
>      unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
>      __time_t st_ctime;			/* Time of last status change.  */
>      unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
> -#  endif
> +# endif
>      __blksize_t st_blksize;	/* Optimal block size for I/O.	*/
>      __blkcnt64_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
>      long int __glibc_reserved[3];
>    };
> -# else
> -struct stat64
> -  {
> -#  ifdef __USE_TIME64_REDIRECTS
> -#   include <bits/struct_stat_time64_helper.h>
> -#  else
> -    __dev_t st_dev;			/* Device.  */
> -    unsigned int __pad1;
> -
> -    __ino_t __st_ino;			/* 32bit file serial number.	*/
> -    __mode_t st_mode;			/* File mode.  */
> -    __nlink_t st_nlink;			/* Link count.  */
> -    __uid_t st_uid;			/* User ID of the file's owner.	*/
> -    __gid_t st_gid;			/* Group ID of the file's group.*/
> -    __dev_t st_rdev;			/* Device number, if device.  */
> -    unsigned int __pad2;
> -    __off64_t st_size;			/* Size of file, in bytes.  */
> -    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
> -
> -    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
> -#   ifdef __USE_XOPEN2K8
> -    /* Nanosecond resolution timestamps are stored in a format
> -       equivalent to 'struct timespec'.  This is the type used
> -       whenever possible but the Unix namespace rules do not allow the
> -       identifier 'timespec' to appear in the <sys/stat.h> header.
> -       Therefore we have to handle the use of this header in strictly
> -       standard-compliant sources special.  */
> -    struct timespec st_atim;		/* Time of last access.  */
> -    struct timespec st_mtim;		/* Time of last modification.  */
> -    struct timespec st_ctim;		/* Time of last status change.  */
> -#    define st_atime st_atim.tv_sec	/* Backward compatibility.  */
> -#    define st_mtime st_mtim.tv_sec
> -#    define st_ctime st_ctim.tv_sec
> -#   else
> -    __time_t st_atime;			/* Time of last access.  */
> -    unsigned long int st_atimensec;	/* Nscecs of last access.  */
> -    __time_t st_mtime;			/* Time of last modification.  */
> -    unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
> -    __time_t st_ctime;			/* Time of last status change.  */
> -    unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
> -#   endif
> -    __ino64_t st_ino;			/* File serial number.		*/
> -#  endif
> -  };
> -# endif
>  #endif
>  
>  /* Tell code we have these members.  */
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
> index 826a1e425c..6e2be2270f 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
> @@ -57,42 +57,34 @@
>  #define __TIMER_T_TYPE		void *
>  #define __BLKSIZE_T_TYPE	__SLONGWORD_TYPE
>  #define __FSID_T_TYPE		struct { int __val[2]; }
> -#if defined __GNUC__ && __GNUC__ <= 2
> -/* Compatibility with g++ 2.95.x.  */
> -#define __SSIZE_T_TYPE		__SWORD_TYPE
> -#else
> -/* size_t is unsigned long int on s390 -m31.  */
> -#define __SSIZE_T_TYPE		__SLONGWORD_TYPE
> -#endif
> +
> +/* With s390-32, __SSIZE_T_TYPE was __SWORD_TYPE for compatibility with
> +   g++ 2.95.x.  Afterwards __SLONGWORD_TYPE was needed as size_t was
> +   unsigned long int on s390-32.
> +   Now as only s390-64 exists, __SWORD_TYPE can be used as also used in the
> +   generic version as both types result in long int.  */
> +#define __SSIZE_T_TYPE         __SWORD_TYPE
> +
>  #define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
>  #define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
> -#define __CPU_MASK_TYPE 	__ULONGWORD_TYPE
> +#define __CPU_MASK_TYPE		__ULONGWORD_TYPE
>  
> -#ifdef __s390x__
>  /* Tell the libc code that off_t and off64_t are actually the same type
>     for all ABI purposes, even if possibly expressed as different base types
>     for C type-checking purposes.  */
> -# define __OFF_T_MATCHES_OFF64_T	1
> +#define __OFF_T_MATCHES_OFF64_T	1
>  
>  /* Same for ino_t and ino64_t.  */
> -# define __INO_T_MATCHES_INO64_T	1
> +#define __INO_T_MATCHES_INO64_T	1
>  
>  /* And for __rlim_t and __rlim64_t.  */
> -# define __RLIM_T_MATCHES_RLIM64_T	1
> +#define __RLIM_T_MATCHES_RLIM64_T	1
>  
>  /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t.  */
> -# define __STATFS_MATCHES_STATFS64  1
> +#define __STATFS_MATCHES_STATFS64  1
>  
>  /* And for getitimer, setitimer and rusage  */
> -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1
> -#else
> -# define __RLIM_T_MATCHES_RLIM64_T	0
> -
> -# define __STATFS_MATCHES_STATFS64  0
> -
> -/* And for getitimer, setitimer and rusage  */
> -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0
> -#endif
> +#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1
>  
>  /* Number of descriptors that can fit in an `fd_set'.  */
>  #define	__FD_SETSIZE		1024
> diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h
> index a955c18738..d7af29285f 100644
> --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h
> @@ -47,9 +47,6 @@
>  # undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
>  # undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
>  #endif
> -#ifndef __s390x__
> -# define __ASSUME_SYSVIPC_BROKEN_MODE_T
> -#endif
>  
>  #undef __ASSUME_CLONE_DEFAULT
>  #define __ASSUME_CLONE_BACKWARDS2
> diff --git a/sysdeps/unix/sysv/linux/s390/readelflib.c b/sysdeps/unix/sysv/linux/s390/readelflib.c
> index 6229b705d2..87e900f536 100644
> --- a/sysdeps/unix/sysv/linux/s390/readelflib.c
> +++ b/sysdeps/unix/sysv/linux/s390/readelflib.c
> @@ -16,9 +16,6 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  
> -int process_elf32_file (const char *file_name, const char *lib,
> -			int *flag, unsigned int *isa_level, char **soname,
> -			void *file_contents, size_t file_length);
>  int process_elf64_file (const char *file_name, const char *lib,
>  			int *flag, unsigned int *isa_level, char **soname,
>  			void *file_contents, size_t file_length);
> @@ -29,29 +26,15 @@ process_elf_file (const char *file_name, const char *lib, int *flag,
>  		  unsigned int *isa_level, char **soname, void *file_contents,
>  		  size_t file_length)
>  {
> -  ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
> -  int ret;
> -
> -  if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
> -    return process_elf32_file (file_name, lib, flag, isa_level, soname,
> -			       file_contents, file_length);
> -  else
> -    {
> -      ret = process_elf64_file (file_name, lib, flag, isa_level, soname,
> -			       	file_contents, file_length);
> -      /* S/390 64bit libraries are always libc.so.6+.  */
> -      if (!ret)
> -	*flag = FLAG_S390_LIB64|FLAG_ELF_LIBC6;
> -      return ret;
> -    }
> +  int ret = process_elf64_file (file_name, lib, flag, isa_level, soname,
> +				file_contents, file_length);
> +  /* S/390 64bit libraries are always libc.so.6+ which is already set
> +     in process_elf64_file.  */
> +  if (!ret)
> +    *flag |= FLAG_S390_LIB64;
> +  return ret;
>  }
>  
> -#undef __ELF_NATIVE_CLASS
> -#undef process_elf_file
> -#define process_elf_file process_elf32_file
> -#define __ELF_NATIVE_CLASS 32
> -#include "elf/readelflib.c"
> -
>  #undef __ELF_NATIVE_CLASS
>  #undef process_elf_file
>  #define process_elf_file process_elf64_file
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
> index 6795734747..0c338cba36 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
> @@ -1,6 +1,3 @@
> -# See Makeconfig regarding the use of default-abi.
> -default-abi := 64
> -
>  ifeq ($(subdir),misc)
>  sysdep_headers += sys/elf.h
>  endif
> diff --git a/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h b/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h
> index 08679ffc82..ac1fc28dc3 100644
> --- a/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h
> +++ b/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h
> @@ -23,11 +23,7 @@
>  static inline uintptr_t
>  sigcontext_get_pc (const ucontext_t *ctx)
>  {
> -#ifdef __s390x__
>   return ctx->uc_mcontext.psw.addr;
> -#else
> - return ctx->uc_mcontext.psw.addr & 0x7FFFFFFF;
> -#endif
>  }
>  
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
> index 1d4d979b6c..3bbddd08ba 100644
> --- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
> +++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
> @@ -45,11 +45,7 @@ typedef unsigned long greg_t;
>     the register set is an array, we make gregset_t a simple array
>     that has the same size as s390_regs.  This is needed for the
>     elf_prstatus structure.  */
> -#if __WORDSIZE == 64
> -# define __NGREG 27
> -#else
> -# define __NGREG 36
> -#endif
> +#define __NGREG 27
>  #ifdef __USE_MISC
>  # define NGREG __NGREG
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/s390/sysconf.c b/sysdeps/unix/sysv/linux/s390/sysconf.c
> index 7083b63737..57ccaed4e3 100644
> --- a/sysdeps/unix/sysv/linux/s390/sysconf.c
> +++ b/sysdeps/unix/sysv/linux/s390/sysconf.c
> @@ -1,4 +1,4 @@
> -/* Get system parameters, e.g. cache information.  S390/S390x version.
> +/* Get system parameters, e.g. cache information.  S390x version.
>     Copyright (C) 2015-2026 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
> @@ -50,14 +50,9 @@ get_cache_info (int level, int attr, int type)
>  
>    /* Check if ecag-instruction is available.
>       ecag - extract CPU attribute (only in zarch; arch >= z10; in as 2.24)  */
> -  if (!(features->hwcap & HWCAP_S390_STFLE)
> -#if !defined __s390x__
> -      || !(features->hwcap & HWCAP_S390_ZARCH)
> -      || !(features->hwcap & HWCAP_S390_HIGH_GPRS)
> -#endif /* !__s390x__ */
> -      )
> +  if (!(features->hwcap & HWCAP_S390_STFLE))
>      {
> -      /* stfle (or zarch, high-gprs on s390-32) is not available.
> +      /* stfle is not available.
>  	 We are on an old machine. Return 256byte for LINESIZE for L1 d/i-cache,
>  	 otherwise 0.  */
>        if (level == 1 && attr == CACHE_ATTR_LINESIZE)
> @@ -81,7 +76,6 @@ get_cache_info (int level, int attr, int type)
>    arg = (CACHE_LEVEL_MAX - level) * 8;
>    __asm__ __volatile__ (".machine push\n\t"
>  			".machine \"z10\"\n\t"
> -			".machinemode \"zarch_nohighgprs\"\n\t"
>  			"ecag %0,%%r0,0\n\t"   /* returns 64bit unsigned integer.  */
>  			"srlg %0,%0,0(%1)\n\t" /* right align 8bit cache info field.  */
>  			".machine pop"
> @@ -97,7 +91,6 @@ get_cache_info (int level, int attr, int type)
>    cmd = (attr << 4) | ((level - 1) << 1) | type;
>    __asm__ __volatile__ (".machine push\n\t"
>  			".machine \"z10\"\n\t"
> -			".machinemode \"zarch_nohighgprs\"\n\t"
>  			"ecag %0,%%r0,0(%1)\n\t"
>  			".machine pop"
>  			: "=d" (val)
> diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.h b/sysdeps/unix/sysv/linux/s390/sysdep.h
> index ee2d92edff..593e70dc1e 100644
> --- a/sysdeps/unix/sysv/linux/s390/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/s390/sysdep.h
> @@ -69,14 +69,9 @@
>  #define VDSO_HASH  123718585
>  
>  /* List of system calls which are supported as vsyscalls.  */
> -#ifdef __s390x__
>  #define HAVE_CLOCK_GETRES64_VSYSCALL	"__kernel_clock_getres"
>  #define HAVE_CLOCK_GETTIME64_VSYSCALL	"__kernel_clock_gettime"
>  #define HAVE_GETRANDOM_VSYSCALL		"__kernel_getrandom"
> -#else
> -#define HAVE_CLOCK_GETRES_VSYSCALL	"__kernel_clock_getres"
> -#define HAVE_CLOCK_GETTIME_VSYSCALL	"__kernel_clock_gettime"
> -#endif
>  #define HAVE_GETTIMEOFDAY_VSYSCALL	"__kernel_gettimeofday"
>  #define HAVE_GETCPU_VSYSCALL		"__kernel_getcpu"
>  
> diff --git a/sysdeps/unix/sysv/linux/s390/xstatver.h b/sysdeps/unix/sysv/linux/s390/xstatver.h
> index 9923199e40..f24ab4a9ee 100644
> --- a/sysdeps/unix/sysv/linux/s390/xstatver.h
> +++ b/sysdeps/unix/sysv/linux/s390/xstatver.h
> @@ -1,19 +1,10 @@
>  /* Versions of the 'struct stat' data structure used in compatibility xstat
>     functions.  */
> -
> -#include <bits/wordsize.h>
> -
> -#if __WORDSIZE == 64
> -# define _STAT_VER_KERNEL	0
> -# define _STAT_VER_LINUX	1
> -# define _MKNOD_VER_LINUX	0
> -#else
> -# define _STAT_VER_LINUX_OLD	1
> -# define _STAT_VER_KERNEL	1
> -# define _STAT_VER_SVR4		2
> -# define _STAT_VER_LINUX	3
> -# define _MKNOD_VER_LINUX	1
> -# define _MKNOD_VER_SVR4	2
> -#endif
> +#define _STAT_VER_KERNEL	0
> +#define _STAT_VER_LINUX		1
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	0
>  #define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
> index f9cdde3222..0947fff157 100644
> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
> @@ -41,9 +41,9 @@ do_prepare (int argc, char **argv)
>  
>  /* Linux between 4.13 and 4.15 return EOVERFLOW for LFS OFD locks usage
>     in compat mode (non-LFS ABI running on a LFS default kernel, such as
> -   i386 on a x86_64 kernel or s390-32 on a s390-64 kernel) [1].  This is
> -   a kernel issue because __NR_fcntl64 is the expected way to use OFD locks
> -   (used on GLIBC for both fcntl and fcntl64).
> +   i386 on a x86_64 kernel) [1].  This is a kernel issue because __NR_fcntl64
> +   is the expected way to use OFD locks (used on GLIBC for both fcntl and
> +   fcntl64).
>  
>     [1] https://sourceware.org/ml/libc-alpha/2018-07/msg00243.html  */
>  
> diff --git a/sysdeps/unix/sysv/linux/xstat.c b/sysdeps/unix/sysv/linux/xstat.c
> index a67139cafa..33863c3cb7 100644
> --- a/sysdeps/unix/sysv/linux/xstat.c
> +++ b/sysdeps/unix/sysv/linux/xstat.c
> @@ -43,7 +43,7 @@ __xstat (int vers, const char *name, struct stat *buf)
>  	return r ?: stat_overflow (buf);
>  # else
>  	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
> -	   microblaze, s390, sh, powerpc, and sparc32.  */
> +	   microblaze, sh, powerpc, and sparc32.  */
>  	return INLINE_SYSCALL_CALL (stat, name, buf);
>  # endif
>        }
> diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c
> index 8baa8214bc..7d513e4af0 100644
> --- a/sysdeps/unix/sysv/linux/xstat64.c
> +++ b/sysdeps/unix/sysv/linux/xstat64.c
> @@ -72,7 +72,7 @@ ___xstat64 (int vers, const char *name, struct stat64 *buf)
>      return INLINE_SYSCALL_CALL (fstatat64, AT_FDCWD, name, buf, 0);
>  # else
>    /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
> -     microblaze, s390, sh, mips32, powerpc32, and sparc32.  */
> +     microblaze, sh, mips32, powerpc32, and sparc32.  */
>    return INLINE_SYSCALL_CALL (stat64, name, buf);
>  # endif /* STAT_IS_KERNEL_STAT  */
>  #endif /* XSTAT_IS_XSTAT64  */



More information about the Libc-alpha mailing list