From patchwork Thu Apr 8 18:15:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raphael M Zinsly X-Patchwork-Id: 42933 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 14E3339540A3; Thu, 8 Apr 2021 18:15:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14E3339540A3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1617905724; bh=UIjh5HT20rkLnQhyK+VymF3Pwd2Yf9QnEvI1Wcnhinw=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=YJL+wPcFaWxD6KW9rE+sfbXUmdk4yGGefz5h6qv6u9E/Lbf4gvra4m7109hl2Gfmy O+LgiPDZOWp9O4S9pPpjBCfjrkZkxH3Rdig8TqYc0ckMjJMM2PVGgraVfRSKMvJT56 K9imj8WRXhTQOOuojhKUj3jNBUcmR16K/b/nnhq8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 40F663951C63 for ; Thu, 8 Apr 2021 18:15:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 40F663951C63 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 138I3YYM040317; Thu, 8 Apr 2021 14:15:17 -0400 Received: from ppma03wdc.us.ibm.com (ba.79.3fa9.ip4.static.sl-reverse.com [169.63.121.186]) by mx0b-001b2d01.pphosted.com with ESMTP id 37rwf1r5ub-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 Apr 2021 14:15:17 -0400 Received: from pps.filterd (ppma03wdc.us.ibm.com [127.0.0.1]) by ppma03wdc.us.ibm.com (8.16.0.43/8.16.0.43) with SMTP id 138IDYtv002413; Thu, 8 Apr 2021 18:15:16 GMT Received: from b01cxnp23034.gho.pok.ibm.com (b01cxnp23034.gho.pok.ibm.com [9.57.198.29]) by ppma03wdc.us.ibm.com with ESMTP id 37rvc4eumq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 Apr 2021 18:15:16 +0000 Received: from b01ledav005.gho.pok.ibm.com (b01ledav005.gho.pok.ibm.com [9.57.199.110]) by b01cxnp23034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 138IFGPf30277936 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 8 Apr 2021 18:15:16 GMT Received: from b01ledav005.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 163D8AE05C; Thu, 8 Apr 2021 18:15:16 +0000 (GMT) Received: from b01ledav005.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9DD5DAE060; Thu, 8 Apr 2021 18:15:15 +0000 (GMT) Received: from localhost (unknown [9.160.117.244]) by b01ledav005.gho.pok.ibm.com (Postfix) with ESMTP; Thu, 8 Apr 2021 18:15:15 +0000 (GMT) To: libc-alpha@sourceware.org Subject: [PATCH v2] powerpc: Add log IFUNC multiarch support for POWER10 Date: Thu, 8 Apr 2021 15:15:11 -0300 Message-Id: <20210408181511.28061-1-rzinsly@linux.ibm.com> X-Mailer: git-send-email 2.29.2 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: PnZgt9c9VlYviv3kJxmCrfvBENULfXdc X-Proofpoint-ORIG-GUID: PnZgt9c9VlYviv3kJxmCrfvBENULfXdc X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-04-08_04:2021-04-08, 2021-04-08 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 malwarescore=0 impostorscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2104080120 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: Raphael Moreira Zinsly via Libc-alpha From: Raphael M Zinsly Reply-To: Raphael Moreira Zinsly Cc: murphyp@linux.ibm.com, tuliom@linux.ibm.com, fw@deneb.enyo.de, Raphael Moreira Zinsly Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Changes since v1: - Checks for the -mcpu=power10 support on configure instead of checking GCC's version. - Don't build __log_power10 without -mcpu=power10. ---8<--- Checked on ppc64le built without --with-cpu, with --with-cpu=power9 and with --disable-multi-arch. Reviewed-by: Matheus Castanho --- config.h.in | 3 ++ .../powerpc64/le/fpu/multiarch/Makefile | 8 ++++ .../powerpc64/le/fpu/multiarch/configure | 33 +++++++++++++++++ .../powerpc64/le/fpu/multiarch/configure.ac | 14 +++++++ .../le/fpu/multiarch/e_log-power10.c | 4 ++ .../powerpc64/le/fpu/multiarch/e_log-ppc64.c | 4 ++ .../powerpc64/le/fpu/multiarch/e_log.c | 37 +++++++++++++++++++ .../powerpc64/le/fpu/multiarch/w_log.c | 1 + 8 files changed, 104 insertions(+) create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure.ac create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-power10.c create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-ppc64.c create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log.c create mode 100644 sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_log.c diff --git a/config.h.in b/config.h.in index ca1547ae67..14c3bf0f0d 100644 --- a/config.h.in +++ b/config.h.in @@ -23,6 +23,9 @@ /* On powerpc64, use @notoc. */ #undef USE_PPC64_NOTOC +/* On powerpc64, define if the compiler supports -mcpu=power10. */ +#undef USE_PPC64_MCPU_POWER10 + /* Define if _Unwind_Find_FDE should be exported from glibc. */ #undef EXPORT_UNWIND_FIND_FDE diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile index 22252d9e0a..cc073b53d3 100644 --- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile @@ -208,4 +208,12 @@ object-suffixes-left := $(all-object-suffixes) include $(o-iterator) endif # do_f128_multiarch + +libm-sysdep_routines += e_log-ppc64 + +ifeq ($(mcpu-power10), yes) +libm-sysdep_routines += e_log-power10 +CFLAGS-e_log-power10.c += -mcpu=power10 +endif + endif diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure new file mode 100644 index 0000000000..4ca1d15833 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure @@ -0,0 +1,33 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mcpu=power10" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports -mcpu=power10" >&5 +$as_echo_n "checking if the compiler supports -mcpu=power10... " >&6; } +if ${libc_cv_mcpu_power10+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libc_cv_mcpu_power10=yes +else + libc_cv_mcpu_power10=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mcpu_power10" >&5 +$as_echo "$libc_cv_mcpu_power10" >&6; } +config_vars="$config_vars +mcpu-power10 = $libc_cv_mcpu_power10" +if test "$libc_cv_mcpu_power10" == "yes"; then : + + $as_echo "#define USE_PPC64_MCPU_POWER10 1" >>confdefs.h + +fi +CFLAGS="$OLD_CFLAGS" diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure.ac b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure.ac new file mode 100644 index 0000000000..ceb578cc59 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/configure.ac @@ -0,0 +1,14 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mcpu=power10" +AC_CACHE_CHECK([if the compiler supports -mcpu=power10], + libc_cv_mcpu_power10, [ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +]])], + [libc_cv_mcpu_power10=yes], + [libc_cv_mcpu_power10=no])]) +LIBC_CONFIG_VAR([mcpu-power10], [$libc_cv_mcpu_power10]) +AS_IF([[test "$libc_cv_mcpu_power10" == "yes"]],[ + AC_DEFINE(USE_PPC64_MCPU_POWER10)]) +CFLAGS="$OLD_CFLAGS" diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-power10.c b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-power10.c new file mode 100644 index 0000000000..4226e07643 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-power10.c @@ -0,0 +1,4 @@ +#include + +#define __log __log_power10 +#include diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-ppc64.c b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-ppc64.c new file mode 100644 index 0000000000..cb902d727a --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log-ppc64.c @@ -0,0 +1,4 @@ +#include +#define __log __log_ppc64 + +#include diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log.c b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log.c new file mode 100644 index 0000000000..b7961096a5 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/e_log.c @@ -0,0 +1,37 @@ +/* Multiple versions of IEEE 754 log. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include "init-arch.h" +#include + +extern double __redirect_ieee754_log (double); + +extern __typeof (log) __log_ppc64 attribute_hidden; +#ifdef USE_PPC64_MCPU_POWER10 +extern __typeof (log) __log_power10 attribute_hidden; +#endif + +libc_ifunc_redirected (__redirect_ieee754_log, __ieee754_log, +#ifdef USE_PPC64_MCPU_POWER10 + (hwcap2 & PPC_FEATURE2_ARCH_3_1) + ? __log_power10 : +#endif + __log_ppc64); + +libm_alias_finite (__ieee754_log, __log) diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_log.c b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_log.c new file mode 100644 index 0000000000..9b2b018711 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_log.c @@ -0,0 +1 @@ +#include