From patchwork Wed Mar 8 16:45:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gabriel F. T. Gomes" X-Patchwork-Id: 736655 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vdfXn0JWbz9sNw for ; Thu, 9 Mar 2017 03:45:44 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="ZhJ6FnUh"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; q=dns; s= default; b=MaM626uujVkWykbF9rg1ZUhaGV+sxhiR8cD6RS6G5sTVyMeV1db7U sXVE77EdU5WFwbM/SNZh6nRF+WZzJGH0DRQSBf4nR+KHrSlwwRdJLjAkzqtmn9M2 7skADeeFlNzvD78jhdpYVquBkbye5Ca2ZoKjupNojaN1z7/auYuU0Y= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; s=default; bh=jMD3wGvzutKvByEBKr/84En6v10=; b=ZhJ6FnUher3+Rd28YWDYnjaqBPUf J2L9La0N0zNUEyrq4TDTiBCD5Otn23sirXT99CZKpDjFXffVKZrwlgGKx77aTNhH d6gklN8m52tR1OsKddGokJwxd+du0y4f9aNxphBeWHTiWrYrtVyGf/Y0dHcujYkO mYwvQ6VifK+SV24= Received: (qmail 65796 invoked by alias); 8 Mar 2017 16:45:34 -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 65732 invoked by uid 89); 8 Mar 2017 16:45:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=2106, 2246 X-HELO: mail.gftg.com.br From: "Gabriel F. T. Gomes" To: libc-alpha@sourceware.org Subject: [PATCH] Split helper classification macros from mathcalls.h Date: Wed, 8 Mar 2017 13:45:20 -0300 Message-Id: <1488991520-21088-1-git-send-email-gftg@linux.vnet.ibm.com> In https://sourceware.org/ml/libc-alpha/2016-11/msg00366.html, Joseph suggested that mathcalls.h could need to be split, in order to allow the declaration of helper functions (e.g. __signbitf128) when not declaring functions protected by a __GLIBC_USE conditional for TS-18661-3 (e.g. sinf128). This patch does the split in preparation for the float128 work. -- 8< -- The classification macros: finite, fpclassify, isnan, isinf, and signbit are defined by ISO C11 and declared in mathcalls.h for each of the floating-point types: float, double, and long double. TS 18661-3 does not mention these macros for float128, however support for them must be present when _Float128 is present. This is true, even when the feature test macro __STDC_WANT_IEC_60559_TYPES_EXT__ is false. Other function declarations in mathcalls.h, on the other hand, depend on __STDC_WANT_IEC_60559_TYPES_EXT__. This patch splits the helper functions (__finite, __fpclassify, __isnan, __isinf, and __signbit) from mathcalls.h, so that these helper functions can be declared for _Float128, even when __STDC_WANT_IEC_60559_TYPES_EXT__ is false. Tested for powerpc64le and x86_64. 2017-03-06 Gabriel F. T. Gomes * include/bits/mathcalls-helper-functions.h: New file. * math/Makefile (headers): Add bits/mathcalls-helper-functions.h. * math/bits/mathcalls.h (__finite, __fpclassify, __isnan) (__isinf, __signbit): Move declarations to math/bits/mathcalls-helper-functions.h. * math/bits/mathcalls-helper-functions.h: New file. * math/math.h: Include bits/mathcalls-helper-functions.h for float, double, and long double. --- include/bits/mathcalls-helper-functions.h | 1 + math/Makefile | 2 +- math/bits/mathcalls-helper-functions.h | 54 +++++++++++++++++++++++++++++++ math/bits/mathcalls.h | 21 ------------ math/math.h | 3 ++ 5 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 include/bits/mathcalls-helper-functions.h create mode 100644 math/bits/mathcalls-helper-functions.h diff --git a/include/bits/mathcalls-helper-functions.h b/include/bits/mathcalls-helper-functions.h new file mode 100644 index 0000000..bb71f7f --- /dev/null +++ b/include/bits/mathcalls-helper-functions.h @@ -0,0 +1 @@ +#include diff --git a/math/Makefile b/math/Makefile index 29e7436..97080a7 100644 --- a/math/Makefile +++ b/math/Makefile @@ -29,7 +29,7 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \ bits/math-finite.h bits/math-vector.h \ bits/libm-simd-decl-stubs.h bits/iscanonical.h \ bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \ - bits/long-double.h + bits/long-double.h bits/mathcalls-helper-functions.h # FPU support code. aux := setfpucw fpu_control diff --git a/math/bits/mathcalls-helper-functions.h b/math/bits/mathcalls-helper-functions.h new file mode 100644 index 0000000..3fae4d0 --- /dev/null +++ b/math/bits/mathcalls-helper-functions.h @@ -0,0 +1,54 @@ +/* Prototype declarations for math classification macros helpers. + Copyright (C) 2017 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 + . */ + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +__BEGIN_NAMESPACE_C99 +#endif + +#ifdef __USE_ISOC99 + +/* Classify given number. */ +__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value)) + __attribute__ ((__const__)); + +/* Test for negative number. */ +__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value)) + __attribute__ ((__const__)); + +#endif /* __USE_ISOC99. */ + +#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +__END_NAMESPACE_C99 +#endif + + +_Mdouble_BEGIN_NAMESPACE + +/* Return 0 if VALUE is finite or NaN, +1 if it + is +Infinity, -1 if it is -Infinity. */ +__MATHDECL_1 (int, __isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +/* Return nonzero if VALUE is finite and not NaN. Used by isfinite macro. */ +__MATHDECL_1 (int, __finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); + +_Mdouble_END_NAMESPACE + + +/* Return nonzero if VALUE is not a number. */ +__MATHDECL_1 (int, __isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 3d3b414..8dfbf34 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -187,14 +187,6 @@ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__)); /* Floating-point modulo remainder of X/Y. */ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y)); - - -/* Return 0 if VALUE is finite or NaN, +1 if it - is +Infinity, -1 if it is -Infinity. */ -__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); - -/* Return nonzero if VALUE is finite and not NaN. */ -__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); _Mdouble_END_NAMESPACE #ifdef __USE_MISC @@ -232,9 +224,6 @@ __END_NAMESPACE_C99 #endif -/* Return nonzero if VALUE is not a number. */ -__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); - #if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) # if (!defined __cplusplus \ || __cplusplus < 201103L /* isnan conflicts with C++11. */ \ @@ -366,16 +355,6 @@ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); /* Return minimum numeric value from X and Y. */ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); - -/* Classify given number. */ -__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value)) - __attribute__ ((__const__)); - -/* Test for negative number. */ -__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value)) - __attribute__ ((__const__)); - - /* Multiply-add function computed as a ternary operation. */ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z)); #endif /* Use ISO C99. */ diff --git a/math/math.h b/math/math.h index 09f0ce8..fde3070 100644 --- a/math/math.h +++ b/math/math.h @@ -210,6 +210,7 @@ enum #define __MATH_DECLARING_DOUBLE 1 #define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD #define _Mdouble_END_NAMESPACE __END_NAMESPACE_STD +#include #include #undef _Mdouble_ #undef _Mdouble_BEGIN_NAMESPACE @@ -231,6 +232,7 @@ enum # define __MATH_DECLARING_DOUBLE 0 # define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99 # define _Mdouble_END_NAMESPACE __END_NAMESPACE_C99 +# include # include # undef _Mdouble_ # undef _Mdouble_BEGIN_NAMESPACE @@ -278,6 +280,7 @@ extern long double __REDIRECT_NTH (nexttowardl, # define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99 # define _Mdouble_END_NAMESPACE __END_NAMESPACE_C99 # define __MATH_DECLARE_LDOUBLE 1 +# include # include # undef _Mdouble_ # undef _Mdouble_BEGIN_NAMESPACE