From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71498 invoked by alias); 15 Mar 2018 15:53:27 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 71475 invoked by uid 89); 15 Mar 2018 15:53:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com From: Wilco Dijkstra To: "libc-alpha@sourceware.org" CC: nd Subject: [PATCH v4 1/3] Cleanup __ieee754_sqrt(f/l) Date: Thu, 15 Mar 2018 15:53:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DB6PR0801MB2007;7:6ZL27cjXq7XTwWrCO0MNqyznE1SJbs7f6I35KlL/fellLkIxv3WgSWSR7Ra1YDesAOhJPrUk0KEpm+QvpNi4EpTNPYnvm/Yod35T+HhoVS0nurrpVGVTKI2b0p0za7jkdPllRNMf/05fmGXudO5cOzSLHl8hw5+bsbFQkeZJOaRQfpYynqmu1+RyEbU1cmVkXpY4l8dwXpR1yj0xeDOp2pg578waSfBMrEreUokFX17gfxb3ENtP/C4h8Wv4LSIs x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 409f38db-8b27-4e41-32ce-08d58a8ce076 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(2017052603328)(7153060)(7193020);SRVR:DB6PR0801MB2007; x-ms-traffictypediagnostic: DB6PR0801MB2007: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(250305191791016)(180628864354917)(22074186197030); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501244)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(6072148)(201708071742011);SRVR:DB6PR0801MB2007;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB2007; x-forefront-prvs: 0612E553B4 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(376002)(39860400002)(396003)(366004)(39380400002)(199004)(54534003)(377424004)(189003)(81166006)(14454004)(55016002)(33656002)(5660300001)(2906002)(2900100001)(26005)(72206003)(9686003)(6306002)(6436002)(102836004)(478600001)(53936002)(8676002)(59450400001)(81156014)(2501003)(6506007)(8936002)(5640700003)(106356001)(2351001)(68736007)(74316002)(5250100002)(575784001)(4326008)(7696005)(86362001)(25786009)(316002)(97736004)(7736002)(6916009)(3280700002)(99286004)(66066001)(305945005)(3846002)(3660700001)(6116002)(105586002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0801MB2007;H:DB6PR0801MB2053.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: s+xTsJGcdqAcLFaEaKxCSzYeScS6WHEn7Ad7bQ/QLtyFhyEu7bMhbv1njq0hT3pfqPWaH+Jrz98LWbdiunu2/3qsrCIVJHKvhdgI/mnoihGXEx5iUAh/FSC0kp5AA/GEN0h6jLkRTGgm38iMwVMxCCVlRANz+pKtncVoBUX2a0X3OxHLwavSHLjT3ljLPU3GzoO0s+sc6TrVX6u8AjOdGFUmitcvI2KVtsf93SiTtalzzj73UAnztoXE2HJgSUl8B5YvoTOlg9EhIeRKxXhsF5dLSA5SwdHwDv5rioJ6y7/FD2rksqzHPUA/QWTLB40jSnvuLg57C47Syw+H5+h0ZQ== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 409f38db-8b27-4e41-32ce-08d58a8ce076 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Mar 2018 15:53:20.7440 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB2007 X-SW-Source: 2018-03/txt/msg00375.txt.bz2 This patch series cleans up the many uses of __ieee754_sqrt(f/l) in GLIBC. The goal is to enable GCC to do the inlining, and if this fails call the __ieee754_sqrt function. This is done by internally declaring sqrt with asm redirects. The compat symbols and sqrt wrappers need to disable the redire= ct. The redirect is also disabled if there are already redirects defined when using -ffinite-math-only. All math functions (but not math tests, non-library code and libnldbl) are built with -fno-math-errno which means GCC will typically inline sqrt as a single instruction. This means targets are no longer forced to add a speci= al inline for sqrt. Regress tested on AArch64 ad x64 and a subset of buildmanyglibc. ChangeLog: 2018-03-15 Wilco Dijkstra * include/math.h (sqrt): Declare with asm redirect. (sqrtf): Likewise. (sqrtl): Likewise. (sqrtf128): Likewise. * Makeconfig: Add -fno-math-errno for libc/libm, but build testsuit= e, nonlib and libnldbl with -fmath-errno. * math/w_sqrt_compat.c: Define NO_MATH_REDIRECT. * math/w_sqrt_template.c: Likewise. * math/w_sqrtf_compat.c: Likewise. * math/w_sqrtl_compat.c: Likewise. * sysdeps/generic/math-type-macros-float128.h: Remove math.h and co= mplex.h. * sysdeps/i386/fpu/w_sqrt.c: Likewise. * sysdeps/i386/fpu/w_sqrt_compat.c: Likewise. -- diff --git a/Makeconfig b/Makeconfig index 86a71e580213f6e5de6e619d9f3370f4365b4ae2..1afe86475c10ea208ed88b9b137= cc7863510929f 100644 --- a/Makeconfig +++ b/Makeconfig @@ -831,6 +831,9 @@ endif # disable any optimization that assume default rounding mode. +math-flags =3D -frounding-math =20 +# Build libc/libm using -fno-math-errno, but run testsuite with -fmath-err= no. ++extra-math-flags =3D $(if $(filter libnldbl nonlib testsuite,$(in-module)= ),-fmath-errno,-fno-math-errno) + # We might want to compile with some stack-protection flag. ifneq ($(stack-protector),) +stack-protector=3D$(stack-protector) @@ -966,6 +969,7 @@ endif =20 override CFLAGS =3D -std=3Dgnu11 -fgnu89-inline $(config-extra-cflags) \ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \ + $(+extra-math-flags) \ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$( 0) +# ifndef NO_MATH_REDIRECT +/* Declare sqrt for use within GLIBC. Sqrt will typically inline into a + single instruction. Use an asm to avoid use of PLTs if it doesn't. */ +float (sqrtf) (float) asm ("__ieee754_sqrtf"); +double (sqrt) (double) asm ("__ieee754_sqrt"); +# ifndef __NO_LONG_DOUBLE_MATH +long double (sqrtl) (long double) asm ("__ieee754_sqrtl"); +# endif +# if __HAVE_DISTINCT_FLOAT128 > 0 +_Float128 (sqrtf128) (_Float128) asm ("__ieee754_sqrtf128"); +# endif +# endif +# endif + #endif #endif diff --git a/math/w_sqrt_compat.c b/math/w_sqrt_compat.c index 7884d146331d7c43c79e1957e3ba4f2dab608ead..e76a8079aa0a2dd4dc09aba48b6= a82aaddd1a584 100644 --- a/math/w_sqrt_compat.c +++ b/math/w_sqrt_compat.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ =20 +#define NO_MATH_REDIRECT #include #include #include diff --git a/math/w_sqrt_template.c b/math/w_sqrt_template.c index 52a21c0bf1cd7bdab164356635ffa5f10973b633..9c6ac75956ca8abf9448d631fd2= 86b5e2d1deb73 100644 --- a/math/w_sqrt_template.c +++ b/math/w_sqrt_template.c @@ -21,6 +21,7 @@ for each floating-point type. */ #if __USE_WRAPPER_TEMPLATE =20 +# define NO_MATH_REDIRECT # include # include # include diff --git a/math/w_sqrtf_compat.c b/math/w_sqrtf_compat.c index 824ce0ed4658210b75e38953ee39d3dcd0bbb3f7..cad9b4ad77f1707af6c1df5ada8= 2b07537d79dfa 100644 --- a/math/w_sqrtf_compat.c +++ b/math/w_sqrtf_compat.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ =20 +#define NO_MATH_REDIRECT #include #include #include diff --git a/math/w_sqrtl_compat.c b/math/w_sqrtl_compat.c index 56627a615dce25aae893f9d84292922a6e452b3f..16dda403b77144667e3f76b633f= 6f9165c8a38d3 100644 --- a/math/w_sqrtl_compat.c +++ b/math/w_sqrtl_compat.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see . */ =20 +#define NO_MATH_REDIRECT #include #include #include diff --git a/sysdeps/generic/math-type-macros-float128.h b/sysdeps/generic/= math-type-macros-float128.h index 605996e0ba73f3ad1e421f516396442b2c2b1e25..485c13bb88a1995c69d62e11ea8= 19d1323dd938b 100644 --- a/sysdeps/generic/math-type-macros-float128.h +++ b/sysdeps/generic/math-type-macros-float128.h @@ -19,9 +19,6 @@ #ifndef _MATH_TYPE_MACROS_FLOAT128 #define _MATH_TYPE_MACROS_FLOAT128 =20 -#include -#include - #define M_LIT(c) __f128 (c) #define M_PFX FLT128 #define M_SUF(c) c ## f128 diff --git a/sysdeps/i386/fpu/w_sqrt.c b/sysdeps/i386/fpu/w_sqrt.c index d37a5d55bf439cebdff05f05dd66f910d6d48c18..8bef04e68a7be3d21d89e6eb41d= cfa2561f3f6a5 100644 --- a/sysdeps/i386/fpu/w_sqrt.c +++ b/sysdeps/i386/fpu/w_sqrt.c @@ -1,5 +1,6 @@ /* The inline __ieee754_sqrt is not correctly rounding; it's OK for most internal uses in glibc, but not for sqrt itself. */ +#define NO_MATH_REDIRECT #define __ieee754_sqrt __avoid_ieee754_sqrt #include #include diff --git a/sysdeps/i386/fpu/w_sqrt_compat.c b/sysdeps/i386/fpu/w_sqrt_com= pat.c index ddd36d0964c2945579bc59b02f127af88384acca..dd485f4b88c7f5348abaab81a13= 08aeadc9594ec 100644 --- a/sysdeps/i386/fpu/w_sqrt_compat.c +++ b/sysdeps/i386/fpu/w_sqrt_compat.c @@ -1,5 +1,6 @@ /* The inline __ieee754_sqrt is not correctly rounding; it's OK for most internal uses in glibc, but not for sqrt itself. */ +#define NO_MATH_REDIRECT #define __ieee754_sqrt __avoid_ieee754_sqrt #include #include