From patchwork Thu Feb 10 19:58:26 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: 51019 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 061B9385843B for ; Thu, 10 Feb 2022 19:59:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 061B9385843B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1644523144; bh=SnBRs5pWNtuPpTUEM0y8zZ/9MkkTsi7WThAX2dqMwb0=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=ntQedMatRZey0qSwf/PPg3iPgOv8JbVTZkSCu41De8CH9K11iieE0VPJGowETTTcW SKW99AR/mIV2BuImT9ax4Lrpi95uzuTMPu9oy+7f22qd6MKeog3YG6ehiC87JGxRFr fc0lWjULc+TgiAWOOyubvMFxCL4/hNjAGbJeHgQA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by sourceware.org (Postfix) with ESMTPS id C5CEE3858D1E for ; Thu, 10 Feb 2022 19:58:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C5CEE3858D1E Received: by mail-oi1-x230.google.com with SMTP id m10so7209983oie.2 for ; Thu, 10 Feb 2022 11:58:42 -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=SnBRs5pWNtuPpTUEM0y8zZ/9MkkTsi7WThAX2dqMwb0=; b=VWQnTz3EK5NFmr6perI846+n2/ScG2xryh237uo9LxXXnecH7I1ybR+mdTAy7NnLe1 Q4pvVOfd/RdxiJGiuaSt48vhI/ppWzNZGkJRlscNh6kkzH8ykIjSzuow8ExdUgpnH9lI vh3PJg6Qu66I6Y95swiF72XrTRL7xp8g85OGjm6hhkdUQXiSkMBGsTpmjMC10RorXHlZ YRJ2u6AX32Wy+U85/sEsagkKWKpdgMD+yUCUeQxAcjK6zB//bcWMMnxNxxdFfKYfMmIm RFgdcWvtq0gdtMztRBoNy9HAVyFH2/rrUFg/eK6jRF8/Gsu+yLI2wxetKO2fJNVdEljb FnfQ== X-Gm-Message-State: AOAM531/ZNrZidmFaO+G/R8i2nYf4VoH7xKCNEwOPefmwTkF5PjWudTU 1h8SkZ4HG3t+LOtFcoBiWiOiOgoicZ1pIQ== X-Google-Smtp-Source: ABdhPJzgiCH9rOgcSDFD0rc5jJy/PQdU/lwFKik5nbQu4Ldc9QlkBZc6vRAI+6dhzW6pA/4EMtSlxw== X-Received: by 2002:a05:6808:118a:: with SMTP id j10mr1917424oil.85.1644523122027; Thu, 10 Feb 2022 11:58:42 -0800 (PST) Received: from birita.. ([2804:431:c7ca:733:a925:765e:3799:3d34]) by smtp.gmail.com with ESMTPSA id bg34sm8859219oob.14.2022.02.10.11.58.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Feb 2022 11:58:41 -0800 (PST) To: libc-alpha@sourceware.org, Wilco Dijkstra , "H . J . Lu" , Noah Goldstein Subject: [PATCH 00/12] Remove bcopy and bzero optimizations Date: Thu, 10 Feb 2022 16:58:26 -0300 Message-Id: <20220210195838.1036012-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-Spam-Status: No, score=-5.9 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. 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