mbox

[00/12] Remove bcopy and bzero optimizations

Message ID 20220210195838.1036012-1-adhemerval.zanella@linaro.org
Headers

Message

Adhemerval Zanella Netto Feb. 10, 2022, 7:58 p.m. UTC
  Both symbols are marked as legacy in POSIX.1-2001 and removed on
POSIX.1-2008, although the prototypes are defined for _GNU_SOURCE
or _DEFAULT_SOURCE.

Most architectures just route bcopy/bzero to internal memmove/memset
implementation, however some do implement iFUNC variants when memset
or memmove are also provided through iFUNC.

However, gcc already replaces bcopy with a memmove and bzero with memset
on default configuration (to actually get a bstring libc call the code
requires to omit string.h inclusion and built with --fno-builtin), so
it is highly unlikely programs are actually calling libc bcopy or
bzero symbols.

On a recent Linux distro (Ubuntu 21.04), I see only 1 'bcmp' call
(which is already aliased to memcmp):

  $ cat count_bstring.sh 
  #!/bin/bash

  files=`IFS=':';for i in $PATH; do test -d "$i" && find "$i" -maxdepth 1 -executable -type f; done`
  total=0
  for file in $files; do
    symbols=`objdump -R $file 2>&1`
    if [ $? -eq 0 ]; then
      ncalls=`echo $symbols | grep -w $1 | wc -l`
      ((total=total+ncalls))
      if [ $ncalls -gt 0 ]; then
        echo "$file: $ncalls"
      fi
    fi
  done
  echo "TOTAL=$total"
  $ ./count_bstring.sh bcmp
  /usr/bin/rg: 1
  TOTAL=1
  $ ./count_bstring.sh bcopy
  TOTAL=0
  $ ./count_bstring.sh bzero
  TOTAL=0

So there is point in keeping such optimization.

Adhemerval Zanella (12):
  ia64: Remove bcopy
  powerpc: Remove bcopy optimizations
  i386: Remove bcopy optimizations
  x86_64: Remove bcopy optimizations
  alpha: Remove bzero optimization
  ia64: Remove bzero optimization
  Remove bzero optimization
  powerpc: Remove powerpc32 bzero optimizations
  powerpc: Remove powerpc64 bzero optimizations
  s390: Remove bzero optimizations
  i686: Remove bzero optimizations
  x86_64: Remove bzero optimizations

 sysdeps/alpha/bzero.S                         | 109 ------
 sysdeps/i386/bcopy.S                          |   4 -
 sysdeps/i386/bzero.S                          |   5 -
 sysdeps/i386/i586/bzero.S                     |   4 -
 sysdeps/i386/i586/memset.S                    |  16 +-
 sysdeps/i386/i686/bcopy.S                     |   3 -
 sysdeps/i386/i686/bzero.S                     |   4 -
 sysdeps/i386/i686/memset.S                    |  23 +-
 sysdeps/i386/i686/multiarch/Makefile          |  10 +-
 sysdeps/i386/i686/multiarch/bcopy-ia32.S      |  20 --
 .../i686/multiarch/bcopy-sse2-unaligned.S     |   4 -
 sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S |   4 -
 sysdeps/i386/i686/multiarch/bcopy-ssse3.S     |   4 -
 sysdeps/i386/i686/multiarch/bcopy.c           |  30 --
 sysdeps/i386/i686/multiarch/bzero-ia32.S      |  37 ---
 sysdeps/i386/i686/multiarch/bzero-sse2-rep.S  |   3 -
 sysdeps/i386/i686/multiarch/bzero-sse2.S      |   3 -
 sysdeps/i386/i686/multiarch/bzero.c           |  32 --
 sysdeps/i386/i686/multiarch/ifunc-impl-list.c |  18 -
 sysdeps/i386/i686/multiarch/memset-sse2-rep.S |  24 +-
 sysdeps/i386/i686/multiarch/memset-sse2.S     |  24 +-
 sysdeps/i386/memset.S                         |  14 +-
 sysdeps/ia64/bcopy.S                          |  10 -
 sysdeps/ia64/bzero.S                          | 312 ------------------
 sysdeps/powerpc/powerpc32/bzero.S             |  27 --
 .../powerpc32/power4/multiarch/Makefile       |   4 +-
 .../powerpc32/power4/multiarch/bzero-power6.S |  25 --
 .../powerpc32/power4/multiarch/bzero-power7.S |  25 --
 .../powerpc32/power4/multiarch/bzero-ppc32.S  |  34 --
 .../powerpc32/power4/multiarch/bzero.c        |  37 ---
 .../power4/multiarch/ifunc-impl-list.c        |   8 -
 sysdeps/powerpc/powerpc64/bzero.S             |  20 --
 .../powerpc/powerpc64/le/power10/memmove.S    |  13 -
 sysdeps/powerpc/powerpc64/le/power10/memset.S |  12 -
 sysdeps/powerpc/powerpc64/memset.S            |  13 -
 sysdeps/powerpc/powerpc64/multiarch/Makefile  |   2 +-
 .../powerpc/powerpc64/multiarch/bcopy-ppc64.c |  27 --
 sysdeps/powerpc/powerpc64/multiarch/bcopy.c   |  38 ---
 sysdeps/powerpc/powerpc64/multiarch/bzero.c   |  54 ---
 .../powerpc64/multiarch/ifunc-impl-list.c     |  34 --
 .../powerpc64/multiarch/memmove-power10.S     |   3 -
 .../powerpc64/multiarch/memmove-power7.S      |   3 -
 .../powerpc64/multiarch/memset-power10.S      |   3 -
 .../powerpc64/multiarch/memset-power4.S       |   3 -
 .../powerpc64/multiarch/memset-power6.S       |   3 -
 .../powerpc64/multiarch/memset-power7.S       |   2 -
 .../powerpc64/multiarch/memset-power8.S       |   3 -
 .../powerpc64/multiarch/memset-ppc64.S        |  16 +-
 sysdeps/powerpc/powerpc64/power4/memset.S     |  12 -
 sysdeps/powerpc/powerpc64/power6/memset.S     |  12 -
 sysdeps/powerpc/powerpc64/power7/bcopy.c      |   1 -
 sysdeps/powerpc/powerpc64/power7/memmove.S    |  14 -
 sysdeps/powerpc/powerpc64/power7/memset.S     |  12 -
 sysdeps/powerpc/powerpc64/power8/memset.S     |  12 -
 sysdeps/s390/Makefile                         |   2 +-
 sysdeps/s390/bzero.c                          |  47 ---
 sysdeps/s390/ifunc-memset.h                   |   9 -
 sysdeps/s390/memset-z900.S                    |  32 +-
 sysdeps/s390/multiarch/ifunc-impl-list.c      |  15 -
 sysdeps/sparc/sparc32/bzero.c                 |   1 -
 sysdeps/sparc/sparc32/memset.S                |  37 +--
 sysdeps/sparc/sparc32/sparcv9/bzero.c         |   1 -
 .../sparc/sparc32/sparcv9/multiarch/bzero.c   |   1 -
 .../sparc32/sparcv9/multiarch/memset-ultra1.S |   1 -
 sysdeps/sparc/sparc64/bzero.c                 |   1 -
 sysdeps/sparc/sparc64/memset.S                |  30 +-
 sysdeps/sparc/sparc64/multiarch/bzero.c       |  33 --
 .../sparc/sparc64/multiarch/ifunc-impl-list.c |   9 -
 .../sparc/sparc64/multiarch/ifunc-memset.h    |   2 +-
 .../sparc/sparc64/multiarch/memset-niagara1.S |   5 +-
 .../sparc/sparc64/multiarch/memset-niagara4.S |   6 +-
 .../sparc/sparc64/multiarch/memset-niagara7.S |   7 -
 .../sparc/sparc64/multiarch/memset-ultra1.S   |   1 -
 sysdeps/x86_64/bzero.S                        |   1 -
 sysdeps/x86_64/memset.S                       |  10 +-
 sysdeps/x86_64/multiarch/Makefile             |   1 -
 sysdeps/x86_64/multiarch/bcopy.S              |   7 -
 sysdeps/x86_64/multiarch/bzero.c              | 106 ------
 sysdeps/x86_64/multiarch/ifunc-impl-list.c    |  42 ---
 .../memset-avx2-unaligned-erms-rtm.S          |   1 -
 .../multiarch/memset-avx2-unaligned-erms.S    |   6 -
 .../multiarch/memset-avx512-unaligned-erms.S  |   3 -
 .../multiarch/memset-evex-unaligned-erms.S    |   3 -
 .../multiarch/memset-sse2-unaligned-erms.S    |   5 -
 .../multiarch/memset-vec-unaligned-erms.S     |  56 +---
 85 files changed, 62 insertions(+), 1608 deletions(-)
 delete mode 100644 sysdeps/alpha/bzero.S
 delete mode 100644 sysdeps/i386/bcopy.S
 delete mode 100644 sysdeps/i386/bzero.S
 delete mode 100644 sysdeps/i386/i586/bzero.S
 delete mode 100644 sysdeps/i386/i686/bcopy.S
 delete mode 100644 sysdeps/i386/i686/bzero.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-ia32.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-ssse3.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bcopy.c
 delete mode 100644 sysdeps/i386/i686/multiarch/bzero-ia32.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bzero-sse2-rep.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bzero-sse2.S
 delete mode 100644 sysdeps/i386/i686/multiarch/bzero.c
 delete mode 100644 sysdeps/ia64/bcopy.S
 delete mode 100644 sysdeps/ia64/bzero.S
 delete mode 100644 sysdeps/powerpc/powerpc32/bzero.S
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power6.S
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power7.S
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c
 delete mode 100644 sysdeps/powerpc/powerpc64/bzero.S
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bcopy.c
 delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bzero.c
 delete mode 100644 sysdeps/powerpc/powerpc64/power7/bcopy.c
 delete mode 100644 sysdeps/s390/bzero.c
 delete mode 100644 sysdeps/sparc/sparc32/bzero.c
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/bzero.c
 delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/bzero.c
 delete mode 100644 sysdeps/sparc/sparc64/bzero.c
 delete mode 100644 sysdeps/sparc/sparc64/multiarch/bzero.c
 delete mode 100644 sysdeps/x86_64/bzero.S
 delete mode 100644 sysdeps/x86_64/multiarch/bcopy.S
 delete mode 100644 sysdeps/x86_64/multiarch/bzero.c