From patchwork Fri Mar 29 13:35:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 32072 Received: (qmail 120193 invoked by alias); 29 Mar 2019 13:36:02 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 119706 invoked by uid 89); 29 Mar 2019 13:35:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=jt, ulrich, 1, 34, Ulrich X-HELO: mail-vs1-f66.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=VjU+mKSmIL4/yertS7YsX/urTvrgyiD9oMpMq4KX6D0=; b=RShaAOEokzrWSWHD++NBzYhauXSvu+FHid34yoSapYI5eGjFeMxGVZxwJ8XxbZXd7d HP6ubJLF/vCXMNcRGB11bYuc+JGf00IzkmpA7BcK6FUO2Gviw9T9v4GNz4ppZ5uJb7Y/ t1SjjUVGXbMRoFFFcz6xLGumZEyYz7jc0AFDyxm5ITA+yk7CtJOFSlaO/JpYpYabz7VZ FiFV+UtXf991DDZmyfnyZHm1ICVI5BXv0UeA5jW6CM626b71TLBBmzE8ATiQzLCALs3J Xh44dDnWj8ePvP/kgF316EXgqwyNeQrMdo5SfH6x2bWXF3PBEMfxz8IilkP7O4CZlt2a n2lg== Return-Path: From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 14/28] math: Use wordsize-64 version for isinf Date: Fri, 29 Mar 2019 10:35:15 -0300 Message-Id: <20190329133529.22523-15-adhemerval.zanella@linaro.org> In-Reply-To: <20190329133529.22523-1-adhemerval.zanella@linaro.org> References: <20190329133529.22523-1-adhemerval.zanella@linaro.org> - math.h will use compiler builtin for gcc 4.4+ when built without -fsignaling-nans and the builtin is expanded inline for all supported architectures. As an example, there is no intra isnan call on libm for the architecture I checked (x86, arm, aarch64, and powerpc). - The resulting binary difference on 32 bits architecture is minimum for the non hotspot symbol. - It helps wordsize-64 architectures that use ldbl-opt. - It add some code simplification with reduction of duplicated implementations. Checked on powerpc-linux-gnu (built without --with-cpu, with --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch), powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+ and --disable-multi-arch). * sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c: Move to ... * sysdeps/ieee754/dbl-64/s_isinf.c: ... here and format code. --- sysdeps/ieee754/dbl-64/s_isinf.c | 15 ++++----- sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c | 34 -------------------- 2 files changed, 6 insertions(+), 43 deletions(-) delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c diff --git a/sysdeps/ieee754/dbl-64/s_isinf.c b/sysdeps/ieee754/dbl-64/s_isinf.c index 93eb65c147..e5300fd2a5 100644 --- a/sysdeps/ieee754/dbl-64/s_isinf.c +++ b/sysdeps/ieee754/dbl-64/s_isinf.c @@ -4,10 +4,6 @@ * Public domain. */ -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $"; -#endif - /* * isinf(x) returns 1 is x is inf, -1 if x is -inf, else 0; * no branching! @@ -21,11 +17,12 @@ static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $"; int __isinf (double x) { - int32_t hx, lx; - EXTRACT_WORDS (hx, lx, x); - lx |= (hx & 0x7fffffff) ^ 0x7ff00000; - lx |= -lx; - return ~(lx >> 31) & (hx >> 30); + int64_t ix; + EXTRACT_WORDS64 (ix,x); + int64_t t = ix & UINT64_C (0x7fffffffffffffff); + t ^= UINT64_C (0x7ff0000000000000); + t |= -t; + return ~(t >> 63) & (ix >> 62); } hidden_def (__isinf) weak_alias (__isinf, isinf) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c deleted file mode 100644 index 2b427a8b4c..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changed to return -1 for -Inf by Ulrich Drepper . - * Public domain. - */ - -/* - * isinf(x) returns 1 is x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include -#include -#include - -int -__isinf (double x) -{ - int64_t ix; - EXTRACT_WORDS64(ix,x); - int64_t t = ix & UINT64_C(0x7fffffffffffffff); - t ^= UINT64_C(0x7ff0000000000000); - t |= -t; - return ~(t >> 63) & (ix >> 62); -} -hidden_def (__isinf) -weak_alias (__isinf, isinf) -#ifdef NO_LONG_DOUBLE -# if LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -# endif -weak_alias (__isinf, isinfl) -#endif