From patchwork Wed Feb 23 14:09:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 51335 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 52D0A3948A72 for ; Wed, 23 Feb 2022 14:10:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 52D0A3948A72 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1645625404; bh=MvUDTqQIAZlwUbHTyHIEJGGdd5NPJ/RMkeqcKfEFgKg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=QDDKQw25Ll2TpP5XgwBxWyXTY2ZmxePKA24PMjX5nG8Zg54VIJ5sd0K63PG8cjR7R 5MuIOOZextNF9U0IgMYQFvNinSSY+enc4ECBO9VtySFuGOzHqiDs7XSG7Kk+x988k/ yLWas8g2wxBRx+zdMVWvxLK329HxSZjQy1cCtJjI= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x231.google.com (mail-oi1-x231.google.com [IPv6:2607:f8b0:4864:20::231]) by sourceware.org (Postfix) with ESMTPS id 28AED39484BF for ; Wed, 23 Feb 2022 14:09:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 28AED39484BF Received: by mail-oi1-x231.google.com with SMTP id l25so12714801oic.13 for ; Wed, 23 Feb 2022 06:09:26 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=MvUDTqQIAZlwUbHTyHIEJGGdd5NPJ/RMkeqcKfEFgKg=; b=nvhKV+oJKlLhmLIbRfItUcjMntdh16RFsuRGTD2/6Euk5fHJS+udG2P356lcDJl93f lBdKZzcrJkew9UVKOANO1juZN6/00+tSxeZOVnjqVOOs+i5YCwI6kdfalOcsdm+rButH SuFYS91B5sm/dJSB3dgk2VXH1Zz6OVeSbreOlJoaCbhQL3ZwzREEvBAyJSPh1jXrldgQ +gLclyJ10d22m+7p4tFHCUsLwAhydjrnouY8In88wr19OGbgHoqNbesYOyCWwAff8wWu 9mEOnPjh6RaIO1+LjwzH4bIFa5GKu+dIj88FjQCAoGrIHxAax70VoOUk8rgkhyzQ1CX9 gscQ== X-Gm-Message-State: AOAM532Mhpde7bE1wUx3jX3b1O0KoGYShVNwAgCHQ+H6Z1dcBksbLGrS UhinimtxGCUMp9AMIz1VHdelfljDkmlAwQ== X-Google-Smtp-Source: ABdhPJzLLGS+aIkKsOocDfOUwrw8kjEhEFYanstsnHbzLxroXh5/6sGuFKpaUOfaTnmqxtE/LWMcNw== X-Received: by 2002:a05:6808:19a3:b0:2d4:520f:f094 with SMTP id bj35-20020a05680819a300b002d4520ff094mr4856461oib.270.1645625365073; Wed, 23 Feb 2022 06:09:25 -0800 (PST) Received: from birita.. ([2804:431:c7ca:cb36:52bd:55cf:8e44:571]) by smtp.gmail.com with ESMTPSA id o22sm8801734otp.21.2022.02.23.06.09.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 06:09:24 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v2 00/11] Remove bcopy and bzero optimizations Date: Wed, 23 Feb 2022 11:09:10 -0300 Message-Id: <20220223140921.2768062-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-Spam-Status: No, score=-5.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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