public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org
Subject: [PATCH v2 00/11] Remove bcopy and bzero optimizations
Date: Wed, 23 Feb 2022 11:09:10 -0300	[thread overview]
Message-ID: <20220223140921.2768062-1-adhemerval.zanella@linaro.org> (raw)

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.

v2: Fix ia64 extra __bzero symbol, cleanup more i686 bzero definitions,
    remove x86_64 bzero part.

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

 string/bzero.c                                |   4 +-
 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/memmove.S                   |  22 +-
 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 -
 .../i686/multiarch/memcpy-sse2-unaligned.S    |  16 +-
 .../i386/i686/multiarch/memcpy-ssse3-rep.S    |  64 ++--
 sysdeps/i386/i686/multiarch/memcpy-ssse3.S    | 202 ++++--------
 sysdeps/i386/i686/multiarch/memset-sse2-rep.S |  24 +-
 sysdeps/i386/i686/multiarch/memset-sse2.S     |  24 +-
 sysdeps/i386/memcpy.S                         |  16 +-
 sysdeps/i386/memset.S                         |  14 +-
 sysdeps/ia64/bcopy.S                          |  10 -
 sysdeps/ia64/bzero.S                          | 312 ------------------
 sysdeps/ia64/bzero.c                          |   3 +
 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/multiarch/bcopy.S              |   7 -
 81 files changed, 162 insertions(+), 1601 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
 create mode 100644 sysdeps/ia64/bzero.c
 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/multiarch/bcopy.S

-- 
2.32.0


             reply	other threads:[~2022-02-23 14:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-23 14:09 Adhemerval Zanella [this message]
2022-02-23 14:09 ` [PATCH v2 01/11] ia64: Remove bcopy Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 02/11] powerpc: Remove bcopy optimizations Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 03/11] i386: " Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 04/11] x86_64: " Adhemerval Zanella
2022-05-12 19:28   ` Sunil Pandey
2022-02-23 14:09 ` [PATCH v2 05/11] alpha: Remove bzero optimization Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 06/11] ia64: " Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 07/11] sparc: " Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 08/11] powerpc: Remove powerpc32 bzero optimizations Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 09/11] powerpc: Remove powerpc64 " Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 10/11] s390: Remove " Adhemerval Zanella
2022-02-23 14:09 ` [PATCH v2 11/11] i686: " Adhemerval Zanella
2022-02-23 14:13 ` [PATCH v2 00/11] Remove bcopy and " Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220223140921.2768062-1-adhemerval.zanella@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).