From patchwork Mon Apr 19 17:51:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 43046 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 9DDB93947C3F; Mon, 19 Apr 2021 17:51:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9DDB93947C3F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1618854705; bh=RkWO5bvchR0rA5CGtng1oLVIE0BH5PDePj1CjozO+6g=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=piHeD+orVB+5Ap0z2Xb6f4WaWO7Eo8V9kaXnW1IUgTE+xPx15wc51ISBqq31HZuQc Lyop+ZUJk14KcuIhgnngp/c+JoilaMD/7Td/tEAYQL/ORCnfq03bUfdXTo1SOiT+Y+ KQiP0x30JYxI+OeqxKP4haHoZ7yZrXLl5vFzYHJY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1033.google.com (mail-pj1-x1033.google.com [IPv6:2607:f8b0:4864:20::1033]) by sourceware.org (Postfix) with ESMTPS id DB3013851C1B for ; Mon, 19 Apr 2021 17:51:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DB3013851C1B Received: by mail-pj1-x1033.google.com with SMTP id g1-20020a17090adac1b0290150d07f9402so276726pjx.5 for ; Mon, 19 Apr 2021 10:51:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=RkWO5bvchR0rA5CGtng1oLVIE0BH5PDePj1CjozO+6g=; b=ZUjS8C2jS85vxNS/39p23pxaGFxEiDydhC+iOHFNgPHKb6MPzaQ0+p0X8ZrlN7ZdQ+ tN7aLlE5jjdixRWZgnScGSGqj/FfwqeJkkLECVBftY+vKVzj9OkJGD2AfYpyMCjLehpU vu+qlDgWJ7GZx7D7UI6+cRX/r0eY7JOOzZi30aBqr7Zlv6xIQgrWL9YKdybN7lykCGIv 4iQEhFamj5zYpg3DjJ8RWn93vRR/9uLx2Y/MebOMx1VMOAgKtPfLq1j8iPGUdbfYLmsz 2mQQsGVmFsYYrfIM3Ngb6euWVxNFlOO0e3XByMIuRH8DBGuRaZSIuc3FK1PB5Bg/UMFj c0WQ== X-Gm-Message-State: AOAM532TwUBhtn7MWO2AcR6sLe6s/UzpyX2Yi2Z6gsgF9pX4yOzx/Ji0 fMfQRqtpoZPcwIPjISb+wpM= X-Google-Smtp-Source: ABdhPJwIaqrApOre7uG6hxrWonzeNjvpf/VY9UnJadle4igmt4HTY6sEHEUOjdiUvoh5nSb2fSdmlw== X-Received: by 2002:a17:902:7407:b029:ec:a5e0:5f75 with SMTP id g7-20020a1709027407b02900eca5e05f75mr6163882pll.5.1618854698004; Mon, 19 Apr 2021 10:51:38 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.58.35.177]) by smtp.gmail.com with ESMTPSA id o8sm117010pjh.20.2021.04.19.10.51.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Apr 2021 10:51:37 -0700 (PDT) Received: from gnu-cfl-2.lan (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 30ABD1A044D; Mon, 19 Apr 2021 10:51:36 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH] x86-64: Require BMI2 for strchr-avx2.S Date: Mon, 19 Apr 2021 10:51:36 -0700 Message-Id: <20210419175136.2495152-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spam-Status: No, score=-3036.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Since strchr-avx2.S updated by commit 1f745ecc2109890886b161d4791e1406fdfc29b8 Author: noah Date: Wed Feb 3 00:38:59 2021 -0500 x86-64: Refactor and improve performance of strchr-avx2.S uses sarx: c4 e2 72 f7 c0 sarx %ecx,%eax,%eax for strchr-avx2 family functions, require BMI2 in ifunc-impl-list.c and ifunc-avx2.h. --- sysdeps/x86_64/multiarch/ifunc-avx2.h | 4 ++-- sysdeps/x86_64/multiarch/ifunc-impl-list.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/sysdeps/x86_64/multiarch/ifunc-avx2.h b/sysdeps/x86_64/multiarch/ifunc-avx2.h index e3ec62ca5e..6de72f7272 100644 --- a/sysdeps/x86_64/multiarch/ifunc-avx2.h +++ b/sysdeps/x86_64/multiarch/ifunc-avx2.h @@ -30,11 +30,11 @@ IFUNC_SELECTOR (void) const struct cpu_features* cpu_features = __get_cpu_features (); if (CPU_FEATURE_USABLE_P (cpu_features, AVX2) + && CPU_FEATURE_USABLE_P (cpu_features, BMI2) && CPU_FEATURES_ARCH_P (cpu_features, AVX_Fast_Unaligned_Load)) { if (CPU_FEATURE_USABLE_P (cpu_features, AVX512VL) - && CPU_FEATURE_USABLE_P (cpu_features, AVX512BW) - && CPU_FEATURE_USABLE_P (cpu_features, BMI2)) + && CPU_FEATURE_USABLE_P (cpu_features, AVX512BW)) return OPTIMIZE (evex); if (CPU_FEATURE_USABLE_P (cpu_features, RTM)) diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c index f1a755b1d6..0b0927b124 100644 --- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c +++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c @@ -396,10 +396,12 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, /* Support sysdeps/x86_64/multiarch/strchr.c. */ IFUNC_IMPL (i, name, strchr, IFUNC_IMPL_ADD (array, i, strchr, - CPU_FEATURE_USABLE (AVX2), + (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2)), __strchr_avx2) IFUNC_IMPL_ADD (array, i, strchr, (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2) && CPU_FEATURE_USABLE (RTM)), __strchr_avx2_rtm) IFUNC_IMPL_ADD (array, i, strchr, @@ -413,10 +415,12 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, /* Support sysdeps/x86_64/multiarch/strchrnul.c. */ IFUNC_IMPL (i, name, strchrnul, IFUNC_IMPL_ADD (array, i, strchrnul, - CPU_FEATURE_USABLE (AVX2), + (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2)), __strchrnul_avx2) IFUNC_IMPL_ADD (array, i, strchrnul, (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2) && CPU_FEATURE_USABLE (RTM)), __strchrnul_avx2_rtm) IFUNC_IMPL_ADD (array, i, strchrnul, @@ -570,10 +574,12 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, /* Support sysdeps/x86_64/multiarch/wcschr.c. */ IFUNC_IMPL (i, name, wcschr, IFUNC_IMPL_ADD (array, i, wcschr, - CPU_FEATURE_USABLE (AVX2), + (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2)), __wcschr_avx2) IFUNC_IMPL_ADD (array, i, wcschr, (CPU_FEATURE_USABLE (AVX2) + && CPU_FEATURE_USABLE (BMI2) && CPU_FEATURE_USABLE (RTM)), __wcschr_avx2_rtm) IFUNC_IMPL_ADD (array, i, wcschr,