From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oo1-xc29.google.com (mail-oo1-xc29.google.com [IPv6:2607:f8b0:4864:20::c29]) by sourceware.org (Postfix) with ESMTPS id 7712D3948A67 for ; Wed, 23 Feb 2022 14:13:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7712D3948A67 Received: by mail-oo1-xc29.google.com with SMTP id r15-20020a4ae5cf000000b002edba1d3349so22413185oov.3 for ; Wed, 23 Feb 2022 06:13:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:from:to:references:in-reply-to :content-transfer-encoding; bh=pNR1KshhsRfo3Nx9p3LMRYDgzXX1uD9vuBmhoyb9eyg=; b=NJ/3HDWtl195QZBZpCHlT08xAmj3pQhpBwBg8JPWevFeL35bQ7ZqbFwn7v5brK040x dqOzK3vu4MG+ChuqAMo1C6Lyz+uuQP9CsZISpWbVypYCVtAsHNmfIahGowCPz0I7FsDP ejIpr1aEWnT/+RFgJdFePKTwAQdLXu2AHTW7Y4m0PlRlHggDMW6mG43kxoZSv3yMUV2o dC01FAtSFRtIGP1IymT4THZ+wbzt71ilONB3ZVAeo+J32A5aqaIhBRRoEk/j8iqE0Z1o Q4ckvr7gpZAMYh0E5FnH6JlHvLpuJci+bcK7XixcqZCC1pJv2d/rjcEd/D6M5hoASjyt hptw== X-Gm-Message-State: AOAM531J2a/6JmOFiKLtVFm6HquPgSdBQ0GF+bgy1vbUN9HfR7C17O13 0cz+jb6FKp9AzoarxL6hMAqqdIGUdfia2g== X-Google-Smtp-Source: ABdhPJwoylT1ZRZ/xXtbSCNxTcYRS9i81aiEJmESAY3i6VFiez/ydJYz8S+YT9f1Y43jxJbSUM8nww== X-Received: by 2002:a05:6870:e387:b0:ce:c0c9:6e6 with SMTP id x7-20020a056870e38700b000cec0c906e6mr3809630oad.312.1645625587374; Wed, 23 Feb 2022 06:13:07 -0800 (PST) Received: from ?IPV6:2804:431:c7ca:cb36:52bd:55cf:8e44:571? ([2804:431:c7ca:cb36:52bd:55cf:8e44:571]) by smtp.gmail.com with ESMTPSA id h12sm29735010oan.14.2022.02.23.06.13.06 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 23 Feb 2022 06:13:06 -0800 (PST) Message-ID: <6b70d261-0e0c-c1ba-bf6d-f44baf3e0229@linaro.org> Date: Wed, 23 Feb 2022 11:13:04 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH v2 00/11] Remove bcopy and bzero optimizations Content-Language: en-US From: Adhemerval Zanella To: libc-alpha@sourceware.org References: <20220223140921.2768062-1-adhemerval.zanella@linaro.org> In-Reply-To: <20220223140921.2768062-1-adhemerval.zanella@linaro.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-6.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, 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-List-Received-Date: Wed, 23 Feb 2022 14:13:10 -0000 I will intend to commit this patch shortly. I remove the x86_64 part because we are still discussing the __memzeroset addition, but I think the idea is also to eventually remove the x86_64 optimization as well. On 23/02/2022 11:09, Adhemerval Zanella wrote: > 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 >